Refractive Caustics using the Sky Shader


With the correct setup, caustic effects are possible using Arnold. This short tutorial goes through how to setup a scene that contains a glass marble with Refractive Caustics enabled in the Standard shader assigned to it. The scene uses a Sky shader which is sufficient to 'light' the scene with GI Diffuse rays. However, this is a rare example to demonstrate the refractive caustic effect. It is generally recommended that you use a Sky Dome light to light an external scene.

'Hard' caustics from small but bright light sources (e.g., a spot light through a cognac glass) are not currently possible. 

Arnold uses simple, uni-directional path tracing. Rays start at the camera, not at the lights. Arnold does not use bi-directional path tracing (nor any other bi-directional technique, such as photon mapping, which fires rays from the lights). When using standard lights, like point lights and spot lights, which are idealized lights with zero area, i.e. point lights, it is simply impossible for Arnold's GI/reflection/refraction rays to hit the lights. Therefore, there are no caustics. However, it is possible to turn point lights and spot lights into finite-size lights by increasing their 'radius' parameter, which makes them spherical lights, which give beautiful soft shadows and soft highlights. It should then be possible for GI/reflection/refraction rays to 'see' those lights, right? Well, no. In Arnold, lights do not have a corresponding geometric object that's stored in the geometry database that rays traverse during ray-scene intersection. So, area lights are still invisible to GI/reflection/refraction rays. 


Instead of using Arnold's standard lights, you can create a Sky shader, connect a HDR map to it, and let the GI engine 'find' that light. You will then get caustics.

The scene file used in this tutorial can be found here (requires a HDR map).


Sky Shader

  • Start off by creating a Sky shader. Connect it to the Environment so that it renders in the scene.
  • Ensure that Visible in Refractions is enabled for the Sky shader, otherwise the caustic effect will not be visible through the glass.
  • Also ensure that Visible in Diffuse and Glossy are also enabled. This way the HDR map will 'light' the scene with Gi Diffuse rays and it will also be visible in the glossy reflections of the glass marble.
  • Connect a HDR map to the color of the Sky shader. Use a HDR map that has a high dynamic range light source, such as the sun. This will give us a better caustic effect.


  • Create a polygon plane and assign a Standard shader to it. This will be our floor plane on which we will see the caustic effect. 
  • Create a sphere and position it so that it sits on the plane in the center.

Glass Shading

  • Assign a Standard shader to the sphere that we want to generate the Refractive Caustics. We are going to make this a glass shader. Before we do that, we must first ensure that the Opaque flag is disabled. Select the sphere and disable Opaque in the Arnold attributes.
  • Lower the Diffuse value to 0. Increase the Specular Weight to 1 and lower the Specular Roughness to 0. Increase the Refraction Weight to 1 and change the IOR to that of glass (1.5)
  • Next we will add a colored tint to the shader. Add some color to the Transmittance color of the glass Standard shader.

Refractive Caustics

To see Refractive Caustics through our glass, we must enable them in the Standard shader that is assigned to our glass mesh. Caustics can be found below Emission in the Standard shader. Enable 'Enable Refractive Caustics.'


You can see the difference when enabling Refractive Caustics in the images below.


To reduce noise in the Refractive Caustics, you must increase the number of GI Diffuse SamplesThe images below show the difference between rendering Refractive Caustics with three and eight GI Diffuse Samples. Be careful when using this attribute as the render times will increase dramatically when you increase this value. 



That's it. You are ready to render. Have a go at rendering some other objects.


Final marble shader network

  • No labels