Damaged or deformed objects after collision

Discussion about softbody / cloth simulation in Realflow 4
lukeiamyourfather
Posts: 2880
Joined: Mon Oct 15, 2007 4:09 pm
Contact:

Damaged or deformed objects after collision

Postby lukeiamyourfather » Tue Oct 16, 2007 3:02 pm

Long time reader, first time poster. I'm working on some soft body simulations that involve a group of soft body objects falling to the ground. When the objects hit the ground, some of them become deformed and don't return to their original shape. As if it hit the ground so hard it "broke" the springs of the soft body system.

I'm sure in some cases this would be a desirable effect, however this is not one of those situations. The damaged effect can be eliminated by increasing the spring and dampening though the movement of the objects loses the floppy look and acts more like rubber. I'm using the solid option with a star pattern and a relevant resolution for the simulation and geometry.

Has anyone run into this problem before? Is there any way to make the soft body objects not "break" or damage, and always return to their original shape? Any insight would be greatly appreciated!


shaun_michael
Posts: 4766
Joined: Sun Sep 10, 2006 8:04 am

Damaged or deformed objects after collision

Postby shaun_michael » Tue Oct 16, 2007 3:36 pm

Have you tried running the sim at the stiffness you want. Find the frame before which you want to return to the original shape and add another key for the same stiffness value. Go to the next frame and increase the stiffness and keyframe that frame to force the shape back again?

Dont know if this would work in the circumstances you're after but it should return to the original shape. I guess then you could re-keyframe the stiffness back to the original value for subsequent collisions.

Shaun

lukeiamyourfather
Posts: 2880
Joined: Mon Oct 15, 2007 4:09 pm
Contact:

Damaged or deformed objects after collision

Postby lukeiamyourfather » Tue Oct 16, 2007 3:56 pm

Hmmm, that's not a bad idea. It will require a lot of keys to get everything done, but it would in theory work. I'll give that a try and see what happens. Thanks for the input!

orr
Posts: 60
Joined: Mon Sep 03, 2007 5:18 pm

Damaged or deformed objects after collision

Postby orr » Wed Oct 17, 2007 8:29 pm

if you are into scripting you could write out a script something like this:

first makeing a NodesPickerDialog for the Object you want to keyframe and then:
looping through all the vertices of your object and checking their distance to the colinding objs vertices. And if a certain distance is reached (collision) just set the stiffness parameter and daping parameter higher ... or getting the parameters curves and setting keyframes for a smooth movement.
Maybe if I have sometime I can wirite out a little script :)

shaun_michael
Posts: 4766
Joined: Sun Sep 10, 2006 8:04 am

Damaged or deformed objects after collision

Postby shaun_michael » Wed Oct 17, 2007 10:03 pm

That'd be pretty useful Orr :)

Shaun

orr
Posts: 60
Joined: Mon Sep 03, 2007 5:18 pm

Damaged or deformed objects after collision

Postby orr » Thu Oct 18, 2007 7:08 pm

it's done you could try it if want and tell me if itÄs working right for you .. il'll up it to the nextlimit site soon:


ehh how can I upload scripts here ?

MaxStiffness = The Maximum Stiffness
MaxDamping = The Maximum Stiffness
Distance = the distance between the objects and the solid collision object
SolidObject = the collision Object (eg The ground)
DelayInSeconds = When the distance conditation is met (if the objects verties are in a certain distance to a solidobject). The script will inscrease the stiffnes and damping values .. by adding a delay you can controll in what time the max values are reached
for example if the objet collides at frame 10, your maxstiff is at 30 your delay at 0.5 the maxstiffnes value will start increasing at frame 10 and after 0.5 seconds it's at 30.
for a smoother movement

issues: at the moment to many keys are added i'll fix that before I upload it :)





Code: Select all

#




#--------------------------------------------------
# Function: onSimulationBegin
#--------------------------------------------------

def onSimulationBegin():
   global objects
   global delay
   global maxstif
   global maxdamp
   global distlimit
   global colobj

   dialog = GUINodesPickerDialog.new()
   objects = dialog.show( TYPE_OBJECT)


   objsN = []
   for Oname in scene.getObjects():
      objsN.append(Oname.getName())


   form = GUIFormDialog.new()
   form.addFloatField("DelayInSeconds", 0.0)
   form.addFloatField("MaxStiffness", 30.0)
   form.addFloatField("MaxDamping", 10.0)
   form.addFloatField("Distance", 0.1)
   form.addListField("SolidObject", objsN, 0)

   parametersValid = False
   while ( not parametersValid ):   
      if (form.show() == GUI_DIALOG_ACCEPTED ):
         delay = form.getFieldValue("DelayInSeconds")
         maxstif = form.getFieldValue("MaxStiffness")
         maxdamp = form.getFieldValue("MaxDamping")
         distlimit = form.getFieldValue("Distance")
         sobjN = form.getFieldValue("SolidObject")



      

         colobj = scene.getEmitter(objsN[sobjN] )

         scene.reset()

      parametersValid = True






#--------------------------------------------------
# Function: onSimulationStep
#--------------------------------------------------

def onSimulationStep():
   global objects
   global delay
   global maxstif
   global maxdamp
   global distlimit
   global colobj



   for obj in objects:
      objverts = obj.getVertices()
      colobjp = colobj.getParameter("Position")
      for vert in objverts:
         vpos = vert.getPosition()

         dist = vpos.distance(colobjp)

         if(dist < distlimit):
            curvestif = obj.getParameterCurve("Stiffness")
         
            sKey = Key.new()
            sKey.time = scene.getCurrentTime()
            sKey.value = obj.getParameter("Stiffness")
            sKey.type = KEY_TYPE_LINEAR
            sKey.tcbEaseTo = 0.0
            sKey.tcbEaseFrom = 0.0
            sKey.tcbTension= 0.0
            sKey.tcbContinuity = 0.0
            sKey.tcbBias = 0.0
            curvestif.addKey( sKey )


            s2Key = Key.new()
            s2Key.time = scene.getCurrentTime() + delay
            s2Key.value = maxstif
            s2Key.type = KEY_TYPE_LINEAR
            s2Key.tcbEaseTo = 0.0
            s2Key.tcbEaseFrom = 0.0
            s2Key.tcbTension= 0.0
            s2Key.tcbContinuity = 0.0
            s2Key.tcbBias = 0.0
            curvestif.addKey( s2Key )
            
            ###################

            curvedamp = obj.getParameterCurve("Damping")

            dKey = Key.new()
            dKey.time = scene.getCurrentTime()
            dKey.value = obj.getParameter("Damping")
            dKey.type = KEY_TYPE_LINEAR
            dKey.tcbEaseTo = 0.0
            dKey.tcbEaseFrom = 0.0
            dKey.tcbTension= 0.0
            dKey.tcbContinuity = 0.0
            dKey.tcbBias = 0.0
            curvedamp.addKey( dKey )

            d2Key = Key.new()
            d2Key.time = scene.getCurrentTime() + delay
            d2Key.value = maxdamp
            d2Key.type = KEY_TYPE_LINEAR
            d2Key.tcbEaseTo = 0.0
            d2Key.tcbEaseFrom = 0.0
            d2Key.tcbTension= 0.0
            d2Key.tcbContinuity = 0.0
            d2Key.tcbBias = 0.0
            curvedamp.addKey( d2Key )







#--------------------------------------------------
# Function: onSimulationFrame
#--------------------------------------------------

def onSimulationFrame():
   pass




#--------------------------------------------------
# Function: onSimulationEnd
#--------------------------------------------------

def onSimulationEnd():
   pass




#--------------------------------------------------
# Function: onChangeToFrame
#--------------------------------------------------

def onChangeToFrame():
   pass

lukeiamyourfather
Posts: 2880
Joined: Mon Oct 15, 2007 4:09 pm
Contact:

Damaged or deformed objects after collision

Postby lukeiamyourfather » Mon Oct 22, 2007 3:39 pm

Orr, that's an impressive script. I'm working on testing it right now, I'll keep you posted with the progress. Thanks for the very helpful input!

orr
Posts: 60
Joined: Mon Sep 03, 2007 5:18 pm

Damaged or deformed objects after collision

Postby orr » Mon Oct 22, 2007 7:31 pm

thanks for testing but I think the script isn't working ... because the script only checkts the distance from the softbodys vertices to the centre position of a object.. so if you have a object colliding far away from the centre point of the collisonobj it won't work .. maybe I could work that out.

bokeh
Posts: 13
Joined: Sat Oct 06, 2007 10:42 am

Damaged or deformed objects after collision

Postby bokeh » Fri Feb 22, 2008 11:19 am

okk i think am way too late ... but you could try Ncloth in maya ... it does these kind of things really well.


Return to “RF4: Softbody / cloth simulation”

Who is online

Users browsing this forum: No registered users and 0 guests