Rigs with Dinamics


#1

Hey, Guys…

I´m very amazed by the rigs on the characters made by that awsome students of Gobelins.

I was watching the making of The Burning Safari and wondering how they did that rigs WITH DINAMICS. Anyone has a clue on how to do it? The videos that show it clearly are the Maxime Maleo and Florant de La Taille ones.

Just to make my question very clear: it is possible in Blender to make a bone rig that has a delay in motion compared to its parent? It´s very useful for the animation principles of overlapping and follow-though, like hair, tails and so on.

Cheers


#2

To a certain extent, yes. You can use the “Offs Par” button for objects and set the offset value to something other than zero. This would require constraining your bones to the objects that use the offset, so it’s probably the least convenient solution.
You could also script the inertial delay using Python drivers.


#3

=D
Hi, nemyax!

Well… thanks for your post. These suggestions are great, both the “Offs Par” one and the PyDrivers.

I´ve also posted this questions at BlenderArtists, and the user sketchy gave another possible solution:

"To the best of my knowledge you cannot directly delay a bones motion (like you can do for parented objects).

Here’s a blend I made that demonstrates how you can use softbodies on a separate, simple mesh (in this case, the mesh is just a line) with an empty vertex parented to one end of the soft mesh. The rig then has a bone which has a stretch to constraint targeting the empty.

http://www.cs.unm.edu/~sketch/blender/softrig.blend "

Cheers


#4

Well whatever looks right in the end is right. Here’s a function that you can put in pydrivers.py to make the driver read the value of the track you want at the frame you want:


  import Blender
  from Blender import *
  def readTrack(ipoName, ipoCurveName, *offset):
  	foundIpo = Ipo.Get(ipoName)
  	for x in range(len(foundIpo.curves)):
  		if foundIpo.curves[x].name == ipoCurveName:
  			foundCurve = foundIpo.curves[x]
  			break
  	frame = Blender.Get('curframe')
  	if not offset:
  		offsetValue = 0
  	else:
  		offsetValue = offset[0]
  	return foundCurve[frame+offsetValue]
  

The function takes 3 arguments:

[ol]
[li]Name of the ipo block that stores the tracks[/li][li]Name of the track to read[/li][li]Optional: positive (N frames after current) or negative (N frames before current) time offset[/li][/ol]As used in actual Py drivers:
[ul]
[li] p.readTrack(“ActIpo.001”, “LocX”)[/li][li] p.readTrack(‘ObIpo’, ‘RotZ’, -3)[/li][li] p.readTrack(“CoIpo”, “Inf”, 1)/10[/li][/ul]In fact, you can animate the offset with a curve, too:
[ul]
[li] p.readTrack(“ActIpo.001”, “LocX”, p.readTrack(“KeyIpo”, “offsetControl”))[/li][/ul]Mind that the referenced tracks have to actually have curves.


#5

Wow! That was really awesome!

Thanks a lot for the script, nemyax!

Cheers


#6

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.