[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] | [ Search: ] |
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.
The following SCF class names are used (for csLoadPlugin
):
crystalspace.mesh.furmesh
crystalspace.mesh.loader.furmesh
crystalspace.mesh.loader.factory.furmesh
Objects in this plugin implement the following SCF interfaces, which you
can retrieve with scfQueryInterface
:
No attributes are specified in the current factory state implementation.
No tags supported.
‘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.
Here is a list of all the tags supported by a furmesh object and their meaning:
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.
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
.
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.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated using texi2html 1.76.