Damaged or deformed objects after collision

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

Damaged or deformed objects after collision

Post by 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!
WhenPicsFly | Debian GNU/Linux

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

Damaged or deformed objects after collision

Post by 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

Post by 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!
WhenPicsFly | Debian GNU/Linux

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

Damaged or deformed objects after collision

Post by 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

Post by 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

Post by 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

Post by 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!
WhenPicsFly | Debian GNU/Linux

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

Damaged or deformed objects after collision

Post by 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

Post by 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.

Locked

Return to “RF4: Softbody / cloth simulation”