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?

Share this post

Link to post
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
IFD property

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.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now