

Written by Alexandru - Teodor Voicu, voicualexandruteodor@gmail.com.

A Furmesh is a set of 3D triangles that is used to create both hairs and furs on base meshes (currently only AnimatedMeshes are supported). Furmeshes can update their position based on physics or on the base mesh's animation, via the Furmesh Animation Control (see section Furmesh Animation). Defining complex shaders, that can have lookup textures, updated whenever needed, is done via the Furmesh Material Properties (see section Furmesh Material). You can find some other info about the Furmesh plugin on this blog: http://hairrendering.wordpress.com/.

There is also a HOWTO discussing the creation of furmeshes. See section Creating a Furmesh Mesh.

Basic Structure

The following SCF class names are used (for csLoadPlugin):


Factory State Interface

No attributes are specified in the current factory state implementation.

Factory Loader

No tags supported.

Object State Interface

‘iFurMeshState’ (residing in ‘CS/include/imesh/furmesh.h’) is the SCF interface that you can use to manipulate settings for a furmesh object. By using this interface you can access the material, blending mode (mixmode), and various other configuration parameters for a furmesh object.

Object Loader

Here is a list of all the tags supported by a furmesh object and their meaning:

Furmesh Data Structures

Because a Furmesh can update its geometry by being synchronized with various physics objects, such as Bullet ropes for hairs (which are computationally expensive), only a small part (less than 1%) of the geometry really has such an external object attached.

This lead to creating two types of data structures: guide furs, which always have a corresponding external object and fur strands, which have references to three close guide furs in order to update their position.

Guide furs are created on each vertex of the base mesh, the mesh on which fur will grow, and are never displayed, except only for debug purpose.

Fur strands are generated by iterating through the triangles specified by the base mesh and choosing three random barycentric coordinates in order to determine their position relative to three guide furs. The barycentric coordinates are used both to update the position of fur strands, using the guide furs and to generate UV coordinates.

Furmesh Geometry

In order to keep the number of geometry as low as possible, fur strands are represented as triangle strips that always face the camera, not as very thin cylinders like in reality. Because of the always facing the camera constraint, all the geometry related data from the Furmesh can be computed more efficiently, directly when updating the fur strands. This is the reason why the Furmesh doesn't have any methods to compute normals, tangents or binormals, or gives access to the iRenderBuffers.

Furmesh LOD System

Due to the high number of fur strands, a LOD system had to be used, especially when the viewer was further away from the Furmesh so that it could be rendered at lower quality. Apart from displaying fewer fur strands, the number of guide furs vary as well. In order to make this possible another type of fur structure had to be added, LOD guide furs, which on lower LOD settings act as normal fur strands, while on higher LOD act as guide furs. The methods that allow setting various LODs are: SetGuideLOD(), SetStrandLOD(), or SetLOD() which acts as an overall LOD function, calling both previous defined methods.


This document was generated using texi2html 1.76.