complexity option at usdrender rop

   4667   9   0
User Avatar
Member
2 posts
Joined: June 2021
Offline
what the 'complexity' option at usdrender rop do? if I set it to 'Very High', and hit render, it will take all my 128g computer memory, even though the sence is not that complexity. if I set it to 'Meduim', it will take about 20g memory, and it still can render out.
User Avatar
Staff
43 posts
Joined: March 2022
Offline
From the tooltip on that control: "For surfaces that are refine-able such as subdivision surfaces, this controls how many iterations of refinement to apply. Higher numbers give higher levels of detail on these surfaces but take longer to render."

The help card for the ROP repeats the same information and also provides a table that shows how many iterations each setting performs.

And obviously, more subdivs mean more points held in memory. Is there anything in the description that isn't as clear as it ought to be?

Here's a comparison of a USD Sphere prim rendered with Very High (16 subdivs) and Low (no subdivs at all):
Edited by BryanRay - July 22, 2022 10:50:46

Attachments:
very-high.jpg (31.9 KB)
low.jpg (33.9 KB)

User Avatar
Member
7810 posts
Joined: Sept. 2011
Offline
BryanRay
From the tooltip on that control: "For surfaces that are refine-able such as subdivision surfaces, this controls how many iterations of refinement to apply. Higher numbers give higher levels of detail on these surfaces but take longer to render."

The help card for the ROP repeats the same information and also provides a table that shows how many iterations each setting performs.

And obviously, more subdivs mean more points held in memory. Is there anything in the description that isn't as clear as it ought to be?

Here's a comparison of a USD Sphere prim rendered with Very High (16 subdivs) and Low (no subdivs at all):

How does this relate to the karma dicing quality control? Does it provide additional control over subdivision surfaces as well, or is it limited to displacement and other procedurals?
User Avatar
Staff
43 posts
Joined: March 2022
Offline
I had to go to a dev to get a clearer answer because I apparently didn't have it quite straight in my head. Evidently Karma's dicing is going to arrive at the same result within the frustum regardless of the level of subdivisions you do in Hydra (the complexity control). Going from Medium to Very High shouldn't make any visible difference, but Low will turn off subdivision entirely, so Karma doesn't get a subdivision cage and has nothing to refine.

I do still have a little confusion because there doesn't seem to be a difference in my tests between Low and Medium. But the USD sphere primitive probably isn't the best thing to test with. I'm also not sure if dicing is based only on primary rays, or if you might still see faceting in reflected off-screen meshes.
User Avatar
Staff
43 posts
Joined: March 2022
Offline
I believe there's a bug in the complexity control. The logs show that at Low and Medium complexity, subdivision geometry is passed to Karma as polygon mesh, and dicing does not occur. If complexity is High or Very High, it's passed as subdivision surface, and there's an entry indicating dicing.

I'm not sure if it makes any practical difference, but I'm still curious about that reflection question, and it's not easy to answer by looking at the difference between High and Very High settings.
User Avatar
Staff
43 posts
Joined: March 2022
Offline
I have a definitive answer! Also, the docs have been updated to clarify:

Complexity
This setting is defined by USD and Hydra to control for the number of iterations to use to render “refine-able” (subdivision) surfaces. Karma mostly ignores this setting, since it measures the surface in screen space to decide how many iterations it needs to render the surface smoothly. Instead Karma uses this setting more like a subdivision on/off switch. If this is set to Low or Medium, Karma renders the (chunky) hull. If it is High or Very High, Karma renders the (smooth) limit surface.

Other renderers (such as RenderMan or Storm) will treat this setting differently, using it to determine subdivision quality. If you need to render the same scene in Karma and another renderer, remember to use High or Very High to make sure Karma renders subdivision surfaces smoothly.

In short, if you're rendering with Karma, Medium or Low performs no subdivision or other refinements, so the memory footprint will be significantly lower, but the geometry may not be smooth enough, depending on your topology.
User Avatar
Member
2 posts
Joined: June 2021
Offline
BryanRay
I have a definitive answer! Also, the docs have been updated to clarify:

Complexity
This setting is defined by USD and Hydra to control for the number of iterations to use to render “refine-able” (subdivision) surfaces. Karma mostly ignores this setting, since it measures the surface in screen space to decide how many iterations it needs to render the surface smoothly. Instead Karma uses this setting more like a subdivision on/off switch. If this is set to Low or Medium, Karma renders the (chunky) hull. If it is High or Very High, Karma renders the (smooth) limit surface.

Other renderers (such as RenderMan or Storm) will treat this setting differently, using it to determine subdivision quality. If you need to render the same scene in Karma and another renderer, remember to use High or Very High to make sure Karma renders subdivision surfaces smoothly.

In short, if you're rendering with Karma, Medium or Low performs no subdivision or other refinements, so the memory footprint will be significantly lower, but the geometry may not be smooth enough, depending on your topology.

thanks for the reply,and all the research,I'm using arnold renderer, maybe I should ask the qustion at arnold forum, and figure out what arnold use this option for.
User Avatar
Member
8597 posts
Joined: July 2007
Offline
why does such setting exist?

does Hydra use it to turn parametric geo to poly representation itself? or is it purely a hint for the renderer?
I don't understand why would I want such ambiguous setting change my carefully tweaked render, especially since it doesn't translate to viewport since it's part of husk
on top of tat Viewport seems to have separate version of this through Tesselation/LOD

I feel like there is too many variables that affect dicing that are not described by the USD file itself, therefore creating room for error
Edited by tamte - July 30, 2022 12:52:30
Tomas Slancik
FX Supervisor
Method Studios, NY
User Avatar
Member
276 posts
Joined: Nov. 2013
Offline
I would say it’s mostly a legacy thing. Complexity is what instructs Storm to apply subdivision. It’s for an entire stage though, so not really useful for large scenes. But for single assets it can be a useful way to easily crank up the smoothness. Offline renderers tend to have fancier controls obviously, and so complexity becomes somewhat redundant (and confusing).
User Avatar
Member
7810 posts
Joined: Sept. 2011
Offline
Setting complexity to "Very High" should automatically add gack/nernies/greebles to your model
  • Quick Links