Houdini 20.0 Rendering

Render quality and speed

On this page

In addition to the controls below, mantra gives you specific controls for volume rendering quality. See rendering volumes for information specific to volumes.

General quality controls

The parameters on the mantra node’s Rendering ▸ Sampling sub-tab are the most important for increasing quality (or decreasing quality to speed up rendering).

  • The Rendering ▸ Sampling ▸ Pixel samples property is the global baseline quality control for mantra rendering. This is the minimum number of rays fired to shade each pixel. Increasing this, for example from 3×3 to 5×5, will increase the overall quality of the render.

    (This property has two numbers – 3×3 instead of just 3 – for mostly historical reasons. Just increase both numbers at the same time to increase quality.)

    The practical upper limit for pixel samples is probably 12×12, for surfaces with displacements, very fine details, motion blur and depth of field. Otherwise, 5×5 or 6×6 is usually sufficient.

  • Set pixel samples just high enough to resolve small details in the image – this represents the “fixed” image-wide rendering cost. Then, turn on Ray variance anti-aliasing.

    This makes mantra loop, firing extra rays to get extra shading samples if necessary until the variance is less than or equal to the allowed noise level, or until the Max ray samples. Turn up Max ray samples for more rays in problem areas.

    You can export the direct and indirect ray samples (the number of times this loop ran for a given pixel) as an extra image plane. This lets you identify slow areas of the image.

  • You can add sampling properties to an object to get separate per-object pixel settings. This lets you specify very high ray samples for a single “hero” or problematic object instead of increasing pixel samples globally. Note that the pixel samples cannot be changed on a per-object basis - only the ray samples.

  • Rendering ▸ Dicing ▸ Shading quality multiplier controls the amount of refinement. In PBR and raytracing, this can increase fidelity of very fine geometry detail. In micropolygon rendering, this increases shading resolution.

  • You can increase the limits on the mantra node’s Rendering ▸ Limits tab to increase the maximum number of rays shaders can send. This will usually increase the shading quality.

    To get irradiance (let light bounce into dark areas), add an Indirect light and turn up the Diffuse limit. This allows more diffuse bounces, increasing the realism. However setting the diffuse limit greater than 4 generally has diminishing returns.

Decreasing PBR noise

  • While PBR rendering gives you shadows, reflections, irradiance, and so on “for free”, the drawback of its stochastic nature is noise. Even uniformly colored surfaces will render with subtle color differences between pixels.

  • Avoid judging PBR noise based on low-resolution test renders. The same amount of noise that looks bad at 640×400 will probably not be noticeable at 2K. Note that the default Noise level is 0.05, while analog film grain probably corresponds to a noise level of approximately 0.08.

  • There are two main controls on the mantra node for decreasing noise in PBR renders. Pixel samples and Noise level (on the Rendering ▸ Sampling tab).

  • As explained above, Pixel samples is a global control. Increasing it will increase the number of all kinds of samples in the renderer. Increasing it will decrease noise, but you should use it to set the accuracy (resolving geometry), and then use Noise level to specifically control noise.

  • Decreasing Noise level will… decrease the noise level. It forces mantra to keep sampling (sending out rays) until the variance is less than this value, up to Max ray samples times.

    This tends to increase render time in “problem areas” rather than globally. It helps in dark areas such as contact shadows that can have a lot of noise. However, decreasing noise level makes the render much slower.

    This setting is about how much noise you can live with. If you're doing “test” renders, you can jack it up. If you're rendering at very high resolution, the noise will be lost anyway (like film grain). If you're rendering overnight on a render farm, you can pay the brute force cost for a low noise level.

  • If you have bright speckles in PBR renders, try decreasing the Color limit on the Rendering ▸ Limits sub-tab. This decreases the maximum amount of light allowed in the system.

  • Remember that you can add properties to objects (and even primitives) to give them customized values for these properties. For example, you can set a lower noise level for an important object.

  • We recommend that you work in a linear color space (gamma = 2.2, more information). This helps makes the noise slightly less visible.

Managing memory

  • Use procedural shaders such as Mantra Delayed Load and Alembic Geometry to replace proxy geometry with more complex geometry at render time. Render full-resolution geometry in mantra archive format or Alembic format to allow mantra to demand-load small parts of the geometry file at a time.

  • When rendering on computers with different amounts of RAM (for example, a mix of new and older computers), you can set Rendering ▸ Render ▸ Cache limit to a percentage of physical memory instead of fixed size.

  • Micropolygon rendering: the Rendering ▸ Render ▸ Tile size property is by default low to prevent the renderer from using large amounts of memory. Houdini renders a tile at a time and throws away many per-tile structures between tiles to reclaim memory. So, if you have a lot of memory you can increase tile size to use more memory to render faster. (On a machine with tons of memory, you could calculate the tile size to make the number of tiles equal to the number of rendering threads for ideal performance.) This has little effect on ray tracing or PBR.

Optimization tips

  • By default, Houdini uses all processors to speed up rendering time. If you do not want to use all processors you can turn off the Use Max Processors checkbox on the Render sub-tab of the Rendering tab of the render node. Once this option is turned off, you can set the Thread Count to specify how many processors to use.

  • Reducing the Volume Step Rate (on the Rendering ▸ Sampling sub-tab mantra render node) speeds up rendering but decreases mantra’s ability to resolve fine detail in volumes.

  • If you are using either depth of field and/or motion blur you can try altering the Motion Factor value, which is located on the Dicing sub-tab of the Rendering tab of the mantra output node. This parameter controls the shading quality dynamically. Depending on the level of depth of field and/or motion blur, you can decrease the shading quality which will use less memory and result in faster render time.

  • With micropolygon rendering, each shader call will loop through all the lights illuminating the current mircopolygon in the volume, limiting the number of lights to look up will proportionally decrease render times.

    Additionally, having fewer lights generating and using deep shadow maps will also speed up render times. Deep shadows give you depth, so you may only want one or two lights with this option turned on, and the rest of the lights to not use shadows.

    Using the Environment Light from the shelf with your volume objects will slow down your volume rendering because each shaded micropolygon will cause an awful lot of rays to be generated due to the raytraced ambient occlusion. Manually controlling lights will give you more control and be less costly.

  • For lights that only affect part of the rendered scene, it is possible to speed up renders by enabling the Active Radius parameter on the light object and setting it to the maximum radius of effect for that light. When shaders are executed outside the active radius, they will ignore that light source entirely - improving rendering performance. This option is particularly useful for scenes with many small light sources, such as a scene with many outdoor street lights.

  • When you are rendering geometry with a certain amount of transparency, you can use the opacity limit to stop the current ray if the opacity threshold is met. The Opacity Limit parameter is located on the Limits sub-tab of the Rendering tab of the mantra output node.

    If used too aggressively, you will see flickering and strange banding in your volume over a sequence of renders if the camera is moving or the smoke is evolving. This is the varying opacity thresholds in the volume, which is most evident if your volumes are more wispy and transparent.

    By altering the Opacity Limit, you will only get a 1-5% decrease in render time. The default value is already pretty aggressive, so be careful to avoid adding unwanted artifacts.

  • Mantra specifically optimizes the rendering performance (both ray tracing and micropolygon rendering) for shaders that it knows are fully opaque. To improve rendering performance, ensure that opaque shaders either assign a constant {1,1,1} to the opacity (Of) VEX variable or that any shader/material parameters that would make the shader transparent are disabled.

  • Use velocity motion blur instead of deformation blur to reduce IFD generation time and size.

See also


Mantra user guide



Next steps


Other renderers