How to render caustics with the new caustics solver?

Starting with Corona Renderer 4, a new and vastly improved caustics solver is available, enabling effortless use of caustics in your scenes without having to use any additional experimental engines or composite the results into images in post-production (unless you need or want to, that is). 

The caustics effect is now calculated together with the final rendering and is much more accurate than ever before, let alone faster.


Caustics solver features

Since the new caustics solver is a one-click solution, you do not have to worry about anything more than your materials in order to get plausible caustics effects. 

At the moment, the caustics solver supports the following features:


  • Reflective and Refractive caustics. (Glass, water, and highly reflective metals etc).

  • Dispersion in refractive materials (useful for diamonds, crystals, etc).

  • Motion blur (the caustics effect will motion-blur correctly).

  • Separate render element for caustics effects - CShading_Caustics - allows adjusting and compositing the caustics effects in post.

  • Caustics work with both UHD Cache and Path Tracing.

  • Caustics from each light source will also be correctly adjusted by LightMix
  • Per-light control of caustics casting (you can define which lights cast caustics to cut render time if the caustics are not needed for certain lights)


There are, however, also currently some limitations:


  • Caustics may render slower/differently when using render regions (this will be improved).
  • Caustics inside volumes are still calculated the old way and are not accelerated by the new solver.
  • Refractive caustics still require having caustics enabled in the material. Reflective caustics do not.

  • Only Corona Lights will produce caustics (standard and photometric Max lights are not supported).

  • The new caustics use a Markov Chain Monte Carlo algorithm, which means each frame in an animation (or even rendering the same frame twice) will have a different pattern in the noise. To avoid flickering in animations, you will have to render a significant number of passes to ensure the solution has converged. 



How to render caustics?

1. Enabling the caustic solver

The new caustics solver can be enabled globally for a scene using just a single checkbox in the Performance tab of Render Setup:

Once the new caustics solver is enabled, Corona will calculate physically realistic caustics for any reflective materials and any refractive materials that have caustics turned on in the material itself.

Note: reflective caustics are always calculated, regardless of the state of the material’s caustics checkbox.


2. Reflective caustics

To render reflective caustics you will need:

  • A highly reflective material (reflective caustics do not require turning on caustics in the material)
    (a typical "metal" setup will work best - diffuse level 0, reflection level 1, Fresnel IOR at 10 or more).

(click to enlarge)

  • A light source (small, bright light will produce sharp, intensive caustics).

  • A surface which will catch the caustics (a ground plane, table top, etc.)

        See: how to set up realistic materials


3. Refractive caustics 

Rendering refractive caustics requires:

  • A refractive material with "Caustics (slow)" option enabled
    (typical glass setup - diffuse level 0, reflection level 1, refraction level 1).

(click to enlarge)

  • The refractive material cannot be using "Thin (no refraction)" option, as refraction is required to render caustics.

  • A light source (small, bright light will produce sharp, intensive caustics).

  • A surface which will catch the caustics (a ground plane, table top, etc.)

See: how to set up realistic materials



CShading_Caustics render element

With the new caustics solver comes a new render element - CShading_Caustics.

This render element allows you to separate the caustics effects from the render to facilitate better control over the effect in post-production.

To enable the CShading_Caustics render element, simply add it to the list of render elements as you would any other render element.

To ensure optimal compositing of the CShading_Caustics render element onto your final render, make sure you enable the “Only in caustics element” checkbox in Render Setup > Performance tab:

Turning on this checkbox will stop caustics from being visible in the final render’s beauty render element. They will, however, be visible in the CShading_Caustics render element and the render time penalty will still apply.

Left: Beauty pass with the caustics rendering disabled, right: the CShading_Caustics render element output of the same render.

The following is the above two images composited by adding the CShading_caustics render element on top of the beauty render element (“add” transfer mode in Photoshop):

Environment caustics and per-light control 

The caustics solver can also solve caustics cast by your scene environment, be it a CoronaSky map or a HDRI image.

Environment caustics are turned on by default and can be controlled by a checkbox on the Performance tab of the Render Setup dialog as shown below:

If the "Generate caustics from environment" checkbox is cleared, caustics will only be calculated from the scene lights and any environment maps will be ignored.

This is useful if your HDRI has a strong light source that you do not want to affect the caustics in the scene (for example, you are using a Corona Sun for the main light in the scene.

It is also recommended to disable caustics generated from the environment if you are matching a Corona Sun to a sun on the HDRI image as otherwise, caustics will be calculated for both the HDRI image's sun and the Corona Sun which can lead to incorrect results and longer rendering times as well as possibly overly blur the caustics effect.

Per-light control of caustics

You can define which lights do and which do not produce caustics effects by either turning on or off the "Generate caustics" checkbox in the light's properties:

All lights have "Generate caustics" enabled by default.

Disabling caustics in individual lights is useful in cases where you want to have a large-scale caustics effect, for example from a sun hitting a pool, but don't want to have a longer render time associated with calculating caustics from interior or exterior lighting on the building.


I can't see caustics!

Make sure that your glass material has the "Caustics (slow)" option enabled under refraction properties and that you are using Corona lights and not standard 3ds max lights or 3ds max photometric lights. 


My caustics are too dark!

The caustics solver calculates physically accurate caustics and so the intensity of the light will directly affect the intensity of the caustics effect.

My caustics are "cut off" in some places, and I can see triangular artifacts!

This can happen under very specific circumstances if the object generating caustics is partly outside of the current camera view. 

See this guide for solutions: [ link ]


My caustics look strange with AI-based denoisers (Intel, Nvidia)

Unfortunately, the AI based denoisers need to be trained to optimally denoise caustics and since the caustics solver in Corona is very new, there has not been enough time to train the denoisers. 

Denoising quality of the AI-based denoisers will improve in the future as we work with both Intel and Nvidia on training their respective AI denoisers.

The Corona high-quality denoiser works with caustics perfectly fine. 

See: how to use denoising?


My caustics progressively disappear, there are black spots visible on my rendered caustics!

In rare cases, caustics might start disappearing while the rendering progresses, or black spots might start emerging along with your rendered caustics. In cases like these, it would be prudent for Caustics Adaptivity to be disabled. Caustics Adaptivity allows for the caustic solver to not calculate very weak caustics in order to save computational resources. 

This option should only be disabled if the aforementioned issues are present. To disable it, first enable Devel/debug mode in Corona System settings in System Tab of 3ds max Render Setup (See also: Then navigate to Performance tab>Caustics solver settings and disable "Enable caustics adaptivity".

Note: this option is enabled by default.

Are there some other tips and tricks on rendering caustics?

  • Do not enable caustics “just for the heck of it”. Rendering with caustics enabled is still slower than rendering without them and unless it’s absolutely necessary, keep caustics to the minimum.

  • Enable dispersion for highly refractive materials to add realism (e.g. diamonds). Beware, this will slow the rendering further, more than just having caustics enabled.

  • Avoid using atmospheric effects like fog with caustics. Even though it is supported, it has not yet been optimized and may cause slowdowns and excessive noise in the current implementation since the old method of calculating in-volume caustics is still being used.




Image rendered at default render settings, with the new caustics solver disabled, for 30 minutes, with the "Caustics (slow)" option disabled for the glass materials, which means that no refractive caustics are visible, and transparent shadows are used instead. This is the compromise between rendering speed and realism. 


Image rendered with the new caustics solver. “Caustics (slow)” option in both reflective and refractive materials has been turned on. Both reflective and refractive caustics are visible and sharp. 30 minutes rendering time.