Fur Rendering

Many features have been added to make fur and grass rendering for Peach possible.

Strand Rendering

The internal renderer has been extended to render hair strands more memory efficient and faster, to make rendering of large amounts of fur and grass possible. This is done by storing the hair curves not as polygons, but only the key points, which are then converted to polygons on the fly. A second difference is the way transparency works. Rather than rendering them using the existing system,  all strand segments in a part are sorted front to back and rendered in that order.

This special strand rendering can be enabled with the Strand Render button in the the Visualization panel for particles. For good performance, the render steps button should be lowered (e.g. 2 should be good enough fur), since the result will be a smooth curve anyway. Also, using more render parts helps to reduce memory usage.

Note that these strand primitives cannot be raytraced at the moment.

Strand Shading

A number of options have been added to the Strand settings in materials:

  • Surface Diffuse: make use of normals from the mesh surface in the diffuse lighting calculation. This makes lighting the hair more similar to lighting a regular mesh, and is specifically intended for short hairs.
  • Dist: this option blends in the surface normal along the length of the hair. The distance is in blender units.
  • Use Blender Units: specify the width in blender units instead of pixels.
  • Width Fade: fade out alpha along the width of the strands for a softer look. 0.0 is no fading, and high values will fade out alpha quicker, with 1.0 being linear fading.

  

Strand Simplification

With a Hair particle system using Strand Render and child particles, a Simplification options are available. These options will reduce child hairs as the mesh faces gets further away from the camera, fading out hair strands. This can not only reduce render time, but also helps with aliasing issues seen with sub-pixel hairs. The width of the strands will be automatically increased according to the number of hairs that have been left out.

  • Reference Size: if the whole mesh on screen gets smaller than this, simplification starts. This size is in pixels. For example the default 1920 means the maximum number of child hairs is visible if the mesh takes up the full image in a HD render.
  • Rate: how fast to simplify. The default 1.0 means it will reduce such that the number of hairs/pixel stays approximately the same, lower values will reduce less.
  • Transition: the percentage of the hairs that fades out to avoid them suddenly disappearing. The default 0.1 means that at a given time 10% of the hairs will be have their alpha adjusted.
  • Viewport: hairs of faces outside of the viewport can also be reduced, since they will not be visible directly anyway, though they do still affect shadows for exampel.
  • Rate: same as above, how fast to simplify as the mesh faces get further away from the image border.

Creating Fur on Characters

This is an overview of the process to create fur on characters, as used in Peach.

Particle System

The first thing to do is set up a particle system with type Hair. To have full control the hairs will be manually edited, added and removed in particle mode, so the purpose here is to create a good initial distribution.

For the chinchilla, about 1000 hairs are used for the base layer. For fur the number of Segments can be set to about 5, more segments simply means there will be more points to control when editing the hair. The number of segments can also be rekeyed later on when editing the hair. A small initial Normal and Tangent velocity gives the hairs a first approximately right direction.

Parents and Children

A furry rodent has many more than a thousand hairs, but it is not inconvenient to control all of them. For this reason it is possible to grow child hairs based on the parent hairs. These hairs should be emitted from Faces, so that they are attached to the mesh, while still interpolating nearby parent hairs.

Separate Amount and Render Amount settings are available much like in the Subsurf modifier. The chinchilla has a 1000 child hairs per parent for rendering, resulting in about 1 million hairs. To give variation to the child hairs, the Roughness settings for children are used.

Hair Editing

To edit the hairs manually, the particle system is set to be Editable. After this operation the distribution and velocity cannot be controlled with the particle system settings anymore, but instead modified with the particle mode tools.

In particle mode there are path, point and tip select modes available to select hairs and their controls, along with the typical edit mode tools like moving, rotating and scaling, proportional editing. By default hairs while preserve their length and root position, and avoid intersection with the emitter mesh. In addition to that various brushes like comb, puff or add are available.

Symmetry

To create symmetric hair distributions, particle mode has a mirror editing tools. Note that any mirror modifiers for the mesh must be applied before editing the hairs, and that the mesh still be symmetric.

After the particle system is set to be editable, in particle point select mode, select half of the hairs and delete them. Then select the remaining half and use the Mirror tool to mirror the particles across. Then enable X-Axis Mirror Editing to automatically mirror any edit to the other side of the mesh.

Further Control

More control over the child particles can be achieved with either vertex groups or textures. For a number of properties like Density, Length, Clumping, Roughness, .. a vertex group can be assigned. Additionally texture slots in the material used by the particles can be mapped to properties similarly, by pressing the PAttr button in the material Map To settings.

A single mesh can have multiple particle systems. The chinchilla for example has a Base and Scruffy layer, and separate system for the Tail and Whiskers. Each particle systems then has it's own settings and materials.

Strand Rendering

When rendering millions of hairs, rendering performance and memory usage can become a problem. For Peach a new Strand primitive was added that only stores the curve control points and then converts it into polygons on the fly. This can be enabled with the Strand Render option. Note that to save memory, for fur the Render Steps option can be set quite low, for example the chinchilla has it set to 2 for the Base layer. The Strand primitive can efficiently render with transparency enabled and saves shading time by only shading the control points of the curve, but it does not support some rendering features like raytracing. The Strand options in the material provide control over the width and shape of the hairs.

Fur Materials

Hair is notoriously hard to light, but for fur we can make some simplifying assumptions. A new shading option was added that makes lighting the fur more like lighting the mesh, by using the normals of the mesh surface for the Hair. The Surface Diffuse option enables a diffuse shading model designed for fur, and the Distance option next to it defines how far the mesh surface normal is used into the hair. For specular the existing tangent shading can be used.

While using the all the hair polygons would be prohibitively slow for raytracing, the new Approximate Ambient Occlusion supports transferring the occlusion from the mesh surface to the Strand primitive, which for short hairs looks gives a reasonable approximation.

Fur Texturing

The hairs can be textured with texture coordinates from the mesh surface. For example the mesh can be UV mapped and texture painted and set up like a regular material, and the hairs will then inherit this color from the mesh.

Additionally textures can be applied along the length of the hair with the Strand option for Map Input. Often a Blend texture is used for this, for example to fade out the alpha along the length. It can also be used to texture the base or the tip of the hair by using a Blend texture as a stencil.

Simplification

As a character get smaller on the screen, the hairs become smaller than a pixel. This not only means that rendering is slower than necessary, since it is not even possible to see all the hairs, it also leads to aliasing issues. Blender can automatically reduce the number of hairs, however it requires careful tweaking.

First, the Child Simplification option for particles reduces the number of child hairs as the mesh gets smaller on the screen. The Reference Size in pixels indicates at which size the character should have the maximum number of hairs, after which it starts fading out hairs. The Rate and Transition options respectively indicate how fast it should remove hairs, and how long the transition for fading out hairs should be (to avoid 'popping').