Making Fur with MTOR


Thistles, stem fuzz, and carpeting all created by the uncanny mtorFur.

Using mtorFur

mtorFur is the plugin of choice if you don't have Maya Fur, or don't want to use it for some reason; if you do have Maya Fur, you should use mtorUltraFur instead as it's much more powerful. Source code for this plugin is provided in the devkit/examples/ribgen subdirectory of your RAT installation and if you're a developer without access to Maya Fur, it may be worthwhile examining how mtorFur works in order to customize it for your own needs. In particular, for reasons of keeping the interface simpler, some of the things that you could do with the plugin are not enabled in the mtorFur interface, but can be easily exposed (for example, noise and map controls over every parameter).


Creating Fur
Step #1 
Check the Geometry. 
   At the moment, mtorFur must be attached to NURBS or subdivision surfaces. It will not work when attached to polygonal meshes.


A naked sphere.


Step #2 
Import and attach mtorFur.
   Import mtorFur into a Slim palette. The specific name of the RIB Generator to import is mtorFur.so on Unix, or mtorFur.dll on Windows, and it should be located in /lib/plugins/ under your RAT installation directory. The mtorFur RIB generator can now be attached to the geometry like an ordinary surface shader. Note that mtorFur only adds fur to an object, and it will not affect the color of an object's surface. Attach a surface shader in addition to mtorFur to define the color and texture of the surface of the object.


Importing the RIB generator.


Step #3 
Configure mtorFur.
   Once mtorFur is attached to an object, it needs to be configured. mtorFur needs to output temporary files during the RIB generation process, and it is necessary to provide a filename for the output file. Usually, the default filename ($PROJ/rmantmp/mtorFur.$o.$F4) will be fine - this will result in the temporary files being placed in the rmantmp subdirectory of your project.

If you render the scene now, you should see some ugly purple fuzz growing from your NURBS.



The striking purple stubble default. 



 Step #4 
Tweak Parameters.
   The next step is of course to change the short purple fuzz to long curly hair. By editing the parameters of mtorFur, you can create a wide variety of different looks. The density of the fur can be defined in U and V parametric space. The width, color, opacity, and curl of the base of the fur can be defined independently from the settings for tip of the fur. Scraggle can be added to the fur, and the fur can also be made to lean over. Simple scripts can be added to mtorFur parameters in order to animate the fur over time, to create waving fur, for example.


A product of fiddling.


A Closer Look at the mtorFur Parameters:
Note that many of these parameters function in the same way as the Maya Fur parameters, in order to mimic the functionality of the mtorUltraFur plugin, which is why some of these parameters have nonintuitive numeric ranges.
 FileName - the file name for temporary fur data. The default value of $PROJ/rmantmp/mtorFur.$o.$F4 is usually sufficient, since it stores files under the current project and names them according to the object the plugin is attached to. 
 CleanupFile - causes fuzz files to be immediately removed after use. This should be disabled when shadow maps are evaluated as separate jobs, with sub-frame chunking, otherwise cleanup will be performed after the shadow pass and *before* the final render. Undesirable.  
LazyEvaluate - if a fuzz file exists, it will be used rather than regenerated. Only meaningful when OutputToFile is enabled. 
 FurInU - the number of hairs to generate per unit measure in the u parametric direction of your NURBS. 
 FurInV - the number of hairs to generate per unit measure in the v parametric direction of your NURBS. 
FurPlacementJitter - the amount of randomness applied when choosing a location to emit hair. If set to 0, hair will be evenly spaced; if 1, hair will be fully jittered within a cell the size of which is determined by the FurInU and FurInV parameters. 
 FurJitterSeed - a seed value for the randomization parameters. Typically you'll want this constant over an animation for a particular surface. 
 CastShadows - toggles whether your hair will be rendered into shadow maps.
 FlipNormals - if your hair appears to be nothing more than specks on the surface, it may be because they're actually growing on the wrong side of the surface. In that case you can toggle this option to flip the direction in which they grow.
UseRATFuzz - controls whether to attach the ratFuzz surface shader to the hairs. Use the six parameters below to control the shader. 
 FurBaseColor - the color at the root of the hairs. 
 FurTipColor - the color at the tip of the hairs. 
 FurSpecColor - the specular color of the fur. 
 FurKa - when using the RAT fuzz shader, this parameter modulates the effect of ambient light. 
 FurKd - when using the RAT fuzz shader, this parameter modulates the effect of diffuse light. 
 FurKs - when using the RAT fuzz shader, this parameter modulates the effect of specular light. 
 FurRoughness - controls the spread of the specular highlight. 
 FurSegments - the number of segments for each hair. mtorFur uses Catmull-Rom splines as opposed to linear segments to draw each hair, so you will not require a large number of segments in order to create smooth hair. However, if you want to have your hair change direction frequently (with a high FurScraggle parameter), then you will require more segments.
 FurLength - the length of each hair, in object space coordinates. (Note: currently this is not in world space coordinates, unlike Maya Fur. If you need to match a Maya Fur length, you will need to freeze the transformation on the underlying NURB surface.) 
 FurBaldness - this is another control over hair density. When set to 1, there is full hair density (as determined by the FurInU and FurInV parameters). When set to 0, the surface is completely bald. 
 FurInclination - the "tilt" of the hair. 0 means fully erect along the normal, and 1 means the hair inclines along the U tangent.
 FurPolar - the "direction" of the hair inclination. If FurInclination is 0, the hair points along the normal and you won't notice the effects of changing the Polar setting. Otherwise, the inclination will be along the U tangent if the polar is set to 0.5 (the default). Setting polar to 0 means a -180 degree rotation, while 1.0 means a +180 degree rotation.
 FurBaseOpacity - the opacity at the base of the fur.
 FurTipOpacity - the opacity at the tip of the fur. For a thin fur like appearance try setting the tips to be slightly transparent.
 FurBaseWidth - the width of the base of each hair, in object coordinates. 
 FurTipWidth - the width of the tip of each hair. 
 FurBaseCurl - the amount of curl in the hair at the base. By default (0.5) the hair does not curl. If you set this to 0, the hair will do a half-circle curl at the base to one side; if set to 1, the hair will curl the other way.
 FurTipCurl - the amount of curl in the hair at the tip. By default (0.5) the hair does not curl. If you set this to 0, the hair will do a half-circle curl at the tip to one side; if set to 1, the hair will curl the other way.
 FurScraggle -The scraggle of your fur. Scraggle causes your fur to randomly change direction with each segment. When set to 0, the fur will be straight; when set to 1, the new direction is very random, causing a very scraggly look.



 


 
 


Using mtorUltraFur

mtorUltraFur is the preferred plugin if you have Maya Fur. Not only does it automatically use Maya Fur data (allowing the use of Maya for visualization for your fur), but it is also more efficient to render than mtorFur. Rather than writing all hairs at RIB generation time to very large RIB files, mtorUltraFur will take advantage of the mtorFurProcedural plugin which runs at rendering time automatically. This allows the renderer to take advantage of bounding box information in order to avoid the expense of actually rendering hair unless truly necessary.

Again, if you're a developer, source code for both the mtorUltraFur RIBGen plugin and the mtorFurProcedural hair DSO is provided in the devkit/examples/ribgen subdirectory of your RAT installation.


Step #1 
Check the Geometry. 
   Like mtorFur, mtorUltraFur must be attached to NURBS or subdivision surfaces; it will not work properly with polygonal meshes.


Step #2 
Set up Maya Fur attributes and attractors.
   Set up your scene with Maya Fur attributes. Typically this means you attach a Fur Description to the geometry, edit the attributes of the Fur Description, and attach and edit Fur Attractors as needed; you can also use Maya Artisan to paint fur attributes.


A NURBS plane with Maya Fur combed in Artisan.


Step #3 
Perform a Maya Fur Advanced Fur Rendering.
   Now, you need to have Maya Fur export some data files. Open the Advanced Fur Rendering dialog box, which can be accessed from the Fur menu, and make a note of the "Put Fur Files here" directory; you will need to tell mtorUltraFur about this directory in the next step. You will only need to create "Fur Files", so select that option, and then push the "Create Files" button.

   The Maya Fur renderer should now create a set of text files which describe the fur descriptions and fur attractors in your scene. It will also create .IFF texture files which describe baked fur attributes (including data painted with Artisan). mtorUltraFur will use all of these files in order to generate fur for RenderMan. You need to repeat this step every time you change an attribute of the fur description or attractor set in order for mtorUltraFur to pick up the changes correctly.



The Advanced Fur Rendering dialog box.


Step #4 
Import and attach mtorUltraFur.

   Import mtorUltraFur into a Slim palette. The specific name of the file to import is mtorUltraFur.so on Unix, or mtorUltraFur.dll on Windows, and it should be located in /lib/plugins/ under your RAT installation directory. The mtorUltraFur RIB generator can now be attached to the geometry (to which the fur description has been attached) like an ordinary surface shader. Like mtorFur, note that this plugin only adds fur to an object, and it will not affect the color of an object's surface, so attach a surface shader in order to define the color and texture of the surface of the object.


Step #5 
Configure mtorUltraFur.

   You now need to configure the mtorUltraFur settings. Again, like mtorFur, mtorUltraFur needs to output temporary files during the RIB generation process, and it is necessary to provide a filename for the output file. Usually, the default filename ($PROJ/rmantmp/mtorFur.$o.$F4) will be fine - this will result in the temporary files being placed in the rmantmp subdirectory of your project.  

More importantly, you will need to ensure that the RenderFile setting matches the directory in which the Advanced Fur Rendering process placed its files.



Step #6 
Deep Shadows.

The quality of shadowing fur can be dramatically improved by enabling "Deep Shadows" in the Shadow Map parameter "Shadow Type," and when shadowing volume-like materials (such as fur) set the "Volume Interpretation" parameter to Continuous.

To cause fur to cast shadows, enable "Cast Shadows" in UltraFur. It's not surprising that calculating shadows for fur is more expensive than not.

Note: The parameter "Cleanup Files" should be disabled when shadow maps are evaluated as separate jobs, with sub-frame chunking, otherwise cleanup will be performed after the shadow pass and *before* the final render. Undesirable.


 


Step #7
Render.

   You should now be able to do a render with RenderMan and see the fur attached to your surfaces. If tweaks are necessary, make sure that you remember to redo a Maya Fur Advanced Render if you change a Maya Fur attribute.
  


The results of mtorUltraFur


A Closer Look at the  mtorUltraFur Parameters:

You'll notice that the number of parameters in mtorUltraFur is a lot less than in mtorFur. This is because the values for these parameters is grabbed directly from data written by the Advanced Fur Render from Maya. In addition, mtorUltraFur will automatically take into account Maya information about noise, attribute maps, and fur attractors (of any type) when computing the output fur.
 Most of the other parameters remain unchanged between mtorFur and mtorUltraFur, although you should be aware of some details about the integration with Maya Fur:
 FurInU, FurInV - the number of hairs to generate per unit measure in the u and v parametric direction of your NURBS. mtorUltraFur ignores the density attribute of the fur description. 
 FurBound - generally, this needs to be set to the maximum length of your fur. This information will be used to compute a bounding box, which is necessary for the renderer to accurately invoke the mtorFurProcedural plugin at render time to compute the fur information. If you are getting large square pieces missing from where your hair should be, chances are that your FurBound is set too low.
 FurRoughness - controls the spread of the specular highlight. At the moment, mtorUltraFur ignores the Maya Specular Sharpness attribute. 
 FurSegments - the number of segments for each hair. mtorUltraFur ignores the Maya Segments attribute because mtorUltraFur uses Catmull-Rom splines as opposed to linear segments to draw each hair. Therefore, you can usually use less segments than required in Maya Fur to create smooth hair. However, if you want to have your hair change direction frequently (with a high FurScraggle parameter), then you will require more segments.
 RenderFile - specify the directory in which the Maya Fur Advanced Render places its files.



 

 


Current mtorUltraFur limitations:

  • The scraggle frequency and scraggle correlation attributes are not yet supported.

  • Several Maya Attractor attributes are not yet supported, including: Power, Influence, Start Length, End Length, and Threshold Length.

  • The noise implementation used in mtorUltraFur is different from that used in Maya Fur. As a result, you should not expect any fur attribute which make use of noise to necessarily match the computations from Maya Fur.

  • mtorUltraFur differs significantly from Maya Fur in its interpretation of the behaviour of attractors over hair. We believe that our implementation better follows the "spirit" of their documented intended behaviour, but in many cases this can be quite different from the way in which Maya Fur behaves.

  • Maya Fur equalizer maps are not supported. This means that the density of mtorUltraFur's output will vary with uneven surface parameterizations.


 
 

Pixar Animation Studios
(510) 752-3000 (voice)   (510) 752-3151 (fax)
Copyright © 1996- Pixar. All rights reserved.
RenderMan® is a registered trademark of Pixar.