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
USD StandIns?
5377 15 3- PaoloGiandoso
- Member
- 63 posts
- Joined: June 2020
- Offline
- jsmack
- Member
- 8043 posts
- Joined: Sept. 2011
- Offline
- frostfx
- Member
- 44 posts
- Joined: May 2017
- Offline
- PaoloGiandoso
- Member
- 63 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.
frostfxThanks @frostfx!
also regarding arnold and usd - you can bring ASS files straight to Solaris and you can render USD files directly from kick.
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?
- jsmack
- Member
- 8043 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.
- antc
- Member
- 336 posts
- Joined: Nov. 2013
- Online
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.
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
- frostfx
- Member
- 44 posts
- Joined: May 2017
- Offline
PaoloGiandosofrostfxThanks @frostfx!
also regarding arnold and usd - you can bring ASS files straight to Solaris and you can render USD files directly from kick.
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.
- PaoloGiandoso
- Member
- 63 posts
- Joined: June 2020
- Offline
Hi jsmark, frosrFX and antc
Thanks for helping!
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?
(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)
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?
frostfxGot it. I suppose the "ArnoldProcedural" primitive type options only appear on the list when you have HtoA installed correct?
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.
(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)
antcMy file is binary, .usdc, just checked. Is it possible to convert one into the other?
In general heavy data wants to be in binary files for this reason, and because it's more compact.
Edited by PaoloGiandoso - Jan. 21, 2022 08:25:57
- Siavash Tehrani
- Member
- 729 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]
https://youtu.be/Aql6SIOIyXs?t=730
[youtu.be]
- antc
- Member
- 336 posts
- Joined: Nov. 2013
- Online
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.
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.
- PaoloGiandoso
- Member
- 63 posts
- Joined: June 2020
- Offline
antcDo 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?
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.
antcThanks!!!
Oh and you can convert between USD representations using the usdcat tool.
Siavash TehraniAwesome thanks
You would use the Configure LOP. Scott ran through an example of adding render and proxy purposes to an asset in the H18 reveal:
- antc
- Member
- 336 posts
- Joined: Nov. 2013
- Online
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
- PaoloGiandoso
- Member
- 63 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
- antc
- Member
- 336 posts
- Joined: Nov. 2013
- Online
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
- tas3d
- 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]
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
- WalterGu
- Member
- 11 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