Jump to content

Instancing Geometry with Displacements


Recommended Posts

Hi guys,
I am currently building a environment for which I want to instance a lot of mega scan rocks.
I am using the instance object so that I can instance thousands of the rocks with a huge hit.
The problem is now that I turn on the displacement on the rocks everything comes to a halt.
It looks like mantra is placing all the objects and then dicing and displacing the geometry.
Is there a way of dicing and displacing the geo first?
Should I just bake the displacement into the geo?

Link to comment
Share on other sites

hi, i think sharing displacements between instances is what you want.

copy/paste from docs:

Share Displacements Between Instances

Houdini render property
 
vm_sharedisplace
IFD property
 
object:sharedisplace

By default, when instancing is used with displacements, the displaced geometry will be created uniquely for each instance, since it’s possible that the displacements may differ based on the world-space position of each instance. This default behavior will guarantee correct results but it can be inefficient since mantra needs to keep a separate copy of the displaced geometry for each instance. When this setting is enabled, mantra will share a single copy of the displaced geometry between all instances, and assumes that the displacement shader only uses the object space position to determine the displaced position and normal.

The dicing quality used when displacements are shared will be the dicing quality for the instance that is closest to the camera. Therefore, instances that are farther from the camera may incur a greater rendering cost when this setting is enabled, but overall memory use will usually be lower.

When sharing displacements on packed primitives, there’s a very subtle issue which may cause issues with popping displacements. The vm_procuseroottransform toggle is on by default. This means the object space for the packed geometry will not include the transform on the packed primitive itself, only the transform on the object containing the packed primitives. This is important when doing geometry/volume lighting so that point clouds will all be in the space of the single object. However, when there are shared displacements, the displacement should be computed in the space of the unpacked geometry (i.e. including the transform on the packed primitive). If you want to use shared displacements on packed primitives, you should turn off the vm_procuseroottransform parameter.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...