Tessellation And Displacement

Table Of Contents

Curly cloth texture from PolyHaven.com
Cloth model by Fuchs & Vogel
Sofa by Pavel Zoch
Ground texture from PolyHaven.com


Overview

Tessellation

Tessellation is a technique that can take a coarse, low-polygon mesh and render it completely smooth. Working with low-polygon meshes and letting Redshift subdivide at render time has certain advantages:

It can be more memory-efficient (which is important for GPUs) when combined with view-dependent and/or adaptive subdivision. Small or distant objects, for example, will look smooth enough with fewer subdivisions than objects that are close to the camera. Redshift supports screen-space adaptive and world-space tessellation for improved memory usage.

 

Vertex and Texture Displacement

Displacement is used to add extra geometric detail to a mesh through shader networks, i.e. textures and noise shader nodes that displace the base geometry. Redshift supports two types of displacement, Vertex Displacement and Texture Displacement.

Vertex Displacement is the most capable and compatible form of displacement, though it has low interactivity. It's called Vertex Displacement because the actual vertices of the mesh are moved around to simulate geometry detail based on the displacement texture. More vertices equal more displacement detail, but this means either your base mesh needs a lot of geometric detail or you will need to tessellate it sufficiently at render time. Vertex displacement supports height field (displacing along the vertex normal) and vector displacement maps (in object or tangent space). Importantly, any displacement detail that can't be represented with the current tessellation settings can instead be represented using bump mapping – therefore a good level of surface detail can be present when using Auto Bump Mapping even with fairly low tessellation.

Texture Displacement is great for interactivity and quickly adding detail to large low-poly areas like bricks on walls or detail on a large ground plane. It's a form of tessellation free displacement and it's called Texture Displacement because it requires baking the displacement result down to a texture at render time - the resolution of that baked texture is directly responsible for how detailed the displacement is. Higher bake resolutions equal more displacement detail, but even though it's baked more detail will slow renders down so it's always worth finding a good balance.

Texture Displacement supports Bake Resolutions from 64 x 64 all the way up to 16k x 16k. In some limited scenarios the "Smart Bake" feature can be used with a UV Context Projection node for effective bake resolutions much higher than that by baking one tile at full resolution and repeating that the requisite number of tiles. For more information, please see the Smart Bake parameter on this page below.

Use a Color Layer node to mix displacement textures with Texture Displacement. Displacement Blenders are not compatible with Texture Displacement.

 

Each have their strengths and weaknesses.

 

Examples

Getting Started

 

Texture Displacement

Texture Displacement works great when adding detailed geometric detail to objects like flat walls and ground planes. Just set up a material with displacement, set it to use Texture Displacement and adjust the Bake Resolution.

In the example below, the low polygon flat wall uses a brick texture to add high quality Texture Displacement.

Brick wall without displacement
Brick wall with Texture Displacement
Window model from PolyHaven.com

 

Split Normals

Texture Displacement, however, can run into trouble with more complex geometry and even deceptively simple models. Take a cube, for example, it poses a challenge because of its split normals due to the hard edges. When a single vertex has multiple normals assigned to it - like the corners of a cube - it is likely to result in holes in the object. This is because rays fail to intersect with the surface since there is no surface present between the normals.

First let's take a look at a default cube from Cinema 4D using texture displacement. Using the default phong angle of 40° there are seams between each side of the cube because of the split normals at the vertices. The cube has no subdivisions and each face is unwrapped and placed directly on top of each other in the unwrap. Note, in the examples below, the small cube in the bottom right shows the UVs and wireframe for that example.

Default Cube
Phong Angle: 40°
Pine bark displacement from PolyHaven.com

 

There are two main options to resolve this, either add rounded edges to the object or increase the phong angle. Adding rounded edges works since it decreases the difference between the vertex normals by spreading the angle transition across more vertices while increasing the phong angle just smooths out the vertices. However, the lack of subdivisions on the default cube can cause shading issues so adding some subdivisions improves the result.

In the first example the phong angle is left at the default 40° but the edges are rounded with a bevel as seen in the wireframe. In the second and third examples the phong angle is increased to 90°, this does a good job of fixing up the seams but the shading doesn't work properly unless supported by some more subdivisions.

Default Cube + rounded edges
Phong Angle: 40°
Default cube
90°
Default cube + subdivisons
90°

 

Overlapping UVs

The story of the default cube is not over. Adding rounded edges helped reduce the seams but there are still some prominent gaps in the mesh and that is because of the overlapping UVs. In Cinema 4D the default cube's UVs are all overlapping each other, but this can cause severe issues for Texture Displacement which is reliant on baking the displacement result to a texture. When UVs are overlapping it can't bake the appropriate texture to each unique part of the object.

In the first example we see the default cube with it's overlapping UVs, in the upper right there is a gap in the mesh and stretched displacement. In the second example the cube is unwrapped so that all six sides have their own unique area. There are still some seams but the stretching is fixed and the seams are much less prominent and in some cases, like the edge facing the camera, completely gone. A good UV unwrap is very important for Texture Displacement.

Default Cube + rounded edges
UV Unwrap: Overlapping
Default Cube + rounded edges
Overlapping
Cube + rounded edges
Non-overlapping
Cube + rounded edges
Non-overlapping

 

A good non-overlapping UV map also makes a major difference when using a procedural projection like tri-planar. When UVs are overlapping the tri-planar projection has no chance for a good bake,

Default Cube + rounded edges
UV Unwrap: Overlapping
Tri-Planar Projection
Cube + rounded edges
Non-overlapping
Tri-Planar Projection

 

Parameters

When enabled, the geometry settings can be overridden.

 

Displacement

By default, all objects start in the "Render Settings" displacement mode. When an object uses this mode, displacement is controlled by the "Global Displacement" options found in the Global tab of the Render Settings. This allows you to easily control displacement throughout the scene from one centralized location. When Global Displacement is enabled, any object using the "Render Settings" mode enabled displacement. When Global Displacement is disabled, any object using the "Render Settings" mode disables displacement. Setting the mode to "On" or "Off" overrides the Global Displacement behavior.

Displacement: Off
On

 

Sets the displacement type to Vertex or Texture Displacement.

Vertex Displacement is the most capable and compatible form of displacement, though it has low interactivity. The quality of Vertex Displacement is be managed by controlling the mesh detail and tessellation level.

Texture Displacement is great for interactivity and quickly adding detail to large low-poly areas like bricks on walls or detail on a large ground plane. Texture Displacement is easy to control displacement quality by adjusting the Bake Resolution and is not dependent on mesh detail.

For more information, please see this section.

 

Scales the displacement results by increasing or decreasing the displacement.

Displacement Scale can also be controlled in the Displacement shader node itself, as a matter of fact, the final displacement result is the product of the Displacement Scale in the Redshift Object settings multiplied by the Scale set in the shader node. For example, a Redshift Object Displacement Scale of 3 with a shader Displacement Scale of 1 results in a total scale of 3 and, when using Vertex Displacement, the Displacement Max would also need to be set to 3 in order to accommodate for this.

Being able to adjust the displacement scale at the object level allows you to have different scales for different objects that use the same material. It is generally recommended to leave one of these values at 1 for simplicity, be careful not to double up your displacement scale.

In the examples scenes below, one is a smooth black to white gradient ramp displacing a small yellow plane and the other is a paving stones texture displacing a large ground plane — in both examples the Maximum Scale value is animated from 0 to a value higher than the Displacement Max limit. Note how the displacement retains its overall form, looking more or less extreme depending on the scale, it isn't until it hits the Displacement Max limit that it gets cut off. In the scene with the yellow plane you can see displacement is capped at a Displacement Max of 2.9 scene units, just under the top of the third blue bar which is 3 scene units tall.

Displacement Scale: 0 - 4
Displacement Max: 2.9
Vertex Displacement
0 - 2
1.5
Vertex Displacement


Only used with Vertex Displacement

When enabled, by default, the Displacement Max is calculated automatically based on the textures used for Displacement. When disabled, Displacement Max must be manually defined below.

 

Only used with Vertex Displacement when Auto Displacement Max is disabled.

Sets the limit on the highest distance in scene units that a vertex can be displaced.

For example, if you are adding two displacement textures together and each Displacement Shader has a scale of 1 scene unit, combined they can displace the vertices by 2 scene units, so a setting of 2.0 should be used for Displacement Max. If Displacement Max is set too low, the displacement result will be clamped and it will be cut off at a 'ceiling'.

On the other hand, if this value is set too high, there won't be any visual artifacts but performance could suffer because the Displacement Max value also has an impact on tessellation results. Increasing the Displacement Max value is similar to increasing an objects bounding box, the larger an object's bounding box becomes the more likely it is to enter the camera frustum which would trigger tessellation to occur. This might not be necessary as Redshift does not know if the bounding box actually needs to be that large so it will err on the side of caution and tessellate the object. Therefore, it is recommend to use a value that is as low as possible. Unfortunately, due to flexible nature of shaders, it's not currently possible to compute this value automatically. Settings similar to this can be found on other renderers, too, where they might be called "bounds padding" or "min/max bound".

In the example scenes below, one is a smooth black to white gradient ramp displacing a small yellow plane and the other is a paving stones texture displacing a large ground plane — in both examples the Displacement Max value is animated from 0 to a value higher than strictly necessary. The Displacement Scale listed under each example represents the lowest value necessary to displace the objects without clamping. In the scene with the yellow plane, the three blue bars are 1, 2, and 3 scene units tall. Note how the displacement appears cut off, it plateaus until Displacement Max meets or exceeds the Displacement Scale and once it exceeds the 3 unit bar there is no benefit to be gained. If your Displacement Scale is animated then Displacement Max would need to be set high enough to allow for the full range of displacement.

Displacement Max: 0 - 4
Displacement Scale: 3
0 - 1
0.5
Paving Stones Substance 003 textures from AmbientCG


Only used with Vertex Displacement

Fine surface details require very high tessellation levels in order to look nice and sharp, otherwise the surface is likely to look soft and blurry. However, this means higher memory usage and frequently longer render times.

The Auto Bump Mapping option can be used to get around this by essentially using the displacement texture map to automatically drive bump mapping for increased detail. It emulates what would happen if you were to tessellate your geometry to a sub-pixel level and modifies the surface normals accordingly.

In the examples below, note how the first two images use the same number of subdivisions but when Auto Bump Mapping is enabled the detail level looks much higher. The third image is provided for reference, it has a higher subdivision level that results in greater detail but it uses more then double the amount of memory since it has to generate and displace many more vertices.

Auto Bump Mapping: Enabled
Max Subdivisions: 5
Disabled
5
Disabled
7
(for reference)


Only used with Texture Displacement

Controls the resolution for the baked displacement texture used by Texture Displacement. Higher resolutions result in higher quality displacement but take longer to bake and render.

Baked textures cannot go out of core, so it's important to find the right balance for your scene. Don't set the Bake Resolution unnecessarily high.

When Smart Bake is enabled, this controls the maximum baking resolution but Redshift automatically lowers the Bake Resolution if set too high. For example, if Smart Bake is enabled:

  • When the displacement texture is 4k but the Bake Resolution is 8k then Redshift will only bake out at 4k.
  • When the displacement texture is 4k but the Bake Resolution is 1k then Redshift will only bake out at 1k.

When a procedural texture is used with displacement the full Bake Resolution is always used.

Bake Resolution: 128 x 128
Render Time: 51s
Bake Resolution: 512 x 512
Render Time: 1m 11s
2048 x 2048
2m
8192 x 8192
2m 45s


Only used with Texture Displacement

When enabled, Redshift optimizes for baking and tiling when used with a UV Context Projection node. Instead of baking each tile into the displacement texture, one tile is baked at full resolution and repeated the requisite number of tiles. Smart Bake works best on geometry that has a very simple unwrap and relies heavily on tiling. This makes it best suited to ground planes and something like a blanket with a simple 0-1 UV unwrap for the entire object. The ground plane can be unevent and the cloth can be folded and draped over objects as long as the UVs themselves are ideal for seamless tiling.

Smart Bake is unlikely to work well on objects with complex UV layouts and should be disabled when displacement issues are noticed.

Smart bake only works when tiling with a UV Context Projection node. Adjusting the tiling using the "Scale" parameters on the Texture Sampler will not have the same smart effect.

 

Take this example with a 256x256 checkerboard texture, each square in the texture is 128x128 pixels. First let's look at a baseline where Smart Bake makes no difference, a 1x1 tile of the texture. In the example images below, the number in the bottom left shows the actual "Bake Resolution" while the number in the bottom right shows the effective bake resolution after taking into account how many times the baked texture is tiled when Smart Bake is enabled. In this first example, both examples look the same because the texture isn't being tiled at all so Smart Bake makes no difference.

Smart Bake: Enabled
Bake Resolution: 256
Effective Resolution: 256
Disabled
256
256

 

But when we start tiling the texture the benefit becomes clear, here the texture has 4 tiles (2x2). With Smart Bake you get effectively a 512x512 bake because the original tile was baked at 256x256 and tiled 4 times. Meanwhile, when Smart Bake is disabled, all 4 tiles are baked into a 256x256 texture and the displacement quality takes a massive hit at 1/4th the necessary resolution.

Smart Bake: Enabled
Bake Resolution: 256
Effective Resolution: 512
Disabled
256
256

 

It only gets worse the more we tile, here's a 16 tile (4x4) example. Now we're effectively getting a 1024x1024 resolution bake for displacement quality but Redshift is still only baking a single tile at 256x256. The Smart Baking disabled example is still trying to pack all 16 tiles into the same 256x256 bake.

Smart Bake: Enabled
Bake Resolution: 256
Effective Resolution: 1024
Disabled
256
256

 

So, for example, let's say you have a ground plane with a 1k texture that repeats 10 times and are using a Bake Resolution of 2k.

Note, the higher resolution displacement still impacts render times with Smart Bake enabled but it is much more memory efficient and baking time can be decreased.

When a procedural texture is used with displacement Smart Bake always uses the full Bake Resolution.


Tessellation

Enables or disables subdivision.

 

Redshift supports two algorithms for polygon subdivision: Catmull-Clark and Loop. Catmull-Clark can be used with quads or triangles but the Loop method only works with triangles.

The Subdivision Rule parameter controls how Redshift subdivides your mesh from the following options.

Subdivision Rule: Catmull-Clark + Loop Catmull-Clark Only


The Screen Space Adaptive parameter controls how polygons are subdivided by changing the unit of measurement used by the Minimum Edge Length parameter. It might be helpful to think of the Screen Space Adaptive parameter as a subdivision mode selector.

When enabled, polygons are subdivided based on their measured edge length in pixels in the final render — hence, Screen Space Adaptive. When disabled, polygons are subdivided based on their measured edge length in scene units — in this case, subdivision takes place in World Space.

On this documentation page, "Screen Space mode" or "Screen Space subdivision" will be used to refer to tessellation when Screen Space Adaptive is enabled and "World Space mode" or "World Space subdivision" will be used to refer to tessellation when Screen Space mode is disabled.

 

In Screen Space mode polygons are subdivided while their edge length measures longer than the number of pixels set by the Minimum Edge Length. For example, if the Minimum Edge Length is set to 10 then all polygon edges that measure longer than 10 pixels will be subdivided until the Maximum Subdivision level is hit or the newly subdivided edge length measures less than 10 pixels — whichever comes first.

In World Space mode polygons are subdivided while their edge length measures longer than the number of scene units set by the Minimum Edge Length parameter up to the Maximum Subdivision level. For example, if the Minimum Edge Length is set to 2 then all polygon edges that measure longer than 2 scene units will be subdivided until the Maximum Subdivision level is hit or the newly subdivided edge length measures less than 2 scene units — whichever comes first.

Screen Space subdivision is adaptive where as World Space subdivision is effectively static — the only time subdivisions will change in World Space mode is if the Minimum Edge Length is changed or the actual geometry changes in size. However, in Screen Space mode there are many ways to change how long an edge measures in pixels. For example, moving an object closer or farther from the camera, changing the render resolution, the camera zooming in or out, and an object scaling up or down could all trigger subdivision changes.

Screen Space Adaptive: Enabled
(Screen Space mode)
Disabled
(World Space mode)

 

There are upsides and downsides to this adaptivity. On the positive side screen space can be much more efficient, like only adding more detail to objects close to the camera while far off objects have less detail, leading to savings on GPU memory and processing time that can be significant. Screen Space subdivision is also uniquely able to limit the amount of tessellation on objects outside of the camera frustum which can heavily reduce GPU memory usage. This is an optimization World Space subdivision is not able to do, instead, World Space mode will always tessellate objects — onscreen or not — as long as they meet the requirements set by the Minimum Edge Length and Maximum Subdivisions. However, since the subdivision level of an object can change as it moves across the screen the transition between different subdivision levels may be too noticeable and undesirable — for this reason screen space subdivision is frequently better suited to still images or animations where the transition is not as easy to see.

Screen Space Adaptive: Enabled
(Screen Space mode)
Vertex Displacement
Disabled
(World Space mode)
Vertex Displacement

 

Tessellation and Instancing

When a mesh is instanced in Redshift, adaptive tessellation is no longer supported. However, you can use fixed-rate World Space tessellation (and, subsequently, displacement too) by using the following settings:

  • Use World Space subdivision (Disable the Screen Space Adaptive parameter)
  • Set Minimum Edge Length to 0
  • Set the Maximum Subdivisions to something reasonable

Please pay particular attention to the third point, as the default setting (6 subdivisions) is generally too high for fixed rate subdivision.

 

When enabled, objects are smoothly subdivided using the selected Subdivision Rule algorithm. This is great for smoothing out coarse low poly objects.

When disabled, objects are subdivided without smoothing using simple linear subdivision. This increases the polycount while retaining the original shape and silhouette of the object. If you are using Vertex Displacement on simple angular meshes (such as walls or a box) and don't want them turned into smooth objects, disabling smooth subdivision might be the right option for you.

In the example below, note how the handle on the cup and the edges of the spoon are rounded off when Smooth Subdivision is enabled. When disabled, the objects are still subdivided but the actual shape does not change.

Smooth Subdivision: Enabled
Disabled
Teacup model by Raphael Rau

 

When "Smooth subdivision" is enabled, Redshift will smooth the vertex positions as well as the UV coordinates and tangent space vectors. Smoothing UV coordinates shifts the UVs to remove any 'zig-zagging' and 'UV breaks' during tessellation in order to maintain smooth UV-space curves. In the majority of cases, this is the desirable way to treat UVs. However, there are cases where strict UV layouts (such as when UV tiles are aligned to quads) need to be preserved and not smoothed. For this reason, Redshift supports enabling/disabling UV smoothing.

 

Minimum Edge Length (M.E.L.) controls when polygons are subdivided based on their edge length. If a quad or triangle has an edge that is longer than the Minimum Edge Length then it will be subdivided either until the Maximum Subdivision level is hit or until the edge is shorter than the M.E.L.. When the Screen Space Adaptive option is enabled (Screen Space Adaptive subdivision), the edge length is measured in pixels. When the Screen Space Adaptive option is disabled (World Space subdivision), the edge length is measured in scene units.

Lower values result in more subdivisions while higher values result in fewer subdivisions. When the M.E.L. is set to 0 tessellation will continue until it hits the maximum allowed subdivision level. When using Screen Space Adaptive tessellation there is an internal minimum limit of 0.5 pixels, this can result in polygons not actually reaching the Maximum Subdivision level. However, when using World Space subdivision, a M.E.L. of 0 will always hit the Maximum Subdivision level. Regardless of the subdivision mode, it is extremely important that the Maximum Subdivision level is set carefully otherwise render times may increase exponentially. Determining the right balance between polygonal density and render time by optimizing the Minimum Edge Length for your scene is an important step.

In the examples below you can see the difference in behavior between Screen Space Adaptive and World Space subdivision. The scene is comprised of five identical cubes measuring 4x4x4 scene units, each with only 6 polygons before any subdivision takes place. Since the Minimum Edge Length in Screen Space mode is measured in pixels note how polygons closer to the camera are consistently subdivided more often than polygons in the distance — this is common behavior as polygons nearest to the camera tend to have longer edges. However, as the Minimum Edge Length gets closer to 0 even the distant polygons reach the same level of subdivision since most edges now measure longer than the very short M.E.L..

By comparison, in World Space mode, the cubes changes subdivision levels at the same time since each cube is exactly the same size and Minimum Edge Length is calculated in scene units. World Space mode is the best way to hit specific subdivision levels consistently regardless of where the object is in the scene but this behavior also makes it easy to subdivide distant objects more than necessary, potentially wasting memory and render time in the process.

Minimum Edge Length: 0 - 35 (pixels)
Screen Space Adaptive: Enabled
(Screen Space Subdivision)
0 - 2 (scene units)
Screen Space Adaptive: Disabled
(World Space Subdivision)

 

Next is a demonstration of Screen Space Adaptive and World Space subdivision with a ground plane using Vertex Displacement. On the right side of the screen is a wireframe overlay and a pink object that matches the current size of the Minimum Edge Length. In the Screen Space example there is a pink square that matches the M.E.L. in pixels from 0 - 30, and in the World Space example there is a pink cube that matches the M.E.L. in scene units from 0 - 0.5. The transition between subdivision levels is clearly visible in the Screen Space example, it moves up and down the ground plane from the large polygons in the foreground to the small ones in the background due to perspective. In the World Space example all of the geometry updates at the same time since the ground plane is made up of equally sized quads.

Minimum Edge Length: 0 - 30 (pixels)
Screen Space Adaptive: Enabled
(Screen Space Subdivision)
0 - 0.5 (scene units)
Screen Space Adaptive: Disabled
(World Space Subdivision)


Sets the limit on the highest number of subdivision passes that can be applied to a tessellated object.

Subdividing a mesh happens in 'passes.' Each pass turns a single quad or triangle into four quads or triangles respectively and each pass is applied to the result of the previous pass.

For example:

The number of polygons can grow very quickly so the Maximum Subdivisions parameter should only be set as high as necessary for the look that you need. Sometimes increasing Maximum Subdivisions by just one level can make a frame take four times longer to render than the previous level or you might run out of system memory and not being able to finish rendering the frame at all. So if you took a mesh made up of 1,000 quads with a Maximum Subdivisions level of 8 it would become a 65 million quad mesh. (warning) This could take an extremely long time to generate and would consume lots of memory! For this reason, great care has to be applied when setting the Maximum Subdivisions and balancing the results with the Minimum Edge Length.

Max Subdivisions: 0 - 4 0 - 7

 

Only compatible with Screen Space Adaptive subdivision.

Out of Frustum (O.O.F.) Tessellation Factor allows objects that are outside the camera frustum (i.e. objects outside the camera view that are not directly visible) to be subdivided to a lesser degree. Higher values result in less subdivision outside of the camera frustum, while lower values result in more subdivision outside the camera frustum. As a result increasing the O.O.F. Tess. Factor can help save memory and reduce render times by performing fewer subdivisions on objects that are potentially less visually important. However, sometimes an object might be outside the camera frustum but still perfectly visible in a reflection or the object might be casting a well-defined shadow within the camera frustum. For such objects, lower values should be used and an Out of Frustum Tessellation Factor of 0.0 disables this optimization entirely. Additionally, the Minimum Edge Length parameter has an impact on O.O.F. subdivision too — lower Minimum Edge Length values push O.O.F. subdivision closer to maximum subdivision levels which reduce the effectiveness of this option, in such a case consider capping the O.O.F. subdivision level with the Limit Out Of Frustum Tessellation options.

In the examples below, a blue cube placed just outside of the camera view can be seen reflected in a mirror, note how subdivisions increase as the O.O.F. Tess. Factor gets closer to 0 in the first example but don't change at all while the Minimum Edge Length is set to 0 in the second example. Generating fewer subdivisions is more efficient as long as the result does not negatively impact the look that you are after.

O.O.F. Tessellation Factor: 0 - 50
Minimum Edge Length: 30
0 - 50
0

 

In the previous examples you may notice how the upper left part of the cube always remains more highly subdivided, this is because that part of the cube is closer to the camera frustum bounds than the rest of it. In the example below you can see how moving the cube farther away from the camera reduces the subdivision level.

O.O.F. Tessellation Factor: 30
Minimum Edge Length: 30

 

This effect can also be illustrated on a tessellated and displaced ground plane. Take the following scene with a single quad and Vertex Displacement, the camera is tilted down toward the plane from a close position. In the example images below the scene was rendered once from the camera, then the tessellation was frozen in the Render View, and the camera was pulled back to see the still frozen effect of the tessellation outside the camera frustum. As you can see, the polygons inside the camera frustum, outlined by a pink border, are tessellated the most. Polygons that are farther away from the camera frustum are subdivided less based on the Out Of Frustum Tessellation Factor.

O.O.F. Tessellation Factor: 0 - 40 Test scene render
(for reference)

 

When the camera is close to an object with Vertex Displacement you should be careful with the Displacement Max value because it is used to determine if a polygon is inside the camera frustum or outside of it. This is necessary because a polygon with high displacement might start outside the camera frustum before displacement but end up inside the frustum after displacement. Without this consideration the polygon would not receive the tessellation it needs to look right. When Displacement Max is too high Redshift might incorrectly "think" too many polygons are inside the camera frustum leading to a lot of subdivision outside the frustum.

In the example below, the Displacement Max value is animated from 10 to 100. 10 is the highest value necessary for this scene and raising it any higher than that results in unnecessary tessellation outside the camera view. This is a waste of resources and render time since those polygons are not visible which is why it is important to set Displacement Max only as high as necessary. If you need a high Displacement Max but are generating lots of unnecessary subdivisions off screen the Out Of Frustum Limit can be enabled and the polygons outside the camera view can be capped at a lower subdivision level as demonstrated in the last image.

Displacement Max: 10 - 100
Out Of Frustum Limit: Disabled
Max O.O.F. Tess Subdivs: 3
100
Enabled
3

 

Only compatible with Screen Space Adaptive subdivision.

When Limit Out-Of-Frustum Tessellation is enabled, you can specify the highest number of subdivision passes that can be applied to objects outside the camera frustum with the Max Out-Of-Frustum Subdivs option. This setting is useful when increasing the Out-Of-Frustum Tessellation Factor still results in excessive subdivision. This condition can happen when the mesh is using Vertex Displacement that has a very high displacement scale. For a more detailed discussion on this, please see the relevant section below.

In the examples below, a blue cube placed just outside the camera view can be seen reflected in a mirror and the camera pans over until the cube comes partially into view. In both examples the cube has a Maximum Subdivision level of 4 and a Max Out of Frustum Tess. Subdivs level of 2. Note how the subdivision level does not change when Limit Out of Frustum Tessellation is disabled. However, when Limit Out of Frustum Tessellation is enabled the subdivision level changes depending on whether the cube is visible in the camera frustum or not. When the cube is directly visible the reflection of the cube also illustrates the higher subdivision amount and when it disappears from direct view the cube is limited by the lower maximum subdivision level

Limit O.O.F. Tessellation: Disabled (default)
Maximum Subdivisions: 4
Max O.O.F. Tess. Subdivs: 2
Enabled
Maximum Subdivisions: 4
Max O.O.F. Tess. Subdivs: 2

 

In the next example, you can see the result of applying an Out of Frustum Limit to an off-screen object casting a shadow on a plane in the camera view. When Limit O.O.F. Tessellation is enabled a five-sided torus is limited to 0 subdivisions resulting in a very jagged shadow compared to the smooth torus when it is disabled and allowed to subdivide up to the Maximum Subdivision level of 4.

Limit O.O.F. Tessellation: Disabled (default)
Max O.O.F. Tess. Subdivs: 0
Maximum Subdivisions: 4
Enabled
Max O.O.F. Tess. Subdivs: 0
Maximum Subdivisions: 4

 

Only compatible with Screen Space Adaptive subdivision and Limit Out of Frustum Tessellation.

Sets the limit on the highest number of subdivision passes that can be applied to objects outside of the camera view.

In the examples below, a blue cube placed just outside the camera view can be seen reflected in a mirror and the camera pans over until the cube comes partially into view. In both examples the reflected cube can be seen matching the subdivision level of the part of the cube when it is directly visible, however, the off-screen part of the cube is subdivided less based on the Max Out of Frustum Tess. Subdivs value.

Max O.O.F. Tess Subdivs: 3 1


Reference

Reference geometry is important for texturing objects when deformations are applied. When a reference object is not found or specified, textures can swim through objects as they are deformed. The Source parameter sets the reference behavior from the following options:

In all cases the reference object must have the same topology as the object the tag is applied to. If not, the reference is ignored.

 

When Source is set to "Object" the reference can be manually specified here.


When Source is set to "Capture" the reference object can be set by hitting the "Capture" button which uses the state of the currently selected object as the reference.

Polygon information for the currently captured object is printed below the Capture button.