Home Website Youtube GitHub

Spring chain not rendering properly

Hi there,

I’m having an issue where the spring chain (used for Antenna on a character) sometimes renders as expected, but sometimes doesn’t. I’ve tried baking simulation, but this doesn’t really seem to do the trick (unless perhaps I am doing something wrong). I’ve seen the “synoptic baker” mentioned for baking springs, but I’m admittedly unsure about how to use it. Re-building the rig isn’t an option and I’m not sure how to set it up exactly at this stage.
I would greatly appreciate someone running me through the steps!

Thanks!

Hi Maya,

Right now, I am working on a Unity game, and I have to bake the skeleton before exporting to FBX.

I learned from @iker.mozos and @Jerome that you have to set all the joints to keyable before baking, otherwise it doesn’t work. They are set to non-keyable by default in the Shifter rig. It might be the same problem when you are trying to bake your springs.

Another option to explore is baking Alembic caches of your geometry, and rendering that, so that you don’t depend on the rig at all for rendering.

3 Likes

hi maya,

you can append the baker tab to the synoptic even after rigging/building. i assume you dont see the baker tab.

(bake simulation from the keys-menue seems not to work properly with mgear springs node).

an important thing after baking with the baker is to set the spring-chain intensity to zero…

  1. select your rig group (the group that mgear holds all the stuff).
  2. in the attribute editor under extra you will find a field where it says synoptic (there should be already a name called biped). just put “,baker” after “biped”. you should endup with a string “biped,baker” (no spaces!!!).
  3. open synoptic and you should have a “baker” tab for caching the plot-group…
  4. important: after caching you have to set the spring-chains intensity to zero (otherwise you get double transforms)
2 Likes

#4. Good point!

Here is a script to help turn off all the spring intensities at once, after you baked.

# find all the spring nodes, and the control inputs that drive them.
# using a set instead of a list avoids finding the attribute multiple times, if it drives multiple springs.
springControls = set()
for springNode in pm.ls(type='mgear_springNode'):
    springInputs = springNode.intensity.inputs(plugs=True)
    springControls.update(springInputs)

# Turn them all off
for eachSpringAttr in springControls:
    eachSpringAttr.set(0.0)
1 Like

Thank you @chrislesage and @soulcage!
Super helpful :slight_smile:

thank you chris for the code snippet.
maybe this can be mounted to the bake / unbake commands…