USD StandIns?

   4369   15   3
User Avatar
Member
52 posts
Joined: June 2020
Offline
Hi all.
I am new to Solaris
I am importing a very large scene (a city, ton of geometry)
Is there a way in Solaris to create something similar to the Arnold StandIns and load USD meshes only at render time?

Could it even be possible to create a Arnold StandIn from a USDScene?

Thanks
User Avatar
Member
7770 posts
Joined: Sept. 2011
Offline
There's several ways. Change the drawmode to bounding box, unload payloads, use 'purpose' to differentiate between proxy and render geometry.
User Avatar
Member
44 posts
Joined: May 2017
Offline
PaoloGiandoso
Could it even be possible to create a Arnold StandIn from a USDScene?


also regarding arnold and usd - you can bring ASS files straight to Solaris and you can render USD files directly from kick.
User Avatar
Member
52 posts
Joined: June 2020
Offline
jsmack
There's several ways. Change the drawmode to bounding box, unload payloads, use 'purpose' to differentiate between proxy and render geometry.

Hi @jsmack. Thanks for helping out!
If I use the configure node to set the purpose and drawmode it does change the way the geos are displayed but it still has to load the usd file at the beginning right?
What I am concerned about is the loading time of each usd file. Since I have a large city scene, each .usd file takes a long time to load.
So I was hoping for a way to not overload the viewport and only load stuff when I hit render like with ass files in maya.
But if I place the configure node after the file import node it still gets loaded regularly.


frostfx
also regarding arnold and usd - you can bring ASS files straight to Solaris and you can render USD files directly from kick.
Thanks @frostfx!
I do not know how to use Kick but being able to import ASS files into Solaris is surely great. Do they read as reference files?
User Avatar
Member
7770 posts
Joined: Sept. 2011
Offline
PaoloGiandoso
If I use the configure node to set the purpose and drawmode it does change the way the geos are displayed but it still has to load the usd file at the beginning right?

For purpose, the file needs to be made with purpose set to render on the high res geo, and have proxy geometry with proxy purpose set. Then when the scene is loaded into Houdini which has proxy purpose on by default, it will only show the proxies.

Changing draw mode does require having loaded the file already, yes.

Using purpose is the way to go for having it behave like a stand-in.

If geometry is loaded using payloads, there is a preference to have all payloads unloaded by default. This will prevent loading the entire scene until it is manually loaded. However, this will also prevent the scene from showing anything when rendered in the scene view using karma. The configure stage node can also be used before the sublayer node to control which primitives are going to be loaded.
User Avatar
Member
273 posts
Joined: Nov. 2013
Offline
It's worth mentioning that 'load' can mean a few different things.

Binary USD files don't load attribute data into memory until it's requested (for example point data for a gprim wouldn't be read from the file until a renderer asks for it). Ascii USD files on the other hand must load the entire contents of the file into memory upfront. In general heavy data wants to be in binary files for this reason, and because it's more compact.

However USD loads and composes all prims into memory, unless there's unloaded payloads present which will stop the loading process following the payload prim. Payloads are usually there to speed up composition though, not reduce memory. Unless you have a really massive scene you're unlikely to notice the memory overhead.

Draw mode tells a renderer to render a simple box or card instead of the real thing. So while the prims will likely be loaded the attribute data on those prims will never be read from disk.

Like jsmack said the most fluid way is to use purpose so that only proxy geometry is loaded into the viewer.
Edited by antc - Jan. 20, 2022 17:16:40
User Avatar
Member
44 posts
Joined: May 2017
Offline
PaoloGiandoso
frostfx
also regarding arnold and usd - you can bring ASS files straight to Solaris and you can render USD files directly from kick.
Thanks @frostfx!
I do not know how to use Kick but being able to import ASS files into Solaris is surely great. Do they read as reference files?

No. But you can create an "ArnoldProcedural" primitive type prim with the primitive lop and then use the edit properties lop to set properties, mainly the filename.
User Avatar
Member
52 posts
Joined: June 2020
Offline
Hi jsmark, frosrFX and antc
Thanks for helping!

jsmack
For purpose, the file needs to be made with purpose set to render on the high res geo, and have proxy geometry with proxy purpose set. Then when the scene is loaded into Houdini which has proxy purpose on by default, it will only show the proxies.

I am not sure I understood this passage. Bear with me plase, I am still very green.
The usd I am importing is created automatically from the CityEngine software so I can not edit it before loading it.
I do not see any option to set the Purpose on the File LOP nor on the Reference LOP, only on the Configure LOP, which can be added only after the file/reference LOP I assume.
How do I set the purpose on the higher geo directly on the File / Reference LOP?

frostfx
No. But you can create an "ArnoldProcedural" primitive type prim with the primitive lop and then use the edit properties lop to set properties, mainly the filename.
Got it. I suppose the "ArnoldProcedural" primitive type options only appear on the list when you have HtoA installed correct?
(I have not Arnold installed on the current machine at the moment, so I can not check, but I do not see this type in the list currently)

antc
In general heavy data wants to be in binary files for this reason, and because it's more compact.
My file is binary, .usdc, just checked. Is it possible to convert one into the other?
Edited by PaoloGiandoso - Jan. 21, 2022 08:25:57
User Avatar
Member
710 posts
Joined: July 2005
Offline
You would use the Configure LOP. Scott ran through an example of adding render and proxy purposes to an asset in the H18 reveal:
https://youtu.be/Aql6SIOIyXs?t=730
[youtu.be]
User Avatar
Member
273 posts
Joined: Nov. 2013
Offline
Purpose is an attribute attached to specific primitives and so I think you'll need at least that prim loaded in LOP's to configure it. If the city engine output isn't 100% optimal you may need to run it though lops to re-configure things before using it for real. Since your USD file is binary (usdc) lops should be able to process it quite quickly providing there isn't a viewer active. Ultimately the speed depends on how many lops nodes you have and how many prims you are modifying.

The granularity you inject purpose will govern how much control you have. For example you could just attach purpose=render to the entire city via an ancestral prim and then add a completely separate purpose=proxy branch for the cheap representation. The down side with that kind of setup is you won't be able to toggle specific buildings to display the hero/render representation in the viewer. A more flexible setup would probably involve adding the proxy branch to each building individually and also a variant set to each building that can be used to disable the proxy. That's not too hard in lops either but is definitely more work than a single switch.

Oh and you can convert between USD representations using the usdcat tool.
User Avatar
Member
52 posts
Joined: June 2020
Offline
antc
Purpose is an attribute attached to specific primitives and so I think you'll need at least that prim loaded in LOP's to configure it. If the city engine output isn't 100% optimal you may need to run it though lops to re-configure things before using it for real.
Do you mean importing it, use the configure node to set it to Render only, then export it again out of houdini as usdc, then finally import the modified copy which should then load as render only?

antc
Oh and you can convert between USD representations using the usdcat tool.
Thanks!!!

Siavash Tehrani
You would use the Configure LOP. Scott ran through an example of adding render and proxy purposes to an asset in the H18 reveal:
Awesome thanks
User Avatar
Member
273 posts
Joined: Nov. 2013
Offline
PaoloGiandoso
Do you mean importing it, use the configure node to set it to Render only, then export it again out of houdini as usdc, then finally import the modified copy which should then load as render only?

Yes. A nice thing with USD is that it's layer based. So you don't need to figure out how to have Houdini import the entire city, change a couple of things, and then export it again. By default lops doesn't really import or export anything. Typically a lop network is referencing other layers (USD files, usually on disk) and generates additional layers on top (stronger) that override prims and properties on the weaker layers.

The nice benefit of that is that if you create a stronger layer with your purpose opinions it won't be necessary to re-run it each time you re-export from city engine. The layer with the purpose opinion will simply be referencing (or sublayering most likely) the city engine output.
Edited by antc - Jan. 21, 2022 18:20:18
User Avatar
Member
52 posts
Joined: June 2020
Offline
antc
Yes. A nice thing with USD is that it's layer based. So you don't need to figure out how to have Houdini import the entire city, change a couple of things, and then export it again. By default lops doesn't really import or export anything. Typically a lop network is referencing other layers (USD files, usually on disk) and generates additional layers on top (stronger) that override prims and properties on the weaker layers.

The nice benefit of that is that if you create a stronger layer with your purpose opinions it won't be necessary to re-run it each time you re-export from city engine. The layer with the purpose opinion will simply be referencing (or sublayering most likely) the city engine output.

I am slowly starting to understand these concepts, like Primvars and Opinions.
The documentation is a bit abstruse, so thanks god for this forum, but I am starting to get it.
It is truly a gamechanger.
Edited by PaoloGiandoso - Jan. 21, 2022 20:33:38
User Avatar
Member
273 posts
Joined: Nov. 2013
Offline
PaoloGiandoso
I am slowly starting to understand these concepts, like Primvars and Opinions.
The documentation is a bit abstruse, so thanks god for this forum, but I am starting to get it.
It is truly a gamechanger.

Yeah it takes a while to get used to the compositional aspects of USD and stop thinking of it as a file format.
Edited by antc - Jan. 21, 2022 21:03:44
User Avatar
Member
120 posts
Joined: Jan. 2012
Offline
Take a look at this vid.
Chris is showing how to not load payload and work with extents LOP.

https://youtu.be/EgTqz6y_oAs [youtu.be]
Michal Tas Maciejewski @ www.vfxtricks.com
User Avatar
Member
9 posts
Joined: March 2017
Offline
PaoloGiandoso
Hi all.
I am new to Solaris
I am importing a very large scene (a city, ton of geometry)
Is there a way in Solaris to create something similar to the Arnold StandIns and load USD meshes only at render time?

Could it even be possible to create a Arnold StandIn from a USDScene?

Thanks

use python script node on stage

node = hou.pwd()
stage = node.editableStage()

primpath = node.parm("primpath").eval()
prim = stage.DefinePrim(primpath, "ArnoldProcedural")
assfile = prim.GetAttribute('arnold:filename')
file = node.parm("ass_file").eval()
assfile.Set(file)
  • Quick Links