Is component builder just for static geometry?

   5710   14   6
User Avatar
Member
67 posts
Joined: March 2017
Offline
I'm still trying to wrap my head around USD workflow in Houdini. I have an animated L-system tree. It's got changing topology, animated attributes, the works. I'm trying to understand the best way to get this into disk, then into a USD stage.

Component builder only seems to export a static USD file, even if I enable "Topology Attributes: Animated" and "Author Time Samples if SOP is time dependent".

USD Render ROP seems to work, but is that the suggested way to do it? It seems less elegant than the component builder.

Thanks!

Brad T.
User Avatar
Staff
4199 posts
Joined: Sept. 2007
Online
Currently to output an animated asset with component builder, try appending a Cache LOP after the Component Geometry. This will bake all of the time samples, and then when you reference the asset from the Component Output node, or from the file on-disk, you should have all of the animation built in. Does that make sense?
I'm o.d.d.
User Avatar
Member
67 posts
Joined: March 2017
Offline
Thanks Goldleaf,

It does make sense and I'll give it a try. Is this the preferred/suggested way of exporting animated assets for USD?
User Avatar
Member
361 posts
Joined: Nov. 2015
Offline
goldleaf
Currently to output an animated asset with component builder, try appending a Cache LOP after the Component Geometry. This will bake all of the time samples, and then when you reference the asset from the Component Output node, or from the file on-disk, you should have all of the animation built in. Does that make sense?
I tried this, but it doesn't work for me, When I save its still static geo. I enabled time sampled dependencies on both the component geometry and the component output.
hou.f*ckatdskmaya().forever()
User Avatar
Member
570 posts
Joined: Aug. 2014
Offline
I managed to get it working with:
(Component Geometry LOP) Author Time Samples = "If SOP is Time Dependent"
(Cache LOP) Behavior = "Always Cache All Frames"
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi

Does this still work for you. Following what you were doing does not work for me. H19.5.303

Best. Mark
User Avatar
Staff
43 posts
Joined: March 2022
Offline
There was a change to the Cache LOP's default settings that affects this workflow. When a ROP starts rendering, it sets the context options @ropstart and @ropend to match its own Valid Frame Range. This prevents the LOP from caching the entire timeline for the sake of one frame. Normally a great idea. However, the ROP inside Component Output is set to render only the current frame, which therefore modifies the Cache LOP's behavior unexpectedly (and somewhat invisibly to the end user).

Under most circumstances, a static asset is what we want to see from Component Builder—animation is typically layered on afterward. In cases where you actually do want a keep-alive animation or something of the sort to be saved with your base asset, the simple solution is to delete the channels on the Cache LOP's Start/End/Inc parameter and either set the frame range explicitly or use $RFSTART/$RFEND/$RFINC.

The slightly more complex solution is to break open the Component Output HDA and modify the USD ROP inside so it renders the range you want.
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi Bryan

So the issue with layering the animation latter is you have to manually reconstruct the stage hierarchy just for the animation. The component geometry creatures a structure like ASSET/geo etc. This is a very manual process leaving room for human error.

My other issue is I cannot even get an external abc/usd file that is animated to load into component geometry at all, let alone worry about breaking open the output part of it.

It is such a shame as it means I cannot use any of these tools. What I have done is make my own that suck in static or animated ABC/USD files with the option to either create stitch files and/or create a model and animation sublayered file. This does mean that none of your layout LOP are usable however. Which is another shame.

Im attaching and example ABC file that I generally test with. Best. Mark

Attachments:
aien.abc (5.4 MB)

User Avatar
Staff
4199 posts
Joined: Sept. 2007
Online
Hi Mark, I hope this helps illustrate how you can use references to overlay animation from alembic caches. Obviously this example would look better if there was a static alembic pose for the asset, but I hope it still illustrates the idea. There's also a sticky note in there explaining the approach and alternatives a bit more.

Just put the hip file in the same location as the alembic file attached above.

Hope this helps!

Attachments:
alien_component_builder.hip (417.2 KB)
image (2).png (627.8 KB)

I'm o.d.d.
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi goldleft. This is super helpful. Thank you!
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi again Goldleft. Thanks again. I have just looked at the file you sent. I noticed you have also fixed the eye issue (thats for that). They eyes were parent constrained in Maya rather than skinned. I just had not figured out why the eyes were behaving oddly before. I got two answers for the price of one question!

Best
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi Goldleft.

Im just going though your file you sent me. In it you said regarding abc imports with double transforms

"If you block the xformOps on the meshShape, after referencing the abc animation, then the eyes are no longer offset ('block_xformOps_on_shapes')".

On the Reference LOP
Is turning Parent Primitive Type to "None", rather than the default "Xform" what you are refering to?

Best. Mark

Edit: sorry. Im being dumb. I missed the edit properties LOP. Sorry for the noise ;-)
Edited by Mark Wallman - Oct. 20, 2022 10:11:28

Attachments:
Capture.JPG (19.0 KB)

User Avatar
Member
9 posts
Joined: Nov. 2021
Offline
The component output renders current frame by default. You have to break into the node contents( Allow editing of contents), locate the usd rop for assets in the node tree and set "Valid Frame Range" to Render specific Frame range. You can also add this to the component output node parameter interface.
User Avatar
Member
697 posts
Joined: Aug. 2013
Offline
Hi Ude.

I have submitted an RFE to ask to have the frame range exposed which would be super handy. Best. Mark
User Avatar
Member
29 posts
Joined: May 2015
Offline
Is it possible to have a looped animation built in an asset with component builder, e.g. a waving flag or burning tree?
I'm experimenting this with putting value clip in component builder, doesn't seem to work.
  • Quick Links