Pre-Transform vs Neutral Pose

   6690   10   2
User Avatar
Member
16 posts
Joined: Oct. 2014
Offline
Am I right in thinking that the Houdini Pre-Transform is the equivalent of Softimage's Neutral Pose?

Is there a way to see the Pre-Transform values (not extracting them) and modify their values? Can we put expressions on them? Can we lock them?

Thanks is advance
User Avatar
Member
387 posts
Joined: Nov. 2008
Offline
Look at Chops: PreTransform CHOP
User Avatar
Member
16 posts
Joined: Oct. 2014
Offline
Thank you for your answer pezetko

This node allows me to “extract” a pre-transform from an object at chop level right? I can then do some math with it and export results.

Could I export to an object's pre-transform?

Is there a way to drive the pre-transform directly on an object?
User Avatar
Staff
3455 posts
Joined: July 2005
Offline
also look in the textport for
help pretransform
help objcleantransform
help objpretransform
help objresetpretransform
help objextractpretransform

having said that - I'd stay away from messing with pretransforms if you can…unless you're doing something very specific….

HTH
Michael Goldfarb | www.odforce.net
Training Lead
SideFX
www.sidefx.com
User Avatar
Member
16 posts
Joined: Oct. 2014
Offline
Arctor, thanks for your reply

I've never been a big fan of neutral poses or pre-transforms and like you said, I'm trying to stay away from them as much as I can. But for some reason in Houdini I always find some pre-transforms that where set for me. Sometimes it happens when parenting objects, but other times I think it has to do with some shelves tools that I'm using. I haven't figured that out yet.

I would like to be able to easily visualise the pre-transform parameters to at least see if they are clean or not, but I didn't find an easy way. I would also like to lock them so they stay clean.

Sometimes however they do are useful and being able to put expressions on them would be awesome.

Maybe we could make a suggestion to sideFx to expose those parameters. I think it would make life easier for everyone…
User Avatar
Staff
2540 posts
Joined: July 2005
Offline
Pretransforms by default are added to objects when you have “Keep Position When Parenting” enabled. The pretransform is the transform it took to keep that position and leaves the TRS parameters alone.

If you don't like this behaviour, you can enable “Read Only Pre-Transforms” in the global Houdini preferences.

Enabling this will lock down the pre-transforms for all objects including re-parenting with Keep Position enabled. That is what you want to set if you want to keep object pre-transforms unaltered and not set.

Having said that, there are times when you want pre-transforms in place and it usually is in the optimization phase of rigs. I always add nulls to the animation rigs as locators fully knowing that each null imparts an additional potential animated transform to the hierarchy with it's minor overhead. As you add more and more Null locator Objects, you can see a bit of a performance hit.

Once the rig is fully functioning with all animated parameters and controls raised up to the top level HDA, I will seek out the constant Null locator Objects and turn off “Read Only Pre-transforms” option and make sure “Keep Position” is on the child object then simply blow away the Null object to encode the pre-transform in to the child object.

Zero-ing out TRS for animators is possibly best handled by inserting a null and using that to hold the position, or not. Try both out in your rig: using Null Objects to zero out control object or use pre-transforms to zero out the control object.

Every object node you can cull will glean a bit of performance back.

Attachments:
prefs_read_only_pretransforms.jpg (58.6 KB)

There's at least one school like the old school!
User Avatar
Member
16 posts
Joined: Oct. 2014
Offline
Thank you Jeff.

I was not sure of the behavior of the “Read Only Pre-Transforms”, but now I get it and it will surely help me

I usually favour nulls over “pre-transforms” to zero out the transforms of the controllers because they are easy to visualise, manipulate and animate if needed.

I do understand they add overhead if they are not used, so I will try your strategy to optimize rigs if they get too heavy.

I've always been sceptical about pre-transforms and neutral poses since they first appeared in DCCs because to me, it sounds like now we've added a matrix multiplication to each object, even when not needed. But I guess this overhead is less than the overhead of a null object and all it's attributes and properties when we do want to use it as a “pre-transform”.

Thanks again for your instructive reply I will use your strategy.
User Avatar
Member
7725 posts
Joined: July 2005
Offline
If the pre-transform does nothing (ie. identity matrix), there are optimizations to ignore it.
User Avatar
Member
16 posts
Joined: Oct. 2014
Offline
Good to know! Thank you Edward
User Avatar
Member
387 posts
Joined: Nov. 2008
Offline
You can see if there is pre-transform (and its values) by MMB click and hold on the node in Network View (= Operator Info = same as little “i” in blue circle icon next to help button in Parameters pane right top corner).


Jeff it would be nice to see some advance (production proven) Masterclass or Next Steps about Houdini way of rigging and common rigging techniques (applied in Houdini) that are needed in current state of art.

Could we ask for that?

There are only beginner's intro videos from DT (toolshelf clicking, without explaining why they do it that way, nor any tips/tricks) and some very old 3d Buzz training.
User Avatar
Member
387 posts
Joined: Nov. 2008
Offline
Just be aware that even with “Read Only Pre-Transforms” option enabled you can bake any transform into preTransform with “Clean Transform” option from drop-down menu.

This little python script checks all selected nodes in Object context and colorize ones with any pretransform.

import hou

identM = hou.Matrix4()
identM.setToIdentity()

defGray = hou.Color((0.8, 0.8, 0.8))
red = hou.Color((1.0, 0.0, 0.0))

for oNode in hou.selectedNodes():
print oNode.color()
preTransf = oNode.preTransform()
if preTransf != identM:
print oNode, “has a preTransform: ”, preTransf
oNode.setColor(red)
else:
oNode.setColor(defGray)
  • Quick Links