Back to plugins

Fur for AC3D


Latest release
Download Windows version 1.0.1
Download Linux version 1.0.1 (Ubuntu)*
Download Linux version 1.0.1 (RedHat/Fedora)**
Download source code 1.0.1

* NOTE: tar'ed/gzip'ed version courtesy of Nico De Ranter, this Linux version was compiled and linked on a Ubuntu 5.10 install using gcc version 4.0.2. If this does not work for you, the source code has been proven to compile/link under Linux, so you may wish to download the source code and compile for your system.

** NOTE: Courtesy of Eldon Brown, this is a Linux version for RedHat. From the enclosed Readme:
This port of "fur" was compiled on RedHat 7.3 with gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-113).

It has been tested and known to work using "ac3ds" (ac3d static) on RedHat 7.3 and Fedora 3.0

To install; copy "fur.p" and "fur.tcl" to the ac3d plugin directory, then restart ac3d.

Tutorials available here and here.


Version 1.0.1

  • Added option to save fur generation settings to a fur object's Data property. If checked/enabled, the settings you used to generate the fur will be saved as part of the new fur object in the "Data" field. This is useful if you want to go back and see how you originally generated a fur object. The "Data" property is viewable in the AC3D Object Property editor. This data should not interfere with POV-Ray.
  • Reversed Gravity effect to work properly. For example, setting the "Y" Gravity to -20 in version 1.0 caused strands to move "down" along the negative Y axis. Since we're expressing this in terms of a gravity force, a negative number should actually cause the strands to move "up" along the positive Y axis. This now works properly.


Fur is an AC3D plugin that allows you to create a variety of fur-like geometries, including fur, hair, grass, and possibly other objects.

Generates "strands of fur" on the selected surface(s). Fur may be composed of rectangles suitable for texturing with transparency, or may be composed of simple lines, or can be composed of strands with 3 or more surfaces around the circumference.

This plugin makes use of the "Extrude along path" source code by Andy Thaller, which is used to extrude 3D fur strands along the contour of the line-segment based fur/hair. This source code was included under the GPL license, and credit details are indicated within the appropriate source code headers.

This plugin and code are freely distributable under the GPL. Note that this differs slightly from my other plugins, which are released under the LGPL.

AC3D versions prior to version 5 have not been tested with this script.


Copy the fur.tcl and fur.p files to your AC3D plugins folder (for example, if using Windows, C:\Program Files\AC3D5\plugin) and (re)start AC3D.

You will find the "Fur..." menu item under the "Tools" menu.


Select some surfaces and select the Fur plugin. Fur will be applied to the selected surfaces based on user input.

You may texture fur created with two or more sides. Textures are applied such that the base of each strand is mapped to the bottom of your texture image, and the image is stretched to cover the entire strand.

A tutorial for the fur plugin has been designed to illustrate basic use of the fur plugin.


The interface options are as follows:

NOTE: Some parameters can be set above or below what the dials indicate - simply manually key in numbers to exceed default limitations.

Parameter Usage
Strands per unit Number of strands that will fit in a one by one square unit. Use larger numbers for thicker, more dense fur.
% random placement Fur strands are placed on a "virtual grid" with even spacing. Random placement allows fur strands to be spread around more naturally. The default value of 100% generally produces more natural looking placement of each strand. You can specify a number over 100% to get more unpredictable placement and offsets, or you can specify a number closer to zero for evenly spaced strands.
When randomizing strand locations on the face of a surface, the strand may fall outside the surface.
Segments per strand Fur strands contain one or more segments where the fur can bend/curve. More segments mean the fur will bend more naturally, but this also means it is more "pliable" and is affected moreso by the effects of gravity (see the gravity controls, below). A value of 3 to 6 is generally sufficient for most applications, assuming you apply subdivision to the resulting fur.
Strand length Length of each strand, expressed in units.
% random length Random percentage that each strand's length will be adjusted. If this number is zero, all fur strands will be the same length. 100% means the strands will vary randomly in length from the shortest possible strand to twice the length specified. Numbers over 100% are accepted, but any number from 5% to 25% is recommended for most applications.
Root depth Strands can be embedded beneath the surface to which they are applied. This is especially useful when generating polygonal fur (see "Sides per strand" below), as polygons corners may sometimes be seen where strands leave the surface at an angle. Think of this parameter as the length, in units, of a fur strand's root.
Maximum strands The maximum number of strands than can be applied at once. This parameter prevents an inordinately large set of strands from being created.
Remove duplicates (very slow) As the parameter name indicates, this is a very slow function --- it removes duplicate fur strands that may appear between adjacent surfaces. For most applications, the few duplicates that slip into fur generations will not be enough of an issue to force a duplicate removal. The number/placement of duplicates is so small as to be virtually unnoticeable --- it is usually only an issue when very few strands are generated.
It is therefore recommended that this feature only be used on fur patches with very sparse coverage.
Thickness Width of each strand, expressed in units. This only applies to strands with two or more sides (see "Sides per strand" below).
% random thickness Random variable width of each strand. If this number is zero, all fur strands will be the same thickness. 100% means the strands will vary randomly in thickness from the smallest possible width to twice the thickness specified. Numbers over 100% are accepted, but any number from 5% to 35% is recommended for most applications.
This parameter only applies to strands with two or more sides (see "Sides per strand" below).
Sides per strand Number of sides a strand will contain. One-sided strands are simply line segments. Two-sided strands are rectangles suitable for applying textures with transparency. 3+ sided strands are composed of cylinders.
Randomly rotate each strand This only applies to surfaces with two or more sides, and determines whether each strand will be randomly rotated about its thickness/circumference. One-sided surfaces (lines) do not rotate.
If this is option not checked, two sided surfaces will be oriented based on the curvature of the strand from any given axis - this basically emulates the way grass grows, with each strand bending along the flat part. Strands with 3+ surfaces, however, will not be rotated at all if this option is not checked. If this option is checked, strands will be randomly rotated.
% random direction Determines whether strands grow from the surface in a random direction. A small number here is good for a natural look. Zero means strands will not deviate from their initial direction (which is also influenced by Gravity, below). 100% means the fur growth will be extremely random, with some strands possibly growing back into the surface. Numbers between 5% and 30% are good for most applications.
Gravity (X/Y/Z) Gravity influences the direction in which all strands grow. A high gravity means fur will be highly influenced to grow along the specified axis, while a low gravity provides a gentler touch. You can mix/match the XYZ gravity numbers to coerce fur to grow in any direction. Negative numbers influence growth along the positive axis, positive numbers cause growth along the negative axis (gravity being a unit of arbitrary force).
The numbers specified for gravity have a greater/lesser effect based on the number of segments in each strand of fur. Fewer segments imply that fur is stiffer/shorter, and not so prone to gravity, while strands with more segments are treated as longer and more pliable.
Random seed The function for setting all random apects of fur growth depends on a numeric "seed" value to generate random numbers. This is a completely arbitrary number.
Setting this seed to a non-zero number is important when creating fur with the realtime preview, as it maintains the same random patterns while you experiment with settings.
Setting this number to zero means the random seed will be based on your system clock, and the seed changes every second. This is normally more acceptable when generating fur without the realtime preview enabled.
Save settings to fur Data Enable this feature to write a summary of fur settings to the newly created fur object. Handy for seeing how you initially generated a fur object. Use the AC3D object property window to see the contents of the Data field.
Each textual setting is prefixed by "//", which should make this POV-Ray-safe.
Realtime updates Thie feature provides you with an interactive preview, directly on your selected surfaces, of what your generated fur will look like. The fur will be updated as you tweak/change variables.
While realtime preview is active, you will not be able to interact with your model. You may go in and out of realtime preview to rotate/scroll your model view to get a different perspective on the fur-in-progress.
Note that if you manually type values in fields, the realtime preview does not update - only when you use the numeric scrolls or the checkboxes does the preview update.
Once you click the "Create fur" button, the actual fur is generated, and realtime preview is disabled.

Known issues

  • There are certain combinations of parameters that will result in a "wild hair" or two, so to speak. Surfaces in "wild hairs" may appear enormous along a certain axis. This generally happens on extremely large or extremely small angles. Generally, tweaking the direction/gravity will fix this problem.
  • Strands with 3 or more sides per surface are currently not "capped" at the end.
  • Fur strands do not collide with other surfaces. This means when you generate, say, long, straight hair on a human head, expect the hair to fall right through the shoulders, ears, and any other geometry.
  • The "Remove duplicates" feature is very slow.

Possible future enhancements

Below are some items that may be addressed in future versions, but this depends heavily on my own time to make the updates.

  • Allow for tapering of the thickness of each strand.
  • Allow saving/loading of fur settings.
  • Improve performance of the "Remove duplicates" function.


A tutorial for the fur plugin has been designed to illustrate basic use of the fur plugin.

Back to plugins

All content Copyright © 2006 Dennis Hawthorne, except where explicitly noted
supercoldmilk © 2006 Dennis Hawthorne