Geometry
|
|
| 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:
- Low-polygon meshes are easier to manage for animations
- The 3D program doesn't have to maintain large numbers of polygons in the scene which can be expensive on system memory
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 requires a good UV unwrap with no overlapping UVs.
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.
-
Vertex Displacement
- Advantages
- Best all around displacement type
- Supports Height field and Vector displacement
- Doesn't require a UV unwrap
- Can go out of core
- Disadvantages
- Slow interactivity
- High tessellation can be very slow
- Displacement quality is tied to mesh detail
- Requires more memory for equivalent Texture Displacement quality
- Advantages
-
Texture Displacement
- Advantages
- Great for adding detail to simple surfaces like walls and ground planes
- Fast interactivity
- Displacement is not tied to mesh detail
- Requires less memory for equivalent Vertex Displacement quality
- Disadvantages
- Requires a good UV unwrap and may reveal seams
- Complex shading features like SSS and Transmission can be very slow
- Baked textures can't go out of core
- Doesn't support Vector Displacement
- Advantages
Examples
Getting Started
The object Tessellation and Displacement options are part of the Redshift Object Tag. In the Object Manager, right-click on an object and select the Redshift Object Tag from the Render Tags category.
The Tessellation and Displacement settings are effective on the object that hosts the Redshift Object Tag as well as any child objects.
After selecting the tag, and navigate to the Geometry tab. To activate the settings check the Override option.
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 | |
Texture Displacement is great for adding detail to surfaces but it requires extra care to make sure everything works correctly. The most common issues that crop up when using Texture Displacement are covered below.
Split Normals
Texture Displacement, can run into trouble with complex geometry and even deceptively simple models. Take a cube, it poses a challenge because of split normals due to its 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 between the normals.
By default Redshift avoids this issue by using the "Smooth Normals" mode for the Edge Handling option, this overrides and smooths all surface normals when using texture displacement. Below is a default cube from Cinema 4D using texture displacement. The first image uses Smooth Normals which keeps the cube from splitting apart. The second image uses Vertex Normals and the default phong angle of 40°, seams appear between each side of the cube because of the split normals at each vertex. 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.
|
|
| Edge Handling: Smooth Normals Phong Angle: 40° |
Vertex Normals 40° |
When using the "Vertex Normals" mode there are two main options to resolve this, either adding support loops like a rounded edge or increasing the phong angle. Adding rounded edges works since it decreases the difference between vertex normals by spreading the angle transition across more vertices while increasing the phong angle just smooths out the vertex normals.
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. However, in the third example it's worth noting that the lack of subdivisions on the default cube can cause shading issues so adding some improves the result.
|
|
|
| Default Cube + rounded edges Phong Angle: 40° |
Default Cube 90° |
Default Cube + subdivisions 90° |
Overlapping UVs
The story of the default cube is not over because a good UV unwrap is very important for Texture Displacement. Adding rounded edges helped reduce the seams but there are still some prominent gaps in the mesh because of overlapping UVs. In Cinema 4D the default cube's UVs are all stacked on top of each other, this causes severe issues for Texture Displacement which is reliant on baking the displacement result to a texture. When UVs are overlapping a unique texture can't be baked for each 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 seams but the stretching is fixed and the seams are much less prominent.
|
|
|
|
| Default Cube + rounded edges UV Unwrap: Overlapping |
Default Cube + rounded edges Overlapping |
Cube + rounded edges Non-overlapping |
Cube + rounded edges Non-overlapping |
You have to activate this option to be able to use Tesselation or Displacement with this object.
The Tessellation and Displacement settings are effective on the object that hosts the Redshift Object tag as well as any child objects.
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.
- Off: Displacement is disabled for that object.
- Render Settings: Displacement is controlled by Global Displacement in Render Settings. (default)
- On: Displacement is enabled and controlled locally by the displacement settings on the object.
|
|
| 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 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 can make the biggest difference for objects that require heavy tiling and are already effectively unwrapped. 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 uneven and the cloth can be folded as long as the UVs themselves are ideal for seamless tiling.
Smart Bake only works well when using an object's UVs, not using procedural projections like Cubic and Triplanar. Smart Bake should be disabled if displacement issues are noticed.
In C4D, you can also use Smart Bake straight through the material tag without the need for a UV Context Projection node or the RS Object tag.
- Set the Material Tag to UVW Mapping
- Use the Material Tag's Tiling options
Requirements:
- Use UV Context Projection node in UV Channel mode (or Passthrough when already using an object's UVs)
- Use the Tiles U/V options in the UV Context Projection node
- Enable "Smart Bake" in the Redshift Displacement options at the object level
Note: 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.
-
With Smart Baking disabled the texture is tiled 10x10 times inside a 2k baked texture. This would greatly sacrifice displacement quality because the original tile has a resolution of 1k, so the most optimal bake resolution would be a 10k x 10k texture to account for all of the tiles.
-
With Smart Baking enabled the texture is baked once at only 1k because Smart Bake knows the source texture is only 1k. The baked result is then tiled efficiently 10x10 times, resulting in no loss of image quality, at effectively 10k x 10k resolution.
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.
Only used with Texture Displacement
Controls how surface normals are handled with Texture Displacement, this is helpful for dealing with holes that may appear on geometry with hard edges.
- Smooth Normals - (Default) Overrides and smooths all surface normals. This option ensures that holes do not appear due to split normals when using Texture Displacement.
- Vertex Normals - Uses the surface normals as set on a mesh. This option should be used for objects that need special attention, holes produced by split surface normals will need to be manually adjusted per-mesh.
|
|
|
| Edge Handling: Smooth Normals Normal Angle: 0° |
Vertex Normals 0° |
Vertex Normals 40° |
Objects with very few subdivisions between angle changes may look strange when using Smooth Normals. This happens because there are not enough vertices to smoothly transition across as the displacement angle blends between each normal. It can be fixed by subdividing the geometry, beveling corners, or adding support loops.
In the first example below, a cube with no subdivisions uses "Smooth Normals" for Edge Handling, this pushes the displacement out at an angle as it converges toward the nearest vertex. In the second example the corners are beveled, this gives the displacement more vertices to transition between which allows the displacement to push straight out on the flat sides.
|
|
| Smooth Normals with no subdivisions | Smooth Normals with beveled edges |
Fine surface details require very high tessellation levels or high bake resolutions 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. When using Vertex Displacement it may be possible to use less tessellation to achieve the same level of visual quality, or a lower Bake Resolution when using Texture Displacement.
- Off: Never use the displacement texture for additional bump mapping detail
- Displacement Only: Only use the displacement texture for additional bump mapping detail when the surface is actually being displaced.
- On: Always use the displacement texture for additional bump mapping detail.
When Auto Bump Mapping is set to "On", any connected displacement texture will add a bump mapping effect - even when displacement is disabled on the object.
This can be helpful when setting up materials that are used across a variety of situations. For example, sometimes the material might take center stage and require displacement, where as other times it may sit in the background and displacement would be a waste of performance. When the material is used in the background it still receives bump mapping even without displacement, and there's no need to wire up a separate bump map node just for that effect.
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. These examples use Vertex Displacement but the use case is the same for Texture Displacement.
In some scenarios, like when using extreme displacement scales, Auto Bump may result in artifacts and should be disabled.
|
|
|
| Auto Bump Mapping: On Max Subdivisions: 5 |
Off 5 |
Off 7 (for reference) |

