## Bathroom: Using noise in a displacement shader for Arnold

22 Jul 2014

The Creston Bathroom Model was created by Greg Ward, the original author of Radiance as part of a bathroom renovation project. Different materials and paints were used to give the bathroom various appearances, but we will focus on an Arnold rendering task regarding the shower door used in that scene. Here are two different perspectives where you can see parts of the shower door, rendered in Radiance:

Let’s first isolate the door to render a simpler scene with Radiance. The lighting isn’t that great, but we can see how a simple polygon is used to reflect light from a spherical light source as well as scattering the colors of geometry from behind the door:

Here is the part of the Radiance file which describes the polygon and the material being used:

This noise functions can actually easily be translated into an Arnold shader. I will not show the source code for the shader here, but the output of kick -info rad_noiseABC:

For all the Radiance patterns we have seen so far, we always modified an input color and used the standard shader for the actual material definition and rendering. So, instead of returning RGB values, we return a VECTOR, which can be used for displacements.

From the partial .ass file (Arnold’s scene description) above you can see how a polymesh can be converted into a Catmull–Clark subdivision surface, by simply adding values for subdiv_type and subdiv_iterations. So, let’s see how the number of polygons created by the subdivison scheme will influence the rendering of the displacement:

You can see how the polygon count influences the resulting displacement, even though it’s exactly the same shader with the same parameters. This behaviour of Arnold is very different from the Radiance renderer, so let’s increase the number of polygons even more:

I’m not showing the resulting polygons here (from the Catmull–Clark subdivision scheme), but I figured out that I get the best results for this noise based displacement shader, if I have a evenly distributed numer of polygons with approximately the same size. This can be seen best within Blender, by applying a subdivison modifier:

Don’t forget to remove the subdivison modifier before exporting because the subdivison steps should be done by Arnold, the renderer, not by Blender. But you can get a feeling for the distribution and amount of polygons by using temporarily a modifier before exporting the control mesh. Here the results of the displacement shader rendered by Arnold:

As usual the scene files are available in a repository.