Ornatrix C4D Documentation

Documentation

  • About
    • About Ornatrix C4D
    • End User License Agreement
    • Minimum System Requirements
    • Evaluation License and Demo
  • Getting Started
    • Installing and Uninstalling
    • Adding Hair to Objects
    • Working with Strand Groups
    • Working with Strand Channels
    • Operator Stack
  • Creation
    • Groom Presets
    • Guides from Mesh Modifier
    • Hair from Guides Modifier
    • Guides from Hair Modifier
    • Mesh from Strands Modifier
    • Propagation Modifier
    • Scatter Modifier
    • Multiplier Modifier
    • Ground Strands
    • Baked Hair
    • Baked Guides
  • Styling
    • Edit Guides Modifier
    • Frizz Modifier
    • Curl Modifier
    • Length Modifier
    • Surface Comb Modifier
    • Clump Modifier
    • Detail Modifier
    • Rotating Strands
    • Gravity Modifier
    • Symmetry Modifier
    • Normalize Strands Modifier
    • Push Away from Surface Modifier
    • Baking Hair and Guides
  • Animation
    • Oscillator Modifier
    • Moov Physics Modifier
    • Animation Cache Modifier
    • Adopt External Guides
  • Rendering
    • Change Width Modifier
    • Rendering with Redshift
    • Rendering with Arnold
    • Rendering with Octane
  • Pipeline Integration
    • Rendering Hair as Mesh Geometry
    • Curves from Strands
    • Alembic Export
    • Alembic Import
  • Tutorials
    • Basic Ornatrix Concepts
    • Your First Groom: Grooming Basics
    • Your First Groom: Grooming Basics 2
  • SDK
    • Writing Plugin Brushes
  • Reference
    • Definitions


Normalize Strands Modifier

Normalize Strands

  • Normalize Strands Modifier
  • Normalize Strands
    • Overview
    • Parameters
    • Related Topics

Overview

Normalize Strands operator uses a hair direction normalization algorithm to de-tangle the hair strands in preparation for the simulation.

In the image above, you can see how the hair penetration is reduced or eliminated using Normalize Strands.

Parameters

Normalize Strands provides few parameters that can be adjusted to get the desired results. Additionally, those parameters can adjusted using texture maps, Strand Groups and Strand Channels. See the corresponding documentation page for more information.

  • Strand Groups
    Use Strand Groups patterns to isolate the effect of this operator to certain area of the hair.
  • Resolution
    Voxel resolution used to voxelized the hair vectors and rebuilt the hair back. With high resolution values the normalized hair strands should be nearly or identical to the original strands. With lower resolutions higher frequency detail is filtered out, and the resulting strands appear combed. At the lowest resolution (one voxel) all curves would be rebuilt going in the same direction.
  • Smoothing Iterations
    Apply N times mean-value (i.e. box) filter of normalized directions. Normalization itself smooth strands but only with low resolutions (resolution of 1 will result in all strands having single direction). With this option strands direction could be smoothed when high resolution is used. Should provide slightly better result than using low resolutions.
  • Smoothing Radius
    The radius of the mean-value filter used for smooth (the width of smoothing filter is 2*Radius+1 voxels).
  • Amount
    Modulates the normalize effect. This parameter can also be controlled using Guide Channels created using the Generate Strand Data operator.
  • Reset Grid Size from BBox
    The size of strands bounding box is used to compute voxels volume. This button could be used to update BBox after strands size change.

Related Topics

  • Resolve Collisions
  • Working with Strand Groups
  • Working with Guide Channels
  • Using Multiplier Maps

Missing Something? Let us know if this page needs more information about the topic.


Multiplier Modifier

  • Multiplier Modifier
    • Overview
    • Parameters
      • Strand Group
      • Random Seed
      • Probability
      • Twist
      • Copies
      • Copies View Percent
      • Spread
      • Fluff
      • Shift
      • Preserve Strand Lengths
      • Preserve Original Strand
      • Ground Generated Strands
      • Target Strand Group

Overview

Strand Multiplier allows you to create multiple hairs at the same root based on parametric input. It can be used with guides or hairs but more commonly would be used on hair. Hair strands can be duplicated a number of times using the Count parameter and deformed at the root or the tip with the Spread, Fluff, and Offset options.

Use Multiplier operator to add volume to your hair and create effects like vegetation and dense fur.

Parameters

Strand Group

If non-0, only strands belonging to this group will be multiplied.

Random Seed

Random seed to use when generating values for Spread, Fluff, and Offset parameters

Probability

Percentage of hairs that will generate copies. At 100% all hairs will generate copies. At 50% half of input strands will be copied.

Twist

Controls how much twisting is performed by newly added strands around each existing strand.

Copies

Number of copies that will be generated for each hair.

Copies View Percent

Use this parameter to determine how much of the total copies will be shown in viewport, use a low percent to increase viewport performance when using a high amount of copies. This parameter don`t affect the render count.

Spread

Controls by how much copied strands are pushed away in local X direction from their original strand.

Use channel, ramp, and multiplier controls to vary this parameter along the surface and the length of the strand.

Fluff

Controls by how much copied strands are pushed away in local Y direction from their original strand. Use together with Spread parameter for volumetric spreading.

Use channel, ramp, and multiplier controls to vary this parameter along the surface and the length of the strand.

Shift

Controls how the points of copied strands are offset in relation to the original strand along their local X axis.

Use channel, ramp, and multiplier controls to vary this parameter along the surface and the length of the strand.

Preserve Strand Lengths

When on, the lengths of source strands will not be modified by this operator

Preserve Original Strand

By default all the parameters in the Multiplier modifier will affect the original strand. When this option is ON, the original strand will not be affected by any other parameter on this modifier.

Ground Generated Strands

When modifying the roots of the copied strands with parameters like Fluff, Spread or Shift, they may end up floating on the surface. Use this option to automatically ground all the roots to the surface.

Target Strand Group

Specifies the strand group to assigned to newly created strands

Missing Something? Let us know if this page needs more information about the topic.


Moov Physics Modifier

Overview

Moov Physics is our in-house physics engine designed to provide the artist and TDs with different algorithms to simulate hair movement. This operator provides a simple interface to work with hair simulation in real-time and a set of Python scripts that offer different functionalities. TDs have the possibilities to expand MoovPhysics developing their own Python scripts to achieve even more complex and accurate simulation.

Go to attached video

Moov Hair Simulation

Moov Simulation Parameters

In Moov Physics all the parameters are divided in different groups related to its functionality. In this section we will define every parameter found in each group.

Solver Parameters

This group includes the global parameters used for tuning up the particle solver. These global parameters influence the whole simulation and the behavior of all the other parameters.

Note: These parameters are temporarily exposed to the user for feedback and development but all tuning of the hair simulation should be done without tweaking the Solver Parameters. If these are changed the entire behavior of the simulation will change and the rest of the parameters would have to be adjusted from the start.

  • Substep Count
    Number of simulator steps within a single animation frame. Larger values lead to slower simulation, more accurate collisions, and stiffer constraints (except in compliant models, which are less affected by this parameter).
  • Iteration Count
    Number of iterations in constraint projections. The difference with the previous parameter is that this one only affects the constraint response (not collision detection). More iterations means slower simulation (although the effect is smaller than the previous parameter) and stiffer constraints (up to a certain number of iterations; after that the constraint response is saturated).
  • Velocity Limit
    Maximum speed of particles in the solver. Use to impose a speed limit on fast-moving hair simulations.
  • Collision Tolerance
    Defines the collision distance between the hair and the mesh objects in the Collision Meshes list. This parameter affects all collisions in the simulation uniformly. Using values that are too low could give unpredictable results, the default values should be enough in most cases.

Hair Model

  • Lattice Count
    Number of simulation particles corresponding to each hair vertex. Lattice Count = 1 corresponds to simple longitudinal particle chains. A lattice can be used to simulate some twist response in models with only distance and bending constraints (i.e., non-Cosserat and non-elaston models). Cosserat models are preferred for applications where twist is important (e.g. propagated strands).
  • Lattice Size
    Distances between the particles of a lattice node (corresponding to a single hair vertex). To have meaningful lattice twist, the Lattice Size value has to be comparable to the distance between neighbour strand vertices.
  • Lattice Stiffness
    Stiffness parameter of lattice nodes (used for constraints within a single lattice node).
  • Model Type
    Determines the constraints applied to the hair particles. See the overview of hair model types.
  • Use Compliant Constraints
    Uses compliant versions of the constraints needed by the hair model. Compliant constraints have a slight computational overhead, but are more stable, so their use is recommended when simulation stability is a concern. There are several important differences in the behaviour of compliant vs. non-compliant constraints:
    compliant constraints have unbounded stiffness (i.e. the stiffness can be arbitrarily large). The stiffness response is limited, however, so increasing the stiffness beyond a certain value will have no further effect. The stiffness response of compliant constraints depends on particle mass.
  • Limit Stretch
    Creates Long-Range-Attachment (LRA) constraints to limit strand stretching. LRA constraints are distance constraints linking all strand particles to the root. They react only to stretching (not compression) and allow for a 10% length increase before they kick in. The constraint stiffness is taken from the Stretching Stiffness parameter.

Hair Properties

  • Stretching Stiffness
    Stiffness parameter controlling longitudinal strand stretching. Should be between 0 and 1.
  • Bending Stiffness
    Stiffness parameter controlling strand bending. This is applied to any constraints that serve to limit strand bending, depending on the model. In Cosserat models, this is also the twisting stiffness.

Forces and Fields

  • Gravity
    Vertical gravitational acceleration. Use to impose appropriate length units in the scene: e.g. if the scene units are centimeters, set this parameter to -981 (cm/s^2); if the scene units are meters, set it to -9.81 (m/s^2).
  • Gravity Scale
    Scales the gravitational field felt by the hair. Use this parameter to modify the stiffness response when the StretchingStiffness and BendingStiffness do not allow sufficient flexibility in hair setup. For example, if the hair is too stretchy even at maximum stiffness, increasing this parameter will lead to stiffer strands. Note that this parameter affects only the stretch of free-falling hair. Inertial stretch (i.e. stretch due to a fast-moving base mesh) is not affected.
  • Drag
    Multiplies the velocity of each particle at each simulation step. Should be smaller than 1 to avoid instabilities. Use to introduce damping (energy loss) in the system; the smaller the value, the larger the damping.
  • Attract To Initial Shape
    Creates springs that attract each strand to its initial shape.
  • Attract To Initial Shape Stiffness
    Determines the spring stiffness. Unlike constraint stiffness, this value can be arbitrarily large.
    Note:
    For consistency with other stiffness parameters, internal scaling is applied to make sure that values of 0-1 are meaningful. The scaling constant can be changed to obtain satisfactory defaults.

Collisions

  • Collide With Base Mesh
    Turns on collisions between hair particles and the base mesh.
  • Collide With Meshes
    Turns on collisions between hair particles and collision meshes added in the Collision Meshes box.
  • Collide With Hair
    Turns on hair-hair collisions. These are implemented by creating capsules for each hair segment. Capsules can only collide with each other.
  • Collide With Hair Radius
    Defines the radius of hair strands for hair-hair collisions.

Group Holder

The group holder creates constraints to hold together each group of strands. The constraints are created between randomly selected particle pairs within a certain range of strand vertex indices (min and max position).

  • Group Channel
    Selects a channel containing strand groups.
  • Group Holder Pos Min
    First strand vertex index (from root to tip) of the group holder.
  • Group Holder Pos Max
    Last strand vertex index (from root to tip) of the group holder.
  • Group Stiffness
    Stiffness of the group holder constraints.
  • Group Random Seed
    Random seed for choosing the particle pairs for the group holder.
  • Group Max Constraints
    Maximum number of constraints per strand group.

Overview of hair model types

Here is a basic benchmark for a hair simulation (rev. 13883) with the main hair models. The simulation has 300 guides with 10 points per guide and runs over 100 frames in the Maya GUI; all parameters are script defaults except the model type.

The total time difference between the fastest to the slowest model is about 13%; the difference in solver running time is more substantial (about 25%). The differences between compliant and non-compliant versions of different models are negligible; using the compliant versions is recommended.

Distance Only

A model using only distance (spring) constraints. Constraints are created along each strand between first neighbours (to control stretching) and second neighbours (to control bending), with the corresponding stretching and bending stiffnesses.

This model is the fastest, but has somewhat unrealistic bending (strands tend to buckle). To add some degree of twisting response, it is necessary to create a lattice.

Distance Bending

This model uses distance constraints between first neighbours to control stretching and three-particle bending constraints at each strand vertex for bending control.

Bending is more realistic than the DistanceOnly model, but hair tends to be too stretchy. Similar to the previous model, a lattice is needed for twisting response.

Cosserat

Uses two-particle stretch-shear and three-particle bend-twist Cosserat rod constraints, with the corresponding stretching and bending stiffnesses. Slower than the previous models, but the strands have full elastic response.

Cosserat Distance

Like Cosserat, but creates additional first-neighbour distance constraints to control overstretching.


Propagation Modifier

A forest created quickly and painlessly with strand propagation

Strand propagation is a special modifier which allows you to 'spawn' hair on top of existing hair. Instead of having to cross-reference meshes, this modifier allows the user to create new hair strands directly on top of specified strands. Multiple propagation modifiers can be applied on top of each other to create hierarchies of strands. This is particularly useful for quickly and procedurally creating forests, feathers, flowers, and almost any other phenomena.

To give the user more control, Ornatrix introduces <em>strand groups. </em>A strand group is a ID number assigned to every strand (much like material ID is assigned to mesh faces). These groups are later used by other modifiers and the renderer to give different groups different properties. For example you might want to choose to make a stem of a tree thick and brown, while making its branches thinner and more yellow, and making its leaves green.

Every time you apply a strand propagation modifier you need to specify two group parameters: which group to place new hairs on, and which group to assign to these new hairs. So, for example, a tree would have its initial stem as group 0, its branches spawned on group 0 (initial stem) and assigned group 1, and then leaves spawned on group 1 (the branches) and assigned group two. You can then add render settings (or any other) modifier to change individual properties of every group.

A plant-like structure created by spawning new hairs on top of initial hairs

Mesh from strands modifier has an option to assign each strand ID a corresponding material ID. This way you can use a multi-sub/object material to have each strand group shaded using a respective sub-material (for example group 0 would be shaded by 1'st material, group 1 - by 2'nd and group 2 by 3'rd). Fast raytracer does this automatically (assign material IDs).

Parameters

  • Propagate On
    Specifies the strand groups of strands on which new strands should be generated.
  • Assign Group ID
    The strand groups value to assign to strands generated by this modifier.
  • Add Root Position Channel
    When true, a per-strand channel is added containing root positions in range (0 to 1) of propagated strands, relative to their base strand

Distribution Parameters

  • Generation Method
    Determines how the new roots are generation. By default the roots will be generated randomly along the hair strands, but other generation methods like Uniform and Per-Vertex are also available.
  • Uniform Randomness
    Adds a random offset for each created strand along it's base strand. This allows adding a little randomness to uniform distributions.
  • Per-Strand Count
    If checked, the viewport and render count values will be used per each source strands instead of overall for all strands
  • Viewport Count
    Number of strands to generate when previewing the results inside the viewport
  • Render
    Number of strands to generated during rendering. This value can be larger than the viewport count to generate dense hair.
  • Random Seed
    Specifies a value to assign as a seed for the random number generator.
  • Segment Count
    Specified the number of points in each generated strand

Distribution Range

  • Low Range
    Starting position on source strands where to generate new strands
  • High Range
    Ending position on source strands where to generate new strands

Texture Mapping

  • Texture Mapping Method
    Specifies how the texture coordinates will be generated for the resulting strands. One of the following options are available:
    • None
      No texture coordinates will be generated
    • Inherit from Base Strand
      Texture coordinates will be copied from base strands to generated strands
    • Flat Map
      A new flat texture map is generated with coordinates preserving the strand geometry

Length Control

  • Relative to Base Strand
    If checked length values will be adjusted to the length of each strand on which new strands are generated.
  • Global Length
    The overall length multiplier for all generated strands
  • Randomness
    Varies the length of generated strands by specified value
  • Length Diagram
    Allows specifying how the length varies along the source strand

Twist Control

  • Face surface
    When on and number of twist sides is set to 2, this will force all newly created hairs to be tangential to the underlying surface at the root. This is useful for feathers when you want all of them to be staying parallel to the surface.
  • Num. Of Sides
    Specifies how many unique twist sides will be propagated on. These sides are uniformly picked. For example having two sides would mean spawning one hair on one side of the strand and the next on the other (opposite of the first hair).
  • Global Twist
    Global twist multiplier
  • Randomness
    Introduces variation in twist values by specified amount
  • Twist Diagram
    Allows varying the twist values along the length of the surface strand

Fanning Control

  • Global Direction
    Specifies the direction of the generated strands parallel to the surface strand
  • Randomness
    Introduces variation in fanning values by specified amount
  • Twist Diagram
    Allows varying the fanning values along the length of the surface strand


Oscillator Modifier

Oscillator is a procedural dynamics simulator designed to predict the hairs's follow thru motion and creating inertia movement without full featured hair simulation. This operator supports gravity impulses and Cinema 4D's external forces such as turbulence, wind, and vortex.

Hair movement without (left) and with (right) the Oscillator operator

Parameters

A set of intuitive and artist friendly parameters are included to quickly create oscillation simulation with few parameters. Additionally, those parameters can manipulated using texture maps, Strand Groups, and Strand Channels. See the corresponding page for more information.

  • Time Scale
    Determines the speed of the oscillation process. Use it to decrease or increase the reaction time of the oscillation between each impulse.
  • Iteration Count
    Number of iterations to solve oscillation equations.
  • Amount
    Blend the operator output with the original strand's positions.
  • Damping
    Controls the damping of the oscillation.
  • Stiffness
    Strand's Stiffness.
  • Inertia
    Strand's Inertia. Increase for more expressed effect.
  • Gravity:
    Gravity or other static forces vector.

Creating basic oscillation

()

Using Force Fields

()

Exporting the animation

The animation generated by the Oscillator operator can be exported using our .abc exporter. Find step by step instructions on how to cache and export hair animations in the Animation Modifier page.

Related Topics

  • Moov Physics Modifier
  • Resolve Collisions Modifier
  • Animation Modifier
  • Working with Strand Groups
  • Working with Guide Channels


Operator Stack

Ornatrix hair is often composed of one or more operators, represented as C4D deformers, applying changes one after another to create procedural effects. This stack can be found inside the C4D's Objects tab:

Adding Operators

Adding an operator to the operator stack of currently selected object can be done using one of the following ways:

  1. On Cinema 4D's main menu there is Ornatrix entry. Click it and select the operator to be added. Operator will be added after currently selected modifier.
  2. Select an Ornatrix hair object in the scene and go to its Object properties tab. Select operator to add from the drop-down list and click Insert Operator button.
  3. In Cinema 4D's main menu select Windows > Customizations > Customize Commands > filter by name, and type in the name of the operator to add. Then select the appropriate command and click Execute.
  4. Using Python script. Open command prompt and execute following script:
    anim = c4d.BaseObject(OperatorId)
doc.InsertObject(anim)

    OperatorId is the id of the operator to insert. Consult our API docs to get this number.


Minimum System Requirements

Overview

Ornatrix C4D is designed to work on a variety of Cinema 4D versions and all operating systems where Cinema 4D is supported. However, there exist a minimum requirements where Ornatrix C4D is supported.

Windows

  • Windows 7 or newer
  • Cinema 4D R21.207 or newer
  • VC 2015 runtime (If using Windows 7 or earlier, comes preinstalled with Windows 8 and newer)

Mac

  • OS X 10.14 Mojave or newer
  • Cinema 4D R21.207 or newer


Installing and Uninstalling

Installing

Automatic Installation (Recommended)

The best way to install Ornatrix C4D is to download the MSI or PKG installer for your operating system and use it to configure and perform an automatic installation.

Important: Do not rename the downloaded installer file before starting it, otherwise authorizing the plugin may fail.

Install Options

During installation you will be presented with options of which Ornatrix versions and components to install.

.msi installer will attempt to find all Cinema 4D installations on your system and automatically select versions of Ornatrix for each version which is present. It does this by searching for C:\MAXON\Cinema 4D Rxx or ProgramFiles\MAXON\Cinema 4D Rxx directories. Ornatrix versions without a matching Cinema 4D installation will be unselected by default, however, you can still enable them. In such cases Ornatrix will be installed into C:\Ephere directory.

Silent/Batch Installation

Batch installing on Windows

Ornatrix C4D uses MSI packages for deployment and installation.

Use the /quiet or /qn options with msiexec to perform a silent install. Do it from a command prompt with administrator rights.
  • Properties with name C4D_INSTALL_PATH_RXX can be used to specify the desired install locations for various C4D versions.
  • Properties with name ENABLE_C4D_RXX can be used to disable installing Ornatrix for specific Cinema 4D version. By default all Cinema 4D versions present on the computer will be targeted, so one needs to exclude the versions not to target.

For example, this command installs Ornatrix for C4D R20 but not for C4D R19 with no UI and no reboot, with a log:

msiexec /i c:\path\to\ornatrix.setup.msi /quiet /qn /norestart /l*v c:\path\to\install.log C4D_INSTALL_PATH_R20="C:\Program Files\MAXON\Cinema 4D R20" ENABLE_C4D_R19=0

Manual Archive Installation

In addition to automatic (recommended) install and batch install options, Ornatrix C4D files can be deployed manually by downloading a compressed 7-Zip archive. The download is available alongside the MSI or PKG automated installers on the downloads page. Extract the archive using 7-Zip

To install manually on all platforms follow the instructions in the included Readme.txt file. If installing on a workstation, you will need to set up licensing manually.

Installing a Floating License Server

Floating license server allows you to store multiple licenses on the same computer (server). Workstations can connect to this license server via its IP or network address to obtain licenses temporarily and release them when they are no longer in use. This permits an arbitrary number of workstations to share licenses between them.

All Licenses Unassigned

To install a floating license server please make sure that all of your licenses are unassigned for the product in question. If you never installed the license server for current product you do not need to worry about this.

  1. Go to the downloads page and look under the version which you are trying to install.
  2. Find the "Unassigned Licenses" text and check if all of your licenses are yet unassigned (the numbers should be equal). If that's true, you are ready to proceed.

If the number of unassigned licenses is less than the total number, please contact us for instructions on how to reset your current hardware locks.

Install License Server

  1. Click on the link for you operating system under "Install license server only" and download the installer program to your license server computer.
  2. On Windows run the downloaded .EXE file. It needs administrator rights, so if UAC is enabled you'll be asked for authorization.
  3. On Mac open a terminal window into the Downloads directory and type
    sh <name-of-the-downloaded-file>.run
    to start the downloaded file. It needs administrator rights, so you'll be asked for your password.

Specify the Network Address of the License Server

Using Text File

By default the license server will be searched at localhost (127.0.0.1 IP) address, thus assuming that you installed it on the same computer as Ornatrix. If it cannot be found at this address you will be presented with a dialog to enter a different IP or network name. Once you successfully connect to a license server, the IP (or network name) of the license server will be stored in the following file:
C:\Users\XXX\AppData\Local\OrnatrixC4DLicenseServerIP.txt

You can modify the address within this file to change the location of the license server. Alternatively, you can delete it and upon the next start of Ornatrix you will be prompted to add a different address.

You can also modify the location where this .txt file is stored by setting the directory path in ORNATRIXC4D_LICENSE_SERVER_IP_PATH environment variable.

Using Environment Variable

You can manually specify the IP or network name of the license server in an environment variable with name ORNATRIXC4D_LICENSE_SERVER_IP.

Installation Directories

Ornatrix C4D is installed into a central location from which different versions of Maya can load their appropriate modules. Scripts and resources are shared between various versions of Maya from this central location. You can alter the path of this central directory during installation process. It is recommended to leave it as the default value unless you have a reason to change it.

Installation directories on Windows

On Microsoft Windows, Ornatrix is installed into C:\Program Files\MAXON\Cinema 4D RXX\plugins\Ornatrix directory by default. This directory contains the following structure:
  • Grooms - Contains pre-defined groom presets
  • qt-plugins
  • res - Required resources
  • scripts - Moov scripts
  • Ephere.Licensing.Authorizer.Maxon.C4D.Ornatrix.exe - File common to all C4D versions which is required for Ornatrix licensing.
  • Ornatrix.xdl64 - Ornatrix plugin.

All of these directories and files must be present to ensure proper installation of Ornatrix on Windows.

Uninstalling

Uninstalling on Windows

Use the Programs and Features dialog to locate the Ornatrix C4D entry. Use the uninstall option to uninstall Ornatrix C4D.

Uninstalling on OSX

Uninstalling the License Server

Uninstalling Ornatrix will leave the Ephere license server on your computer. It is a separate process which isn't linked to any host and can be reused for future installations. However, if you choose to uninstall it you can do it by following these OS-specific steps here .

Installing different Ornatrix versions on same computer

While it isn't possible to have two different Ornatrix versions within same Maya installation, it is possible to have two different Ornatrix versions in two different C4D installations. For example, if you have C4D R20 installed and have Ornatrix V1 installed inside it you can also install Ornatrix V2 in Maya R19 on the same computer.

This cannot be done using the executable (.msi) installer. Instead you need to download the manual .7z archive containing all Ornatrix files and use the Readme.txt file to place all files into correct places manually.

Please note that some versions of Ornatrix provide assets and grooms which are not compatible with previous versions.


Hair from Guides Modifier

Hair from Guides operator generates dense hair. This operator's primary task is to take in a set of guides and based on the provided info create a dense hair volume based on those guides. Hair from Guides is responsible to produce arbitrarily dense hair strands that best describe the volume specified by provided guides. Just like the Guides from Mesh operator, you get the distribution options to control the way dense roots are distributed over the mesh.

Videos

Go to attached video

Parameters

Distribution and Count

This group of parameters controls how and where the hair roots are placed onto the distribution surface.

Distribution Type

There are several distribution methods for spreading hair roots along the surface:

  • Uniform
    Roots are placed in a linear manner forming a 'grid' around the mesh. This can be useful while creating brush patterns where hair has been planted artificially.
  • Random (area-based)
    Roots are created randomly, and the amount of roots per face is calculated based on the total area of all faces on the mesh. Therefore all roots will be distributed evenly and randomly throughout the mesh. You can control the random factor through the seed value. Same seed values will produce similar results.
  • Random (face-based)
    Same as above, except the amount of roots per face is the same for every face on the mesh. Therefore larger faces will tend to have sparser root placement, while smaller ones will have roots more clustered in one spot.
  • Vertex
    One root is generated at each vertex of the surface mesh.
  • Random (UV-based)
    Same as area-based approach, except this time instead of calculating area for every face, UV area of faces is calculated. This allows user to control the distribution by maintaining UVW coordinates on the mesh. It is possible to unwrap a character, for example, and have dense placement of hair in some spots than the others by stretching out those areas in the UV editor.
  • Guides has hair
    Simply converts incoming guides into resulting hair without generating any new strands.
  • Face Center
    Roots are placed at the center of each polygon face or triangle.
  • Even
    Roots are placed on the surface randomly but at the same distance from one another. This method provides the most realistic root placement result for natural hair phenomena.

Uniform Randomness

A parameter called Uniform Randomness is available to offset hairs in random directions after they've been created with Uniform distribution. This can be used to fix the exact even positions of uniformly placed roots and give them a little variation. Use this parameters for creating feathers, for example, where hair roots need to be placed evenly yet have some variation on the surface.

Uniform Randomness only works when Uniform distribution method is used.

Random Seed

Change this value to shuffle the positions and random lengths of the resulting guides.

Render Count

Specifies the total number of roots to generate during rendering.

Viewport Count Fraction

Specifies the percentage of roots to generate inside viewports.

Distribution Map

An optional multiplier map for hair density on the surface.

Distribution Channel

Allows you to specify a vertex color set or a guide channel to control the hair density over the mesh.

Topology Based Orientation

When on the rotation of hairs will be "glued" to the distribution mesh. Rotations will be computed relative to the orientations of mesh edges and thus properly react to deforming geometry. When off, the rotations will be calculated in global scene coordinates.

Use Face Include

When on guides will only be generated on selected faces. This option will only have an effect if some face components were selected when current Guides from Mesh operator was added.

Use Guide Proximity

When on, only hairs that are within a certain distance of a guide will be generated. Hairs far from guides will be culled.

Guide Proximity Distance

When Use Guide Proximity is on, this specifies the maximum distance a hair must be away from a guide for it to be generated. This will make hair only be generated around guides.

Note that if you use Barycentric interpolation guides will be chosen based on the distribution mesh vertices and thus you might not get the exact results. To avoid this use Affine interpolation.

On the left all hair is generated. On the right guide proximity is turned on, causing hairs to be generated only around their closest guides.

Use Guide Faces

When used, this option will plant new roots only on faces that are close to guides. Using the iterations parameter you can control how close a face has to be to a guide for roots to be planted on it. 1 means roots have to be on same face as one of the guides. 2 means roots have to be on a face that touches a face that has a guide on it. This usually works well with meshes that have many faces.

Remember Root Positions

When this option is used the root positions generated by this operator will be cached and saved with the scene. This can ensure that you can send the same scene to other computers and render it without the risk of roots being generated in different places causing them to "jitter".

Use this option after you have set up the hair to your liking. When this option is on changing other distribution parameters will not have any effect.

When you turn this option off the guides will be regenerated using current distribution parameters.

Guide interpolation

Parameters in this group change the way hair shape is constructed from input guides.

Guide interpolation

There are several parameters that can dramatically change the look and behavior of dense hair as a subset of guides. Whenever a hair strand is planted, it has to be interpolated in order to achieve smooth transition from guide to guide. There are a couple of interpolation types available:

  • Polar interpolation
    Use internal strand space, interpolate by rotating transforms.
    This method will produce the smoothest results. For every created strand hair orientation is determined by the surface normal at that location. Therefore as the surface curves, hair will curve along with it. Strands are interpolated in their local space so you will see them rotating which might not always be ideal, especially for longer hair.
    If used properly, only a few guides on the whole surface could be required to form a hair volume. Ð downside to this method is that polar interpolation will have two poles (or sinks), where hair will not be well defined and will tend flip. If you only need a part of your surface covered, or if the surface is not fully round, this method is the best to use.
    This option is recommended when using the instanced strands option.
  • Affine interpolation
    Uses closest guides, interpolate in object space.
    Unlike the above method, this interpolation type does not take surface information into account. Instead it directly interpolates between strands. Lets say there are two guides - A and B - and we create a dense strand C and its right in the middle between these two guides. The tip of of strand C will lie in the middle of the line formed by tips of guides A and B.
  • Barycentric interpolation
    Uses distribution mesh vertices.
    This is the default, and most robust method. To interpolate hairs between guides this method utilizes surface dependence information and underlying mesh topology. This is only possible if you have both of these available. At first, for each vertex on the distribution mesh closest guide information is calculated. Then for each hair the closest vertices are looked up on the mesh and information from these vertices is used to determine which guides will be used for interpolation.
    The downside of this approach is requirement for the distribution mesh to be relatively dense. If there are too few vertices then you might lose guide information.
  • Segment interpolation
    Using this method can produce better results if you have guides which greatly change shape and want the resulting hair to blend between these guides smoothly. It blends guides using their individual segments and tries to smoothly blend the overall length of each strand.
  • Interpolate Strand Length
    When ON, hair length will be interpolated between guides.
  • Interpolation Weight
    Allows the use of a guide channel to control the interpolation weight or how much hair is attracted to specific guides.

Guide Count

For the first two interpolation types you can control the amount of guides that every dense strand is interpolated in between. Setting this value to 1 will result in no interpolation at all, and every dense strand will automatically copy the nearest guide. Setting this value to 3 will result in a triangular interpolation where every strand will be an average of 3 closest guides. Note though, that barycentric interpolation always uses three guides and setting a lower guide count will make hair length largely dependent on how far the two or one closest guides are to it.

Interpolate guides in UV space

When enabled, the interpolation of hairs from guides will be based on the texture space of distribution object. Otherwise object space coordinates will be used.

Root Displacement

Parameters in this group control if and how roots are moved from their generated position. Use these controls to add an additional offset to hairs along surface normals.

Displacement Offset

An optional offset along surface normals of generated guides. Allows you to push away guides from the surface if needed.

Displacement Map Minimum Value

Specifies the offset for black values of the displacement map. 0 by default, if this is -1 then displacement will be negative, if it is 0.5 then displacement will happen on both sides of the surface.

Displacement Multiplier

An optional surface map multiplier for the Displacement Offset parameter. Use to vary displacement along the surface with a texture map.

Parting

This group has parameters which separate hair into partings. Hairs in separate partings do not blend their shape in between themselves. Hair can be parted to create separate groups that are not interpolated in between. Partings can be auto-generated, specified with a map or a channel, or created manually in partings sub-object mode.

Auto Part

If on, partings will be automatically deduced based on the relative angles of incoming guides. If two guides are facing away from each other the hairs between them will not interpolate between both guides, instead choosing the closest guide.

Angle Threshold

If Auto Part option is used, this parameter determines the angle threshold which is used to either part or not part the hair between guides.

Distance Threshold

If Auto Part option is used, this parameter determines the maximum distance between two guides which would be placed into the same parting.

Parting Groups Map

An optional texture map where black and white values can separate hair partings on the mesh surface.

Partings Channel

This parameter can be used to manually specify partings using a guide channel or a vertex color set.

Isolation

When the number of hairs on a character becomes too great to preview or manage at the same time it may be needed to only display a selected region of hairs while hiding the rest. This will simplify hair editing by speeding up the display refresh rate and also visually focus editing to a small subset of hairs of the overall hair model.

Isolation section of Hair from Guides Attribute Editor parameters provides controls to do this.

  • Use the Isolate button to select the isolation tool. This tool allows you to draw a region inside the viewport. All hairs within this region will be left, while all other hairs will be hidden.
  • Use the Unhide All button to remove any isolation of hairs, returning them to normal display mode
  • Selection Shape dropdown specifies how the region will be drawn with the Isolate tool inside the viewport:
    • Lasso
      Draw a selection lasso around the target hairs
    • Rectangle
      Drag a rectangle to select the target hairs
    • Circle
      Drag a circle from its center to select the target hairs
  • Isolated Visibility Rate
    The fraction of isolated/visible hairs which will be visible. This is a percentage of render hair count. By default this value is 1 so you will see all isolated hairs as they will appear inside the render. You can decrease this parameter to show fewer hairs if needed.
  • Culled Visibility Rate
    Specifies the fraction of culled/hidden hairs which will remain visible. Default is 0 which means that all isolated hairs will be hidden. However, you can increase this parameter to show some of the isolated hairs.

Generated Data

Generate Per Strand Data

When on, any per-strand data present in guides will be interpolated into resulting hairs

Generate Per Vertex Data

When on, any per-vertex data present in guides will be interpolated into resulting hairs

Other parameters

Many of the options used by this component are similar to those used in Guides from Mesh. Please refer to that help for reference.

  • Additional root data
    These four options control which data gets exported with hair. Some data, such as per-root transform matrix takes up a lot of memory (in fact it takes same memory per-root as 4 vertices). Therefore if you are sure that some of this data isn't going to be used later on in the pipeline you can choose not to export it, thus saving memory. One useful example is removing root tm and guide dependence data when exporting very dense fur.
  • Export object type
    This determines whether dense hair or guides are generated. Sometimes during modeling it is useful to interpolate between results to increase/decrease guide count.
  • Guide proximity
    This option isn't implemented in V1 or V2
  • Use guide faces
    When used, this option will plant new roots only on faces that are close to guides. Using the iterations parameter you can control how close a face has to be to a guide for roots to be planted on it. 1 means roots have to be on same face as one of the guides. 2 means roots have to be on a face that touches a face that has a guide on it. This usually works well with meshes that have many faces.
  • Instanced strands
    If on, all strands will be instanced by provided guides. This means that really only one hair is generated per a guide, and the rest are simply using same memory to display the guide offset at their root. Memory usage is greatly conserved, especially with very dense hair objects.
    For best results it is advised that you use polar interpolation to generate the dense hair from guides using this option.
  • Use UV coords
    Specifies whether mesh UVW coordinates or root world coordinates are to be used to determine relative guide/hair positions.
  • Auto-part hair
    It is often necessary to have different groups of hairs on a mesh. By default this isn't possible since hairs all interpolated to form a continuous volume. Auto parting takes an angle or distance threshold and determines whether hair should be interpolated between specific guides or not. If two guides are oriented or located apart further than provided thresholds a parting will be generated between them. Note that you may also part hairs using a map or a guide channel.
  • View Count from Render
    When enabled, the number of hairs displayed in the viewport will be determined by the percentage value of the render count parameter.
  • View Count Percentage
    When View Count from Render parameter is on, this determines the percentage of dense count parameter which determines number of hairs displayed inside viewports.
  • Render Count
    Determines the number of hairs generated by this modifier when rendering the scene.

Viewport and Render Count

To make it easier and quicker to edit hair Ornatrix provides an option to have fewer hairs displayed while working in the viewport than during rendering of the scene. Typically a fraction of hair displayed is good enough to accurately preview what will appear in the rendered result. However, these parameters can be adjusted by you at any time. Use the Viewport Count and Render Count parameters to set these values.

When Ornatrix detects that Cinema 4D is rendering the scene it will re-generate your grooms with the render hair count. Once the rendering is done it will switch back to using the viewport count.

Notice that the IPR (Interactive Photo-realistic Renderer) will not use the render count, as it runs in parallel with the scene editor and it doesn't notify the scene about its operation.

Freezing the generated hairs

Sometimes it is necessary to ensure that the results generated by Hair from Guides operator remain consistent even if you send the scene to a different computer and (accidentally) change some of the distribution parameters. For this reason we have the Remember Root Positions check box.

Enabling this option will make the operator generate and cache the root positions of rendered hairs. This ensures that the generated hair will remain consistent among shots rendered on different computers since random generation algorithms can vary across hardware. It is a good practice to enable this option when rendering hair on a render farm. Disabling this option will clear the cache.

The cache is stored with the scene and thus will increase your scene file size. The check box must be unchecked and then checked again if you modify any of the distribution parameters to reflect the changes. The caching process might take a few seconds depending on your render hair count.


Mesh from Strands operator

Mesh from Strands

This operator converts strands of hair into a mesh shape. It can be used in conjunction with the Change Width Modifier, which can specify hair radius and shape, as well as the Rotate operator which specifies strand twisting.

Use this operator to render or bake the geometric representation of the hair, to create feathers, and to scatter and fit various scene objects along the hair shape.

Output mesh types

There are three main types of meshes that can be generated from hair:

  1. Cylindrical hair can be rendered from all angles, great for high quality hair

    Prismatic meshes are cylindrical N-sided structures that encapsulate each strand. Because they can be viewed from all directions they can be rendered as they are or collapsed into baked meshes. This is often the best choice for strands that demand quality over quantity. Some examples include cat whiskers and brush bristles. Rendering very thin cylindrical hair usually causes artifacts, but these can be fixed with increasing sampling per pixel in your renderer.
    Cylindrical hair has to be rendered with one of Maya's shaders (such as blinn or lambert) because the normals are generated away from the surface in a conventional way.
  2. Billboarded hair are fast and cheap to render, great for dense thin hair and feathers

    Billboarded hair primitives are faces, one or more per segment, that form flat planes. Since hair in nature is cylindrical, camera-facing billboards fill the task of rendering hair very well. They are quick to generate and render but one downside is that they're not cylindrical and sometimes can't be used for things like whiskers, like the prismatic mesh primitive. Billboarded hair can be oriented in any direction as well as controlled by a map to produce things like grass, feathers, and tree leafs.

Parameters

Mesh Type

Determines the type of mesh object to be generated. You can select between Ribbons and Cylinders. When generating cylinders, you can change its sides amount.


Mesh from Strands Modifier

This modifier converts strands from hair state into mesh state. It is to be used in conjunction with (above in the stack) the change width modifier, which can specify hair radius. There are a number of parameters that control mesh creation. There are three main types of meshes that can be generated from hair:

  1. Cylindrical hair (can be rendered from all angles, great for high quality hair)
    Prismatic meshes are cylindrical N-sided structures that encapsulate each strand. Because they can be viewed from all directions, they can be rendered as they are or collapsed into baked meshes. This is often the best choice for strands that demand quality over quantity. Some examples include cat whiskars and lizard tails. Rendering very thin cylindrical hair usually causes artifacts, but these can be fixed with increasing sampling per pixel in your renderer.
    Cylindrical hair has to be rendered with one of Max's shaders (such as standard) because the normals are generated away from the surface.
  2. Billboarded hair (fast and cheap to render, great for dense thin hair, can be used with Ornatrix shaders)
    Billboarded hair primitives are faces, one per segment, that form sprites which always face the camera. Since hair in nature is cylindrical, camera-facing billboards fill the task of rendering hair very well. They are cheap to generate and render, however one downside is the fact that they're not cylindrical and sometimes can't be used for things like whiskars, like prismatic mesh primitive. Billboarded hair can be oriented in any direction as well as controlled by a map to produce things like grass and tree leafs.
  3. Proxy hair (use any arbitrary set of objects as hair. Great for managing large leafy scenes such as forests or bird feathers)
    Proxy mesh-based hair allows you to take any mesh object (or a set of objects) in the scene and use it as a strand. Ornatrix will literally stretch the object along the strand and deform it using strand transforms. There are options to inherit hair's shape, thickness, orientation, and UVs for any number of arbitrary mesh objects. If multiple objects are added to the list, they will be randomly assigned to each strand. Randomness can be controlled through a seed parameter.
    Orientation can be easily controlled with same parameters as used for billboarded hair. Proxy hair is great for things like bird feathers, tree leafs, and forests.
    • Texture Coordinates and Mapping Channels
      If "Per Strand UV Coords." option is checked then proxy mesh generated for each strand will reuse the same texture coordinates as the incoming proxy mesh. If that option is off, then each mesh will have the texture coordinate of the underlying distribution mesh at each strand's position. This, in addition to adding multiple mapping channels with their own settings, allows using textures which vary with the surface of the distribution mesh and also with the strand geometry.
    • Material ID Assignment
      • If "Scatter Randomly" option is off, a material ID will be assigned to each generated strand mesh according to the incoming proxy mesh which was used. For example, if a strand uses a mesh which is the 2'nd on the list, it will have material ID 2 in the resulting mesh. This allows using a sub-object material to assign different materials to different generated strands.
      • If "Scatter Randomly" option is on, a material ID will be generated randomly for each mesh, or derived from the provided scatter map and/or strand group, similar to billboard hair.
    • Mesh Twisting
      The proxy mesh is stretched along the source strand, however, determining its twist can sometimes produce unwanted results. Use the <a href="orientBasedOnStrand.html">orient based on strand</a> option to fix this problem. When this option is on the proxy mesh will always be oriented based on the strand's current shape instead of a global twist angle.

Parameters

  • Strand Group
    Allows you to isolate the effect of this modifier by selecting a Strand Group created in the Edit Guides modifier.
  • Tangent normals
    When on, render normals generated on the mesh are actually hair tangents (perpendicular to normals). This option should be used when using Ornatrix shaders to render the hair.
  • Face camera
    When using billboarded hair, during a render this option will orient all billboards to face the camera.
  • Number of sides
    When using cylindrical hair this option sets number of sides of each hair cylinder. Total number of triangles (faces) in the mesh then becomes NumStrands * ( PointsPerStrand - 1 ) * NumSides * 2
  • Uniform scale
    If this option is on, generated proxy meshes will be scaled down uniformly (along all -X, Y, and Z axes) based on strand length.
  • Inherited properties
    Determine which hair properties are inherited from underlying hair, and which properties are ignored. For example, if you wish for your objects not to deform with the strand length-wise, turn off the shape inheritance.
  • Conform To Surface
    When on, the roots of the hair meshes will be aligned with the distribution mesh surface. This causes the hairs to appear to be glued to the surface.
    • Ignore Surface (Default)
      Base of hair meshes will be aligned with the hair's tangent
    • Surface Normal
      Base of hair meshes with be aligned with the base surface


Length Modifier

Length operator modifies the length of guides or hair. It can decrease the size of each strand or increase it by making it longer. Length can be specified on a global level or it can vary through the hair structure depending on user-specified map and channel values.

Parameters

  • Strand Group
    Allows you to isolate the effect of this operator by selecting a particular Strand Group created in the Edit Guides operator.
  • Value
    Multiplier for strand lengths. Value of 1 means the length remains the same. Value of 0.5 means the strands will be half as long.
  • Use Scaling
    When on the strand length will be changed by uniformly scaling all points on the strand, preserving its overall shape.
  • Use Absolute Length
    When on, set absolute strand length value in world units instead of a scaling factor.
  • Scale Width
    When on, the width values of the hair will be adjusted based on how the strand lengths are changed.
  • Value Multiplier
    Here you can use a map to control the length of the hair and create different effects. For example, to have shorter strands where the hair merges with the skin.
  • Minimum Value
    After applying randomization and maps the value will not be allowed to be lower than this parameter. Use this to clamp the size of short strands.
  • Maximum Value
    After applying randomization and maps the value will not be allowed to be higher than this parameter. Use this to clamp the size of long strands.
  • Randomize
    Allows adding some randomness to the strand lengths. Value of 0 means all strands will have the same length value applied. Value of 1 will completely randomize applied strand lengths.


Push Away from Surface Modifier

It is generally desirable for guides not to penetrate the surface from which they are originating. However, during editing it is easily possible for such intersections to happen, especially if many guides are edited en-masse. Use the Push Away From Surface operator to solve this problem. Contrary to the Push Away From Surface button in the Edit Guides operator, the user can include additional collision meshes to the groom.

Parameters

Strand Group

Allows you to isolate the effect of this operator by selecting a particular Strand Group created in the Edit Guides operator.

Distance

With this parameter you can control the distance at which the guides should be away from the mesh.

Amount Ramp

The Ramp Curve give you the ability to control the effect of this operator from root to tip.

Collide With Distribution Mesh

This options allows the user to include or exclude the base mesh from the collision list.

Collision Meshes box

Adding additional Collision meshes to your groom is really simple, click the Add Collision Mesh button and select the mesh in the viewport. In the list you can see the objects that are part of the collision system.

Force Zero Distance To Dist Mesh

When this option is on the strands will always "stick" to the distribution surface

Missing Something? Let us know if this page needs more information about the topic.


Symmetry Modifier

When working with meshes symmetry is often used to speed up the process by copying changes from one side to another automatically. Similar technique can be applied to Ornatrix strands (hair or guides). You can model only one side of your hair and watch the other side update automatically to reflect the changes.

The best strategy is to use symmetry on guides. Because symmetry doesn't produce any surface information the guides on the other side have to be re-projected onto the surface to get sensible results. This can be done automatically using the Ground Mirrored Strands option.

Editing Symmetry Plane

Use the drop down menu to select the symmetry axis.

Parameters

  • Strand Group
    Specifies the group of strands which will be mirrored
  • Ignore Distance
    Specifies distance of strands from the symmetry plane which will not be mirrored to the other side.
  • Use Ignore Distance
    Toggles strand exclusion based on distance from symmetry plane.
  • Ground Mirrored Strands
    When turned on, this option will attempt to automatically place the mirrored strands onto the distribution surface. This allows hair from guides operator to be applied directly above this operator to generate dense hair without having to add a ground strands operator in between.


Surface Comb Modifier

Surface Comb operator is designed to procedurally define the shape and orientation of character fur along a surface. It can be used to style large number of hairs at a macro level by using directional vectors to specify their flow and a curve to define their shape relative to the distribution surface.

Workflow

When Surface Comb operator is added you will see your hair change shape right away. It will be bending towards the surface and oriented in one direction. There are two controls to adjust right away: the slope graph which changes the shape of the hairs, and the sinks which direct the hairs along the surface.

Creating sinks

Start by pressing the Add Sinks Tool button, then clicking and dragging on the character's surface mesh. This will create an arrow inside the viewport which will direct the hair. You can see the changes in real-time as you drag this arrow. You can add as many sinks as needed.

Keyboard Shortcuts

  • Ctrl + Right Mouse Button click when in sink editing mode for attract sink type
  • Left Mouse Button click once for repel sink type
  • Click and drag for direct sink type

Editing sinks

If you want to modify a sink after creation press the Sinks Editing Tool button, hover over the sink root to select it, then click and drag to modify the overall sink position, or select the sink arrow tip to modify its direction.

Deleting sinks

Press the Sinks Editing Tool button, hover over the tip arrow of the sink you want to delete to select it, then press the Delete Sink button.

Parameters

  • Strand Group
    Specifies to which hairs this operator will be applied. Hairs not belonging to specified strand group will be ignored.
  • Random Seed
    A randomness value to apply to parameters such as Chaos.
  • 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.
  • Slope Ramp
    Controls the bending of hair strands towards the distribution surface.
  • Slope Multiplier
    Allows using a texture map to vary the amount of Slope (bending towards surface) of hairs along the surface.
  • Slope Channel
    Allows using a guide channel to vary the amount of Slope (bending towards surface) of hairs along the surface.
  • Sink Orientation Type
    Controls whether strand orientation is changed locally or globally relative to the whole object
  • Sink Orientation Multiplier and Channel
    Allow to vary the sink's angle relative to the surface using a texture map or a strand channel.
  • Use Vector Orientation 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.
  • Minimum Bend Value
    Starting angle for bending the strands with -1 being opposite of surface normal. This parameter with the next one control how the hairs are bent relative to the surface.
  • Maximum Bend Value
    Ending angle for bending the strands with -1 being opposite of surface normal.
  • Per-sink slope ramps
    While the Slope Ramp parameter allows specifying the shape of the strands globally it is also possible to specify the shapes for individual sinks.

To specify the slope shape for a specific sink first select it and then press the Override button in the Slope Ramp Override group of the Attribute Editor. You can now expand and modify the ramp to affect the selected sinks.

Due to some limitations the ramp control might not refresh its visual appearance after sinks are selected. This is benign, however, and you can get visual feedback as soon as you start editing the ramp.

To revert selected sinks back to using the global slope ramp use the Reset button.


Strand Groups

A strand group is an integer value assigned to each guide or hair strand. Strands belonging to a specific group can be edited separately by various Ornatrix operators. Ornatrix operators provide an option to specify one or more groups which it will apply to. You can use multiple operators stacked on top of each other to separately style hairs belonging to different groups.

For example, you can have half of your character's hairs belong to group 1 and another half to group 2. Two Change Width modifiers can then be added, one which works on group 1 and another on group 2. One operator can change the first half of the hairs width to be thinner while the second operator can change the second half of the hair to be thicker.

Specifying Strand Groups

The most typical way to specify strand groups is to do it on guides, but strand groups can also be created directly on hair strands if Edit Guides modifier is added on top of Hair From Guides modifier. To do this:
  1. In Edit Guides modifier enter Roots mode and select one or more strands, you can also use the Selection brush in Brush mode.
  2. Go to the Strand Groups tab and check the "Use Strand Groups" box
  3. Use the Current Strand Group Index slider to choose a group where the selected strands will be included and click Assign
  4. Alternatively you can click Assign Unique and a unique strand group index will be assigned to the selected strands

If you are using Hair From Mesh Strips operator, you can use the per-strip controls to directly specify group index for individual strips.

You can also use the Generate Strand Data modifier to procedurally generate groups using an expression, a map, or even randomly.

Using strand groups

When using various hair operators in Ornatrix you can specify a Strand Group parameter to them.

The value of this parameter will determine to which strands the operator will be applied. This parameter can specify a single group, or a pattern of groups as described below. An empty value, or a value of 0 will apply the operator to all strands which do not have a group assigned. In other words, 0 is the default strand group index.

Strand Group Patterns

Strand Group Patterns allow you to create different combinations of strand groups.

The following is a list of combinations that can be used for strand group management.

  • Single groups:
    Enter a single value to affect a single strand group.
  • Multiple groups:
    Enter two or more values separated by a comma to add multiple groups. I.e. 1, 3, 5 will add groups 1, 3 and 5.
  • Range of groups:
    Use a colon to specify a range of groups. I.e. 1:5. This combination will add the groups from 1 to 5.
  • All groups except one:
    Exclude a single group. I.e., use ^4 to exclude group number 4.
  • Range of groups with a single stride:
    Add a range of groups with a stride by using a colon to separate each group. I.e. 1:10:2.
  • All groups higher than:
    Use a plus (+) symbol to add all groups higher than the entered value. I.e. +2 will add all groups starting from group number 2.
  • Excluding a range of groups:
    Is possible to exclude a range of groups. I.e. ^4:6 will exclude from group number 4 to number 6.
  • Single group and a range:
    Include a single group and a range by entering a single value followed by a range separated by a comma. I.e. 1,3:5 will include group number 1 and jump to a range from group number 3 to number 5.

Related Topics

  • Working with Strand Channels
  • Edit Guides Modifier

Missing Something? Let us know if this page needs more information about the topic.


Your First Groom

In this guide we are going to apply what we have learned in Basic Ornatrix Concepts. We will create a groom for our teddy bear model while trying to keep it as procedural as possible. Starting from root generation, combing, hair interpolation, details, shading and finally rendering. Download the assets from Here and lets get started!

Preparing the model for grooming

First we have to make sure that our teddy bear have UV coordinates. Some root distribution methods rely on UV coordinates. UVs are also needed if you want to add multiplier maps to Ornatrix operators, like a distribution map in Hair From Guides or Frizz operator to determine where the frizz effect is applied on your groom. Hair From Guides and Guides From Mesh allow you to select the UV channel where the operator is computing, so you can have multiple UV channels and use one exclusively for grooming. This is useful if you want to tweak the root distribution like shown in THIS video or if you want to have individual UVs for texturing and grooming.

Make sure you are grooming on the final character topology. Some Ornatrix operators like Guides From Mesh and Hair From Guides are topology dependent. This means that if the topology of the character changes, the guides and hairs will be regenerated with the new data. However, it is still possible to make changes to the character topology in the middle of grooming, see Root Persistence in Guides From Mesh.

Generating guides

With the Body object selected, go to the Ornatrix menu on the top bar and click Add Hair.

The groom preset selection window will appear. Select the Fur Ball preset to use it as a base, set the Scale to 5% and click Create. This will create a hair object with Guides From Mesh at the base, followed by Edit Guides, Hair From Guides and Change Width. At this point your groom should look like this:

For now we only need Guides From Mesh and we want to work on the operators one by one, so select the last three and delete them, we don't need them for now. Your hair stack should look like this:

Let's change some settings in Guides From Mesh.

  1. In Guides From Mesh the "Even" distribution method is used by default. In this case this method is a good starting point.
  2. Tweak the guide length to your liking (At this point you may need to look for some image references). It was set to 2.5cm when we set the scale of the Fur Ball preset to 5%.
  3. The Point Count amount can be changed later because our groom will be almost entirely procedural, but let's set it to a lower value. By default is set to 10 but we don't need that many details for now. We can increase it later using a Detail operator if we need to smooth out the hair strand when we start to add more effects and fine details to the hair.
  4. Reduce Random Length to 0. We will use a Length Operator later to change the strand length and add length randomization.
  5. Increase Guide Count from 300 guides to 1000 to cover to have enough roots to cover the whole surface and avoid large empty areas.

For now we are done in Guides From Mesh. We end up with the following settings:

Combing the guides

Surface Comb

Go to the Ornatrix menu and add a Surface Comb operator. With this operator we will comb the hair using sinks to define the overall direction of the hair guides. When you first add this operator the guides will look similar to the following image.

Without any Sinks added yet, all the guides flow in an overall direction:

Go to the "Sinks" tab, click the Add Sinks button and click and drag the mouse on the surface of the character to add a new sink.

The hair strands will follow the direction of the sinks. This will help you to quickly groom all the hair strands with a few sinks. Keep adding sinks on the surface until you are happy with the general flow of the strands. Use the Edit Sinks button to select the sinks and move them on the surface. You can also use the Ramp Curve to determine the strength of the sinks over the hair, and you can add unique properties to every sink.

Go to attached video

Creating and Editing Sinks

Generating hair strands

Go ahead and add Hair From Guides using the Ornatrix menu. This operator will generate dense hair interpolated between the guides. The hair density is determined by the Render Count (The hair density at render time) and the Count Fraction (The hair density on the viewport), the default value is set to 10000 and 10% respectively.

Let's make some adjustments in this operator:

  1. First, increase the Count Fraction so we can see more hairs in the viewport.
  2. To improve the interpolation and get a more even distribution of hairs go to Guide Interpolation tab and select Barycentric as Guide Selection.
  3. In Barycentric Interpolation Type select Manual Triangulation.

Leave the rest of the settings as default. At this point your teddy bear should look like this:

Right now it is adding hair on the whole character, but we don't want that. We want to remove the hair from the eye sockets and mouth. Also we want to gradually decrease the hair amount on certain areas like around the eyes and nose. For this task, we will use a distribution map.

Open your favorite painting app and paint with pure black the areas where you don't want hair like inside the mouth and the eye sockets. Then create another layer to add a gradient where we still want hair, but we want to reduce the amount. This is how my distribution map looks like:

The seems are also painted in a light gray to use this map as a length map later to reduce the length of the fur on the seams.

Connect the distribution map to the Distribution Multiplier slot in Hair From Guides. The hairs will be removed from the areas painted in black:

Detailing

Adding details using strand channels

Now we can add fine details using strand groups but mostly strand channels. Go back to Surface Comb and add Edit Guides on top of it. Create a per-strand channel as shown in Working with Strand Channels and name it "LengthCH" or something recognizable.
We are going to use a Length operator to reduce the length of the fur around the mouth, ears and nose. Add a Length operator and assign the strand channel "LengthCH" that we just created to the Value Channel parameter.

Your hair stack should look like this:

In the recently created per-strand channel all the values are set to black, this means that the length of the fur will be set to 0, let's go back to Edit Guides to change that. In Root editing mode select all the guides, select the LengthCH channel, in the Channel tab set the Current Channel Value to 1 (1 = White and 0 = Black) and click Assign Value to Channel.

Now that the length is set to 1 in all the guides, use the Paint Brush in brush mode to paint darker values around to eyes, nose, ears and wherever you want to reduce the length of the fur. You will see the changes in real time.

Go to attached video

Working with Strand Channels

You can also use a a texture map to determine the length of the fur in certain areas or use the distribution map that we painted before as it is or add more darker areas. This is the final fur length:

Clumping

It's time to add some clumping. Add the Clump operator after Hair From Guides. If press the Create Clumps button in the Clumps tab it will generate 10 random clumps by default. Start playing with the Clump Count number to adjust to clump amount to your liking. Note that you have to click Create Clumps to see the changes every time you change this number.

At this point I recommend to increase the hair density to have a better idea of how the clumps will look on the final render. Another alternative is to use Mesh From Strands to convert the hair into meshes to take advantages of Cinema 4D viewport display capabilities.

Go to attached video

Real-time viewport hair rendering in Cinema 4D viewport

This is how our teddy bear looks with 6000 clumps and 50000 hair strands:

This is how it looks after adding a strand channel like we did with the Length operator. I used this channel to decrease the clumping amount in some areas and add some variations. Notice the difference with and without the painted strand channel:

Sub-Clumping

[Intro]

[Example Sub-Clumping]

[Explanation]

[Final Results]

Frizz

We are close to a conclusion, in this final step of the grooming process we are going to add some frizzing to the fur to make it look more natural and fluffy. Add the Frizz operator on after the Clump operator and reduce all the parameters to 0, except the Amount. This will allows us to add some volume to the fur without getting interference from other effects found in the Frizz operator like Scale or Outlier strands, we will add those later.

Now play with the Amount value until you get something reasonable. This also help us to break up the patterns created by the clump operator:

Now let's add some outlier hairs. Add another Frizz operator on top of the previous one, but this time reduce the Amount value to 0% and play with Outlier Amount and Outlier Fraction to add some outlier hairs.

Here you can see the difference with and without outlier hairs, where Outlier Fraction is set to 40%:

And you can always use a strand channel to fine tune where the frizz is applied.

Eliminating fur interpenetration

Our guide grooming has been procedural so far, this means that it is not perfect. In the image below you can notice the fur penetrating in the character mesh in some areas like the ears. In this section we are going to make use of the Push Away From Surface operator to eliminate those intersections.

The fur intersecting with the character mesh around the ears:

Open the Ornatrix menu and add the Push Away From Surface operator after Hair From Guides. You can also add it before it, but then it will only push way the guides, you may want this in some scenarios or to save performance since this operator will be computed at each animation frame, but using it after Hair From Guides ensures that every single strand is pushed away from the surface.

Even with the default settings, Push Away From Surface sill remove most of the fur interpenetration:

Final thoughts

In the first part of this tutorial we have applied the topics found in the Basic Ornatrix Concepts article. From hair generation to grooming and detailing.

After applying the techniques (Optional) shown in the Real-time viewport hair rendering video from the Clumping section, this is how our teddy bear should look in the viewport:

In this case Mesh from Strands was only added for viewport visualization purpose, it is not needed for the final render if you are using Redshift, Arnold or any of our natively supported render engines.

This is how our hair stack looks up to this point:

In the next part we will take this groom to the next level. We will learn about hair shading and rendering using Redshift and Arnold.

Project files and Sample Scene

Here you can find a folder with all the assets used on this tutorial. The folder includes a .obj file of the teddy bear, the distribution map used in Hair From Guides, the final scene accomplished in this tutorial and a second version of the final scene with Mesh From Strands for proper viewport visualization. The scene was created in Cinema 4D R21 and will be updated with the latest versions of Ornatrix to ensure compatibility.

Sample scene changes notes

1.0 - Scene created in Cinema 4D R21.115 and Ornatrix 1.0.0.21988.


Writing Plugin Brushes

Overview

In Edit Guides operator you can use plugin brushes to brush hair in any user-defined manner. This provides unlimited possibilities to hair editing via our brushing interface by allowing you to quickly and easily prototype and develop custom brush tools. The brushes are written in VFX-friendly Python language and saved as .py files into our common "User Brush" directory. Ornatrix will automatically discover user brush scripts and make them available for selection via the Attribute Editor.

User brush directory

The plugin brush files are located in "scripts/Brushes" in the Ornatrix installation directory. The standard locations are:
  • Windows: "C:\Program Files\Ephere\Ornatrix for Maya\scripts\Brushes".
  • Linux: "/opt/Ephere/Plugins/Autodesk/Maya/Ornatrix/scripts/Brushes".

Brush scripts are read once when Ornatrix is loaded. To refresh the brush list with newly added brushes and/or reload modified scripts, press the "Reload Brushes" button in Attribute Editor. All "*.py" files from the user brush directory are read; error and diagnostic messages are printed in the Maya Script Editor window.

Writing a brush Python file

Structure and hooks

The brush script contains standard Python code that is executed by the Maya Python interpreter. The Ornatrix functionality can be accessed by importing the Ornatrix Python module.

The entire brush script is executed once when it is loaded. After that, hooks are executed on each brush stroke.

Evaluate

def Evaluate( guidesEditor, brushParameters, brushDirectionInObjectSpace, brushStrokeLength, strandIndices )
An Evaluate function with the above signature must be defined in the brush file and is called on each brush stroke. It receives the following parameters for processing:
  • guidesEditor - an IGuidesEditor object
  • brushParameters - a BrushParameters object
  • brushDirectionInObjectSpace - a Vector3 vector giving the direction of the brush stroke
  • brushStrokeLength - float giving the length of the brush stroke
  • strandIndices - a list of integer strand indices affected by the brush stroke

PreCompute and PostCompute

TODO

Brush name

A BrushName string can be defined in the script to identify this brush in the list of user-defined brushes. If this is not defined, the file name is used.

Ornatrix Python Module

The embedded Ornatrix Python module (from Ornatrix plugin file) provides access to Ornatrix functionality for the brush script, including functions for querying and editing the hair object, access to brush parameters, etc. The module name is ephere_ornatrix, and it can be imported e.g. as:

import ephere_ornatrix as ox

This module can only be used when the Python interpreter is started by Ornatrix.

Vectors

The ox.Vector3 class provides common vector operators and functions such as addition, subtraction, dot product (Dot), squared length (LengthSquared), etc.

Coordinate space

The ox.CoordinateSpace enum is used to indicate the coordinate space for hair vertex coordinates. The allowed values are ox.CoordinateSpace.Strand (strand space) and ox.CoordinateSpace.Object (hair object space).

Guides editor

The IGuidesEditor object is passed as first parameter to Evaluate and has the following methods:
  • GetEditableGuides() - returns a hair interface, IHair, that can be used to manipulate the current hair object.
  • GetVertexWeights(strandIndex) - returns a list of weights for the vertices of the corresponding strandIndex during the current brush stroke. Vertex weights vary from 0 (vertex not affected) to 1 (vertex fully affected) and reflect fall-off from the brush center.

Hair interface

The hair interface IHair provides the following methods for querying and modifying a hair object:
  • GetStrandPoints(strandIndex, coordinateSpace) - returns list of Vector3 coordinates of strand vertices.
  • SetStrandPoints(strandIndex, pointsList, coordinateSpace) - sets strand vertex coordinates to the Vector3 values from pointsList

In the above functions, coordinateSpace is an ox.CoordinateSpace enum value.

Also, the following methods for manipulating hair data channels are available:
  • GetChannelIndex(strandDataType, channelName)
  • GetStrandChannelCount(strandDataType)
  • SetStrandChannelCount(strandDataType, count)
  • GetStrandChannelData(channelIndex, strandIndex)
  • GetStrandChannelData(channelIndex, strandIndex, pointIndex)
  • GetVertexChannelData(channelIndex, vertexIndex)
  • SetStrandChannelData(channelIndex, strandIndex, floatValue)
  • SetStrandChannelData(channelIndex, strandIndex, pointIndex, floatValue)
  • GetUniqueStrandChannelName(strandDataType, rootName)
  • GetStrandChannelName(strandDataType, channelIndex)
  • SetStrandChannelName(strandDataType, channelIndex, name)

Brush options

The BrushParameters object provides read-only access to brush options set in the Attribute Editor. The currently implemented parameters are:

  • GetStrength(usePenPressure = True) - retrieves the Brush Strength (float)
The following properties can be used to query GUI brush options. The property names are the same as in the GUI
  • affectSelectedOnly (bool)
  • affectByRootsOnly (bool)
  • respectVertexWeights (bool)
  • preserveStrandLength (bool)
  • optimizeStrandGeometry (bool)
  • resampleStrands (bool)

A quick example

# Import embedded Ornatrix module
import ephere_ornatrix as ox

# User-defined brush name, shown in the drop-down list for brush selection. If not defined, the file name will be used
BrushName = 'Demo Move'

def Evaluate( guidesEditor, brushParameters, brushDirectionInObjectSpace, brushStrokeLength, strandIndices ):
    """Applies a brush stroke to a list of strands."""

    hair = guidesEditor.GetEditableGuides()
    brushStrength = brushParameters.GetStrength() * brushStrokeLength

    for strandIndex in strandIndices:
        # Multiply strength by soft selection if only affecting selected strands
        strength = brushStrength if not brushParameters.affSelOnly else brushStrength * hair.GetStrandChannelData( 0, strandIndex )
        delta = brushDirectionInObjectSpace * strength
        strandPoints = hair.GetStrandPoints( strandIndex, ox.CoordinateSpace.Object )
        vertexWeights = guidesEditor.GetVertexWeights( strandIndex )
        # Start from 1 to avoid modifying the root vertex
        for pointIndex in range( 1, len( strandPoints ) ):
            strandPoints[pointIndex] += delta * vertexWeights[pointIndex]
        hair.SetStrandPoints( strandIndex, strandPoints, ox.CoordinateSpace.Object )


Strand Channels

  • Strand Channels
    • Creating Strand Channels
    • Using Guide Channels
    • Related Topics

Guides in Ornatrix are used to define the shape of hair without having to deal with thousands of strands individually. By default, guides consist of information such as vertex positions, root on surface information, and strand selection. Sometime it is useful to add extra information to guides to control some additional hair properties such as clustering, curling, or local dynamics and animation.

Channels allow users to add extra data to guides that can be used later on. There are two types of guide channels used by Ornatrix: Root and Vertex channels.

Root channels hold a single data value per every root (strand). This is a compact way of defining information that is uniform for every strand. It can be very effective for controlling properties that usually don't vary along strand length (such as hair density and dynamics properties).

Vertex channels hold Per-Vertex data. Every knot that defines the shape of every strand will have a value attached to it. This is more memory consuming than root channels and it allows you to control anything at any point on the hair model. Vertex channels can be useful to control clustering, frizz, and hair shading.

Creating Strand Channels

The most typical way to specify strand channels is to do it on guides using Edit Guides. You can also add this operator on top of Hair From Guides to create channels directly on hair strands, however this method is more memory consuming. Guide channels can also be procedurally generated, visit the Generate Strand Data operator documentation page to find out how. In this page we will create them manually using Edit Guides operator. To do this:

  1. In Edit Guides enter Brush mode and go to the Channels tab.
  2. In the Strand Channels box select --Per-Strand Channels-- to create a Root channel or --Per-Vertex Channels-- to create a Vertex channel and click the Add button, enter a name for your channel and click OK. The best strategy is to name channels according to their purpose, and organize so you know clearly which channel performs which operation.
  3. Switch to the Paint brush, use the Current Channel Value slider to choose a gray scale value between 0 and 1.
  4. Select the newly created channel and use the brush to paint them.

Painting a Per-Vertex channel

Painting a Per-Root channel

Note: The first root and vertex channels are reserved for internal Ornatrix selection. Therefore, these two channels cannot be removed. They can, however, be edited and assigned but Ornatrix can change their state at any time.

Using Guide Channels

Channels can be made very helpful and even irreplaceable in many places during the process of hair management.

Most operators support guide channels to control the influence of an operators and its parameters. To use a guide channel, expand the Amount channel list on the chosen operator and select a guide channel.

In the following image a guide channel is used to control the Frizz amount on the Frizz operator:

A single guide channel can be reused in as many operators as you need.

Related Topics

  • Working with Strand Groups
  • Edit Guides Operator
  • Generate Strand Data

Missing Something? Let us know if this page needs more information about the topic.


Rendering with Redshift

Ornatrix supports native rendering with Redshift 3D renderer. This means that the hair doesn't need to be converted to a mesh or curves as an intermediate step and instead is fed directly to Redshift 3D for rendering. This saves time and memory and produces better looking results, especially when used together with Redshift's own hair shader.

To render hair with Redshift, simply change renderer to Redshift 3D and press render:

By default, Ornatrix will use the UVs of the distribution mesh for the hair strands, but you can assing per-strand colors and gradients using the RS Hair Random Color and RS Hair Position.

Shading Ornatrix Hair with Redshift

Per-Strand Color

Ornatrix automatically export the UVs and Curve IDs to Redshift, this allows you to create complex hair shaders adding color and texture variations. The Hair Random Color utility texture allows you to randomize a color or texture map across all hair strands using the curve ID data provided by Ornatrix.

In this example you can see how this node can be used to add color variations to the hair. Connect the "Hair Random Color" utility texture to the Diffuse Color input of the hair shader:

Then play with the Hue, Saturation and Value amount until you get the desired effect:

Hair Position

Hair Position utility can be used to get the positions along the hair strands, allowing you to texture the hair from root to tip, adding gradients and other effects.

In this example, we use a Redshift Ramp Texture to add a gradient color along the strands. The Hair Position node should be connected to the Uv Coord input of the Ramp Texture node:

Then connect the Ramp Texture to the Diffuse Color channel of the hair shader or any other input that you would like to control using the ramp texture:

Hair Antialiasing

The Hair Min pixel width option can be used to alleviate aliasing issues by thickening and adding some transparency to the hair strands at render time. Besides, this technique helps to reduce the noise and artifacts making the hair looks cleaner.

To activate this option go to Render Settings, with Redshift selected as current rendering engine go to the Optimization tab, expand the â€œMin pixel widthâ€ section and check the "Enable" checkbox. For more information about all the parameters found in the Hair Min pixel width section please go to Redshift Documentation

Hair Shading sample scene

A sample scene with RS Hair Position and RS Hair Random Color can be downloaded from "HERE.":PlaceHolder.com The scene contains a basic stack with two hair objects showing the output given by both nodes.

Shading Feathers

You can easily texture feathers generated by the Mesh From Strands operator. The resulting meshes can be generated with as many UV sets as you need for texture layering. In the following example we are going to explore how Mesh From Strands and different UV sets can be used for feather texturing.

Generating feather meshes

Add Mesh From Strands at the top level of your hair stack. Now your hairs have been converted to mesh but every operator under Mesh From Strands still affects the meshes. You can add a Change Width to determine the shape of the feathers using the ramp curve. But since we are going to use an alpha map to determine the shape of the feathers we don't have to draw a custom shape, just use the Width amount to increase the width of the planes as you desire:

Generating UVs

We need at least two channels of UVs for proper texturing: One UV channel where the feathers inherit the UVs from the distribution mesh, allowing us to texture the feathers with the same texture as the distribution mesh. One Per-Strand UV channel to texture the polygon planes from root to tip, allowing us to apply the alpha feather texture on a Per-Strand basis.

To generate the necessary UV channels go back to Mesh From Strands. In the UV Mapping tab, increase the Map Channel Count to 2, this creates two UV channels for us:

The hair object now have two UVW tags. Use the Selected Map Channel parameter to select between the two channels. The Mapping Type of the first channel is channel to One UV at each vertex by default, this allows the feathers to inherit the UVs from the distribution mesh. Use Selected Map Channel to select the second channel, leave the Mapping Type of this channel as it is but turn on the Per-Strand Coordinates checkbox.

Linking the textures to the UVs

Now that the UVs are ready we can link each channel to a different texture. To do so:

Add a Redshift material to the hair object and open it with the Redshift Shader Graph. We are going to link one texture to each channel: A feather alpha map and a texture color map. Add two texture nodes and load any alpha map for a feather. In this case I had to extract the alpha from the texture using a RS Color Splitter. Finally, go to the UV section of the texture node of the alpha map and write the name of the Per-Strand UV channel we created previously, in this case is the channel2:

Connect the color texture the same way, but this name you should link it to channel one to get the colors from the distribution mesh. If we launch a render we should get something like this:

Troubleshooting

Ornatrix hair is not rendered when a RS Hair Shader is applied to it:

As of Redshift version 2.6.40 the default transparency attribute on the Redshift Hair Shader is one instead of zero, making the hair invisible on the render. Set this value to 0 to render the hair properly.

Minimum Requirements

  • Redshift Version 2.6.36 or newer


Rendering with Octane

Rendering of hair using Otoy Octane built-in hair primitive is not currently supported. However, you can add Mesh from Strands Modifier at the end of the stack to render the hair with Octane render.


Rendering with Arnold

Ornatrix supports rendering hair with Arnold for Cinema4D plugin. No special steps are required for rendering hair with Arnold, all Ornatrix hair will appear inside rendered view.

Requirements

Arnold version 2.6.1 or newer is needed

Installation

Ornatrix C4D Arnold plugin is automatically installed by the installer, no additional steps are necessary. The following file is copied into C4D's installation path:

  • <c4droot>/plugins/Ornatrix/OrnatrixArnoldTranslator.xdl64


Scatter Modifier

Scatter operator copies a set of strands from one object onto every strand in another object. This allows to create complex hair objects such as feathers, trees, and grass patches. By combining the Scatter operator with Propagation modifier one can generate strands on top of other strands to define an "instance" like a feather to be scattered on a surface using a separate hair object.

Scattered instances can be controlled via randomization, a map, or a strand channel. Data from scattered strands is copied into the target hair object.

Go to attached video

Go to attached video

Scattered strands widths

The width of scattered strands is controlled by the input strands width. This allows, for example, for a generic feather to be used as a reference object and this feather to be resized differently for each strand based on input strands width.

The actual widths of resulting strands is adopted from reference strands unless otherwise selected in Scatter settings.

Parameters

  • Strand Groups
    Use Strand Groups patterns to isolate the effect of this operator to certain area of the hair.
  • Distribution Method
    Select how the reference strands should be scattered: When Random method is selected and more than one reference strands are added, the Scatter operator will randomize them evenly across the surface.
    • If Channel method is selected, the reference strands will be scattered only in the selected Per-Strand channel.
    • If Map method is selected, you can load or paint a texture map to determine where the reference strands should be scattered.
  • Random Seed
    Change this value to shuffle the positions of the scattered objects when using more than one reference strands with Random distribution method.
  • Distribution Channel
    Select the Per-Strand channel where you want the reference strands to be scattered. This parameter is only active is Channel distribution method is used.
  • Distribution Map
    Load or paint a texture map to determine when the objects should be scattered on the surface. This parameter is only active is Map distribution method is used.
  • Target Width Method
    Select the target method for the reference strands width:
    • Reference mode will use the strand width values found in the reference stands object selected or the values used in the Change Width operator found in the hair stack of the reference strands object provided.
    • Input Width mode will use the width values found in the target hair object or the hair stack where the Scatter operator was added.
    • Proportional mode will make the scattered strands proportional to the reference.
  • Output Strand Shape
    Determines the shape of output strands:
    • Reference: the reference hair shape is reproduced at each input strand. The entire reference hair (all reference strands) is mapped onto each input strand. The input strand shape (grooming etc) does not affect the output; each output strand follows exactly the shape of one reference strand.
    • Input: the input strands retain their shape, and only the propagation structure of the reference strands is copied to the output (so, for example, a single-feather reference will result in feathers in the output, having the structure of the reference but the stem shape of the input strands). One reference strand (non-propagated) is mapped onto one input strand.
    • Adopt Input Shape: the entire reference hair is mapped onto each input strand. Each reference strand is scattered around the input strand, adopting it's shape, but repeating the shape variation of the reference hair around the input shape (and also retaining the reference propagation structure). So, for example, if braided reference is scattered using this method, each reference strand will weave around the input strand shape, thus reproducing the braid at each input strand following the reference pattern.
    • Envelop Average: similar to the previous one, but using the average shape of the reference strand to determine the scattering distance around the input stem. It can be useful for symmetric references, such as braids, and can allow reproducing some finer shape details of the reference hair than the previous option. However, for non-symmetric references (e.g. multiplied strands or hand-groomed references) this option may lead to some shape distortions.
  • Copy Input Strands Groups
    Copy the Strand Groups from the input strands.
  • Enable in Viewport
    Allows you to choose if the generated feathers will be displayed in the viewport or not. When this option is off, the generated feathers are only visible in the final render. For better viewport navigation and performance, we recommend you turn off this option.

Texture Generation

This set of parameters controls how texture coordinates are generated for the output scattered strands. Use these options to introduce textures to your feathers and foliage.

  • Texture Coords
    Specifies the method for generating the texture coordinates
  • Texture Islands
    Specifies the method for creating texture islands in the texture atlas
  • Islands Channel
    Allows to control the texture island placement using a strand channel. Values within the channel will determine which island each strand will end up going to.
  • Max Island Count
    Number of equal subintervals in the 0...1 range of channel values that are assigned to different texture islands
  • Island Scaling
    Determines the scaling of individual texture islands in the atlas


Rotating Strands

Rotate strands operator defines the twist value of individual hairs. Normally, the rotation in hairs around their stem doesn't matter because they are cylindrical. However, there are also times where such a rotation plays a big role. For example, if you use the Mesh from Strands operator to skin a flat billboard or a proxy mesh along the length of each strand, you need to define which way the said billboard or proxy mesh will be facing. If some operation is performed around a guide, such as curling, it is also important to define the starting rotation of the guide's stem.

This operator gives you the control of defining the rotation around the individual strand stems. You can have the strands face in a particular direction, for example, towards the distribution surface, or you can have them be randomly orientated.

Parameters

  • Strand Group
    Allows you to isolate the effect of this operator by selecting a particular Strand Group created in the Edit Guides operator.
  • Global Angle
    Defines the rotation angle of the strands. You can use a map to control this parameter using the Global Angle Multiplier slot.
  • Orient Based On Strand Shape
    If this option is on, all the strands will face in the same direction.
  • Invert Global Angle Multiplayer
    Invert the values of the Global Angle parameter.
  • Use Last Point For Strand Vector
    When true the strand's direction vector will be determined between its first and last points.
  • Point Index For Strand Vector
    When above option is false the strand's direction vector will be determined between point at this index and the first point.
  • Twist
    Specifies the angle value, relative to the global rotation, at the tip of each strand. This allows to add twisting to strands around their stem.


Basic Concepts

Summary

In this guide, we will go through the basic concepts of Ornatrix to get you started creating grooms. When you finish this guide you will have a good understanding of the Ornatrix hair stack, operators, hair interpolation, hair distribution and a good understand of common hair workflow in production. After going through the basic concepts, we will create our first groom, animate it, render it and then go over some good practices and suggestions to smooth out your hair creation experience in production.

Note: In this guide, the term "Modifier" and "Operator" will be used interchangeably.

The Hair Stack

Ornatrix hair is often composed of one or more operators, represented as C4D deformers, applying changes one after another to create procedural effects. This stack can be found inside the C4D's Objects tab:

Each operator under the Hair Object item is connected to each other to create the final groom. An operator generates some data, pass this data to the next operator and so on until the data flow reaches the final output. You can add, delete and reorganize the operators in the stack at any point. Changing any parameter will propagate the new data across the hair stack, going trough each operator from the point of modification to the top. New operators can be added using the Ornatrix menu on the main Cinema 4D window.

Guides From Mesh

Guides From Mesh is the first operator inside the hair object stack. This operator is responsible for generating root data a using one of the available root distribution methods, creating guides and scatter them on a mesh. You can Then this data (the generated guides) is passed to the next operator to perform further deformations.

Besides Distribution Methods, several parameters are available to allow the user to tweak final result. For example, the Guide Length parameter determines the length of the hair guide, or you can connect a texture map to the Distribution Map slot to determine the distribution area, where black values equal to 0 guides.

Edit Guides

This is the grooming operator for guides. It allows you to tweak the guides generated by Guides From Mesh by brushing them, creating and deleting guides, grouping, painting and perform other operations which are done by hand instead of parametrically.

[Edit Guides Video]

Edit Guides provides three different editing modes that allows you to interact with the guides in different ways:

Root mode
Allows you to select and manipulate the guides based on their roots.

[Root Mode]

Strand mode
Allows you to select and manipulate the guides as a whole based on the guide vertices.

[Strand Mode]

Brushing mode
Brushing mode is where you perform all the brushing. This method provides a set of brushes that allow you edit the hair in different ways using brushes and other tools like Strand Groups and Strand Channels. The available brushes are:

[Brush Types]

  • Selection Brush
    Use it for strand selection.
  • Move Brush
    Use it comb the hair.
  • Rotate Brush
    A rotation is applied to the strand in the opposite direction of the brush stroke and using the first vertex point that is inside the brush radius as pivot, creating a curve effect.
  • Scale Brush
    The guides inside the brush radius are attracted to or expelled from each other.
  • Cut Brush
    Cut the guides inside the brush radius.
  • Length Brush
    Enlarge or shorter the guides while respecting the limits established in the Brush Min Limiter and Brush Max Limiter parameters.
  • Paint Brush
    Use this brush to paint Per-Root or Per-Vertex Strand Channels that can then be used for shading or to drive all kind of Ornatrix operator effects.
  • Grab Brush
    Similar to the Move brush but only the strands that are initially inside the brush radius will be grabbed and dragged with the brush locator.
  • Revert
    Sets the strands vertices to its initial state before the current Edit Guides operator. In essence, this brush is like an eraser, reverting any changes made to the strands by other brushes.
  • Pull Brush
    Pull the strand vertices away from the distribution mesh eventually straightening them.
  • User Defined Brush
    Allows you to load your own custom brushes defined using Ornatrix's Python API. There are two custom brushes available: Clump brush and Move brush, both of which you can find the Python scripts in the scripts/brushes directory of your Ornatrix installation. For more information on user defined brushes see Writing Plugin Brushes.

Ornatrix brushes can be used with different shapes, like a Circle, a Square or a Line. The line is specially useful with the Cut brush to make straight cuts to the hair.

[Brush Shapes]

All Ornatrix brushes share the same tool context, thus most brushes share the same settings.

[Bruh settings]

In general, brush settings names are descriptive enough to understand what they do immediately. In the settings section you will find the classic controls to change the brush size and strength, and check boxes to activate different features. The ones that you will be using the most are:

  • Use Brush Surface
    When this options is ON, the brush strokes are projected onto the distribution surface. This mode can be used to constrain the brushing changes to make hair or fur flow along the character's mesh surface. Otherwise the brush strokes will modify the hair strands in the screen direction.
  • Affect Selected Only
    Ensures that only the selected strands are affected by the brush actions.
  • Optimize Strand Geometry
    When on, a special algorithm is used for comb, grab, and smooth brushes which affects the whole strand alone its length by calculating the best fit to current stroke while minimizing changes to the strand shapes.
  • Brush Mirror Axis
    Select the axis to mirror the brush actions. Changes made in one side of the hair will be reflected in the opposite side in real-time. This feature works the same with all the brush types. This is very useful when you need a symmetrical hair or fur.
  • Brush Attenuation
    This section includes two ramp curves that allow you to tweak the brush strength attenuation and the strand strength attenuation along the strand, from root to tip.

[Brush Attenuation]

See the Edit Guides documentation for a more in depth description of all the brush settings.

Strand Groups

In the Strand Groups tab you can quickly create and assign groups to the hair guides. Strand groups allow you to sort your strands into distinct regions which can then be used to selectively apply operators down the evaluation pipeline.

When you turn On Use Strand Groups the controls to create strand groups will be unlocked. This section also provides options to select strand groups by its integer number and select the whole group using the Selection Brush or the selection options available in Root and Strand editing modes. To create a strand group, select some guides and click the Assign Unique button. For more information see Working with Strand Groups

Strand Channels

Channels allow users to add extra data to guides that can be used later on. There are two types of guide channels used by Ornatrix: Root and Vertex channels.

Root channels hold a single data value per every root (strand). This is a compact way of defining information that is uniform for every strand. It can be very effective for controlling properties that usually don't vary along strand length (such as hair density and dynamics properties).

Vertex channels hold Per-Vertex data. Every knot that defines the shape of every strand will have a value attached to it. This is more memory consuming than root channels and it allows you to control anything at any point on the hair model. Vertex channels can be useful to control clustering, frizz, and hair shading. See Working with Strand Channels for more details.

To create a strand channel manually:

  1. In enter Brush mode and go to the Channels tab.
  2. In the Strand Channels box select --Per-Strand Channels-- to create a Root channel or --Per-Vertex Channels-- to create a Vertex channel and click the Add button, enter a name for your channel and click OK. The best strategy is to name channels according to their purpose, and organize so you know clearly which channel performs which operation.
  3. Switch to the Paint brush, use the Current Channel Value slider to choose a gray scale value between 0 and 1.
  4. Select the newly created channel and use the brush to paint them.

Painting a Per-Vertex Channel
  1. Alternatively you can select some strands in Root editing mode, or using the selection brush in Brush editing mode,
  2. Use the Current Channel Value slider to choose a gray scale value between 0 and 1.
  3. And click the Assign Value to Channel button.

You can also add Edit Guides on top of Hair From Guides to create channels directly on the final hair strands, however this method is more memory consuming. Guide channels can also be procedurally generated, visit the Generate Strand Data operator documentation page to find out how.

Hair From Guides

This operator is used for hair root distribution and hair interpolation. See the Root Distribution and Hair Interpolation section to learn more. Hair From Guides is responsible for generating dense hair based on the guide data passed by Guides From Mesh. The hair interpolation is performed using one of the several hair interpolation algorithms available in Ornatrix.

As you can see, Hair From Guides UI is very similar to Guides From Mesh, but the first includes extra parameters for hair interpolation, parting and other parameters exclusives to hair generation.

Distribution Settings

The Object tab includes all the settings related to hair distribution, ( see Root Distribution and Hair Parting for other settings ). The following is a list of the distribution settings that you are most likely to use in your first grooms. The rest can be found in the Hair From Guides documentation page.

  • Render Count
    Specifies the total number of roots to generate during rendering.
  • Count Fraction
    Specifies the percentage of roots to generate inside viewports based on the Render Count.
  • Use Render Count
    When ON, the total amount of hairs specified in Render Count will be displaced in the viewport.
  • Distribution Multiplier
    An optional multiplier map for hair density on the surface. A texture map with black and white values, the hair will only be generated on areas painted in white.
  • Distribution Channel
    As explained in Working with Strand Channels and Strand Channel Selection List you can use channels in Hair From Guides as well. Paint a channel to allow hair interpolation only among a group of hair guides. Guides painted black will not produce hair while white values will produce hairs.
  • Displacement Offset
    An optional offset along surface normals of generated guides. Allows you to push away guides from the surface if needed. This is useful when your base model is using a displacement map that makes its surface drastically different from the viewport low poly version where you are creating your groom. Connect your displacement map in this slot to conform the hair strand roots to the displaced version of your base model.
  • Remember Root Positions
    this option will make the operator generate and cache the root positions of rendered hairs. This ensures that the generated hair will remain consistent among shots rendered on different computers since random generation algorithms can vary across hardware. It is a good practice to enable this option when rendering hair on a render farm. Disabling this option will clear the cache. The cache with the root positions will be stored inside the scene by default, but you have the options to store it in a file somewhere in your hard drive.

Change Width

Determines the hair strand width at render time. It gives you direct access to the width values stored inside the hair object, this ensure consistency across all render engines and operators.

Collapsing the Hair Stack

Each Ornatrix operator comes with a "Bake" tab in the Attribute window. In this tab you can find the Collapse up to Here button. This function allows you to collapse the hair up to that point in the stack, combining all the operators below the selected operator into a Baked Guides or Baked Hair operator. If the stack is collapsed below Hair From Guides a Baked Guides operator will be created. If instead the stack is collapsed above Hair From Guides, a BakedHair operator containing the combined operators will be created.

When Baked Guides is generated, it will automatically re-attach the distribution mesh linked to this object, but it also allows you to select a new distribution mesh to transplant the hair object to another character. To replace the base mesh, go to the Ground tab and click & drag a mesh from the Object window to the Distribution Mesh field.

BakedHairAtt
Baked Hair operator

This operator also provides 5 empty slots to load alembic hair files from Ornatrix for Maya, 3ds Max or even other hir system capable of exporting alembic files.

BakedGuidesAtt
Baked Guides operator

In the Baked Guides operator the grounding is done in the Object tab.

Operator Types and Order of Operations

Operator Types

Ornatrix operators can be divided in the following categories:

Generators

Operators that generate strand data from another dependency like a polygon mesh, spline curves or Ornatrix strands.
Between the generators we can find:

  • Hair From Mesh Strips
    Generates hair from polygon mesh strips.
  • Curves From Strands
    Generates splines curves from Ornatrix hair strands or guides.
  • Mesh From Strands
    Generates a polygon mesh from Ornatrix hair strands or guides.
  • Guides From Mesh
    Generates hair guides from mesh.
  • Guides From Curves
    Genersates hair guides from spline curves.
  • Guides From hair
    Generates Ornatrix hair guides from hair strands.
  • Hair From Guides
    Generates and interpolates hair from the given guides.
  • Scatter
    Designed to scatter feathers on strand roots.
  • Generate Strand Data
    Used to generate strand data like strand channels and strand groups based on parameter input or SeExpr.

Deformers

Operators that deform the hair strands or guides. They take the data given by the previous operator in the stack, make some procedural or destructive deformation and pass this data to the next operator to perform the next deformation. Between the deformers we can find:

Note: Click the operator names to go to their respective page.
  • Change Width
    Determines the hair strand width at render time.
  • Ground Strands
    Sets the dependency or distribution mesh for all the guide roots.
  • Frizz
    Adds Frizz and outlier hairs while preserving the strand length.
  • Curl
    Adds waviness and curliness to the hair strands.
  • Clump
    Adds clumping by guide roots, by strand groups and random clumps with tools for manual clump creation and editing.
  • Length
    Used to edit the strand length.
  • Detail
    Change the resolution of the hair strands by increasing or decreasing the amount of vertices per-strand.
  • Surface Comb
    Defines the shape of the fur along a surface using arrow manipulators or "Sinks".
  • Rotate
    Rotate strands operator defines the twist value of individual hairs.
  • Symmetry
    Adds symmetry to the hair object on the X, Y or Z axis and sets the guide dependency or distribution mesh for the mirrored side.
  • Normalize Strands
    De-tangle the hair strands, eliminating inter-penetrations in the hair.
  • Adopt External Guides
    Is used to animate the hair using a set of guides external to the current hair object.
  • Push Away From Surface
    Push the hair strands away from the distribution mesh and other external objects on a per-vertex basis.
  • Gravity
    Adds gravity effect to the hair.
  • Edit Guides
    Allows you to groom the strands generated by Guides From Mesh or Hair From Guides using an intuitive set of brushes and tools.

Animation

Animation operators are also deformers oriented to animation. For example, Moov Physics takes the strand vertices and deforms them based on a PBD simulation.

  • Moov Physics
    This is our CPU based hair simulation engine. Allows the user to create realistic hair simulation using different simulation models like Cosserat a Distance based model or a combination of both. The user have the option to create his own hair simulation scripts using Python.
  • Resolve Collisions
    Deforms the hair vertices to create collisions with the distribution mesh or external objects without a full physics simulation.
  • Oscillator
    Uses an oscillation algorithm to create inertia movement without full physics hair simulation.

Hybrid

Hybrid operators perform both tasks. They generate hair data and and also deform the hair strands.

  • Multiplier
    Multiplies the amount of guides by the specified amount. It also contains parameter to deform the generated hair strands for adding twisting, fluff, shift and spread.
  • Propagation
    Generates hairs or guides along the given strands. This operator is used to create feather objects and vegetation.
  • Animation Cache Modifier
    Record, load and play hair animations in .abc format. This operator uses our own Alembic exporter and can read hair objects imported from any other 3D software, like Maya, 3DS Max, Houdini, and any hair system capable of exporting Alembic animations. It includes parameters to offset the animation and read Strand Channel, Strand Groups and hair Width data.

Order of Operations

In general, Ornatrix operators have descriptive names. As we saw in The Hair Stack section these operators depend on some input data that they can use to compute some calculations. For example, Guides From Mesh depends on a mesh and some of its properties like vertices, polygons and UVs. Operators like Hair From Guides or Frizz depend on strand data to perform their calculations.

After performing the calculations with the given input data, the operator puts the resulting strand data into its output for the next operator in the stack. This means that if the dependency data changes, the operator will be recomputed with the new data and pass the new output data to the next operator. In general, all of the operators that are designed to work on guides will also work on hair strands or the final hair, but it is still important to understand how they work and their purpose to know how to order them and get all the advantages that Ornatrix can offer you.

As an example, you should not place a deformer operator like Frizz, after a generator operator like Mesh From Strands. As a deformer, the Frizz operator accept hair data as input, but when adding Mesh From Strands the hair object has been converted to a polygon mesh, so this operator is not passing hair data to the Frizz operator, so in this case Frizz will not do anything because it is not receiving any input hair data.

Another examples are Guides From Mesh and Hair From Guides. The second will not work with the first because it needs hair input data. So, before adding Hair From Guides, you have to first generate guides using Guides From Mesh or Guides From Curves.

Operator UI

Each operator UI is composed by several tabs. This way the parameters are organized in a logical way for a cleaner UI, but there are several components shared across all operators. In this section, we will understand the logic behind the operator UI and what see what all they have in common.

Operator Tabs

There are two tabs that are shared across all Ornatrix operators: Object tab and Bake tab.

The Object tab contains the main settings of the operator. For example, Guides From Mesh includes all the root distribution settings on the Object tab, since root distribution is the main purpose of this operator.

The Bake tab includes includes a single button called "Collapse up to Here". As we saw in [Collapsing the Hair Stack] link text section, this function allows you to collapse the operator stack up to that point into a Baked Hair or Baked Guides operator.

Besides the Object tab and the Bake tab, some operators have extra tabs dedicated to unique settings. For example, Hair From Guides hair separate tabs for Root Distribution and Hair Interpolation.

Strand Group

In the Strand Group field you can enter an integer value identifying a group of strands in the Edit Guides operator. Strands belonging to a specific group can be edited separately by various Ornatrix operators. Find more details about strand groups in the "Working with Strand Groups" page.

Ramp Curve Attributes

The Ramp Curve attribute is includes in several operators, but only where it makes sense. For example, the Change Width operator sets the width of each hair strand and you can set the width using the "Width" slider, but you can control the width from root to tip using the Width Ramp attribute.

In this window, you can use a curve to control parameters of type amount on several operators, besides Change Width, you can find it in Frizz, Clump, Curl and others, where you can control the frizz amount, clump amount and curl amount respectively.

You are also allowed to create new spline points to tweak the final result and store curve presets for later use.

Strand Channel Selection List

The strand channel selection list allows you to choose a strand channel created in the Edit Guides operator or using the Generate Strand Data operator. In a similar fashion to Strand Groups, Strand Channels allows you to isolate the effect of an operator to certain areas of the hair. See Working with Strand Channels for more details.

Multiplier Maps

Multiplier maps are textures that you can used to control the Amount parameter on most Ornatrix operators. Black values will reduce the effect of the Amount parameter to 0, while White values will set the value to 1.

Root Distribution

Root Distribution is performed by Guides From Mesh and Hair From Guides before guide generation and hair interpolation respectively. Root Distribution scatter root positions on a distribution mesh and then Hair Guides or Hair Strands are grown from them. The available distribution algorithms are:

Uniform
Roots are placed in a linear manner forming a 'grid' around the mesh.
Uniform

Random Area
The roots will be distributed evenly and randomly throughout the mesh but the amount of roots per face is calculated based on the total area of all faces on the mesh.
RandomArea

Random UVs
Similar to Random Area, but it uses the UV area instead. This allows user to control the distribution by maintaining UVW coordinates on the mesh. It is possible to unwrap a character, for example, and have dense placement of hair in some spots than the others by stretching out those areas in the UV editor.
RandomUV

Tuning UV Root Placement

Go to attached video

  • Random Face
    Similar to Random Area but the same amount of roots is generated on every face. Larger faces will tend to have sparser root placement, while smaller ones will have roots more clustered in one spot. This distribution method is more appropriate for meshes with even topology.

  • Per Vertex
    This is a per-vertex distribution method. One root is generated at each vertex of the surface mesh.

  • Face Center
    This is a per-face distribution method, thus one root is generated at the center of each polygon face. This distribution method is more appropriate for meshes with even topology to get evenly distributed guides.

  • Even
    Roots are placed on the surface randomly but it tries to keep the same distance from one another. This method provides the most realistic root placement result for natural hair phenomena.

The Random and "Even" distribution method have a Random Seed parameter to control the randomization. This parameter does not affect the Vertex and Face Center distribution methods.

Hair Interpolation

Hair interpolation is the process of generating dense hair based on some input Hair Guides generated in Guides From Surface, Guides From Curves, Guides From Hair or planted using the Edit Guides operator.

[Interpolation examples]

The interpolation settings can be found in the Guide Interpolation tab. Ornatrix provides several interpolation algorithms for different use cases. Combining between different Guide Selection methods, Guide Interpolation and Guide Count you can find the right hair density generation for your needs.

Guide Selection

The interpolation depends on how close the guide roots are to each other. Guide Selection tells the Guide Interpolation algorithm how close it should interpret the guide roots. You can choose between:

  • Circle
    Each guide have a spherical area of influence and for a given point all guides whose area of influence includes this point are used for interpolation.
  • N Closest Guides
    For a given point N closest guides are used during interpolation.
  • Barycentric
    This method utilizes information from your character mesh and its mesh topology to interpolate hairs between guides. This guide selection method provides better results and should be used by default.

Guide Interpolation

  • Polar
    Use internal strand space, interpolate by rotating transforms.
    Strands are interpolated in their local space so you will see them rotating which might not always be ideal, especially for longer hair.
    If used properly, only a few guides on the whole surface could be required to form a hair volume. Ð downside to this method is that polar interpolation will have two poles (or sinks), where hair will not be well defined and will tend flip. If you only need a part of your surface covered, or if the surface is not fully round, this method is the best to use.
  • Affine
    Uses closest guides, interpolate in object space.
    Unlike the above method, this interpolation type does not take surface information into account. Instead it directly interpolates between strands. Lets say there are two guides - A and B - and we create a dense strand C and its right in the middle between these two guides. The tip of of strand C will lie in the middle of the line formed by tips of guides A and B.
  • Segment
    Using this method can produce better results if you have guides which greatly change shape and want the resulting hair to blend between these guides smoothly. It blends guides using their individual segments and tries to smoothly blend the overall length of each strand.

Guide Count

  • Do Not Interpolate
    The hair will be generated around the guides without any interpolation.
  • Interpolate Between Two Guides
  • Interpolate Between Three Guides

Barycentric Interpolation Type

The barycentric interpolation type can only be changed when Barycentric guide selection is used.

  • Distribution Mesh
    The interpolation uses the mesh topology to determine how guides affect the generated hairs.
  • Nearest Neighbor
    Guide roots are re-triangulated and the result is used to determine the interpolation. This method is slower but gives better results.
  • Manual Triangulation
    Same approach as above but additional steps are undergone to remove some artifacts. This method is slower but can give better results than Nearest Neighbor and should be used by default. It preserves better the shape of the hair in relation to the guides used for interpolation.

[Interpolation Type Examples]

Additional Settings

Hair Parting

Animation

Rendering

Pipeline

Exporting, Import and Sharing grooms

Groom Presets

Transplanting Grooms

Best Practices


Baking

Baking Hair and Guides

To collapse all procedural changes you make to hair or guides inside the operator stack you can use Ornatrix baking tool. Baking can be done up to a certain operator while preserving operators below it in the stack. Baking hair or guides will create a Baked Hair or Baked Guides operator in the stack which will contain the version of the hair or guides at the time of baking.

To bake hair or guides:

  1. Select the operator in the operator stack at which you want to bake the strands
  2. Go to the Bake tab in the Attributes window
  3. Click on Collapse Up To Here button


Baked Hair

Baked Hair modifier stores a state of hair and acts as a base on top of which more hair operators can be applied. It is a result of either baking hair inside the stack or importing hair.

Hair can also be optionally loaded from up to five different Alembic files and merged into the same output. It can also be grounded to a base surface mesh. A percentage of overall hair can be previewed inside the viewport and a full representation will be rendered.


Clump Modifier

Clumping

Clumping operator attracts groups of hairs together to produce distinct clumps. You can control how these clumps are generated, where they are placed, and how the hairs are attracted to them. Each clump is defined by it's center stem. When the clump node is first added a few random clumps are automatically generated on the hair.

The clumping is performed on currently visible hair inside the viewport. Any hair which is later added (for example, if you increase input hair count or during rendering) will use the hairs which were present during clump generation as guides. Closest guide clump hairs will be used to determine which clump the final hair belongs to.

Modifying the clumps after changing the viewport hair positions or count will not affect previous clumping, it will merely use the currently visible viewport hair to generate and update the internal clump guide hairs. This process is invisible to the user, however, it is important to understand this because having more hairs in viewport during clump generation and editing will produce more precise and detailed clump borders.

Generating clumps

Clumps need to be generated manually by selecting a method for generation and clicking the Create Clumps button. Once they are generated they will remain until you either edit them or delete them. The generated clump data will remain stored with the operator.

  • If you use the Create Clumps button without selecting clump hairs or clumps then all hair will be clumped using selected clumping method
  • If you use the Edit Clump Hairs tool to select some hairs and then press the Create Clumps button then only the selected hairs will be clumped

Deleting clumps

You can delete a part of a clump or whole clumps at once using the Delete Clump(s) button:
  • If you use the Delete Clumps button without selecting clump hairs or clumps then all clumps on current hair object will be removed
  • If you use the Edit Clump Hairs tool to select some hairs and then press the Delete Clumps button then the selected hairs will be de-clumped. This means that the current clump operator will have no effect on them until you clump them again.
  • If you use the Edit Clumps tool to select some clumps and then press the Delete Clumps button then the hairs belonging to selected clumps will be de-clumped. This means that the current clump operator will have no effect on them until you clump them again.

Once a clump is deleted you can re-clump the de-clumped hairs at any time by selecting them and pressing the Create Clumps button again.

Clumping to guides

You can create clumps based on the guides which were used to generate the hair. For this you need to have a Hair from Guides operator below Clump operator in the hair stack. If the hair was not created from guides, for example if Hair From Mesh Strips or Baked Hair operators are used, then this method of clump generation will not work.

To clump hairs to guides:
  1. In Attribute Editor set Clump Create Method parameter to Guides
  2. Click Create Clumps button

When the hair guides change shape (for example, when they are animated) the clumps will automatically follow their shape as long as the Clump Create Method is set to Guides.
If the hair guide count or positions change the clumps will not automatically update. You need to click Create Clump(s) again to manually update clumps when guide count changes.

Clumping to external strands

You can create clumps from another hair or guides shape in the scene. The clumps will be created to match the position and shape of the target "external" strands. This is useful when you want to create a separate set of guides, independent from current hair, to define clumps on your character. This also allows fine control over clump placement and density since you can control these parameters in a separate Guides from Mesh operator (located in a separate shape).

It is important that the "external" guides or hair shape is located under the same transform as the shape which has the Clump operator. In other words, the external strands are assumed to be in the same object space as the resulting clumps.

To clump hairs to external strands:
  1. In Attribute Editor set Clump Create Method parameter to External Clump Strands
  2. Under External Clump Strands controls, click the Assign External Clump Strands button
  3. Click on the strands or hair shape which you want to use for clumps inside a viewport. If everything is correct you will see its name in the field above Assign External Clump Strands button
  4. Click Create Clump(s) button

When the external strands change shape (for example, when they are animated) the clumps will automatically follow their shape changes as long as the Clump Create Method is set to External Clump Strands.
If the strand count or root positions of external strands change the clumps will not automatically update. You need to click Create Clump(s) again to manually update clumps in that case.

Creating sub-clumps

Through a specially designed workflow Clump operator allows you to create smaller clumps within larger ones, to create an effect we call "sub-clumping". This may be useful to simulate fur where smaller bits of hair are stuck together inside larger clumps.

To achieve sub-clumping you need to stack two Clump operators on top of one another. The operator on the bottom is responsible for creating the larger clumps, and the one at the top generates smaller clumps within the already clumped hair. Thus the Clump operator on the bottom needs to generate a small amount of clumps and the one on the top needs to generate a much larger count. It is up to you how the clumps are generated, whether it be randomly, with groups, or through guides, this is not important for this process.

If you do this without any other steps you will notice that the top Clump operator will generate some clumps such that hairs in them jump between the larger existing clumps. This is not desired because it destroys the clumps formed by the Clump operator on the bottom.

To combat this a clump region strand channel needs to be generated by the operator on the bottom and used by the operator on the top. This will ensure that the hair jumping problem described above will not happen.

To create sub-clumps:
  1. Add a Clump operator and generate a set of clumps, for example using Random clumping method
  2. In Attribute Editor enable the Add Clump Index Channel option. This will generate a new per-strand channel where each strand is assigned an integer value depending on which clump it belongs to.
  3. Add another Clump operator on top of the current one and generate another larger set of clumps. These will be the sub-clumps within the main ones.
  4. In Attribute Editor select the "ClumpIds" channel in Region Channel drop down

The resulting smaller clumps will now be contained within the larger clumps defined by the operator on the bottom.

"Could not find a matching sub-clump" warning

When generating-sub clumps you may be presented with a warning: // Warning: Ornatrix: Could not find a matching sub-clump for N clumps
This is normal and is merely an indication that according to the way that clump regions were specified (with a map or a strand channel) did not allow for some of the newly generated clumps to belong to the same master clumps. When computing which master clump a sub-clump belongs to a matching process is used to ensure that both the sub-clump and master clump are located within the same region. However, it may be possible that some of the sub-clumps cannot be matched to the same region as their master clump.

This warning can be reduced or avoided by increasing the Maximum Closest Region Clump Regions parameter. The higher the value the more master clumps will be considered for each sub-clump until eventually a match is detected.

Parameters

Clumping Settings

These parameters control clumping globally. There is also a Selected Clump Settings category (see below) with a sub-set of these parameters which allows customizing individual clumps.

Strand Group

Strand group pattern to which this operator will be applied. If empty all strands will be affected.

Random Seed

Controls the randomness of this operator's results. Change this value to modify the output.

Amount

Specifies the strength of clumping. Hairs will be attracted to the center of their clump more or less based on this value.

Amount Ramp, Multiplier, and Channel

Provides clumping amount control along strand length and distribution surface based on a curve, map, or a guide channel.

Preserve Strand Length

When true the input hair strand lengths will not be modified during clumping.

Attract to Closest Stem Point

When true the closest point on clump stem for each hair point will be used to calculate the clumping amount and other length-varying parameters. Use this option when "Preserve Strand Length" in on for better results.

Root Blending Position

When this value is non-zero the strand shapes will be linearly blended from root to this position, between their original and clumped shapes. This is done to avoid roots becoming unglued from the distribution mesh when using an option like Round Clumps.

Round Clumps

When on, the clump profiles will be forced to be circular. This is useful when doing braiding to avoid intersections of individual clump stems.

Twist

Controls how much strands are twisted around the clump center. Negative values will twist counter-clockwise, otherwise twisting will be clockwise.

Twist Ramp, Multiplier, and Channel

Provides twisting control along strand length and distribution surface based on a curve, map, or a guide channel.

Flyaway Fraction

Controls the fraction of hairs which will randomly not be clumped

Flyaway Amount

Controls the amount of clumping for flyaway hairs

Set Clump Size

When on, the profile of clumps will be forced to be this size (at places where Amount value is 1). This allows you to precisely control how big clumps are in absolute values to each other and is useful for braid stems.

Clump Size

When Set Clump Size is on, this sets the absolute clump profile diameter.

Clump Size Ramp

Controls the clump size along clump's length

Set Guide Clump Shapes

When on, the guides shapes will be used to define the clump stems. Otherwise, guides will only be used to define clump roots. This option is only applicable if clump creation mode is set to Guides or External Guides.

Region Multiplier and Channel

Clump region map or channel provide an explicit way of specifying which hairs should be clumped together. When generating clumps, new clumps will only be formed within the regions of the map or channel having the same values. Map can be color.

This parameter can be used in conjunction with another Clump operator's Add Clump Index Channel parameter (which generates the region map) to create sub-clumps which are clumps existing entirely within other bigger clumps.

Add Clump Index Channel

When on, a new per-strand channel containing hair clump indices will be added. Useful for sub-clumping.

  • Respect Hair Parts
    When on, the clumping will be avoided between hairs and clump centers which belong to different hair parts

Clump Create Method

Specifies how clumps will be created when pressing the Create Clump(s) button.

Clump Count

Specifies number of clumps to be created when pressing the Create Clump(s) button.

Create Clumps

Use this button to create or update clumps manually

Clump Patterns

This feature allows you to manually or procedurally design the shape of the clumps. A list of patterns created using Braid Patterns or any guide object can be used for clumping. In the following image a Braid Pattern object was used to create a pigtail and assigned to the Clump operator to create some braiding.

  • Global Clump Patterns
    A list of currently used clump patterns. The order of patterns in this list matters because any per-clump pattern selections will reference it.
  • Pattern List
    These are the patterns, selected from the global Patterns list, which will actually be used globally on clumps which don't have a per-clump pattern specification (see below).
  • Clump Pattern Rotation
    Specifies the rotation value around a clump's stem for clump patterns

Selected Clump Settings

These parameters allow specifying parameters which will only apply to currently selected clumps. Use these values to customize individual clumps.

Reset Clumps

If you press this button the settings for currently selected clumps will be reverted back to global values.

Amount Override and Ramp

Specifies per-clump Amount values.

Twist Override and Ramp

Specifies per-clump Twist values.

Pattern Indices Override

Specifies per-clump Patterns. These are selected from the global Patterns list (see above).

Related Topics

  • Braid Patterns
  • Working with Strand Groups
  • Working with Strand Channels
  • Using Multiplier Maps

Missing Something? Let us know if this page needs more information about the topic.


Change Width Modifier

This operator allows to modify the thickness of the hair strands. Change Width operator gives you direct access to the width values stored inside the hair object, this ensures consistency across all render engines and operators.

Parameters

  • Strand Group
    Specifies a strand group to which the Change Width operator is applied.
  • Width
    Specifies the hair thickness. This will determine the radius of each hair strand.
  • Width Multiplier
    Add any Maya texture map here to specify the thickness variation along the surface of your distribution mesh.
  • Width Channel
    Specifies a strand channel or vertex color set used to vary the hair thickness for each strand.
  • Width Ramp
    Use this ramp control to specify the variation in thickness of each strand from root to tip.

Absolute Length

These options allow you to set the width of each strand based on its length instead of being applied equally. Shorter strands will thus not taper off as much as longer strands, for example. This behavior is useful for simulating shaved hairs.

  • Use Absolute Length
    When on, the width modification along the strand length will be done from 0 to Absolute Length value and not from root to tip
  • Use Longest Strand Length
    When on and Use Absolute Length is used, the longest strand will be used to calculate absolute length instead of the Absolute Length parameter
  • Absolute Length
    When using absolute length, this specifies the strand length along which the width curve will be applied. Shorter strands will use less of the curve.

Related Topics

  • Rendering with Redshift


Baked Guides

Baked guides modifier stores a state of guides inside a modifier. It is usually a result of baking guides.


Adopt External Guides

This operator allows the artist to import a small set of externally simulated guides into a dense hair object and use them to drive its animation. This is similar to the concept of skinning a mesh with a skeleton where you create bones to drive the anatomy of a digital character, so your guides or "bones" should roughly match the shape of the dense hair that you want to affect or animate. Instead of simulating the guides used to generate the hair, you can save time and effort by simulating just a few external guides that will drive the movement of the final groom.

The following image shows the hair without simulated external guides assigned to it. See the external guides moving around without affecting the hair:

The following image shows the hair with a set of simulated external guides assigned to it:

Reference and Control Guides

To be able to deform hair within current operator stack using external guides we need to have two sets of such guides:
  • Reference guides, which provide the initial state of the strands. Think of them like a T-pose for the character. These guides must not be animated and must remain in the same object-space position during animation and character movement.
  • Control guides, which specify the strand animation and movement in relation to the reference guides. The difference between these and reference guides is what will be used to actually deform the hair within the operator stack. These guides can be animated and move in object space.

Parameters

Adopt External Guides operator have few and easy to use parameters and controls.

  • Strand Group
    Specifies the strand group that should be affect by the external guides. You can use this option after applying one or more Adopt External Guides operators to affect a different area of the hair with each of them.
  • Amount
    Specifies the amount of influence exerted by the external guides.
  • Assign Control Guides
    Enter the context tool that allows you to pick an external guide shape.
  • Clean Control Guides
    Clear the selected guide shape.
  • Match Control Strands by Distance
    When on, the control and reference strands will be paired by their closest respective roots. Otherwise they will be paired by strand ids.

Exporting the animation

The resulting animation of the hair can be exported using our .abc exporter. Find step by step instructions on how to cache and export hair animations in the Animation Cache Modifier page.


Adding Hair to Objects

  • Adding Hair to Objects
    • Adding hair
    • Related Topics

Adding hair

Once Ornatrix C4D has been installed start Cinema 4D and find Plugins -> Ornatrix entry in the main menu. Use Add Hair option and select Furball.

Depending on the selected object(s) a different set of hair operators will be created. For example, selecting a whole mesh or a set of selected polygon faces will add hair to the selected areas. However, if you have some NURBS curves selected, guides will be generated from these curves instead.

When using a mesh to generate hair six operators will be added to the hair stack. From bottom to top:

  • Guides from Mesh Modifier scatter guides on the distribution mesh.
  • Edit Guides Modifier is used to edit and brush the guides or to sculpt the hair strands when used on top of Hair From Guides operator.
  • Hair from Guides Modifier distribute and interpolate the hair following the guides previously generated.
  • Change Width Modifier is the operator used to modify the thickness and shape of the hair strands.

Related Topics

  • Hair From NURBS curves
  • Groom Presets
Missing Something? Let us know if this page needs more information about the topic.


About Ornatrix C4D

Ornatrix is a complete hair, fur, and feather creation, animation, and rendering solution for Maxon Cinema 4D. It integrates closely as a part of Cinema 4D to allow an intuitive and easy to learn approach for grooming characters and creation various fiber and scattering effects.


Animation Modifier

Animation Cache Modifier

The Animation modifier is designed to record and playback the cached version of your hair animation in real-time. You can export the animation of the guides or hairs to an .abc file using our Alembic Export and the resulting file will be automatically loaded into the Animation modifier.

Parameters

  • Strand Group
    This parameter works the same as in other operators, you can isolate the effect of the Animation to a particular Strand Group created in the Edit Guides modifier
  • Overwrite Input
    When this option is on, the loaded hair data by this operator completely overwrites any input strands making this operator only output the loaded animated hair. This is useful if you want to completely capture and cache the state of your hair stack in a particular position.
  • Apply Amount
    Determines the intensity of the effect, can be used to blend animation.
  • File Path
    This is where you can load .abc file exported using the Alembic Export. This parameter also allows you to specify a new .abc file to save when using the Record functionality. There are two buttons next to the file path text box. One allows opening of an existing Alembic file, and another is to save new Alembic files if you plan to record current hair state or animation.
    You can also load a sequence of files using the "#" character inside the file name. More on this below.
  • Time Offset and Time Scale
    You can use those two parameters to control the delay and playback speed of the animation.

Loading a File Sequence

File name parameter can contain "#" characters to denote a sequence format, ex. MyHair.###.abc. If such characters are encountered multiple .abc files will be loaded matching the sequence numbering, ex. MyHair.01.abc, MyHair.02.abc, MyHair.03.abc, etc. Timing inside the .abc files will be used to animate the resulting hair.

On-Demand Alembic Sequence Loading

As outlined above, the File Name parameter can contain #_ characters in which case a sequence of _Alembic files can be loaded each containing individual animation frames. The loading of these files happens on demand. This means that, if for example, you have three files:
  1. myfile.000.abc
  2. myfile.001.abc
  3. myfile.002.abc
    then myfile.001.abc and myfile.002.abc will not be loaded until this modifier is evaluated on frames 1 and 2 respectively.

Such loading allows saving memory and processing power when rendering scenes containing heavy hair data sequences.

Recording

The recording commands allow you to capture one or more frames of static or animated hair and save them to an external _ Alembic.abc_ file. This state will then be used with this operator or with any other Animation Cache modifier which references the same .abc file.

The recording process will capture hair positions, widths, UV coordinates, strand groups, and any strand data. Current animation play range will be recorded. Therefore, before recording make sure you change the animation range to match your desired recorded results. Also, an output file should be specified. To specify a file path and name click Select File to Record Animation. This command will prompt you to a file dialog where you can set a file path, file name and extension.

To begin recording press the Record Animation button. During recording the animation is not shown in the viewport to save performance. Instead you can see the progress in a progress bar where you can also cancel the recording process. You can clear the already saved data using the Clear Recorded Data button, this will delete any in-memory recorded data and this operator will not do any changes to the hair. Reload File allows you to refresh the data if the data was modified externally.

Recording File Sequences

If the target Alembic file name has "#" characters in its name then a sequence of per-frame files will be produced instead of a single Alembic file. For example, if the file name specified is Animation.###.abc and there are three frames being recorded you will end up with three files: Animation.000.abc, Animation.001.abc, Animation.002.abc. The digits within the file name will reflect the frame being recorded within the scene. This sequence of files will be loaded by this operator as an animation (read above for more).

Related Topics

  • Alembic Export
  • Moov Physics Modifier
  • Oscillator Modifier
  • Resolve Collisions Modifier


Alembic Import

Ornatrix provides a custom importer for Alembic hair. This is a great way, in conjunction with Alembic export to store and exchange hair assets with 3rd party software. Importing an Alembic file which has curves in it (regardless if it was exported with Ornatrix or not) will create a baked hair modifier and reference the imported file in it. You can then use the imported/referenced file together with other operators in Ornatrix operator stack.

Importing Hair

To import an Alembic hair file:

  1. Go to File->Merge...
  2. Select the .abc file to import


Alembic Export

Exporting Hair to Alembic

Ornatrix provides a special saver which allows writing one or more hair objects into an Alembic file. The resulting .abc files can be imported in a myriad of CG software which supports Alembic. They can also be used with V-Ray Proxy objects to quickly load and render the resulting hairs anywhere V-Ray is used. There are options to export single frame or an animation range as well as viewport or render representation of the hair.

To export a hair object to Alembic file:
  1. Select the Ornatrix hair object which you want to export
  2. Go to Main Menu -> File -> Export... -> Ornatrix Alembic (*.abc)
  3. Type in the desired name of your .abc file and press Export

Parameters

  • Format
    The algorithm used to encode the Alembic file. Currently there are two options: Ogawa and HDF5. Ogawa tends to give better compression rates and robustness.
  • Start Time
    The first frame of the scene to be exported
  • End Time
    The last frame of the scene to be exported. If this value is same as Start Time then static hair is exported at specified time. Otherwise an animation is exported.
  • Step
    When exporting animated hair this specifies how many frames to skip between each sample. Value of 1 means that every frame will be sampled.
  • Use Render Version
    When on, hair in the scene will be switched to render mode and dense hair strands will be exported. Otherwise, what is seen in the viewport will be exported.
  • Up Direction
    Allows specifying the direction which points up in the saved Alembic file. This is needed when exporting hair to other hosts. For example, in 3dsmax Z axis points up but in Maya Y axis points up.
    When velocity export is used specifies the length, in frames, of time interval used to calculate the velocity vectors
  • Use World Coordinates
    When on, hair will take its shape's transform into account when writing its position data. For example, if there are multiple hair objects their relative positions to each other will be preserved. Otherwise, hair will be exported in its local object space, placing it at the origin.
  • One Object per File
    When on, separate Alembic files are written for each of the objects being exported. Object's name will be appended to the file name.
  • Unreal Engine 4 Export
    When on, the resulting Alembic file will be formatted to be compatible with groom import in Unreal Engine 4

Exported Components

These are different aspects of hair which can be selectively exported or ignored:

  • Export Velocities
    When on, a velocity vector will be written for each hair vertex. This is needed if you're exporting per-frame .abc files and want to have motion blur working when rendering it out.
    • Velocity Interval Center
      When velocity export is used specifies the offset from current frame which will be the center of the interval used to compute the velocity vectors
    • Velocity Interval Length
  • Export Strand Data
    When on, any per-strand and per-vertex data which exists in hair will be written to the Alembic file. This data can be created with Edit Guides operator or Generate Strand Data operator, for example.
  • Export Texture Coordinates
    When on, all texture coordinates channels present in hair will be written to the Alembic file
  • Export Widths
    When on, the strand width/thickness information will be preserved into the Alembic file
  • Export Strand Ids
    When on, unique strand ids will be written to the Alembic file. This is useful if you want to ensure that applying operators after importing the hair back will provide consistent results since strand ids are often used to set random values by some operators.

Exported Data Format

Ornatrix hair or guide strands are written to an Alembic file as curves. Information such as width, velocities, and texture coordinates is included in the description of said curves. Additional information which is Ornatrix-specific is attached to either individual vertices or individual curve primitives within Alembic file the following way:
  • Strand ids are written as per-curve geometric attributes with name strandId
  • Strand groups are written as per-curve geometric attributes with name strandGroup
  • Per-vertex channel data is written as floating point per-vertex geometric attributes with name chan_ followed by the channel's name
  • Per-strand channel data is written as floating point per-curve geometric attributes with name chan_ followed by the channel's name

To import the Alembic hair with Unreal Engine 4

  1. Make sure you use the Unreal Engine 4 Export checkbox in the export settings
  2. Follow instructions from Unreal Engine to import the resulting .abc file into UE4

Technical Specs

  • Ornatrix uses Alembic library version 1.7.3
  • Curves are exported using B-Spline Basis, they are non-periodic and linear

What is exported

The following information about the hair strands is being exported, if it is present. If importing hair back it will be preserved:
  • Strand positions and animation
  • Per-vertex widths
  • Texture (UV) coordinates
  • Per-vertex channel names and data
  • Per-vertex velocities (optionally, off by default)


Curl Modifier

To give hair a more natural appearance waviness and curliness is often added. The basic premise behind this technique is the natural flow structure of hair fibers, which tend to modulate on their way down from root to tip. There are two basic types of hair waviness: a flat sinusoidal pattern that causes hairs to wave in one axis, and a spiral pattern that makes the hairs curl around an invisible cylinder (in 2 axes) thus forming a spiral.

A number of parameters are available to control the process of hair curling. The most important ones control the structure of the curls. Because waviness is created through a sinusoid function three most obvious parameters are:
  • Magnitude for controlling how big the waves are
  • Phase to set to total number of curls/rotations per strand
  • Phase offset, to determine at which point the wave will begin

Other parameters include the stretch factor that enables phase to change throughout hair length and standard deviation settings.

Standard parameter deviation is a helper routine that pre-randomizes all of the curliness parameters for you. Because all real hairs share different curliness properties but nearby strands tend to have very similar properties, a Perlin distribution function is used to smoothly vary out the parameters throughout the UV/World space.

If you still require more control procedural or hand-made texture maps can be used to control the main parameters throughout the UV space.

Parameters

  • Apply to Group
    Specifies the strand group to which the curling will be applied.
  • Axis
    Controls the local axis, at each strand point, on which the curling is done
  • Hair length dependent
    If on, this option will use hair length to set the parameters for each strand. Therefore smaller strands will get less curls, while larger ones will proportionately curl more.
  • Magnitude, phase, phase offset
    Properties of the sinusoid used to make the hair curls. Controls the size, frequency, and start value of each curl respectively.
  • Phase stretch
    When non-zero, affects how much curl frequency increases/decreases towards the tip.
  • Standard deviation amount, scale
    To introduce some randomness along the surface a Perlin noise function is used. The curls have to be random, yet locally they have to not be too different. Therefore a blurred multi-level noise function is perfect. These two parameters control this noise function. Note that you can always control these yourself with an external map.


Groom Presets

Grooms in Ornatrix are hair presets. A groom contains a predefined list of operators and their parameters to generate specific hair style, effect, or anything else which can be procedurally done in Ornatrix. For example, the default "Hair Ball" set up in Ornatrix is a groom which adds guide generation, editing, hair generation and width changer operators. Grooms can create new objects inside a scene or be applied to existing objects by growing hair on them.

Grooms are stored in self-containing XML files with .oxgroom extension. These files can be saved and shared.

Grooms directory

The grooms are loaded from a pre-defined directory by default. By using the Browse... button you can change the directory from which grooms are loaded. The changed directory will be used next time you attempt to load a groom. You can use the Default Directory button to go back to the default directory. The default grooms directory is:

  • Windows: C:\ProgramData\Ephere\Ornatrix\Grooms
  • OSX: /Users/Shared/Ephere/Ornatrix/Grooms
  • Linux: /opt/Ephere/Ornatrix/Grooms

The purpose of choosing this directory was to allow both read and write access to grooms for all users on a computer. This way grooms can be loaded and saved into a central directory by any user on a workstation.

Changing default grooms directory

It may become necessary to change the location of the directory from where grooms are loaded. For example, you may want to have one central directory on your network accessible to all workstations containing the grooms.

To change the default grooms directory add an environment variable ORNATRIX_GROOMS_DIR containing the default grooms path.

Limitations

For the time being, Hair From Mesh Strips are not compatible with groom presets, thus the Save Groom command will not work on this type of Ornatrix hair objects.

Cross-Host Compatibility

As of Q3 2019 our grooming system is unified across Ornatrix 3dsmax, Ornatrix Maya, and Ornatrix C4D. The grooms can be saved and loaded across all of these applications and will yield same results. The directory where grooms are stored is also shared across all hosts where Ornatrix is implemented.


Gravity Modifier

This tag is a helper operator to allow you to cheat the effect of gravity on hair quickly and intuitively. A special slope graph lets you adjust how much gravity is applied along the length of the strands (this can also be controlled through a map). You can also control gravity direction, global amount, and even add collision objects to prevent hair from going into them.

Parameters

Strand Group

Specifies a strand group to which this operator is applied. Only strands within the specified group will be modified. Using an empty value will modify all strands.

Force

The amount of gravity force applied to the hair.

Force Channel

Use a Guide Channel to control the Force amount.

Force Multiplier

Controls the amount of gravity applied across the distribution mesh surface

Force Ramp

Specifies the amount of bending caused by this operator along each strand's length

Gravity Direction

Specifies which direction, in world coordinates, the gravity is pulling the hair


Guides from Mesh Modifier

Guides from Mesh operator allows for creation of guide hair based on a polygonal mesh object in a Cinema 4D scene. Distribution parameters can be tweaked to get different distribution types. This operator goes through the mesh and "plants" roots onto it. It then extrudes guides from every root based on the surface normal at the root origin.

The user also has an option to plant guides only in certain areas on the mesh. These can be assigned either with a material ID or using a distribution map. Although this isn't necessary since hair from guides modifier is usually what ultimately defines the final result, it is usually a good idea since you do not need to edit guides which will not be used in the end. You may also apply guides to only selected faces on the mesh.

One of the undefined parameters is the guide twist. Because hair is cylindrical in its structure twist is usually not important. However, when you are dealing with feathers or proxy meshes later on twist becomes of significance. By default hair twist is generated such that its global orientation is constant. However, when surface starts deforming the twist can change because hair's global orientation changes. To combat this, there is an option to orient every strand based on underlying surface topology rather than a global direction.

Guide Hair generated using Guides From Mesh

Parameters

Root Distribution

Use this group to control how guides are grown on the surface.

  • Distribution Type
    There are several distribution methods for spreading hair roots along the surface:
    • Uniform
      Roots are placed in a linear manner forming a 'grid' around the mesh. This can be useful while creating brush patterns where hair has been planted artificially.
    • Random (UV-based)
      Same as area-based approach, except this time instead of calculating area for every face, UV area of faces is calculated. This allows user to control the distribution by maintaining UVW coordinates on the mesh. It is possible to unwrap a character, for example, and have dense placement of hair in some spots than the others by stretching out those areas in the UV editor.
    • Random (area-based)
      Roots are created randomly, and the amount of roots per face is calculated based on the total area of all faces on the mesh. Therefore all roots will be distributed evenly and randomly throughout the mesh. You can control the random factor through the seed value. Same seed values will produce similar results.
    • Vertex
      One root is generated at each vertex of the surface mesh
    • Random (per-face)
      Same as above, except the amount of roots per face is the same for every face on the mesh. Therefore larger faces will tend to have sparser root placement, while smaller ones will have roots more clustered in one spot.
    • Face Center
      Roots are placed at the center of each polygon face or triangle.
    • Even
      Roots are placed on the surface randomly but at the same distance from one another. This method provides the most realistic root placement result for natural hair phenomena.
  • Random Seed
    Change this value to shuffle the positions and random lengths of the resulting guides.
  • Count
    Sets the total desired number of guides. The actual guide count does not have to match this number exactly, especially if a distribution map is used.
  • Use Material ID
    When true guides will be only generated on faces which have shader with specified index assigned to them
  • Material ID
    Use in conjunction with Use Material ID option. Specifies the index of shader on faces where guides will be generated. All faces not containing this shader assignment will not have guides generated on them. This option is only useful if you used face component selection to assign different shaders to different faces of the distribution surface.
  • Use Face Include
    When on guides will only be generated on selected faces. This option will only have an effect if some face components were selected when current Guides from Mesh operator was added.
  • Topology Based Orientation
    When on the rotation of guides will be "glued" to the distribution mesh. Rotations will be computed relative to the orientations of mesh edges and thus properly react to deforming geometry. When off, the rotations will be calculated in global scene coordinates.
  • Distribution Channel
    Allows you to specify vertex color set on distribution surface which controls the guide density over the mesh.
  • Distribution Map
    An optional multiplier map for guide density on the surface.
  • Displacement Offset
    An optional offset along surface normals of generated guides. Allows you to push away guides from the surface if needed.
  • Displacement Map
    An optional surface map multiplier for the Displacement Offset parameter. Use to vary displacement along the surface with a texture map.
  • Displacement Map Channel
    Index of UV color set of distribution surface to use for Displacement Map parameter. Leave 0 if not sure.

Root Persistence

Parameters in this group allow for caching guide positions and making sure that guides remain constant.

  • Remember Root Positions
    When this option is used the root positions generated by this operator will be cached and saved with the scene. This can ensure that you can send the same scene to other computers and render it without the risk of roots being generated in different places causing them to "jitter".
    Use this option after you have set up the guides to your liking. It is a good idea to turn this button on before proceeding with editing the guides. When this option is on changing other distribution parameters will not have any effect.
    When you turn this option off the guides will be regenerated using current distribution parameters.
  • Detach/Attach Roots
    Turning on Detach Roots parameter will store the positions and twist rotations of current guide roots inside the operator until the roots are re-attached. When this parameter is turned off (Attach Roots option) the stored positions will be re-projected onto the distribution mesh surface.
    This allows to change the topology of the distribution mesh while retaining the guide information. It is especially useful if some changes are done on the guides higher in the operator stack, such as with Edit Guides operator. Temporarily detaching, changing mesh topology, and re-attaching the roots can preserve any changes done to the guides.
    Before detaching the guides, Remember Root Positions option must be turned on. If this is not done manually this option will be turned on automatically. This is needed because the roots must be locked/cached before they can be detached. Likewise, if you turn off Remember Root Positions option the detached guides will be automatically cleared.

Guides

Parameters in this group control how the actual guides look like.

  • Point Count
    The number of vertices to generate for each guide. The more vertices the more detail the guide shape can have.
  • Length
    The length of generated guides.
  • Randomness
    Randomizes the length of generated guides by some fraction. 0 means no randomness. 1 means that length will be completely random from one guide to another up to the Length parameter.

Related Topics

  • Propagation Modifier


Guides from Hair Modifier

Guides from Hair modifier allows you to convert a hair object back to a set of guides. This is useful, for example, when using a hair output operator such as Hair from Mesh Strips modifier or Hair from Guides modifier and needing to edit the generated hair using a guides-only operator such as Edit Guides modifier.

This operator is available on the main Ornatrix menu.


Ground Strands

  • Ground Strands
    • Mechanism
    • Grounding strands
    • Ungrounding strands
    • Position blend ramp
    • Related Topics

When you have a set of curves defining the hair guides without any surface beneath them you can use the GroundStrandsNode operator to assign a distribution surface to them. This distribution surface can then be used to generate dense hair from the guides. Ground Strands operator projects the guides onto a mesh to figure out the closest point on the surface to each guide root. This projected surface point is used to determine texture coordinates and to update the guide position in the future when the mesh surface changes and deforms due to animation.

Mechanism

'Floating' strands are re-projected onto the surface and assigned new surface info

Grounding in Ornatrix is the process of attaching surface dependance information to a strand (hair or guides) object. To do this strands are 'projected' onto base mesh. Once every strand root's position relative to the mesh is determined it is cached and attached to the strands as surface info that flows up in the pipeline. Surface info is often required to compute UV coordinates, to deform guides with mesh, and to inherit other surface-related properties for modifiers such as surface comb.

To make the best use of strand ground plugin you need to understand a couple of things that it does:
  1. Ornatrix always assumes that its hair are located in the same object space as the distribution mesh (ie. all operations with mesh vertices and hair strands are done in same space). Therefore, ground strand operator will align the hair node you chose to ground with the selected distribution node. You can see this if you disable ground operator and your previous guides aren't aligned as they're used to. This step is very necessary for further operations on guides.
  2. Ground strands will use closest triangles for each guide to find a suitable place to put it. If a guide's tip is closer to a triangle than its root, it will be flipped (ie. its root considered its tip). This ensures that guides retain their relative shape, however, in some rare cases it can cause some guides to stick to undesired surface points.

Grounding strands

To assign a distribution surface to guides or hair in Ornatrix:

  1. Add a Ground Strands operator from Ornatrix Menu
  2. In the Object Manager, click and drag a geometry object to the Distribution Mesh box
  3. Click the Attach Roots button in the Attribute Manager

The strands should now be projected onto the surface and follow it as it deforms.

Ungrounding strands

To stop the operator from attaching strands to the distribution surface surface press the Detach Roots button.

Position blend ramp

This curve ramp allows you to specify the effect, along the strands length, that the grounding will have on the resulting strands. Value of 1 indicates that the points of target strands should be moved into position of being attached to the surface. Value of 0 indicates that points should remain unaffected by this operator.

As a result you can, for example, leave the tips of the strands unaffected by this operator while having the roots be moved in such a way that they are attached to the mesh surface.

Related Topics

  • Hair from Guides Modifier
Missing Something? Let us know if this page needs more information about the topic.


Frizz Modifier

To make hair appearance realistic frizz is usually added. Because in real world no hair is absolutely straight and external forces (such as moisture) cause it to deform, a special treatment for hair is required to achieve this effect. Frizz modifier messes up hair strands along their length without changing their length. Often hair frizz can be combined with standard noise and curling to achieve the final result.

You also have the control over outliers: these are "rebel" hair that stick out the most. Outliers (or wild hair) are usually composed of few strands that you see sticking out of dense hair in real life. These add more spice to hair simulation.

Parameters

  • Strand Group
    Specifies the strand group to which to apply the frizzing. You can use this option after applying one or more frizz modifiers to specific groups of strands.
  • Amount
    Specifies the global amount of frizz to apply
  • Frizz Diagram
    Allows defining the frizz effect along the length of the strands
  • Scale
    The granularity of the frizz effect
  • Seed
    Random seed to use when generating frizz
  • Frizz Map and Guide Channel
    Allows pre-multiplying the frizz effect with a value of a map which can vary along the mesh. Use this to control exactly which part of your model will have the frizz effect manually or through a procedural map.
  • Outlier percentage
    Determines the total fraction of hair that is considered to be outliers. 0 means none, and 1 means all.
  • Outlier Frizz Amount
    The amount of frizz to apply to outliers.
  • Is Length Dependent
    When on, the noise on strands will be consistent with strand lengths. Otherwise it will always scale the same way from start to end of the strand.
  • Add Outlier Channel
    When on, a new per-strand channel will be created in output hair containing values of 1 for strands which are outliers and 0 for all other strands.


Demonstration Version

Evaluation License and Demo

  • Demonstration Version
  • Evaluation License and Demo
    • Overview
    • Evaluation License
    • Demo version
    • Beta Testing

Overview

Anyone can give Ornatrix for Cinema 4D a try. We provide a demo version and/or an evaluation license that you can use to evaluate Ornatrix and determine if it works well for you and if it's adaptable to your pipeline before making a purchase decision.

Evaluation License

This is a trial license with full functionality for a limited time, usually a maximum of two months(The amount of time is determined in a case by case basis). With this license you can save and load your projects. Contact us through our contact page to apply for an evaluation license.

Demo version

version available to anyone as long as you register a free account on ephere.com. The only limitation of Ornatrix Maya demo version is inability to save. You will be presented with a message box when you reach this limitation.

Beta Testing

The Public Beta allow full access to Ornatrix for Cinema 4D. During the beta we had new features every week, together with bug fixes and performance improvement. You can follow the development news on our social media and the Ornatrix Cinema 4D User Group on Facebook. During this period, we would appreciate your feedback and suggestions to improve for further improvement. Please Contact us to join the beta.


Definitions

  • Definitions
    • Backlighting
    • Braiding
    • Brush
    • Channel
    • Cluster Knot
    • Cluster Stem
    • Data Set
    • Dependency Graph
    • Guide
    • Hair Dependency Branch
    • Hair Shader
    • Hair State
    • Hair Tangent
    • Occlusion
    • Parting
    • Rasterization
    • Root
    • Scan Conversion
    • Segment
    • Self-Shadowing
    • Shader
    • Sinks
    • State Converter
    • Strand
    • Strand Approximation
    • Strand Transform
    • Tangent
    • Translucent

The following terms are frequently used throughout this documentation.

Backlighting

An effect where hair is placed between a camera and a source of light. Denser hair blocks part of light rays while, due to its translucency, sparse hair allows light through.

Braiding

The process of manipulating two or more guides into a canonical pattern that evolves around an imaginary braid stem. Read more about braiding in the Clumping and Braid Patterns document.

Brush

A brush in Ornatrix is a real-time interface that allows user to indirectly manipulate hair guides through user mouse input.

Channel

Data attached to Ornatrix guides that allows the storage of extra information of some type. This is similar to vertex channels used in meshes and can hold values which can drive and affect various hair effects down the hair pipeline.

Cluster Knot

An internal Ornatrix structure that (when used in arrays) controls the shape and form of clusters along a hair strand.

Cluster Stem

An imaginary (sometimes guide-based) strand that is used to pull surrounding hair towards it to form a cluster.

Data Set

A structure that is designed to carry data from one location to another. "Data set" is a general term used to describe a collection of any type of data.

Dependency Graph

A term used to describe a system of nodes connected to each other via dependency/reference links. This tree is structured in such a way that multiple nodes can affect another node. Ornatrix only uses acyclic guide-hair dependency relationship.

Guide

A basic strand structure used for defining approximate shape of hair. Guides will typically be interpolated later to generate dense hairs. In mesh modeling context, guides are similar to a base mesh cage before it is sub-divided.

Hair Dependency Branch

Hair is usually made dependent on guides that created it. For animation and modeling purposes it is desirable that hair inherits its form from guides. Even guides can depend on a form of some other guides. This structure of inter-dependent strands is called the hair dependency branch.

h2. Hair Cluster

A group of hair held together by some force. Hair often tend to form clusters after movement due to static charges.

Hair Shader

A light scattering model designed specifically to work with hair. Although Ornatrix hair shaders can be just as well used on objects they're designed for optimal performance on hair. One of the main distinctions is that object normals point away from the surface while hair tangents always point in the direction of shaded segment.

Hair State

You may hear the term 'hair state' used often in this documentation. There are three main hair states: guide hair, dense hair, and strands (for more info on guide and dense hair look <a href="../concepts/sparse_and_dense_hair.html"><em>here</em></a>). Some modifiers only accept guide or dense hair. This is done for a reason- guide hair carry more information (such as selection, freeze, and hide info) than dense hair. However there are some plugins which don't care about which state the hair is on (guide or dense). These modifiers accept the strand state, which is a sub-state of both guide and dense hair. Therefore both guides and dense hair can be converted to strands, but not the other way around.

Hair Tangent

Avery hair strand consists of a finite number of segments that approximate it. Often it is required to retrieve the tangential vector along some point of the strand. Tangent is basically the direction of flow of a strand at a specific point.

Occlusion

Occlusion generally refers to the blocking of light through direct or indirect means. In Ornatrix, term occlusion is used to combine object-hair, hair-object, and self-shadowing algorithms into one category. Therefore occlusion means complete interaction of hair and light that falls on it.

Parting

A division of hair into separate groups of direction. In Ornatrix partings are used to separate two distinct hair flows.

Rasterization

Taking a geometric data set and converting it to a bitmap data set (consisting of pixels). Rasterization is generally done through scan conversion.

Root

A structure used to uniquely define the position and orientation of a hair strand. Every strand in a dense or a sparse hair model must have a unique root. There are two types of roots in Ornatrix- roots relative to object and roots relative to surface. Roots relative to object contain information about their location in object space. These roots will not deform and will only change their orientation as the object does. Roots relative to surface contain information about their location on a surface will deform with the object.

Scan Conversion

The process of taking a vector-based structure (such as a polygon or a line), projecting it into screen coordinates, and breaking it up into rasters (integer horizontal lines). Then a single loop can very quickly fill in the spaces between horizontal lines thus 'drawing' the structure to screen.

Segment

A segment is a primitive structure that Ornatrix uses to deal with hair. A segment usually consists of two points (vertices) forming a finite line defined by these points. Internally a hair strand is represented by an array of linked segments, each segment sharing a point of next and previous segment.

Self-Shadowing

The phenomena of hair strands casting shadows onto themselves.

Shader

Also known as phase function. A shader is an algorithm that given input lights, surface property, and camera information, completely describes the scattering of light at a given sample position in space. Shaders are used to convert irradiance functions into radiance usually in form of RGB pixel color.

Sinks

Virtual structures in space that are used to visualize points where vector fields exhibit their cusps. These points usually appear to 'suck in' or repel everything around them. For example, in surface comb modifier sinks are used to display where the hair is being repelled or attracted.

State Converter

A plugin that converts an Ornatrix object from one state to another. For example, converting mesh to guides, or guide to hair, or hair to rasters.

Strand

A strand is a virtual curve representing a single hair consisting of a rigid linked list of hair segments. The word virtual means that its structure doesn't always uniquely define its final shape. For example, a strand can start out with two segments, then get modified to contain 12 segments, and in final render its structure can contain 50 segments and change from frame to frame.

Strand Approximation

Hair strands in nature are true curves with microscopic follicle structure. This structure is extremely hard to reproduce on a computer, and therefore it is approximated by using linked segments (see definition of strand). Strand approximation is a term used to describe how well these segments represent their true curvature. Usually the more segments you have the better the approximation and the longer the computational times. Ornatrix doesn't guarantee that strands will retain the same approximation throughout its pipeline. For example, one can start out with 2-segments, and end up with hundreds of them during rendering. Ornatrix uses Bezier approximation of 3'rd degree to switch between lower and higher detail.

Strand Transform

Any transformation occurring in the canonical space formed by strand. It is generally safe to assume that anything happening in strand space will 'flow' with the strand along its length from root to tip.

Tangent

A vector that is parallel to a specified point on a surface or a curve. Tangent can be looked at as a pencil of vectors perpendicular to a surface normal.

Translucent

By definition synonymous to clear, lucid. In computer graphics translucency usually is a property of objects diffusing light through volume, not just reflecting it. Therefore any translucent object will reflect light, but also let it pass through it and onto other objects behind it.


Curves from Strands

To allow Ornatrix to communicate with other parts of Cinema 4D's pipeline it is often necessary to convert guides or hair created in Ornatrix into NURBS curves. This can be done using the Curves from Strands operator. Curves generated by Ornatrix will continue to be driven using the operator stack allowing for non-destructive updates as well as simulation.

Convert Hair to Curves

To convert hair or guides to curves:
  1. Select the hair or guides shape in the viewport
  2. Click the Curves from Strands button on the Ornatrix Menu

The shape object will be converted to curves.


End User License Agreement

End-User License Agreement For Ornatrix Plugin For Maxon Cinema 4D

  • End-User License Agreement For Ornatrix Plugin For Maxon Cinema 4D
    • IMPORTANT PLEASE READ THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT CAREFULLY BEFORE CONTINUING WITH THIS PROGRAM INSTALL:
    • 1. GRANT OF LICENSE.
    • 2. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.
    • 3. TERMINATION
    • 4. COPYRIGHT
    • 5. NO WARRANTIES
    • 6. LIMITATION OF LIABILITY

IMPORTANT PLEASE READ THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT CAREFULLY BEFORE CONTINUING WITH THIS PROGRAM INSTALL:

Ephere's End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Ephere Inc. for the Ephere software product(s) identified above which may include associated software components, media, printed materials, and "online" or electronic documentation ("SOFTWARE PRODUCT"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. This license agreement represents the entire agreement concerning the program between you and Ephere, (referred to as "licenser"), and it supersedes any prior proposal, representation, or understanding between the parties. If you do not agree to the terms of this EULA, do not install or use the SOFTWARE PRODUCT.

The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold.

1. GRANT OF LICENSE.

The SOFTWARE PRODUCT is licensed as follows:

  1. Installation and Use.
    Ephere grants you the right to install and use copies of the SOFTWARE PRODUCT on your computer running a validly licensed copy of the operating system for which the SOFTWARE PRODUCT was designed [e.g., Windows 95, Windows NT, Windows 98, Windows 2000, Windows 2003, Windows XP, Windows ME, Windows Vista, Windows 7, Windows 8].
  2. Backup Copies.
    You may also make copies of the SOFTWARE PRODUCT as may be necessary for backup and archival purposes.

2. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.

  1. Maintenance of Copyright Notices.
    You must not remove or alter any copyright notices on any and all copies of the SOFTWARE PRODUCT.
  2. Distribution.
    You may not distribute registered copies of the SOFTWARE PRODUCT to third parties. Evaluation versions available for download from Ephere's websites may be freely distributed.
  3. Prohibition on Reverse Engineering, Decompilation, and Disassembly.
    You may not reverse engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.
  4. Rental.
    You may not rent, lease, or lend the SOFTWARE PRODUCT.
  5. Support Services.
    Ephere may provide you with support services related to the SOFTWARE PRODUCT ("Support Services"). Any supplemental software code provided to you as part of the Support Services shall be considered part of the SOFTWARE PRODUCT and subject to the terms and conditions of this EULA.
  6. Compliance with Applicable Laws.
    You must comply with all applicable laws regarding use of the SOFTWARE PRODUCT.

3. TERMINATION

Without prejudice to any other rights, Ephere may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT in your possession.

4. COPYRIGHT

All title, including but not limited to copyrights, in and to the SOFTWARE PRODUCT and any copies thereof are owned by Ephere or its suppliers. All title and intellectual property rights in and to the content which may be accessed through use of the SOFTWARE PRODUCT is the property of the respective content owner and may be protected by applicable copyright or other intellectual property laws and treaties. This EULA grants you no rights to use such content. All rights not expressly granted are reserved by Ephere.

5. NO WARRANTIES

Ephere expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT is provided 'As Is' without any express or implied warranty of any kind, including but not limited to any warranties of merchantability, noninfringement, or fitness of a particular purpose. Ephere does not warrant or assume responsibility for the accuracy or completeness of any information, text, graphics, links or other items contained within the SOFTWARE PRODUCT. Ephere makes no warranties respecting any harm that may be caused by the transmission of a computer virus, worm, time bomb, logic bomb, or other such computer program. Ephere further expressly disclaims any warranty or representation to Authorized Users or to any third party.

6. LIMITATION OF LIABILITY

In no event shall Ephere be liable for any damages (including, without limitation, lost profits, business interruption, or lost information) rising out of 'Authorized Users' use of or inability to use the SOFTWARE PRODUCT, even if Ephere has been advised of the possibility of such damages. In no event will Ephere be liable for loss of data or for indirect, special, incidental, consequential (including lost profit), or other damages based in contract, tort or otherwise. Ephere shall have no liability with respect to the content of the SOFTWARE PRODUCT or any part thereof, including but not limited to errors or omissions contained therein, libel, infringements of rights of publicity, privacy, trademark rights, business interruption, personal injury, loss of privacy, moral rights or the disclosure of confidential information.


Edit Guides Modifier

Edit Guides shape gives you the ability to tweak the hair guides by hand. You can plant new guides, delete guides, change their shape in various ways, brush them, and perform other operations which are done by hand instead of parametrically.

This operator is broken down into three main sections (or levels) of guide editing. Using these three methods together should allow you to produce any arbitrary hair volume shape, which can then be fine-tuned using hair state modifiers.

Getting started

When a new hair object is created, you can see all the modifiers that belong to this object in the Object Manager window. Use the Ornatrix menu to find the Edit Guides operator button. Click this button to add the Edit Guides operator at the current position of the hair operator stack.

General parameters

These parameters are present in all editing modes or if no editing mode is selected. In other words, they are always displayed in the Attribute Manager.

Edit Guides

Three edit mode buttons

These buttons will set the operator into its Strand, Control Point, or Brushing mode. In each editing mode you will have different ways to interact with and modify the strands.

Apply Amount

In the Edit Guides section you will find the Amount parameters. Those parameter will blend the changes made by the current Edit Guides operator using a slider, a ramp curve or a texture map. It can be used to dial the changes down and can be animated to achieve blending effects or isolate the changes to a particular Strand Channel. Multiple Edit Guides operators can be stacked on top of each other for strand change layering.

Re-target Changes

Normally, if the amount of guides is changed by inserting, deleting them or changing the guide interpolation the changes made in Edit Guides will be destroyed. You can mitigate that by using the Re-Target function after you made those changes. Ornatrix will try to blend the new guides with the rest, preserving any existing Strand Groups in the process.

Selection

When using the selection tool, the amount of selected guides will be shown under the Edit Guides section.

Skip Hair Update While Dragging

When on, only guide edits will be displayed while mouse is down and hair will be updated only when mouse is released. Use this option to speed up guide editing for very dense hair.

Guide Options

This section contains several options related to guide visualization and interaction:

Ignore Back-facing Strands

When on, any guides which are facing away from viewport camera will not be selectable or affected by the brushes.

Show Vertex Ticks

When ON, points making up the guides will be displayed.

Show Color Guides

When on, a different color is assigned to each guide based on the strand groups previously created.

Guides Width

This parameter is used to change the width of the guides for better visualization.

Import Curves

Use this section to import curves into the current hair object.

Import Multiple

Opens up a list with all the curve objects in the scene, then you can select and import groups of curves to use as guides in the current hair object.

Distance Threshold

If imported curves are further than this value from existing guides they will be added as new guides. Otherwise, existing guides will be updated will their shape.

Custom Point Count

When ON, imported curves will have a specific number of points, otherwise they will have the same number of points as the rest of the existing guides.

Root editing mode

Guide Operations

This section include some functions for guide management:

Hide

This button will hide the selected guides.

Unhide All

Use this button to reveal the hidden guides.

Freeze

This function is very useful when dealing with a lot of guides and you want to isolate which guides are affected by the brush tools without selecting or hiding them every time.

Unfreeze All

Used to Unfreeze all guides after you are done editing.

Push Away From Mesh

Used to prevent guide intersection with surface.

Adopt From Stack Top

Captures the current guide shape from the top of the stack into this modifier. Guides will be edited to look like current modifier stack result.

Planting new roots

You can use the Plant Guide Tool to add additional guides to your hair object. After clicking it, click on top of the distribution mesh surface to plant new roots at these locations.

Adopt shape

When this option is on newly planted guides will use the same shape as the closest guide to the location where mouse was clicked.
The closest strands will only be looked up from current strand selection. For example, if only one strand is selected then its shape will always be copied for the newly planted strands. If you want to always have the closest strand shape used then select all strands before planting new strands.

Newly created strands are not selected by default.

Guide length

When Adopt shape option is off newly planted guides will be straight. This option controls the length of newly planted guides.

Additional Information

  • Any strand data such as strand channels and strand groups will be inherited from the source strand into the planted strand when Adopt Shape option is used.
  • The unique strand id for the planted strands will be generated based on the surface dependency information (mesh face index and barycentric coordinate)

Rotate Strands

Allows you to manually rotate a strand or a group of strands.

Deleting roots

To remove guides from your groom first select them inside the viewport and then press the Delete Selected Strands button. Using keyboard Delete button will not work because Ornatrix has a custom way of handling element deletion in shapes. Therefore, you need to use this button instead.

Strand Groups

In the Strand Groups tab you can quickly create and assign groups to the hair guides. Strand groups allow you to sort your strands into distinct regions which can then be used to selectively apply operators down the evaluation pipeline.

Select some guides and press the Assign Unique button, a new Strand Group will be created and identified with a color and a number starting from 0. You can also assign or select a particular strand value by selecting a value in the Strand Group slider and pressing Assign or Select. A Group Channel is automatically created and this groups will be passed to other operators in the hair stack, including other Edit Guides operators. Use the "Select By Group" option to select the group to which the selected guide belongs.

Focusing on selected roots

If you have one or more hair strands selected press F button at any time to focus the view on their roots.

Control Point mode

Use the middle icon in the main Edit Guides rollout to switch to control point mode. Here you can select and drag control points, originally placed at strand tips, to modify the shape of the strands. You can move control points along the strands and also change the influence of control points over the length of the strands.

Focusing on selected control points

If you have one or more hair strands selected press F button at any time to focus the view on their control points.

Brushing

Brushing allows you to modify multiple guides at the same time in an intuitive paint-like manner. Various operations are performed this way such as combing the hair, cutting it, and painting its channels.

To enter brush mode select the Edit Guides operator in the hair stack. In the Attribute Manager use the brush button to enter the brushing mode. Then select the brush you want and move your mouse over to the viewport area. Brushing is then done by clicking and dragging inside the viewport.

Brush Types

You can choose between three brush types that give you a different feel and control over the brush. Use a brush with a Circular or Rectangular shape for general editing, or use the Line Brush type to brush or edit the hair in a straight line.

In the next example the Cut brush is used in combination with the Line Brush type to cut the guides in a straight line:

Changing brush size

The size of the brush determines the guides which this brush will affect. Only those guides inside the radius of the brush as displayed inside the viewport will be affected.

  1. Inside the Attribute Manager there is a brush size slider. Use it to change the brush size.

Changing brush strength

The strength of the brush determines the amount of the effect brush has on the guides. The stronger the setting the more effect the brush will have.

  1. Inside the Attribute Manager there is a strength slider. Use it to change the brush strength.

Mirror Brush Changes

As the name said, when this checkbox is active the changes made in one side of the hair will be reflected in the opposite side in real-time. This feature works the same with all the brush types. This is very useful when you need a symmetrical hair or fur.

You can change the symmetry axis to X, Y and Z Using the Brush Mirror Axis roll-out.

Mirror Brush in World Space

When on brush mirroring will be done in world space, otherwise it will be local to the object

Brush Max/Min Limiter

Use the Brush Max/Min Limiter parameters to determine the maximum and minimum length applied to the guides by the length brush. This allows for a more precise control over the guide length.

Keyboard shortcuts for brushes

You can switch quickly between brushes using the keys Ctrl+[0-9,-]

When Ctrl+0 is the Selection Brush and Ctrl+(-) is the Pull Brush.

Using Selection Brush

When using Selection Brush (Ctrl+0) simply left-clicking and dragging inside the viewport will select only those strands which intersect the brush region. Selection is always replaced when you create a new stroke.

Add and remove brush selection

  • To add strands to existing selection hold down Ctrl+Shift keys during a brush stroke.
  • To remove strands from existing selection hold down Ctrl key during a brush stroke.

Using tablet pressure when brushing

If you use a touch display or a tablet as an input device you can use this device's pressure to control brush strength. To enable this, check the Use Tablet Pressure option in global Brushes settings rollout available in the Attribute Manager. This option is on by default.

Brushing along surface

There are two ways a brush in Ornatrix can be used:
  1. To brush in current screen space (default), where your strokes will modify the hair strands in the screen direction
  2. To brush along surface, where the brush strokes are projected onto the distribution surface. This mode can be used to constrain the brushing changes to make hair or fur flow along the character's mesh surface.

To enable surface brushing hold down Ctrl key. You can also permanently enable surface brushing with Use Surface Brush option (see below).

Brushing options

Use Surface Brush

When this option is on brushing along mesh surface will be on by default. Holding Ctrl when this option is on will switch to screen-space brushing.

Use Tablet Pressure

This option will enable or disable pressure from screen or tablet, if your hardware supports it.

Affect Selected Only

When on, only currently selected strands will be modified during brushing

Affect by Roots Only

When on, only those hairs whose roots are inside the brush region will be affected

Preserve Strand Length

When on, strands will not be stretched or compressed during brushing

Optimize Strand Geometry

When on, a special algorithm is used for comb, grab, and smooth brushes which affects the whole strand alone its length by calculating the best fit to current stroke while minimizing changes to the strand shapes.

Resample Strands

When on the points on strands will be re-positioned to be equidistant after each brush stroke. This can be useful to retain strands smoothness.

When on,

Preventing guides intersection with surface

It is generally desirable for guides not to penetrate the surface from which they are originating. However, during editing it is easily possible for such intersections to happen, especially if many guides are edited en-masse. Use the Push away from mesh button in the Attribute Manager to solve this problem, the Auto option will perform this action automatically at every brush stroke. A separate parameter to the right of this button allows you to control the distance at which the guides should be away from the mesh. You can use this option many times throughout editing and you can undo its effects.

Managing guide channels

Go to attached video

Guide channels tutorial

Guide channels in Ornatrix are special per-strand or per-vertex attributes which you can add to a guides shape. These attributes will flow up the evaluation pipeline with the guides and, eventually, into the hair as well. These attributes can control various parameters in Ornatrix operators. For example, they can drive the length of the guides, or specify the magnitude used for curling. You can define as many guide channels as you need and reference them by name.

You can manage the guide channels in an Edit Guides shape by expanding the Channels rollout.
  • To add a new channel click the Add button and name the channel
  • To remove a channel select it from the list and click the Delete button
  • To rename a channel select it from the list and click the Rename button

When a new channel is created all strands get assigned a value of 0 for that channel. You can set a channel value for specific strands by selecting them in root mode, selecting the channel in the list, and then using the Channel Value slider to set their value. You can also use the Set Value button alternatively.

When you have created a channel you can see it in the Channel drop-downs for parameters in various Ornatrix operators. Select the channel you created from the drop-down to assign it to said parameter.

Per-Strand and Per-Vertex channels

The guide channel list in Edit Guides operator will contain both per-strand and per-vertex channels within it. Each list is preceded by either a ---Per-Strand Channels--- or ---Per-Vertex Channels--- line. For example, a channel list can look something like this:

---Per-Strand Channels---
Selection
StrandChannel1
---Per-Vertex Channels---
VertexChannel1

In this case Selection and StrandChannel1 are per-strand channels and VertexChannel1 is a per-vertex channel.

To add a new per-vertex channel select an existing per-vertex channel or the ---Per-Vertex Channels--- item before clicking on the Add button.

Ensuring consistent results

Edit Guides operator works by referencing individual guides in your hair structure by their internal index. As such, it is important that once you perform edits with Edit Guides the count and order of input guides below in the operator stack remains the same.

The following could change guide count and order and cause your guide edits to become invalid:
  • Changing number of guides in Guides from Mesh operator
  • Changing distribution parameters such as method, map, and multiplier in Guides from Mesh operator

It is therefore a good practice to use the "remember root positions" option prior to making changes in the Edit Guides operator,


Detail Modifier

Very often it is required to either increase or decrease the strand approximation on the fly. For example, sometimes it is a good strategy to start modeling the hair in a very low detail setting and then as you progress to increase detail and edit the hair into their final shape.

Furthermore, it is often more desirable to have a lower segment count in viewport and bigger one during render to get smoother results. Using strand detail modifier you can control the viewport and render segment count of specified strand object separately.

Strand detail uses a 3'rd degree b-spline interpolation to smoothly vary out the shape of individual hairs.

Parameters

  • Strand Group
    Allows you to isolate the effect of this operator by selecting a particular Strand Group created in the Edit Guides operator.
  • Viewport/Render Count
    Determines how many segments should be on the re-interpolated strands.
  • Smoothing
    Amount of smoothing applied to the curve before re-sampling it.
  • Sample By Threshold
    If on, the curve will be sampled based on how much it bends rather than uniformly.
  • Sample Size
    Size between 0 and 1 of each candidate sample when sampling the curve with threshold. Smaller values will yield better results but will be slower.
  • Angle Threshold
    Minimum angle between points on curve which will create new sample.


Contact

Please send us any feedback about the site or any of our projects by submitting a message. We will get back to you as soon as possible.

Consider using one of our official social media links on the bottom of the page for alternative ways to get in touch.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.