Hair Rendering

The purpose of this section is to give users a better understanding of how to render hair efficiently in Arnold. The key parameters that affect hair rendering speed will be explained and illustrated with rendering examples. General optimization tips and tricks will also be covered. The following tutorial covers aspects relating to both the Arnold curves shape node, and the Standard Hair shader.

Hair Rendering Mode

MtoA uses Arnold curves primitive to render hair. Curves can be rendered in three different modes: Ribbon, Thick, and Oriented. The following image illustrates the differences between them. In this document, only the Ribbon mode will be used, as it is the best mode for rendering thin hair/fur (the basis of this tutorial).

Hair rendering mode in Arnold attributes

Min Pixel Width (MPW)

The nature of hair or fur is that it is made up of a lot of very fine/thin strands. Typically the smaller something is in screen space, the more Anti-Aliasing (AA) samples is required to render it smooth and without flickering in animation, which makes rendering hair challenging. To make fur rendering easier on the sampling Arnold has introduced something called "Min Pixel Width" (MPW).

The concept behind MPW is to make extremely thin hair strands automatically thicker in screen space while at the same time making them transparent. This helps the hair strand to render smoother and with less flickering in animation even at lower AA settings. The MPW transparency will only kick in if the given hair is thinner in screen space than the specified MPW value; for example, if all the hair strands in the frame are more than 1 pixel wide and the MPW value is set to 0.5, no transparency will be used at all. If the camera, for example, starts to zoom out from that point thus making all the hairs thinner in screen space, as soon as they go below 0.5 pixels the MPW system will kick in and automatically keep the hairs 0.5 pixels wide while making them more and more transparent the thinner/farther away they get.

MPW accuracy depends largely on the auto transparency

In the images below we are using MPW values between 0 and 0.5. Note that when Transparency Depth is increased the hair is a lot smoother than before even with the same AA settings.

Note that even when Transparency Depth is set to 0, the hairs will always be at least 0.5 pixels thick in screen space, although they will not look transparent.

Min Pixel Width is also applied to the points primitive. But a motion blurred radius will disable its effect.

Transparency Depth

The number of layers of hair strands that will be made transparent depends on the Transparency Depth setting in the Render Settings. As illustrated below, adjusting this value has a great impact on both quality and render time. Setting the Transparency Depth to 0 will always disable MPW on all the hair in the scene.

Transparency Depth in the Ray Depth settings (Render Settings)

Note: MPW only works with hair in Ribbon mode.

The images below use an MPW value of 0.1. Note how the hair is still rather jaggy even with Transparency Depth set to 4. Using these values would require higher AA settings to produce smooth results:



Making the hairs transparent has a big impact on render times. For optimal rendering speed, it is very important to use sensible values. How smooth/slow hair renders depends on three things:

  • Min Pixel Width
  • Transparency Depth
  • Number of Specular Samples
  • Number of Camera (AA) Samples


The higher the Camera (AA) samples, the less you will need to rely on MPW to get smooth hair. If your scene is already using 10 Camera (AA) samples to get smooth motion blur and DOF, you can use a much smaller MPW value than if you were only using, for example, 4 Camera (AA) samples.

As mentioned above, MPW will have an effect even if Transparency Depth is set to 0, so it can be useful as a 'cap' for how small a hair is allowed to get even if you're not making the hair transparent, looking at the render times above thickening the hairs using MPW can have a positive effect on the render time when Transparency Depth is set to 0.

Many thanks to Jonathan Post for giving us permission to let us use their wolf model.