Is component builder just for static geometry?
5711 14 6- BradThompson
- 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.
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.
- goldleaf
- 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.
- BradThompson
- Member
- 67 posts
- Joined: March 2017
- Offline
- traileverse
- Member
- 361 posts
- Joined: Nov. 2015
- Offline
goldleafI 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.
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?
hou.f*ckatdskmaya().forever()
- ajz3d
- Member
- 570 posts
- Joined: Aug. 2014
- Offline
- Mark Wallman
- Member
- 697 posts
- Joined: Aug. 2013
- Offline
- BryanRay
- Staff
- 43 posts
- Joined: March 2022
- Online
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.
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.
- Mark Wallman
- 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
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
- goldleaf
- 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!
Just put the hip file in the same location as the alembic file attached above.
Hope this helps!
I'm o.d.d.
- Mark Wallman
- Member
- 697 posts
- Joined: Aug. 2013
- Offline
- Mark Wallman
- 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
Best
- Mark Wallman
- 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 ;-)
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
- ude-p
- 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.
- Mark Wallman
- Member
- 697 posts
- Joined: Aug. 2013
- Offline
- NMVHS
- Member
- 29 posts
- Joined: May 2015
- Offline
-
- Quick Links