Surface Comb Modifier
Surface Comb modifier greatly simplifies shaping fur and hair by allowing you to define directions at various parts of your character mesh and having the hair follow these directions automatically.
Fur can be easily defined by using sinks in Surface Comb modifier.
Videos
Description
Creating fur requires a different approach than that for creating longer hair. Fur covers a lot more of surface area and tends to be very short. Because of the sheer number of fur strands it becomes increasingly difficult to control them via brushing and guide manipulation. Furthermore most fur follows a pattern of flow along the surface that can be reproduced without having to manipulate the shape of every guide. Also because fur is relatively short it usually doesn't have a very detailed shape but rather a generic curvature which is inherited by nearby strands.
Strands before (left) and after (right) applying a surface comb modifier.
Surface comb with slope (left) and directional sink (right) parameters changed
Surface comb takes advantage of these features about fur and provides a method for easy, fast, and intuitive manipulation of shape and flow of fur along arbitrary surfaces. Every fur strand is combed procedurally in two ways- perpendicular to the surface and parallel to the surface.
Perpendicular (longitudal) combing is controlled through a comb curve diagram and an optional map. The value controlled is 'sloping' that is applied to strands to bring them closer to the surface tangent. Maps can be used to randomize or control the strand shape differently in different parts of the model.
One omni-directional sink (left) and two directional sinks (right) are used to direct hair
Parallel (azimuthal) combing can be controlled via maps and/or via virtual objects called sinks. Sinks can be placed arbitrary in space and on the mesh surface and act as magnets that either attract or repel the hair in their area. Maps can be combined with sinks to randomize the hair flow. Furthermore you can control the random factor of fur (to create frizziness) with a chaos parameter.
A combination of omni and uni-directional sinks
Parameters
- Group
Specifies the propagation group to which the surface combing will be applied. - Apply to Direction
When turned on, this operator will change the hair direction along the surface using specified sinks. When off, direction of incoming hair will not be changed. - Apply to Shape
When turned on, this operator will modify the shape of hairs using the Slope Ramp. When off, shape of incoming strands will be preserved. - Longitudal Combing
Defines the combing parameters perpendicular to the distribution object- Combing Diagram
Allows to specify the distance of each resulting point away from the distribution mesh. Use this diagram to define the overall shape of the combed strands. - Slope Map and Channel
Use this map and/or guide channel to specify exactly how longitudal combing should be applied along different parts of the distribution mesh. The values will be multiplied by the combing diagram values to produce the final longitudal combing result.
- Combing Diagram
- Azimuthal Deviation
Specifies how the direction of combing varies globally and at specific parts of the distribution mesh.- Chaos
The randomness of direction. The bigger this value the more random combing direction will become relative to the user-defined sinks. - Seed
Specifies the random seed for the above value. - Chaos Map and Channel
Use this map and/or guide channel to specify which direction each strand should deviate towards away from the predefined sinks.
- Chaos
- Surface orientation
You can control whether every strand's orientation is deviated locally or globally relative to the whole object. If you specify an orientation map, you can control whether orientation is assigned per hair segment, or to the whole hair as a whole.- Orientation Type
Specify "Absolute" orientation to orient strands globally, not relative to anything. Specify "Relative" orientation to orient strands relative to user defined sinks. - Orientation Map and Channel
Use this map and/or guide channel to define the direction of combing at different parts of the distribution mesh. - Vector Map
When this option is on the values in orientation map will be interpreted as object-space vectors to direct the hair. Otherwise, the values will be interpreted as rotation angles in radians relative to input strand's surface rotation. - Affect Whole Strand
When checked the whole strand is oriented.
- Orientation Type
Moving Sinks After Creation
If you go into the "Sinks" sub-object mode you will find that you can select one or more sinks and then move them along the mesh using Max's transform tool. The sinks can only be moved along the surface of the mesh.
Sinks can be moved along mesh surface when in "Sinks" sub-object mode.
Editing Sink Directions After Creation
If you go into the "Sink Tips" sub-object mode you can select and move the sink tips. This will adjust the sink's relative strength as well as its direction.
To ensure that you change the sink direction along the surface of your distribution mesh change the transform space to "Local".
Changing transform space to "Local" allows moving sinks along mesh surface.
C++ SDK Access
Surface Comb modifier is accessible via Ornatrix C++ SDK. You need to get an instance of SurfaceCombModifierFPInterface
which exposes numerous methods:
#include "Public\SurfaceCombModifierFPInterface.h"
// Get Surface Comb interface
auto surfaceCombInstance = SurfaceCombModifierFPInterface::GetInterface( myModifier );
MaxScript Access
You can call the following functions on this interface to manipulate Surface Comb programatically:
-- Get MaxScript interface
surfaceCombInstance = $MyHairObject.modifiers[#Ox_Surface_Comb]
-- Start creating a new sink in the GUI
surfaceCombInstance.CreateSink()
-- Create a new sink
createdSinkIndex = surfaceCombInstance.AddSink()
-- Delete specified sink
surfaceCombInstance.DeleteSink sinkIndex
-- Delete selected sinks
surfaceCombInstance.DeleteSelSinks()
-- Creates a sink with specified parameters
surfaceCombInstance.CreateSinkAtCoordinate type direction faceIndex barycentricCoordinate
-- Gets total number of sinks in this modifier
sinkCount = surfaceCombInstance.GetSinkCount()
-- Gets whether specified sink is currently selected
isSinkSelected = surfaceCombInstance.IsSinkSelected sinkIndex
-- Sets the strength of the specified sink
surfaceCombInstance.SetSinkStrength sinkIndex strength
-- Sets the type of the specified sink
surfaceCombInstance.SetSinkType sinkIndex type
Examples
You can find examples on usage of this modifier by examining the unit tests in Test_SurfaceCombModifier.ms.