Ornatrix C4D Documentation

Documentation

  • About
    • About Ornatrix C4D
    • What's New in V4, V3, V2
    • Pricing and Licensing
    • End User License Agreement
    • Evaluation License and Demo
    • Minimum System Requirements
    • Arnold Compatibility
  • Getting Started
    • Installing and Uninstalling
    • Adding Hair to Objects
    • Hair from Surface
    • Hair from NURBS Curves
    • Hair from Mesh Strips
    • Working with the Grooming Tools
    • Hair and Guide Viewport Display
    • Working with Strand Groups
    • Working with Strand Channels
    • Operator Stack
    • Dynamic Baking
  • Creation
    • Groom Presets
    • Graft Grooms
    • 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
    • Merge Modifier
    • Groom Modifier
  • Styling
    • Edit Guides Modifier
    • Warp Roots Modifier
    • Frizz Modifier
    • Curl Modifier
    • Length Modifier
    • Surface Comb Modifier
    • Clump Modifier
    • Braid Patterns
    • Detail Modifier
    • Rotating Strands
    • Gravity Modifier
    • Symmetry Modifier
    • Generate Strand Data Modifier
    • Noise Modifier
    • Normalize Strands Modifier
    • Push Away from Surface Modifier
    • Baking Hair and Guides
    • Operator Baking
    • Operator Boxing and Unboxing
    • Strand Filter Modifier
  • Animation
    • Oscillator Modifier
    • Resolve Collisions Modifier
    • Moov Physics Modifier
    • Animation Cache Modifier
    • Adopt External Guides
  • Rendering
    • Change Width Modifier
    • Smooth Surface Modifier
    • Rendering with Redshift
    • Rendering with Arnold
    • Rendering with Octane
    • Supported Render Engines
  • Pipeline Integration
    • Rendering Hair as Mesh Geometry
    • Curves from Strands
    • Alembic Export
    • Alembic Import
    • Alembic Hair Data
  • Tutorials
    • Basic Ornatrix Concepts
    • Your First Groom: Grooming Basics
    • Grooming Workflows
  • SDK
    • Writing Plugin Brushes
  • Reference
    • Troubleshooting
    • Definitions


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.
Missing Something? Let us know if this page needs more information about the topic.


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.

(screenshot needed)
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.

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 Boxing and Unboxing

One or more Ornatrix modifiers can be "collapsed" into a single groom modifier in a process we call boxing. The functionality of the modifiers will be preserved and some of the parameters of the constituent modifiers can even be exposed and controlled in the UI. Opposite process of "exploding" a groom modifier into many modifiers is called unboxing.

Boxing

To box modifiers:

  1. Select the modifiers in the modifier list. They have to be consecutive (no non-selected modifiers between the top and bottom ones)
  2. Go to the Bake and Box tab in the Attributes section
  3. Press the Box Selected Modifiers button

A new groom modifier will replace the selected modifiers.

Unboxing

To unbox a groom modifier:

  1. Select the modifier in the modifier list
  2. Go to the Attributes section
  3. Press the Unbox button

The groom modifier will be replaced by multiple modifiers which were boxed within it


Normalize Strands Modifier

Normalize Strands

Overview

Normalize Strands operator uses a hair direction normalization algorithm to de-tangle the hair strands. It can be used at any point in the stack to de-tangle the strands while grooming and be baked afterwards to improve performance.
It can also be used to prepare the final hair for the simulation or for rendering. In then following image, this operator is used to eliminate hair self intersections:

Note: This operator will be recomputed on each animation frame to keep the hair strands detangled, and this can cause a flickering effect in the hair animation. Since this operator is intended to be used during the hair modeling process, it should be baked to before rendering or animating the hair.

Parameters

Normalize Strands provides few parameters that can be adjusted to get the desired results. Additionally, those parameters can be 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.
  • Radius
    The size of the volume around each point on hair used to compute the average strand directions, relative to the size of the whole hair object.
  • Nearest Count
    Number of neighboring hair points to consider when averaging positions. More points will produce smoother (lower frequency) results.
  • Per Strand Group
    When enabled, the normalization will be computed in a per-strand group basis.
  • Amount
    Modulates the normalize effect. This parameter can also be controlled using Guide Channels and texture maps.

Related Topics

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


Operator Baking

To simplify complex stacks, lock down groom changes, and make animated hair more stable one or more operators in Ornatrix can be baked into a single Edit Guides operator.

Go to attached video

Baking Modifiers

To bake one or more modifiers:

  1. Select the modifiers in the modifier stack. They have to be consecutive (no un-selected modifiers between the top and bottom ones)
  2. Go to the Bake tab in the Attributes section
  3. Press Bake Selected Modifiers button

A new Edit Guides modifier capturing the changes of selected modifiers will be created.


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

Make sure to get the latest supported version of C4DtoA plugin from Arnold's website.

Ornatrix V4 targets C4DtoA 4.9 for Cinema 4D 2024-2026 (and C4DtoA 4.7 for R25-2023). See Arnold Compatibility for the full table of expected C4DtoA versions per Ornatrix and Cinema 4D release.

Note: rendering Ornatrix hair with Arnold is not supported in Cinema 4D R22.

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


Rendering with Octane

Otoy Octane is capable of rendering Ornaitrx hair using its built-in hair primitive. To render Ornatrix hair with Octane:

  1. Go to the Display tag of the hair object that you want to render,
  2. Go to the Evaluation tab,
  3. Enable Force Render Mode Evaluation and Display Strand Count Fraction.

Those two options are not needed for the actual rendering, but they will make sure that when rendering in IPR mode, the total amount of hair and Viewport Count Fraction percentage set in Hair from Guides will be respected.


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


Pricing and Licensing

For information about license server installation, maintenance, using reseller keys, and other general topics please refer to our general licensing documentation.

Ornatrix Cinema 4D Discounts

  • Volume Discount
    To help you get Ornatrix into your studio we provide discounts whenever you purchase more than one license. The discount applies in incremental portions for 5 and 10 licenses. For the exact figures please refer to the purchase section or contact us.
  • Upgrade Discounts
    Ephere provides two separate upgrade discounts for all existing Ornatrix users who own a previous version of the plugin:
    • Free upgrade is available to anyone who has purchased a previous Ornatrix version later than 6 months before the latest version came out. For example, if you have purchased Ornatrix V1 in October 2016, you are eligible for a free upgrade to Ornatrix V2 which came out in January 2017 (this is a hypothetical scenario).
    • 25% discount is available to all previous Ornatrix license holders who do not fall under the first category above. A special 50% discount is available to people who upgrade within the first month of a new version coming out.
  • Student and Educational Discount
    If you are a student or a school and can prove your enrollment and educational status you are eligible to our 50% educational discount. A valid and current ID emailed to us is acceptable as proof.

Only one discount can be used for a purchase. A discount cannot be applied on top of already discounted price. Discount codes cannot be used to buy a rental license. Please contact us for a quote specific for your organization.

Licensing

Ornatrix for Cinema 4D can be purchased with a Rental or Perpetual license.

Perpetual Licenses

When you purchase an Ornatrix Cinema 4D license, you are buying a perpetual license for the current version of the product. Even after the next and newer versions of Ornatrix come out you may continue downloading, installing, and using the version which you purchased. As a license owner you are also eligible for substantial upgrade discounts towards future versions of Ornatrix Cinema 4D. Click [[Ephere:Perpetual_and_Rental_Licenses|here]] here to find more information about our rental licenses.

Rental Licenses

Rental licenses allow you to use the product you purchased for a limited time for a price which is much smaller than the perpetual license. Any new minor or major versions of the product released while your rental license is active are available to you. Click [[Ephere:Perpetual_and_Rental_Licenses|here]] to find more information about our rental licenses.

License Keys

When buying Ornatrix from a reseller you will get a License Key. This key should be activated in the Purchase page.

Note: Ornatrix for Maxon Cinema 4D, Autodesk Maya and Autodesk 3ds Max are different products and an individual license is required for each product.

License Reselling

You are not allowed to resell licenses of Ephere products, they are permanently attached to the person(s) or company who purchased them.

Pricing

Prices for Ornatrix licenses depend on multiple factors. Your individual price can vary depending on various discounts which we provide. Please see the purchase section for the exact figures. Prices may change at any time without notice.

Note: You must be a registered user to access the purchase page

Refunds

We have a no-refund policy except if a payment is made in error or there are any issues with the payment transaction. We are happy to help you resolve any issues should you experience them promptly.

Render Nodes

If you are installing Ornatrix Cinema 4D on a render node/slave computer you do not require any licenses. Ornatrix will not ask to be licensed when rendering only. Therefore, only workstation computers require a license and you may install Ornatrix on an unlimited number of network render computers.


Propagation Modifier

(screenshot needed)
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.

(screenshot needed)
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


Merge Modifier

Merge Strands

Overview

Merge Strands takes two or more input hair or guide objects and combines them into one object. This can be useful when you have two grooms which are generated and styled separately on the same character, which you want to become a single groom without losing the creation history.

Note: Merging assumes that all input strands have been planted onto the same distribution surface.

Merging grooms

The Merge operator is simple to use. Add the Merge operator at the level of the stack where you want to merge the two objects.
In this example the merged object will not be affected by the operators applied before it:

In this example the merged object will be affected by the operators applied after it. For instance, the Change Width operator will affect the strand width of all the merged hair objects:

In the Merge operator, click the Add button and then click on a hair object in the viewport to add it to the Merged Strands list. In the following image, two hair objects have been added to the Merged Strands list:

Overlap Resolution

When merging grooms, you may encounter overlapping hair between the sub-grooms. Ornatrix can detect this overlapping hair between the merged inputs and resolve or blend it, so that the combined groom reads as a single, coherent result rather than two grooms sitting on top of each other.

Go to attached video

Overlap Resolution Options

The Merge operator provides the following options to handle overlapping hair:

  • None (default) - No overlap handling; grooms may overlap
  • Remove - Removes overlapping hair strands
  • Blend - Smoothly blends the sub-grooms together, eliminating sharp transitions

(screenshot needed)

Distance Threshold

When using overlap resolution, you can adjust the Distance Threshold parameter to control which strands are considered overlapping. This helps fine-tune the merge result.

(screenshot needed)


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 several 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.
    When using the Group Strands option, cylindrical groups can encapsulate grouped hair volumes, creating procedural volumetric mesh approximations of the strands. This is ideal for real-time applications, stylized characters, and 3D printing. Each unique strand group creates its own hair mesh clump, and the process remains fully procedural - you can continue editing the hair below in the stack and see the modified mesh in real-time.
  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. Flat Ribbon Hair (ideal for hair cards and textured hair meshes)
    Flat ribbon meshes are planar strips that follow strand groups, perfect for creating hair cards used in real-time graphics and stylized characters. When combined with the texture generation feature, this creates a complete hair card workflow where textures are procedurally generated from the actual hair geometry. This mesh type can be selected when the Group Strands option is enabled and provides an alternative to cylindrical groups.
  4. 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">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.

Group Meshing

Ornatrix can generate separate, grouped meshes per strand group instead of one mesh per individual strand. When the Group Strands option is enabled, each unique strand group produces its own hair mesh clump. This enables volumetric meshed versions of hair, hair cards, and flat ribbon meshes, and is ideal for real-time applications, stylized characters, and even 3D printing. The process is entirely procedural, allowing real-time updates as you edit the underlying hair below in the stack.

Go to attached video

Automatic Grouping with Clump Modifier

The simplest way to create grouped hair meshes is using the Clump modifier's automatic grouping:

  1. Start with pre-clumped hair
  2. Select the Clump modifier and enable Set Clump Strand Groups in the Global Parameters section - this sets hair strand groups based on which clump they belong to
  3. Add a Mesh from Strands modifier
  4. Enable the Group Strands option
  5. Set Mesh Type to Cylindrical with the desired Side Count (e.g., 10)
  6. Each clump automatically creates its own volumetric mesh

Manual Strand Group Assignment

For custom control over grouped meshes:

  1. Add an Edit Guides modifier before Mesh from Strands
  2. In Edit Guides, select the desired strands
  3. Enable the Use Strand Groups option
  4. Click the Assign Unique button to assign a unique group to the selection
  5. Repeat for other strand selections as needed
  6. In Mesh from Strands, set the Strand Group filter (e.g., 1-99) to exclude base group 0

Key Features

  • Procedural workflow - Continue editing hair below in the stack with real-time mesh updates
  • Thickness preservation - Hair thickness from the change width modifier is respected in mesh generation, allowing you to adjust mesh volume thickness
  • Cap Faces option - Generate closed meshes when needed for watertight volumes

Hair Card and Texture Generation Workflow

Ornatrix provides a streamlined workflow for creating textured hair meshes and hair cards, commonly used in real-time graphics and stylized characters. By projecting and rasterizing the dense hair onto the generated mesh, a hair texture can be baked on the fly, maintaining procedural links between your hair geometry and the generated textures.

Go to attached video

Setup Requirements

  • Hair must be partitioned into groups using the Edit Guides modifier or automatic grouping via the Clump modifier
  • The Group Strands option must be enabled in Mesh from Strands

Texture Generation Process

  1. Add a Mesh from Strands modifier at the top of the stack
  2. Enable the Group Strands option
  3. Choose between Cylindrical Groups or Flat Ribbon mesh types
  4. Navigate to the Mapping section
  5. In the Generate Texture section, specify a file path for the PNG output
  6. Adjust the Bitmap Size parameter based on the desired texture detail
  7. Click the Generate Texture button to create an alpha opacity hair texture with each strand group as its own texture island

Shader Setup Example

  1. Create a material for the hair
  2. Apply the appropriate hair color and parameters
  3. Assign a bitmap texture pointing to the generated hair PNG as the Opacity / Alpha map
  4. Use a high quality display setting for better viewport preview

Dynamic Updates

The texture generation maintains procedural links to your hair geometry. When you modify:
  • Hair thickness (via the change width modifier)
  • Hair orientation (via the Rotate Strands modifier)
  • Mesh type (switching between cylindrical and flat ribbon)

Simply re-generate the texture to update it with the new hair properties.

Parameters

  • Strand Group
    Allows you to isolate the effect of this modifier by selecting a Strand Group created in the Edit Guides modifier. Can be set to a range (e.g., 1-99) to exclude certain groups like the base group 0.
  • Group Strands
    When enabled, generates meshes based on strand groups rather than individual strands. This enables the creation of hair cards, grouped hair meshes, and volumetric hair approximations. Each unique strand group creates its own hair mesh clump. Required for the texture generation functionality.
  • Mesh Type (when Group Strands is enabled)
    • Cylindrical Groups - Creates volumetric meshes encapsulating grouped hair
    • Flat Ribbon - Creates planar strips ideal for hair cards and real-time applications
  • Cap Faces
    When enabled, generates closed meshes with capped ends, creating watertight volumes. Useful for 3D printing and certain stylized effects.
  • 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. This parameter also affects the topology of grouped hair meshes.
  • 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

Mapping Parameters

  • Per-strand UV coords.
    If on, every strand will use its own UV coordinates spanning from 0 to 1. When off, these coordinates are inherited from hair. For example, when creating leafs you would usually use one texture for all leafs thus requiring every leaf to have its own set of UV's.
  • Create Atlas option gives you the ability to create texture islands in combination with the previous settings.
  • Strand Group Islands will create UV islands based on strand groups created in Edit Guides.
  • Generate Texture section (when Group Strands is enabled)
    • File Path - Specify the output location for the generated PNG texture
    • Bitmap Size - Control the resolution of the generated texture
    • Generate Texture button - Creates an alpha opacity texture with each strand group as a texture island

Related Videos

  • Using Braid Pattern and Mesh from Strands to create braids

    Go to attached video


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 modifier.
  • 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.

Curved Extensions

Go to attached video

The Length operator can extend strands beyond their original length. By default, extensions are added as straight segments, which can produce an artificial look when lengthening strands that have a natural curve. The Curved Extension option avoids this by extending strands in a way that preserves their curved shape, continuing the existing curvature instead of appending a straight tail, for a more natural-looking result.

This is especially useful when increasing the length of hair that bends or coils.

  • Curved Extension
    When on, strands are extended in a way that preserves their curved shape, producing a more natural look. This option is particularly useful when lengthening strands to avoid an artificial straight appearance.

Length Brush

The Length operator functionality is also available as a brush tool within the Edit Guides operator. The Length brush includes the same Curved Extension option, allowing you to interactively extend or shorten specific strands while maintaining natural curves during the grooming process.


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 the standard Maxon Cinema 4D <version> installation directories (for example ProgramFiles\Maxon Cinema 4D 2025). 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_<version> can be used to specify the desired install locations for various C4D versions, where <version> is the Cinema 4D version (e.g. C4D_INSTALL_PATH_2025).
  • Properties with name ENABLE_C4D_<version> can be used to disable installing Ornatrix for a 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 2025 but not for C4D 2024 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_2025="C:\Program Files\Maxon Cinema 4D 2025" ENABLE_C4D_2024=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

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 name and location of this .txt file by setting its full file path in the ORNATRIXC4D_LICENSE_SERVER_IP_PATH environment variable.

Installation Directories

Ornatrix C4D is installed into the Plugins folder in the installation directory of Cinema 4D. This means that each version of Cinema 4D installed in your system can use a different version of Ornatrix if you desire. In Ornatrix Cinema 4D download page you will find a separate installer for each major version of Cinema 4D.

On Microsoft Windows, Ornatrix is installed into \Maxon Cinema 4D <version>\plugins\Ornatrix directory by default.

On Mac systems, Ornatrix is installed into /Applications/Maxon Cinema 4D 2025/plugins/Ornatrix by default.

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 is not possible to have two different Ornatrix versions within same Cinema 4D installation, it is possible to have two different Ornatrix versions in two different C4D installations. For example, if you have C4D 2024 installed and have Ornatrix V3 installed inside it you can also install Ornatrix V4 in Cinema 4D 2025 on the same computer.

Note: Some versions of Ornatrix provide assets and grooms which are not compatible with previous versions.


Multiplier Modifier

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.


Noise Modifier

Noise modifier allows adding procedural noise to hair and optionally animating its movement. It can also be used to fake wind animation on short hairs or to add an extra layer of animation to already simulated hair.

Parameters

  • Amount
    Set the noise amount.
  • Amount Vector
    Noise strength specified individually for axis.
  • Amount Channel
  • Noise Scale
    Frequency of the noise pattern.
  • Space Offset
    Move the noise pattern along each axis.
  • Time Offset
  • World Space
    When on, the directional parameters will be applied as world-space vectors.
  • Preserve Strand Length
    Preserve the strand length when applying deformations.
  • Movement Direction
    Vector specifying in which direction the noise pattern will be moved.
  • Movement Speed
    Specifies how fast the noise pattern will move.
  • Follow Target
  • Target


Moov Physics modifier

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 Cinema 4D 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.


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.
  1. 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.


Minimum System Requirements

Hardware Requirements

Ornatrix heavily relies on your system's CPU, GPU, and RAM to model, simulate, and render millions of high-fidelity hair strands. For optimal performance, we recommend using a modern CPU with a high core count and high clock frequencies, paired with at least 32 GB of RAM.

Windows

  • Windows 10 or newer.
  • Cinema 4D R25.010 or newer (up to and including Cinema 4D 2026).
  • VC 2022 runtime

Mac

  • Mac OS 13 Ventura or newer.
  • Cinema 4D R25.010 or newer (up to and including Cinema 4D 2026).

Supported Cinema 4D builds

Ornatrix is not guaranteed to work on all builds of Cinema 4D. We recommend using the versions for which Ornatrix is specifically built. Officially, we support the latest revision of each major version.

Known Issues and Limitations

  • Guide Width
    The Guide/Strand Width parameter in Edit Guides is currently not supported. This limitation arises from the fixed line width of 1.0f in Windows DirectX starting with Cinema 4D R26. However, this feature functions correctly with OpenGL on macOS.


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


Warp Roots Modifier

Warp Roots is a specialized modifier that provides precise control over hair, fur, and feather root distribution. It allows you to interactively bunch together or spread apart root positions using an intuitive painting interface, which is particularly useful when modeling feathers or sparse fur patterns.

Go to attached video

Parameters

A set of artist-friendly parameters allow quick control over hair distribution with minimal setup. These parameters can be driven by texture maps, Strand Groups, guide channels and mesh vertex colors.

  • Density
    The primary control for warping root positions. Paint lighter values to bunch roots together and darker values to spread them apart.
  • Strength
    Controls the intensity of the warping effect. Increase for more pronounced distribution changes.
  • Iterations
    Number of Jacobi iterations used when solving the root distribution.
  • Resolution
    Grid resolution used for the warping computation.

Workflow

  1. Add a Warp Roots modifier to your hair object
  2. Click the Create button next to the Density Channel option and choose the Paint Strands option - this creates an Edit Guides modifier for painting the density channel
  3. Make sure the painting (Edit Guides) is applied before Warp Roots in the evaluation order
  4. Paint lighter values where you want a denser hair distribution and darker values where you want it sparser
  5. Adjust the Strength parameter to control how pronounced the effect is
  6. Continue painting as needed - lighter values bunch roots together, darker values spread them apart


Troubleshooting

In this document we explore various known issues related to Ornatrix C4D and solutions to them.

Cannot see hair and guides in viewports

Problem

Hair and guides are not visible inside the viewport but can be rendered. Adding Mesh from Strands modifier also does not fix the problem.

Cause

Splines are filtered out in Cinema 4D viewport display

Solution

  1. Open Attribute Manager (Main menu->Window->Attribute Manager)
  2. Select Mode->View Settings
  3. Select Filter
  4. Enable Spline option

Mirrored Strands do not align with an animated 3D model.

Problem

Hair strands generated by the Symmetry_Modifier do not align with an animated 3D model, even if the strands are grounded using the 'Ground Mirrored Strands' option or using the Ground_Strands modifier.

Cause

This is expected behavior. When using Symmetry_Modifier the result will always be symmetrical. Ground strands will merely generate surface dependencies for baking.

Solution

Bake the symmetry modifier.


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 Modifier to be applied directly above this operator to generate dense hair without having to add a ground strands operator in between.


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 )


Your First Groom

In this guide, we will apply the concepts we have learned in Basic Ornatrix Concepts. We will create a groom for our teddy bear model, aiming to keep the process as procedural as possible. This will involve root generation, combing, hair interpolation, adding details, shading, and ultimately, rendering. You can download the necessary assets from Here. Let's get started!

Preparing the Model for Grooming

First, ensure that your 3D model has UV coordinates. Several root distribution methods rely on UV coordinates. Additionally, UVs are essential if you intend to apply multiplier maps to Ornatrix operators, such as a distribution map in the Hair From Guides or Frizz operator to control where the frizz effect is applied to your groom. Both Hair From Guides and Guides From Mesh allow you to choose the UV channel for operator computation. This means you can have multiple UV channels and reserve one exclusively for grooming. This is especially useful if you want to fine-tune the root distribution, or if you require separate UVs for texturing and grooming.

Make sure you are grooming on the final character topology. Some Ornatrix operators, such as Guides From Mesh and Hair from Guides, are topology-dependent. This implies that if the character's topology changes, the guides and hairs will be regenerated with the new data. However, it is still possible to modify the character's topology in the middle of grooming, as explained in Root Persistence in Guides From Mesh

Generating the Groom Guides

  1. With the Body object selected, go to the Ornatrix menu on the top bar and click Add Hair to open the groom preset selection window.
  2. Choose the "Fur Ball" preset.
  3. Set the Scale parameter to 5%. This determines the initial length of the hair strands. You can leave it as default and set the strand length later in Guides From Mesh.
  4. Click "Create."

This action will generate a hair object with the following modifiers in sequence: Guides From Mesh, Edit Guides, Hair From Guides, and Change Width. Your groom should now resemble the following image:

We only need the Guides from Mesh operator for now. For a cleaner approach, we will add the operators one by one. So, select the last three operators and delete them. Your hair stack should now appear as follows:

Let's change some settings in Guides From Mesh.

  1. The default distribution method in "Guides From Mesh" is "Even", creating a nice and even root distribution. This is a good starting point for this case.
  2. Adjust the Guide Length to your preference (you may want to refer to image references). It was initially set at 2.5cm when we scaled the "Fur Ball" preset to 5%.
  3. Set the Point Count to a lower value for now. The default is 10, but we don't need that level of detail at this stage. We can increase it later using a "Detail" operator when adding more effects and fine details to the hair.
  4. Set Random Length to 0. We'll use a Length operator later to control strand length and randomization.
  5. Increase the Guide Count from 300 guides to 1000 to ensure sufficient coverage across the entire surface and prevent large empty areas.

For now we are done in Guides From Mesh. At this point your groom should like similar to this:

Combing the Guides

Surface Comb

Add a Surface Comb operator. This operator allows us to comb the hair using sinks to define the overall direction of the hair guides. Initially, the guides will all flow in a similar direction:

To establish the direction of the hair, go to the "Sinks" tab, click the Add Sinks button, and then click and drag your mouse on the character's surface to add a new sink.

The hair strands will follow the direction of these sinks. You can quickly groom all the hair strands by adding multiple sinks. Continue adding sinks to the surface until you are satisfied with the overall flow of the strands. Use the Edit Sinks button to select the sinks and move them on the character's surface. Additionally, you can use the Ramp Curve to control the strength of the sinks over the hair, and customize each sink's properties as needed.

Go to attached video

Creating and Editing Sinks

Generating Hair Strands

Add a Hair from Guides operator. This operator generates dense hair strands interpolated between the guides. The hair density is controlled by two parameters: Render Count (hair density at render time) and Viewport Count Fraction (hair density in the viewport). The default values are 10,000 and 10%, respectively.

Adjust the settings as follows:

  • Increase the Viewport Count Fraction to make more hairs visible in the viewport.
  • In the Guide Interpolation tab, select Barycentric as the Guide Selection for better hair distribution.
  • In Barycentric Interpolation Type, choose Manual Triangulation.

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

The hair is being generated on the whole character, but we don't want that. To control where hair is added, we can use a distribution map.

In your preferred painting application, paint areas you want to exclude (e.g., inside the mouth and eye sockets) with pure black and sharp borders. On another layer, add a gradient to areas where you want to reduce hair density (e.g., around the eyes and nose). You can also paint light gray on seams for later use as a length map to adjust fur length. This is how our Distribution Map looks:

For better control, it's advisable to create separate distribution and length multiplier maps for the "Hair From Guides" operator and the Length modifier operator. Storing these maps in separate files allows for more precise adjustments. Hair from Guides works better with pure black and white values. While the Length operator can take advantage of smooth gradient values. You can combine both for better length transitions like fading on haircuts or smooth transitions from skin to hair or hairlines.

Create a distribution map using pure black and white to control hair distribution. In a different layer, paint a length multiplier map with smooth gradients to fine-tune hair length. Utilize gradient values to selectively reduce strand length in appropriate areas, e.g., around the eyes and nose. By maintaining these maps separately, you'll have more flexibility and control over your hair grooming.

Connect the distribution map to the Distribution Multiplier slot in the "Hair From Guides" operator. This will remove hair from the black-painted areas:

Detailing

Adding Details Using Strand Channels

In this section we are using Strand Channels to drive various parameters in the operator stack.

  1. Return to the "Surface Comb" operator and add Edit Guides after it.
  2. Create a "per-strand channel" following the instructions in Working with Strand Channels, and name it "LengthCH" or any recognizable name for later use. The newly created strand channel will appear in Edit Guide's Strand Channels list.
  3. Add a Length operator.
  4. In the Length operator, find the Value Channel list and select the newly created "LengthCH" channel.

We will use a Length operator to shorten the fur around the mouth, ears, and nose.

Alternatively, you can use the Length multiplier map that we created previously. If you prefer this method, you can skip the steps to create the strand channel. However, it is useful to a a strand channel that can be recombined and reused in any operator along the operator stack.

In the per-strand channel we've just created, all values are currently set to black, which means the length of all the strands is set to 0. To change this:
  1. Return to the "Edit Guides" operator.
  2. In Root editing mode, select all the guides.
  3. Choose the "LengthCH" channel.
  4. In the Channel tab, set the Current Channel Value to 1 (where 1 = White and 0 = Black).
  5. Click Assign Value to Channel to apply the new value to all the selected strands.

Now that you've set the length to 1 for all the guides, you can use the Paint Brush in brush mode to paint darker values around the eyes, nose, ears, or any other areas where you want to reduce the fur length. These changes will be visible in real-time as you paint.

Go to attached video

Working with Strand Channels

The following gif shows the before and after editing the strand length using a strand channel:

Clumping

It's time to introduce some clumping to the hair.

  1. Add the Clump operator after "Hair From Guides".
  2. In the Clumps section, set the Clump Count to the desired result and click Create.

Note: Remember to click the Create button each time you change the Clump Count parameter or the hair amount in Hair from Guides to see the updates.

At this point, it is recommended to increase the Viewport Count Fraction to 100% to have a better idea of how the clumps will look like in the final render.

Go to attached video

Real-time viewport hair rendering in Cinema 4D viewport

This is how our teddy bear looks like with 6k clumps and 50k hair strands:

You can further refine the clumping by adding a strand channel, similar to what we did with the Length operator. Use this channel to adjust the clumping strength in specific areas and introduce variations. In the following example, we used a strand channel to reduce the clump strength on the shorter strands for a more natural look. This is where the "LengthCH" strand channel could be reused.

Notice the difference between the hair appearance with and without the painted strand channel:

Frizz

As we approach the conclusion of the grooming process, we'll add some frizz to the fur to give it a more natural and fluffy appearance.

  1. Add a Frizz operator after the Clump operator
  2. 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.
  3. Adjust the Amount value until you achieve the desired level of frizz. This will help break up the patterns created by the Clump operator and to open the clumps a little bit, adding some volume to the fur:

Now, let's introduce some outlier hairs.

  1. Add another "Frizz" operator after the previous one.
  2. Set the Amount value to 0.
  3. Experiment with the Outlier Amount and Outlier Fraction to add outlier hairs.

Notice the difference in hair appearance with and without outlier hairs, especially when the Outlier Fraction is set to a value like 40%:

Feel free to use a strand channel to fine-tune where the frizz is applied to polish the final look.

Eliminating Fur Penetration with the Character

At this point, you might notice that the fur penetrates the character's mesh in some areas like the ears, as shown in the image below:

To resolve these intersections, we'll employ the Push Away From Surface operator.

Add the "Push Away From Surface" operator after the "Hair From Guides." You can also place it before "Hair From Guides," but in that case, it will only push away the guides, and the hair interpolation will cause some hairs to intersect with the mesh anyway. The choice depends on your specific requirements or performance considerations. Using it after "Hair From Guides" ensures that every single strand is pushed away from the character's surface. The more strands it computes, the greater the performance hit. Even with the default settings, "Push Away From Surface" will significantly reduce fur intersection issues.

Before and After adding "Push Away From Surface" operator:

Rendering in the Viewport

We are done for now. It is time to see how our groom looks in the viewport. For better hair strand visualization in the viewport, go to the Display Tag of the hair object, enable the following options:

  • Viewport Lights. Ensures that the viewport lights affect the hair object.
  • Viewport Mesh Strands. Render the hair strands as meshes.
  • Camera Facing Normals. Ensure that the strand normals are always facing the camera for better shading in the viewport.
  • Per Strand Coordinates. Generates a UV island for each hair strand. This ensures that each hair strand is properly shaded from root to tip in the viewport.

The settings above are only valid in the viewport. They do not affect the final rendering on Redshift, Octane, etc.

Final Thoughts

In this first part of the tutorial, we've applied the concepts outlined in the "Basic Ornatrix Concepts" article. We've covered everything from hair generation to grooming and detailing.

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

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.


What's New in V4

Ornatrix V4 is the next evolution of procedural hair, fur, and feather grooming in Cinema 4D. It brings the full 3ds Max V9 and Maya V5 feature set to Cinema 4D, together with several C4D-specific workflow improvements, so you can create, style, mesh, and export production-ready grooms - realistic hairstyles, stylized hair, fur, feathers, hair cards, and game-ready assets - in a fully non-destructive workflow.

The new features are summarized below, each linked to its documentation, followed by tutorial videos for the major additions.

Release Trailer

Go to attached video

Feature Highlights

  • General
    • Cinema 4D 2026 support (see Minimum System Requirements)
    • Native build for Apple Silicon (ARM) Macs - runs natively, not under Rosetta (see Installing and Uninstalling)
    • Switched to the CMake build system (Cinema 4D 2025.3+)
    • All Windows and macOS installers are now digitally signed, and the macOS packages are notarized by Apple, so they install without unidentified-developer warnings
  • Grooms
    • New Create Groom dialog with groom thumbnails
    • Create Groom dialog filters the list to only grooms applicable to the selected base objects
  • Edit Guides and grooming brushes
    • Texture and decal painting with the paint brush
    • "Curved Extensions" option for the Grow/Shrink (Length) brush
  • Clump modifier
    • Interactive clump editing manipulators
    • Clump pattern knots for braiding
  • Merge modifier
    • Overlapping hair overlap resolution and blending
  • Mesh from Strands modifier
    • Hair texture generation (hair-to-mesh projection and rasterization)
    • Group meshing
    • "Cap Faces" attribute for closed strand meshes
  • Length modifier
    • Extend strands with curved extensions
  • Curl modifier
    • Phase and Magnitude Randomness parameters
  • Frizz modifier
    • Scale Randomness option
  • Surface Comb modifier
    • Curved sinks
  • Hair
    • Warp Roots - root warping and repositioning
  • Pipeline
    • Export the "groom_color" attribute to Unreal Engine Alembic (see Alembic Export)
    • Arnold translator moved to C4DtoA 4.9 (see Rendering with Arnold)

Tutorial Videos

Warp Roots

Go to attached video

Merge - Overlap Resolution and Blending

Go to attached video

Mesh from Strands - Hair Texture Generation

Go to attached video

Mesh from Strands - Group Meshing

Go to attached video

Length - Curved Extensions

Go to attached video

Texture Paint Brush

Go to attached video

Export groom_color to Unreal Engine Alembic

Go to attached video

Fixes

  • MFS not generated for imported grooms
  • Edit Guides manipulator works incorrectly for rotation and scale
  • The Strand Filter modifier doesn't appear in the Ornatrix menu
  • Warp modifier performance
  • Strands do not follow the deformations of a rigged character
  • Clumper: Clump Patterns issue
  • Clumper: Create Clump and Dynamic Clump issue
  • Clump Manipulators: Edit Position
  • Clump Manipulators: the knots disappear
  • Paint Color after Texture projection issue
  • Flood Channel button in painting
  • Texture Directory issue
  • Wrong render results on bucket rendering
  • Occasional Drawport crash
  • Ground Strands breaks spline-sourced hair shape after scene reload
  • Surface Comb sinks from an imported groom are lost when the scene is saved and reloaded
  • Licensing dialog cannot get an online license when the server address is "ephere.com"


Whats New in V2

  • Strand group blending
  • Edit Guides
    • Create Brush
    • Delete Brush
    • Spatial Change Tracking
    • Draw Curves tool
  • Surface Comb
    • Triangulation mode
  • Arnold Render
    • Strand data export
  • Universal Scene Description curve import and export
  • Strand group patterns
  • Improved sub-clumping
  • Hair from Guides
    • Strand groups can be used as hair parts
  • Frizz
    • Preserve Length option
  • Animation Cache
    • Start and End recording options
  • Reduced storage requirements for hair surface dependencies, allows faster work with polygonal base meshes and smaller memory usage


What's New in V3

  • Grooms
    • Graft grooms tool
    • Switched to new Yaml groom format with much wider capability and support
    • Import groom as baked hair and baked guides option
  • New Groom modifier
    • "Boxing" modifiers into a single groom node
    • "Unboxing" a groom node back into its constituent modifiers
    • Create preset grooms as "full stack", groom modifier, or baked hair/guides
    • Preset grooms have adjustable parameters
  • General
    • Support for figure objects for collision detection
    • Cinema 4D 2024+ support
    • Dynamic baking of modifiers
    • Vertex color channels in modifiers that require it
    • Modifier baking now supports baking strand widths
    • Vertex tangents use Texture Coordinate generation method by default
    • Geodesic distance by default to calculate strand group blending effect
    • Default hair display to viewport is optimized mesh
    • Modifier render vs. viewport visibility support for Ornatrix modifiers
  • Performance
    • Up to 100x speed improvements in various parts
    • Circular brush mirroring performance is improved by ~90% (tested on 100K strands)
    • Significant speed increase in Push Away from Surface modifier
    • Significant performance improvements in multiple other areas (Embree 3)
    • Faster loading of "Add Hair" dialog
  • Rendering
    • Arnold translator for C4DtoA 4.3 and later
  • Mesh from Strands modifier
    • Conform to Surface option smoothly blends the roots to surface
  • Edit Guides
    • Option to set default strand channel values
    • Added "Rotate Strands" tool
    • Create brush can add strands per-vertex and per-polygon face
    • (Plant Guides Tool) Option to enable or disable automatic new strand selection
    • Interpolating planted guide between all selected strands instead of only the closest one
    • Ability to move only the roots of strands
    • Painting RGB colors with the Paint brush tool
  • Guides from Guide Mesh modifier
    • Modifier preserves strand rotations
  • Clump modifier
    • Dynamic clumping option (automatically update clumps when clump count is adjusted)
    • Option to set strand groups based on clump ownership
    • "Ground Displaced Roots" option
  • Strand Animation Cache modifier
    • Option to only load specific Alembic curves
    • "Force Consistent Root Positions" parameter
  • Surface Comb modifier
    • Per-sink rotation adjustments
  • Ground modifier
    • Using Embree, significantly speeding it up
    • Mesh evaluation at specified time
  • Filter modifier
    • Option to remove strands evenly
  • Noise modifier
    • Range values for Scale parameter
  • Mesh from Strands modifier
    • Negative axis options to the 'Proxy Reference Up Axis' parameter
  • Generate Strand Data modifier
    Allow applying Generate Strand Data values by strand groups (instead of individually per strand)

Fixes

  • Crash with proxy meshes when input hair doesn't have a distribution mesh
  • Crash when importing some MetaHuman Alembic grooms
  • Guides close to UV edges will flicker on animation when texture islands are present
  • Crash trying to access dynamic parameter set descriptor owner
  • Groom dialog imports grooms given last selected "import as" setting, while always displaying "full stack" as default
  • Guide's orientation change when moving the its root
  • The selection brush stops working correctly if 'Affect Selected Only' is enabled
  • Incorrect mesh parameter handling when generating yaml grooms
  • Push Away from Surface: Crash when using very dense meshes
  • Strand Scatter: Scattered objects should inherit the rotations of the target strands
  • Crash when merging two Hair From Mesh Strips objects with Merge operator
  • Clumper: Undoing "Root Blending Positions" changes will reset the clumps
  • Clumper: Clumps reset when enabling Viewport Mesh Strands
  • Scatter Strands: Crash when enabling 'Display in Viewport'
  • Push Away From Surface: Incorrect collisions in Hair from Mesh Strips
  • Delete brush selects wrong strands when ignore backfacing option is off
  • Crash when a channel is assigned in Clumper
  • Re-fitting graft grooms containing Surface Comb changes hair scaling and orientations
  • Crash when using a dense mesh in Push Away from Surface
  • Polygon mesh set as blend shape is removed when enabling a hair object
  • Smooth Surface operator changes strand rotations when First Edge is used for tangent calculation
  • Hair doesn't clear all surface dependencies leading to rare crashes
  • Crash when deletions and creations are used together on a deforming mesh
  • Crash when a channel is assigned in various operators
  • Push Away From Surface: Hair object disappears when adding PAFS modifier
  • Warning when brushing hair from baked hair, in some cases
  • Curl: Random Seed not working correctly
  • Edit Guides: Soft Selection Distance parameter value is too sensitive
  • Crash when deleting Hair from Mesh Strips meshes
  • Frizz Operator: Incorrect hair deformations with non-identity scene transforms
  • Crash when removing distribution mesh in Hair from Guides
  • Hair from Guides: Multiplier maps not working when using 'Guides as Hair'
  • Curl modifier changes strands even if they are filtered out via groups
  • Hair From Guides: Assertion failure when setting Guide Count to `Do not Interpolate` when guide point counts differ
  • Assertion/crash when Generate Strand Data SeExpr encounters an error
  • Error when setting Filter value to 0
  • Moov crash when Use Group Holder is disabled
  • Change Width map does not affect hairs generated by Plant Guides tool
  • Don't disable widths when they were not edited in Edit Guides
  • Selection rectangle size is not correct, resulting in wrong strands being selected
  • "Invalid Alembic archive type" gets printed continuously
  • Surface Comb triangulation non-smooth transition between polygons
  • Surface Comb Triangulation sinks don't factor in sink length
  • Incorrect sink length is returned for mirrored sinks
  • Clump twist is still applied even for non-clumped strands
  • Cannot select strands in Edit Guides when strand groups were previously assigned to ungrounded hair
  • GroundStrands: Grounded HFMS strands get straightened when attaching the roots
  • Incorrect strand direction in Surface Comb with Mesh Vertex algorithm and coinciding strand/sink position
  • BrushShape: Square shape does not work with the Delete brush
  • Incorrect Blend Distance in operators when switching value below/above zero
  • Crash when attaching roots in Ground modifier
  • GenerateStrandsData doesn't update when referenced object moves in the scene
  • Incorrect strand direction in Surface Comb with Mesh Vertex algorithm and coinciding strand/sink position
  • Strands rotating randomly during animation
  • Evaluating an Edit Guides node on top of a mesh multiple time produces incorrect output
  • Baking Guides From Mesh into Edit Guides produces no output
  • Error when evaluating Edit Guides above a mesh
  • Add range values for Noise Scale parameter
  • Add dependency on Python
  • Detail does not filter Stand Groups
  • Hair From Mesh Strips: Adding a mesh strips to the list will cause a crash in some cases
  • Ignore backfacing strands doesn't work with CP selection
  • Error: Ornatrix: Assert failed when removing a Strip Mesh
  • Unable to change strand channel name
  • Incorrect direction used for Mesh from Strands conform to surface option with proxy meshes. The results are also smoothed, like they are with flat/cylindrical hair.
  • Error/crash when loading Alembic files with unexpected property data types (e.g. when exported from Houdini)
  • Assertion/crash when Symmetry plane normal is not of unit length
  • 'Assert failed' error when baking the Propagation node
  • Animation Cache: Strand channel data is not recorded
  • GPU hair crash, reverted to older hair display method
  • Edit Guides channel renaming is not saved with the scene
  • Exception when loading Alembic files with unexpected property data types
  • Groom modifier incorrectly evaluates during graph parameter editing
  • Alembic Export crash when Separate Strands and Velocities options are enabled
  • EditGuides: Error when using the 'Create' brush with four or more collinear roots
  • Surface Comb modifier doesn't preserve sinks when (un)boxing
  • Fixed unboxing imported groom modifier creating a duplicate distribution mesh. Simplified distribution object instantiation.
  • Make sure propagated strands on a hair generated from a curve are correctly positioned on target mesh
  • Propagated strands should not be grounded
  • Incorrect twists and rotations when using multiple Rotate operators together
  • Conform to Surface uses incorrect "up" axis in Mesh from Strands
  • Cannot select groups with index larger than 31 with a pattern in Edit Guides
  • Update guide dependencies in Hair From Guides when input guides surface dependencies change
  • Edit Guides containing deletions and shape changes produce incorrect results on animated deforming meshes
  • Crash when using "Even" option in Filter without a distribution mesh
  • Error reloading a scene containing a groom graft
  • GroundStrands: Missing text label on the Attach Roots button
  • Guides created on V2 look different on V3
  • EditGuides: Push Away From Surface Distance value behaves the same below 1.0
  • GroomGraft: The hair is pushed behind the distribution mesh when enabling mirroring
  • GroomGraft: The groom graft parameters missing from the UI
  • Control point rectangle selection in EG doesn't respect object transform
  • Roots don't move along surface in strand editing mode
  • GroundStrands: Grounding position changes when reloading the scene
  • Crash when enabling "Use Face Include" when Surface Comb is above Guides from Mesh


Smooth Surface Modifier

Smooth Surface is designed to work on characters which polygons need to be subdivided to add more details on the viewport or at render time.

Ornatrix hair is topology dependent, this means that the hair roots will be recalculated if you subdivide the geometry at render time. This is a problem because when a geometry is subdivided its shape will change and the hair roots will not match the surface on which the hair was generated.
Smooth Surface uses the Open-SubDiv algorithm to calculate the geometry subdivisions and then recalculate the root positions according the new geometry.

Smooth Surface must be used at the top of the operators stack to allow the correct subdivision of the roots after all the effects like Clumps, Frizz, Curls, etc has been computed.

Go to attached video

Parameters

  • Viewport Division Levels
    Mesh subdivision levels for viewport display. Use this parameter to set the preview subdivisions of the mesh used to generate the hair. It should have the same value as your mesh's preview subdivisions.
  • Render Division Levels
    Mesh subdivision levels for rendering. Use this parameter to set the render subdivisions of the mesh used to generate the hair. It should have the same value as your mesh's render subdivisions.
  • Use Render Value for Preview
    When on, the value set in Viewport Division Levels is ignored and Render Division Levels will be used for both, preview and render subdivision.
  • Strand Direction
    Determines the direction of the strands after subdivision of the distribution mesh.
  • Boundary Interpolation
    Defines the limit surface interpolation to boundary edges.
  • Uv Interpolation
    Defines the interpolation on face-varying data.
  • Chaikin Creases
    When on, creases are interpolated using Chaikin's algorithm.
  • Smooth Triangles
    When on, triangular faces are subdivided more smoothly.


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


Resolve Collisions Modifier

Resolve Collisions

Resolve Collisions operator is designed to provide art-directable collisions for fur and grass without full physics simulation, useful for hair/fur interactions with objects like character clothing, characters stroking hands through fur/hair, walking through grass fields, etc. This operator ships with a set of simple and intuitive parameters to help you achieve fast and clean results while working in real-time.

Parameters

(screenshot needed)

  • Strand Group
    Here you can set a Strand Group index or pattern created in Edit Guides modifier to work with Resolve Collision.
  • Resolve Mode
    Resolve Collision has three modes to know: Stiff, Bend and Soft.
    • Stiff Mode : The Ox Guide is rotated at the root, keeping its original shape. This mode can be used for short like fur and grass.
    • Bend Mode : The name is suggestive. The Guides are bend in a calculated local axis and the overall shape of the guide is maintained except for a bend from the root to the tip. This mode can be used for longer curves.
    • Soft Mode: Each segment of a guide can be rotated about a diferent local axis. This can change the guide shape.
  • Preserve Rotations (Checkbox)
    Make the direction of collision resolution orient towards the closest point on the growth surface from the midpoint of the curve.This can produce the effect of paing down the fur or grass to resolve collisions.
  • Angle Step
    This parameter (with a default value of 0.25 degrees) can be used to specify the angular rotational step size by which the curve segments should incrementally rotate by to resolve collisions.
  • Plasticity
    The amount of recovery can be controlled using it (0.0 allows full recovery, 1.0 keeps the curves in their state of maximum deformation). This parameter helps with leaving an imprint of the collision object onto the fur curves.
  • Recovery Rate
    That parameter controls how quickly the curve recovers to its original default shape and state.
  • Recovery Ramp
    This one controls the amount of recovery from root to tip.
  • Angle Max and Angle Max Backward
    It determines the maximum rotation angle for each collision guide (forward and backward respectively). Enable only for Stiff and Bend Resolve Modes.
  • Scale Angle
    It is used to set the rotation angle at which the minimum scale is achieved. Enable only for Stiff and Bend Resolve Modes.
  • Scale Minimum
    It is used to set the minimum scale that a guide can shrink to. Enable only for Stiff and Bend Resolve Modes.
  • Angle Segment Max
    This parameter defines which the maximum angle rotation for each curve segment. Enable only for Soft Resolve Mode.
  • Affected Segment Count
    Define the number of segments affected. Enable only for Soft Resolve Mode.
  • Affected Falloff
    Each colliding segment can affect the curve CVs further down the curve with a falloff based. This parameter controls this falloff. Enable only for Soft Resolve Mode.
  • Collide with Distribution Mesh (Checkbox)
    Enable or disable collision with the distribution meshes.
  • Collision Meshes
    In this field you can select which meshes will be allowed to collide with the Ox Guides or hair and also remove it.

Related Topics

  • Moov Physics Modifier
  • Oscillator Modifier
  • Animation Cache Modifier
  • Working with Strand Groups


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.
    (screenshot needed)
  • Orient Based On Strand Shape
    If this option is on, all the strands will face in the same direction.
    (screenshot needed)
  • 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.


Supported Render Engines

The following render engines have native support for Ornatrix in Cinema 4D:

Solid Angle Arnold
  • Hair UVs
  • Per-Strand UVs
  • Strand Channel Export
Redshift
  • Hair UVs
  • Per-Strand UVs
  • Strand Channel Export (Per-Strand data only)
Corona
  • Hair UVs
  • Per-Strand UVs

Any other render without native support like Octane, Cinema 4D Physical Render and VRay can render Ornatrix hair as polygon mesh or as spline curves.

Rendering the hair as a polygon mesh

Ornatrix hair can be converted to a polygon mesh using the Mesh from Strands modifier. This modifier will also allow to generate UVs for the hair, which will allow you to add proper shading.

Rendering the hair as spline curves

Ornatrix hair can be converted to spline curves using the Curves from Strands modifier. If the renderer supports rendering spline curves as hairs.

By default Cinema 4D is not able to render deformed splines but the curves generated by Ornatrix are deformed using modifiers. To be able to render spline curves with deformation, be sure to enable Hair Shader Compatible in Curves from Strands.

Curves from Strands will also generate UVs for the spline curves which are based on the UVs of the distribution mesh. This will allow you to properly texture the hairs or fur.

Related Topics

  • Change Width Modifier
  • Rendering with Arnold
  • Rendering with Redshift
  • Rendering with Octane


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

(animated sink-creation demo - screenshot needed)

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.

Curved Sinks

As of V4, Ornatrix also supports curved sinks, which let you direct hair along the growth surface using curved paths rather than individual point sinks. A curved sink follows a path drawn on the surface and directs the hair along that path, giving more intuitive and continuous control over hair flow - especially useful for longer, flowing styles.

To create a curved sink, use the Add Sinks Tool and draw a path along the distribution surface instead of placing a single point sink. The hair is directed along the path you draw. (Exact C4D creation shortcut / screenshot needed.)

Curved sinks can be edited after creation: select the curved sink at any of its constituent points and modify it using the move, rotate, and scale tools. You can also change a curved sink's type to Repel, Attract, or Direct the hair, with the result shown immediately in the viewport.

Both traditional and curved sinks can be deleted by selecting them and using 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.

(slope ramp override - screenshot needed)

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


Strand Channels

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 to drive various modifier parameters in the operator stack. Many surface-varying parameters in Ornatrix operators have a drop-down box listing different channels which can be assigned to them (with Unassigned being the default value). Selecting a strand channel will use the data values within it to set the parameter's values. A channel contains single scalar values which can be defined either per-strand (varying across base surface) or per-vertex (varying across each hair strand's surface). Multiple consecutive strand channels can be used to define vector (XYZ) and color (RGB) values.

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
(screenshot needed)

Painting a Per-Strand 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 Strand Channels

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

Most operators support strand 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 strand channel is used to control the Frizz amount in the Frizz operator:

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

Vertex Maps and Texture Maps as Strand Channels

Vertex Maps and Texture Maps can be used to generate Per-Strand Channels using the Generate Strand Data Modifier. This can be useful if you want to use a Vertex Map or Texture as a channel inside an Ornatrix Expression, allowing you to be creative with strand channels, like combining, extracting or multiplying channels together to create unique effects. In any other case, Vertex Maps and Texture Maps can be connected directly to the Multiplier values of any Ornatrix modifier.

To use Vertex Maps and Texture Maps as Strand Channels:

  1. Add a Generate Strand Data modifier to your hair object.
  2. Set Target Data to* New Strand Data Channel*.
  3. Set an identifiable name for the new strand channel in the New Channel Name field.
  4. Disable Use Target Value Range, so the channel values are only driven by the input texture map or the Vertex Map tag. Otherwise you can use the Min. and Max. Target Value parameters to clamp the values between 0 and 1.
  5. Set the Generation Method parameter to Texture Map.
  6. Expand Texture Multiplier parameter and load an image to use a texture map or go to Effects and select Vertex Map from the list to use a previously created Vertex Map Tag.

Using a Vertex Map tag to drive the Length multiplier parameter of a Length Modifier
An advantage of Vertex Maps is that they can be controlled using Fields. This is a powerful tool that can be combined with Strand Channels to add interesting effects to the hair.

Using a Cone Field to control the Length multiplier parameter of a Length Modifier

Related Topics

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


Strand Filter Modifier

The Strand Filter modifier is designed to remove a subset of input hairs based on user-defined predicates. This is useful when you want to limit the display of a dense hair object to just a few strands while, at the same time, being able to see the overall shape. Filter can be used together with Edit Guides modifier to edit a simplified version of a groom with more interactivity due to working with fewer strands.

Parameters

  • Predicate
    Determines how the strands are filtered out
    • Random
      Strands are removed randomly, based on fraction specified
    • Even
      Strands are removed in a way that their root distribution is kept uniform. This can avoid uneven holes appearing when using Random distribution, but this option is slower than Random.
    • By Group
      Strands belonging to the specified strand group(s) are removed
    • By Index
      Strands which have specified indices are removed
  • Fraction
    When using random predicate specifies what fraction of hair will be filtered out
    • Map
      Allows to vary the fraction values over the surface with a texture map
    • Channel
      Allows to vary the fraction values per each strand based on a strand channel
  • Filtered Pattern
    Pattern which specifies which strand groups or indices, depending on predicate type, will be filtered out
  • Random Seed
    When using Random option provides the random seed


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


Braid Patterns

The Braid Object is a Clump Pattern designed to be used with the Clump modifier to create procedural braids. This Clump Pattern will be used to determine the shape of the clumps allowing you to create unique procedural details on the hair.

Parameters

A set of intuitive and artist friendly parameters are included to create procedural braids.

  • Preset Index
    Select between the available braiding patterns: Curl, Pigtail, Swirl, 5-stem or 6-stem.
    (screenshot needed)
  • Point Count
    The amount of guide points on each guide.
  • Length
    Increase or decrease the guide length.
  • Frequency
    Controls the frequency of the curls.
  • Scale
    Controls the scale of the curls. This parameter can also be tweaked using a ramp curve to scale the curls along the guides.
  • Vertical Scale
    Controls the vertical thickness of the braid along its cross-section
  • Phase
    Controls the position of curls/waves in the braid along its length

Related Videos

  • Using Braid Pattern and Mesh from Strands to create braids

    Go to attached video

Related Topics

  • Clump Modifier
  • Working with Strand Groups
  • Working with Guide Channels


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


Basic Concepts

Summary

In this guide, we will explore the fundamental concepts of Ornatrix to help you begin creating hair grooms. By the end of this guide, you will have a solid grasp of the Ornatrix hair stack, operators, hair interpolation, and hair distribution.

Note: Throughout this guide, the terms "Modifier" and "Operator" will be used interchangeably.

The Hair Stack

Ornatrix hair is often composed of one or more operators, represented as Deformers or Generators in Cinema 4D, applying changes one after another to generate grooms procedurally. This stack is represented within C4D's Objects tab.

Each operator under the Hair Object item is connected to one another to create the final groom. An operator generates some data, passes 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, passing through each operator from the point of modification to the top. New operators can be added using the Ornatrix menu.

Guides From Mesh modifier

In this particular example, 'Guides From Mesh' is the first operator in the hair stack of this hair object. This operator is responsible for generating root data using one of the available root distribution methods, creating guides, and scattering them on a mesh. The generated guides are then passed to the next operator for further processings.

In addition to the Distribution Methods, several parameters are available to allow the user to fine-tune the final result. For example, the 'Guide Length' parameter determines the length of the hair guides. You can also connect a texture map to the 'Distribution Map' slot to determine the distribution area, where black values equal 0 guides.

Edit Guides

Allows you to refine the guides generated by 'Guides From Mesh' by brushing them, creating and deleting guides, grouping, painting, and performing other manual operations, rather than relying solely on parametric adjustments. Additionally, it can be used to directly brush hair strands.

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

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

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

Brushing mode
It offers a set of brushes that allow you to edit the hair in various ways using brushes.
The available brushes are:

  • 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.

Ornatrix brushes share common settings, with some unique settings that apply only to specific brushes. Generally, the names of brush settings are descriptive enough to understand their function immediately. In the settings section, you will find the familiar controls to adjust the brush size and strength, as well as checkboxes to activate various features. The settings you will use most frequently include:

  • Use Brush Surface
    When this option is enabled, brush strokes are projected onto the distribution surface. This mode can be used to constrain brushing changes to make hair or fur flow along the character's mesh surface. Otherwise, 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 activated, a special algorithm is used for comb, grab, and smooth brushes. It affects the whole strand along its length by calculating the best fit to the current stroke while minimizing changes to the strand shapes.
  • Brush Mirror Axis
    Select the axis to mirror brush actions. Changes made on one side of the hair will be reflected in real-time on the opposite side.
  • Brush Attenuation
    This section includes two ramp curves that allow you to adjust brush strength attenuation and strand strength attenuation along the strand, from root to tip.

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

Strand Groups

Strand groups help you categorize strands into distinct regions, allowing you to selectively apply operators down the evaluation pipeline. In the Strand Groups section, you can easily create and assign groups to the hair guides.

Enable Use Strand Groups to activate the controls for creating strand groups. This section also offers options to select strand groups by their integer number(ID) and to select entire groups using the Selection Brush or the selection options available in Root and Strand editing modes. To create a strand group, simply select some guides/strands and click the Assign Unique button. For more information, refer to the Working with Strand Groups documentation.

Strand Channels

Channels in Ornatrix allow users to add extra data to guides for later use. There are two types of guide channels used by Ornatrix: Root channels and Vertex channels.

Root channels These hold a single data value for every root (strand). It's a space-efficient way to define uniform information for every strand, making it effective for controlling properties that don't typically vary along the strand's length, such as hair density and dynamics properties.

Vertex channels These hold per-vertex data, with each knot defining the shape of the strand having a value attached to it. While more memory-intensive than root channels, they provide the ability to control properties at any point on the hair model. Vertex channels can be useful for controlling clustering, frizz, and hair shading.

For more details about Strand Channels, see Working with Strand Channels."

To create a strand channel manually:

  1. In enter Brush mode and go to the Channels section.
  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.
(screenshot needed)
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.

The UI of Hair From Guides is very similar to that of Guides From Mesh, However, the former includes additional parameters for hair interpolation, parting, and other parameters exclusive to hair generation.

Distribution Settings

The Object tab contains all the settings related to hair distribution (refer to Root Distribution and Hair Parting for other settings ). Here's a list of the distribution settings you are most likely to use in your initial grooming work. The remaining settings 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 the surface normals of generated guides. This allows you to push the guide roots away from the surface if needed, which is useful when your base model uses a displacement map that differs significantly from the low-poly viewport version where you create 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 makes the operator generate and cache the root positions of the generated hairs. It ensures that the generated hair remains consistent among shots rendered on different computers since random generation algorithms can vary across hardware. It's 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 is stored inside the scene by default, but you have the option to store it in a file on 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 includes a 'Bake' tab in the Attribute window. In this tab, you'll find the 'Collapse up to Here' button. This function enables you to collapse the hair stack up to the selected operator, combining all the operators below it into a 'Baked Guides' or 'Baked Hair' operator. If the stack is collapsed below 'Hair From Guides,' a 'Baked Guides' operator is created. If the stack is collapsed above 'Hair From Guides,' a 'Baked Hair' operator containing the combined operators is created.

When a 'Baked' hair object is generated, it automatically re-attaches its strand or guide roots to the distribution mesh linked to this object. However, it also allows you to select a new distribution mesh for transplanting the hair object onto another character. To replace the base mesh, go to the 'Ground' tab, and simply click and drag a mesh from the Object window to the 'Distribution Mesh' field.

BakedHairAtt
Baked Hair operator

This operator also offers five empty slots for loading Alembic hair files from Ornatrix for Maya, 3ds Max, or other hair systems 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

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 native 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
    Generates Ornatrix hair guides from spline curves.
  • Guides From Hair
    Generates Ornatrix 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 hair strands or guides, taking data from the previous operator in the stack, making procedural or destructive deformations, and passing this data to the next operator for further deformation. Examples include:

  • 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 and depend on specific input data for calculations. They take input data, perform calculations, and pass the resulting strand data to the next operator in the stack. Understanding the purpose of each operator is essential for ordering them effectively.

For example, avoid placing a deformer operator like Frizz after a generator operator like Mesh From Strands. The Frizz operator needs hair input data, but Mesh From Strands converts the hair object to a polygon mesh, preventing the Frizz operator from receiving hair data.

Understanding how each operator works and its intended purpose is crucial for ordering operators effectively and leveraging Ornatrix's capabilities.

Operator UI

Each operator UI is composed of several tabs. This approach organizes the parameters in a logical manner, resulting in a cleaner UI. However, there are several components shared across all operators. In this section, we will explore the purpose behind the operator UI and identify the common elements they share.

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 a crucial step performed by the Guides From Mesh and Hair From Guides operators before guide generation and hair interpolation, respectively. It involves scattering root positions on a distribution mesh, from which Hair Guides or Hair Strands are grown. There are several available distribution algorithms:

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 input Hair Guides created in Guides From Surface, Guides From Curves, Guides From Hair, or planted using the Edit Guides operator.

In the following example, Hair from Guides is used to interpolate hair(light blue) between three guides(darker blue):

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

Best Practices

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


Definitions

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.

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.


Demonstration Version

Evaluation License and Demo

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 for Cinema 4D demo version is inability to save. You will be presented with a message box when you reach this limitation. If you save and reload the scene, you will notice that the hair is back to a default shape. This is the indication that the hair data has not been stored in the scene.

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 for further improvement. Please Contact us to join the beta.


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.


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.

Clump Manipulators

Clump manipulators provide direct and precise control over individual clumps in the viewport, allowing you to create intricate hair styles with fine control. The editing is non-destructive, meaning it respects any changes to the input hair shape and can be layered with multiple operators.

Using clump manipulators

To edit clumps using manipulators:
  1. Add a Clump operator to your hair object
  2. Generate clumps using the Create Clump(s) button
  3. Enter Clumps editing mode
  4. Select one or more clumps by clicking on the hair
  5. A transform gizmo will appear at the base of the selected clump

(screenshot needed)

Editing modes

You can switch between three editing modes:
  • Move - Translate the clump around its center
  • Rotate - Twist the clump around its center
  • Scale - Scale the clump profile

Editing position

The Z arrow along the clump stem controls the current editing position:
  • Click and drag the Z arrow to move the editing position along the clump
  • Alternatively, use the position slider in the Attribute Editor
  • Different positions along the clump can have different transformations

Creating and managing knots

When you scale or rotate the clump at different positions, you create knots that capture the transformation along the clump's length:
  • Each editing mode (move, rotate, scale) has its own independent knots
  • Hold Control while adjusting the edit position to snap to the nearest knot
  • Hold Shift while adjusting the edit position to move the currently selected knot to the new position

Creating Braids with Clump Patterns

Ornatrix provides a powerful in-place, procedural, and highly customizable braiding system through clump patterns. This eliminates the need for complex setups with multiple shapes that were traditionally required for creating braids.

Quick start for braiding

To create a basic braid:
  1. Add a Clump operator to your hair object
  2. Generate one clump and set Flyaway Fraction to zero to avoid stray hairs
  3. Enter Clumps editing mode
  4. Select the clump you want to braid
  5. In the Clump Patterns section, change Pattern from "None" to "Rope" to create a simple twisted braid
  6. Use the global clumping Amount ramp or the scale manipulator to shape the braid along the clump length
  7. Use the rotate manipulator to set the correct orientation for your braid

Pattern types

Ornatrix includes several built-in pattern types:
  • None - No pattern applied (standard clumping)
  • Rope - Creates a simple twisted braid by twisting the strands
  • French Braid - Creates a classic French braid pattern
  • Custom - Allows you to design your own braiding patterns

Pattern parameters

When a pattern is applied to a clump, you can control:
  • Frequency - Stretches or squeezes the pattern along the clump length. Higher values create tighter patterns.
  • Phase - Moves the pattern up and down along the clump
  • Thickness - Adjusts how thick individual stems inside the braid should be. A value of 1 uses the default thickness, which works well for most cases.
  • Blending - Controls the transition between adjacent patterns when using pattern knots

Pattern knots

You can create complex braiding styles by applying different patterns at different positions along a clump:
  1. Move the position manipulator to a different location along the clump's length
  2. Change the pattern type to create a new pattern knot at that position
  3. The transition between adjacent patterns will be automatically blended
  4. Adjust the Blending value to control the smoothness of the transition
  5. Hold Shift while adjusting the edit position to move an existing pattern knot

Braid Designer

For creating custom braiding patterns, Ornatrix includes a powerful Braid Designer tool:
  1. Select "Custom" as the pattern type
  2. Click the Braid Designer button to open the Ornatrix Braid Designer in a separate window
  3. Alternatively, access the designer from any device at https://braids.ephere.com
In the Braid Designer, you can:
  • Create new braiding patterns from scratch
  • Start with existing presets and modify them
  • Add or remove pattern clumps
  • Adjust individual clump settings
  • Copy the pattern string to share with others or save for later use
To apply a custom pattern:
  1. Design your pattern in the Braid Designer
  2. Click the Copy button to copy the pattern string
  3. Return to your scene and click Paste from Clipboard to apply your custom pattern

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 modifier 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 modifier (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. Clump patterns enable creation of complex braids and intricate hairstyles directly within the clump operator. 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

Pattern-Specific Parameters

When a pattern is applied to a clump, the following parameters become available:
  • Frequency
    Controls how stretched or squeezed the pattern is along the clump length. Higher values create tighter patterns.
  • Phase
    Shifts the pattern up or down along the clump stem
  • Thickness
    Adjusts the thickness of individual stems within the braid. A value of 1 uses the default thickness, which is suitable for most cases.
  • Blending
    Controls the smoothness of transitions between different patterns when using pattern knots

Custom Pattern Design

The Custom pattern type enables you to design your own braiding patterns:
  • Braid Designer
    Opens the Ornatrix Braid Designer where you can create custom patterns. The designer is also accessible at https://braids.ephere.com
  • Paste from Clipboard
    Applies a custom pattern string copied from the Braid Designer
  • Custom Preset
    Contains controls for the custom pattern that become available when "Custom" is selected as the pattern type

Dynamic Clumping

Dynamic clumping allows procedural behavior of the Clump operator.

  • Enabled
    When on, clumps will be automatically generated when user-specified clump count changes and generation method. Enable with care as this option will override any previously created custom clumps!
  • Clump Count
    When dynamic clumping is used this specifies the number of clumps to be generated

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


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.
  • Magnitude Randomness
    Adds per-strand variation to the curl Magnitude, so individual strands get slightly different wave sizes for a more natural, less uniform look. A value of 0 applies the same magnitude to all strands; higher values increase the amount of variation.
  • Phase Randomness
    Adds per-strand variation to the curl Phase, varying the number of curls along each strand. A value of 0 keeps the phase uniform across all strands; higher values increase the amount of variation.
  • 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.


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 (both Unreal Engine 4 and 5). Ornatrix additionally writes the groom's color as an attribute named groom_color, which Unreal Engine's groom importer reads and applies to the imported hair. See "Strand Color for Unreal Engine":#Strand_Color_for_Unreal_Engine below.
  • Export Each Strand as Separate Object
    When on, each hair strand will be exported as a separate Alembic single curve object with its own transform instead of a single object with many curves.

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 modifier or Generate Strand Data modifier, 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.

Strand Color for Unreal Engine

When the Unreal Engine 4 Export option is enabled, Ornatrix writes the groom's per-strand color to the Alembic file as an attribute named groom_color. This is the attribute name that Unreal Engine's groom importer recognizes, so any color you author in Ornatrix - for example with the paint brush or a Generate Strand Data color channel - carries over into the imported Unreal Engine groom and can be read in the hair shader. No extra setup is needed on the Ornatrix side beyond having a color channel in the groom and enabling Unreal Engine export.

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 into Unreal Engine

  1. Make sure you use the Unreal Engine 4 Export checkbox in the export settings
  2. Follow the Unreal Engine groom documentation to import the resulting .abc file. This works for both Unreal Engine 4 and Unreal Engine 5.

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)

Space orientation

Different hosts (such as Maya, 3dsmax, Cinema 4D, Unreal Engine) may have different coordinate which is considered to be "up" direction. For example, in 3dsmax Z-axis is up and in Maya and C4D Y-axis is up. To allow exchange of data between these hosts Ornatrix provides the Up Axis parameter during export. No matter the current up-axis of the host, the up-axis of the exported data will be determined by this parameter.

Therefore, if you want to export an Alembic file to 3dsmax you need to specify Z-axis as up. If you want to export to Maya or C4D, specify Y-axis as up. You cannot adjust this parameter during import because the host which is importing the data does not know which transformation was applied during the export. It is therefore important to specify the correct axis during the export.


Alembic Hair Data

Overview

Ornatrix provides a custom Alembic imported/exporter 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. This tool also allows to read Alembic files which has curves in it (regardless if it was exported with Ornatrix or not), creating 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.

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.

Exporting 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

Importing Hair

To import an Alembic hair file:

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

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.

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
  • Export Each Strand as Separate Object
    When on, each hair strand will be exported as a separate Alembic single curve object with its own transform instead of a single object with many curves.

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 modifier or Generate Strand Data modifier, 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.

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).

Space orientation

Different hosts (such as Maya, 3dsmax, Cinema 4D, Unreal Engine) may have different coordinate which is considered to be "up" direction. For example, in 3dsmax Z-axis is up and in Maya and C4D Y-axis is up. To allow exchange of data between these hosts Ornatrix provides the Up Axis parameter during export. No matter the current up-axis of the host, the up-axis of the exported data will be determined by this parameter.

Therefore, if you want to export an Alembic file to 3dsmax you need to specify Z-axis as up. If you want to export to Maya or C4D, specify Y-axis as up. You cannot adjust this parameter during import because the host which is importing the data does not know which transformation was applied during the export. It is therefore important to specify the correct axis during the export.


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

(screenshot needed)

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.
  • Control Points
    Control point position along strand nearest lookup(0-root, 1-tip).
  • 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.


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.


Adding Hair to Objects

Overview

Ornatrix allows you to add hair to objects in two different ways:

  1. The groom presets system
  2. The Create brush context.

Both methods provide the right tools to quickly generate hairs on a character.

Adding Hair to Objects

Once Ornatrix C4D has been installed, start Cinema 4D and find Plugins -> Ornatrix entry in the main menu. Use Add Hair option with an object selected and choose a hair preset as starting point. Different hair presets options are provided depending on the selected object(s). For instance, you can add hair to polygon meshes or to NURBS curves.

Hairs on a polygon mesh

When using a mesh to generate hair, a new hair object will be added to the scene. This object contains four operators inside of it. In Cinema 4D, the Ornatrix hair stack is computed from top to bottom:
  • The first object represents the final output of the hair stack computations. This is the final result that will be shown in the viewport and the render.
  • Guides from Mesh modifier scatter guides on the distribution mesh.
  • Edit Guides modifier is used to edit and brush the guides generated by Guides from Mesh modifier or to sculpt the hair strands when used on top of Hair From Guides operator.
  • Hair from Guides modifier distributes and interpolates the hair following the guides previously generated.
  • Change Width modifier sets the thickness and shape of the hair strands.

Hairs on NURBS curves

When using NUBRS curves to generate hair, three operators will be added to the hair stack. From bottom to top:
  • The first operator represents the NURBS curves shape used to generate the hair guides.
  • Guides from Curves generates one hair guide for every NURBS curve.
  • Ground Strands attaches the generated guides's roots to a polygon mesh for hair distribution and interpolation with Hair from Guides modifier.
  • Change Width modifier sets the thickness and shape of the hair strands.
  • The last operator on top represents the shape used to generate the groom. This object represents the final result after the hair operator stack has been computed.

See Hair from NURBS Curves for more details.

Note: Visit the groom presets documentation page to learn more about creating, storing and sharing hair presets.

Related Topics

  • Groom Presets
  • Hair From NURBS curves
  • Hair from Mesh Strips


Baked Guides

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


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.


Arnold Compatibility

This is a list of the MtoA versions that Ornatrix Arnold translator was built against and are supposed to properly render Ornatrix hair.

In some cases it may be possible to use a later minor version of MtoA, but usually unsupported versions won't work and may even crash.

Ornatrix Version | C4D Version | Supported C4DtoA Version
4 | 2024-2026 | 4.9
4 | R25-2023 | 4.7
3 | 2024 | 4.6.5
3 | R24-2023 | 4.4.1
2.3.9 | R21,R23-2023 | 4.3
2.3.5 | R21-R25 | 4.2
2.3.3-2.3.4 | R21-R25 | 4.0
2.2.8+ | R20 | 3.3.3
2.0+ | R19 | 3.0.3


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

Note that only Alembic files exported with Ornatrix (in Cinema 4D or any other host software) can be imported this way. Alembic files exported from another application will be imported with Cinema 4D's own importer.


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


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.

(screenshot needed)

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.


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.


Guides from Mesh Modifier

Guides from Mesh operator scatter scatter guide roots on a polygonal mesh object. It then extrudes guides from every root based on the surface normal at the root origin. Distribution or Scatter parameters can be tweaked to get different distribution types.

Hair roots can be scattered on the whole polygon mesh or they can be limited to certain areas using a polygon selection or a texture map.
Although this is not necessary since hair from guides modifier is usually what ultimately defines the final hair distribution and interpolation, it is usually a good idea to keep the amount of roots to a minimum. This reduces the amount of time spent combing unnecessary guides and improve hair interpolation and therefore the final result. This is because hair interpolation works better when the guide roots are sparse and evenly dispersed. 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.

This operator is topology dependent. This means that changing the distribution mesh topology after generating the guide roots will cause this operator to be recomputed and re-generate the guide roots. This can damage your groom. See Root Persistence to avoid this.

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 Face Include
    When on, this operator uses the Selection Tag specified in the Selection Tag parameter to generate the guides on a polygon selection.
  • Selection Tag
    Use this box to specify a Selection Tag containing the polygon selection where you want the guides to be generated. Use Face Include needs to be enabled for this option to take effect.
  • 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 a vertex map on the distribution surface to control 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 across multiple computers.

  • 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. Since the roots positions will be cached and saved with the scene, this will increase the file size of the scene.
  • Detach/Attach Roots
    Detach Roots command will store the positions and twist rotations of current guide roots inside the operator until the roots are re-attached. When this button is disabled (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 modifier. 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


Ground Strands

Many Ornatrix operators need a distribution mesh to function properly. Such operators will query the distribution mesh from the operators before them. For instance, when you have a set of curves defining the hair guides without any surface beneath them you can use the Ground Strands operator to assign a distribution surface to them. This distribution surface can then be used by Hair from Guides operator 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. This step is crucial because many Ornatrix operators require a distribution mesh to work properly, so this operator should be used to assign and ground the roots to a distribution mesh if it is not present.

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 this operator you need to understand a couple of things that it does:
  1. Ornatrix always assumes that its hairs 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 object you chose to ground with the selected distribution mesh. You can see this if you disable ground operator and your previous guides are not aligned as they're used to. This step is very necessary for further operations on guides.
  2. Strands should always be grounded at frame 0. This constraint is necessary to ensure that grounding works properly.
  3. 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 operator settings.

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.

Parameters

  • Distribution Mesh
    The polygonal mesh to use for grounding.
  • Dynamic Grounding
    If enabled, when input strand count changes the new strands will be automatically grounded without user needing to re-ground the rest.
  • Ground Closes End
    When on, the end of the strand which is closest to the distribution mesh will be considered the root.
  • Set Positions
    When on, applying the grounding will update the locations of each strand's root according to mesh deformation.
  • Set Rotations
    When on, applying the grounding will update the rotations of each strand's root according to mesh deformation.
  • Set Texture Coordinates
    When on, texture coordinates for the first channel will be generated and assigned to the target hair from its newly grounded surface.

Related Topics

  • Hair from Guides Modifier


Groom Modifier

A groom modifier encapsulates one or more Ornatrix operators that can generate, modify, or convert hair, guides, and meshes. It internally stores an Ornatrix graph which persists with the scene and contains all the necessary information for evaluating the groom. The graph can also expose parameters which can procedurally modify the groom.

The modifier can be created in a number of ways:
  1. Importing a groom into a scene with "Groom Modifier" set in Import As parameter
  2. Boxing one or more modifiers
  3. Adding a graft groom onto a mesh


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 "Fur 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 text files with .oxg.yaml or .oxg.zip extension. These files can be saved and shared.

The Select Groom dialog

To create hair from a groom, select your base object and use the Ornatrix Add Hair command to open the Select Groom dialog (shown above). The dialog presents the available grooms as thumbnails so you can preview each style before applying it.

The groom list is automatically filtered to show only the grooms applicable to the currently selected base object(s). For example, with a polygon mesh selected only grooms that grow hair on a surface are shown, while with a spline shape selected only curve-based grooms are shown.

Choose a groom, pick how it should be imported with the Import As option (see below), and click Create to add the hair to your scene.

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\OrnatrixC4DXXXX
  • 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. You can also use the Default Location button to change the directory back to default at any time.

Import As option

There are multiple ways you can add hair into a scene from a groom file:

  • Full Stack (default)
    Each operator in the groom is added as a separate Cinema 4D modifier, recreating the modifier list used when the groom was authored. You can work with the groom object as you would with a groom which you created from scratch, and later re-export it into a groom file.
  • Groom Modifier
    The whole groom is imported into a single Groom modifier. It may contain parameters for adjusting the groom procedurally. You can also unbox this modifier to get all constituent operators within it as separate modifiers (i.e. same as Full Stack option above)
  • Baked Hair
    The groom is evaluated and the resulting hair is set as a Baked Hair modifier. The hair can no longer be adjusted procedurally, but you can use it without worry of it changing.
  • Baked Guides
    Same as Baked Hair option above, but hair is imported as a Baked Guides modifier.

Cross-Host Compatibility

As of Q3 2019 our grooming system is unified across Ornatrix 3dsmax, Ornatrix Maya, Ornatrix UE, and Ornatrix C4D. The grooms can be saved and loaded across all of these applications and will yield same results.

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.


Hair from NURBS Curves

Overview

You can convert any set of NURBS curves into Ornatrix guides using the Hair from Curves operator. These curves can then be grounded to a surface mesh in Cinema 4D and hair can be generated from them.

Creating guides from curves

To create Ornatrix guides from curves:

  1. Select all of the curves from which you wish to create the guides
  2. Click the Add Hair button in the Ornatrix menu
  3. You should see the Hair from Curves groom option inside the dialog, select it
  4. Click Create to create Ornatrix guides

Hair From Curves Operators

The steps above will convert Cinema 4D curves into Ornatrix guides and create a hair stack with the following operators:

Hair From Curves

This operator contains a list of the input curves used to generate the guides, along with some parameters and commands to manage the input curves:
The Point Count parameter allows you to determine the amount of guides points that the generated guides will have.
Use Add Input, Add Multiple Inputs and Remove Input Curves to Add and Remove input curves to and from the Input Curves list.

Ground Strands

Allows you to select the distribution surface that will be used to generate the hair strands. Find more information about this operator in the Ground Strands operator's page

Change Width

Determine the width of the hair strands after the hair is generated using the Hair From Guides modifier. Find more information about this operator in the Change Width operator's page

The object at the top of the stack is the HairShape created by Ornatrix to draw the hair. The object at the bottom of the stack is the set of input guides objects that are being used as inputs.

Working with the created guides

There are a few things you might want to do after creating guides from NURBS curves:

  • Select the Ground Strands modifier and use it to ground the guides to a distribution surface. This will allow you to comb the hair using brushes and all the features in Edit Guides.
  • Add a Hair from Guides modifier to generate and interpolate dense hair based on the the guides.

(screenshot needed)

Related Topics

  • Groom Presets
  • Hair from Surface
  • Hair from Mesh Strips


Hair from Surface

Ornatrix hair can be added directly on a polygon mesh or a polygon selection using a selection tag.

Adding hair to a polygon mesh

  1. Select a polygon mesh
  2. Go to the Ornatrix menu and click Add Hair

Ornatrix will create the necessary modifiers:

  • Guides from Mesh
    This procedural modifier Generates guides on the surface on the specified polygon mesh based on several parameters like Guide Count, Distribution and Guide Length.
  • Edit Guides
    Allow to manually add more guides or edit the previously generated guides.
  • Hair from Guides
    Use different interpolation algorithms to interpolate hairs from the previously generated guides.
  • Change Width
    Set the rendering width of the hair strands.

Adding hair to a polygon selection

Ornatrix hair can be added to a polygon selection. For that, it must be added to the whole polygon mesh first and then filtered out using a polygon selection.

  1. Add hair to the whole polygon mesh as shown above
  2. Go into Polygons editing mode and select some polygons
  3. Go to Cinemas 4D's Select menu and click Set Selection. This will create a Selection Tag.
  4. Go into Guides from Mesh, in the Object tab, drag the Selection Tag to the Input Mesh field.


Hair from Mesh Strips

Overview

Hair From Mesh Strips object allows you to use flat or cylindrical polygon meshes to generate hair along their surface. Hairs are generated from one edge of a mesh strip towards the opposite edge. The edge from which the hairs start growing can be specified manually per each strip, however, the hairs will be generated along the longest boundary of a mesh strip by default.

The polygon strips can be deformed, moved, or edited inside the scene and the Hair From Mesh Strips object will automatically adapt to these changes. You may use multiple strip objects, have one strip object with multiple strip elements, or have a combination of these options.

Creating Hair From Strips

  1. To create hair from strips, open the Ornatrix menu and add the Hair from Mesh Strips object. A new empty hair object will be created which is composed of only the Hair from Mesh Strips modifier.
  2. Go to the Object tab in the Mesh from Strips modifier where you will find the Mesh Strips list. By default this list is empty.
  3. Click and drag your mesh strips or tubes from the Objects manager to the Mesh Strips list.

This modifier will use the tubes and/or mesh strips to generate hair from one edge to the other, while a red arrow indicates the direction of the generated hair strands, representing the roots and the tips of the strands.
Once strip hair is generated you may use any other procedural modifiers such as Curl Modifier, Change Width Modifier, Frizz Modifier, and others for refining its shape.

Strip Mesh Requirements

The polygon meshes defining the hair strips must meet a few requirements to properly generate hairs:

  • The strip mesh cannot contain triangles, especially not along any of its boundaries
  • It is highly recommended that the strip mesh have four boundaries. This means that there are a total of four edge loops going along the circumference of the strip mesh.
  • When using tubes they must be open at both ends.

Modifying Strip Meshes

After you have added one or more strip meshes into the hair from strips object you may use standard Cinema 4D, tools, deformers and modifiers to edit them. Ornatrix will re-compute the hair to reflect those changes. The editing can include both geometrical and topological changes. If you change the mesh topology, however, please make sure that you do not break any aforementioned mesh requirement rules.

Modifying Hair Strips

You can edit the hair strips globally or individually.

The parameters in the Object tab allow you to edit the hair strips globally. Changes made in this tab will affect all the hair strips regardless of what is selected.

In the Mesh Strips tab, the Mesh Strips list allow you to select individual hair strips and modify their individual properties using the parameters down in the Selected Strips Settings section in the same tab. For example, any changes to orientation of the strips will only be performed on the currently selected strips. You can select one or multiple hair strips.

Parameters

Distribution

  • Distribution Type Buttons
    • Per-Vertex distribution will generate one hair per each boundary vertex of the strip mesh
    • Uniform distribution will generate hairs along the boundary at evenly spaced intervals
    • Random distribution will generate hairs along the boundary at randomly spaced intervals
  • Random Seed
    Specifies the seed value used when generating strips using random distribution.
  • Hairs Per Strip
    Specifies the number of hairs to generate on each strip mesh
  • Viewport Count Fraction
    Specifies the percent value of hairs per strip to show inside the viewport. You may want to set this to a lower value if you want to render plenty of hair but want to preview only a few of it inside the viewport.

Direction Drop Down

Hair Strips direction is represented using a red arrow, to show how it flows from root to tip. This drop down list specifies the type of rotation which will be performed when you click the Rotate All Strands button below this control. If you select a mesh strip in the Mesh Strip list, this button will only affect selected strips.
  • Rotate option will rotate the strip orientation
  • Flip will reverse the orientation of each strip
  • Flow up, down, left, right, back, forward options will make the strip orientations choose each of the respectively selected directions.

Hair Parameters

  • Points Per Strand
    Specifies the number of segments to generate in each hair strand.

Texturing

  • Inherit Texture Coordinates from Strips
    If turned on, this option will make the resulting hair have the same texture coordinates as the strip from which it was generated. This is useful for applying custom texture maps to the generated hair.

Volume

  • Add volume to the hair by pushing the hair away from the strips. Use the Global parameter and the curve graph to determine how the volume affect the hair.

Volume Normal Bias

  • Set this parameter to a negative value (-1) to have the hair volume be generated entirely inside the cylinders.

Related Topics

  • Groom Presets
  • Hair from Surface
  • Hair From NURBS curves


Hair and Guide Viewport Display

You can change the way Ornatrix visualizes hair and guides inside the real-time Cinema 4D viewport through the Ornatrix display settings. This may be useful if you are having display issues with a particular method, or if you simply prefer seeing thin lines for hair.

(Exact C4D settings location / screenshot needed.)

Viewport Display Settings

  • Viewport hair rendering mode
    Specifies the method used for drawing hair in the viewport.
    • Lines - Hair is visualized as basic lines. Shading and thickness of hair are not visualized. This is the fastest method and is useful for very dense grooms or slower machines.
    • Mesh - Legacy method. Ornatrix converts the hair internally to a mesh which is then displayed using the standard viewport. This is typically slower, especially with the camera-facing strands option. Use it only if the Optimized Mesh option gives you problems.
    • Optimized Mesh - The default method. The GPU is used to optimize hair display, with shading and texturing properly supported and strands camera-facing without much performance cost.
  • Camera facing hair
    When on, the displayed strands always face the view, providing a more realistic look.
    • Off - Hair is drawn as mesh strips oriented based on each strand's base surface alignment. This is faster but can cause strands to be oriented unpredictably or create some visual artifacts.
    • On mouse up - The view-facing information is updated only when view orbiting ends (the mouse is released). This allows orbiting the view at higher frame rates but may produce temporary artifacts while orbiting.
    • On - Hair always faces the view. This is the default option and is optimized to work with the Optimized Mesh method.
  • Use fur shading
    When on, the hair normals are oriented tangent to the base surface. This gives a more realistic fur look for very short hairs; it is generally not useful for long hair.

Related Topics

  • Adding Hair to Objects
  • Mesh from Strands Modifier


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 modifier, you get the distribution options to control the way dense roots are distributed over the mesh.

Videos

Go to attached video

Parameters

(screenshot needed)

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 Strand 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.

(screenshot needed)
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.

(screenshot needed)

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.

Distribution Map Zero Value

Even with a texture map with 100% black and white values, Cinema 4D evaluates the values as very small double values (e.g. 0.003). To compensate for this, we allow the user to specify the minimum/black value using this parameter, which is zero by default. If the bitmap value is below this value it will be considered black/zero.

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 modifier.

  • 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.
  • 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.


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
  • Scale Randomness
    Adds per-strand variation to the frizz Scale, giving individual strands slightly different frizz granularity for a more natural, less uniform result. A value of 0 applies the same scale to all strands; higher values increase the amount of variation.
  • 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.


Generate Strand Data Modifier

The Generate Strand Data operator is a procedural way of creating per-guide or per-vertex strand channel values based on some criteria. These per-guide values can then be used to control parameters and groups inside Ornatrix.

Parameters

(screenshot needed)

Data Generation Settings

Strand Group

Allows you to select a Strand Group created in Edit Guides node which contains the guides from where you want the data to be generated by this node.

Random Seed

Very straight forward: Use this parameter to randomize the way the data is generated.

Target Channel

Similar to Strand Groups, this allows you specify a channel to isolate the area you want the strand data to be generated from.

Target Data

Specifies which part of hair this operator will modify. Aside from creating and changing strand channel data Generate Strand Data operator can also modify other aspects of hair like its width, strand groups, texture coordinates, and more. The available options are:

  • Existing Strand Data Channel
    Strand channel set in Target Channel option will be modified. If this value is set to None then a new channel will be created, this is behavior as designed for backward compatibility.
  • New Strand Data Channel
    This option will create a new channel for the Generate Strand Data node using the name provided in New Channel Name instead of using the default name.
  • Strand Groups
    Strand groups will be modified. It is important to make sure that the target value range is sufficiently high to set groups to an integer value. For example, the default target range of [0,1] will set all groups to 0. However, changing it to [0,100] will set groups to a range between 0 and 100. Values are per-strand.
  • Strand Ids
    Unique per-strand ids will be modified. This is typically not needed but could be useful in some exotic scenarios. Values are per-strand.
  • Widths
    The thickness of individual strands will be modified. Values can be per-strand or per-vertex.
  • Texture Coordinates
    Currently not supported
  • Strand Rotations
    The twist rotations of strands around their stem will be modified. Values are per-strand.

New Channel Name

A blank field to provide a name to the generated channel. If a channel with specified name already exists a number will be appended at the end to make the name unique, for example MyChannel can become MyChannel1. If you are exporting more than one sample per channel then channel for each new sample will have an integer value appended to it. For example, MyColor becomes MyColor1, MyColor2, and MyColor3.

New Channel Type

Here you can choose if the new channel will be generated Per-Strands or Per-Vertex.

Sample Value Count

You can generate or alter more than one consecutive data channel. For example, you may want to generate 3 channels to define an RGB color set or an XYZ object position. Or you may want to generate 2 channels to define a UV set. This parameters specifies how many channels will be generated or altered by this operator. There is no limit, you can go beyond 3 channels if needed.

If you're generating new channels then each new channel will be given a new name with a number suffix. If you're altering existing channels then the channel specified will be the first one to be altered and subsequent channels after it will be altered as well, up to the same value count.

This option is only applicable if target data is either an existing or new data channel, or texture coordinates.

Generation Method

In the drop down list select the type of data to be generated. The following are the options:
  • Constant
    Minimum target value will be assigned to all resulting strands or vertices.
  • Random
    A random value within the minimum and maximum target range will be assigned to each strand or vertex. Each target sample will have a different random value.
  • Index
    Index of the current strand will be assigned to each strand or vertex.
  • Strand Length
    The length of the current strand will be assigned to each strand or vertex.
  • Strand Curviness
    A value between target minimum and maximum range will be set based on how straight or curvy the strand is. The more kinks and turns the strand has the bigger the value will be.
  • Distance To Object
    For each strand or vertex distance to selected scene shape will be calculated and assigned. If a target range is provided the distance will be scaled based on the farthest strand or vertex. See below how to properly use this option.
  • Is Inside Object
    A value of 0 or 1 will be assigned based on whether the strand's root or vertex is inside specified scene shape.
  • World Space Position
    Generates a set of three channels, each containing X, Y, and Z components of world space positions for the strands or vertices.
  • Object Space Position
    Generates a set of three channels, each containing X, Y, and Z components of object space positions for the strands or vertices.
  • Expression
    A custom user expression will be used to assign values to strands or vertices
  • Texture Map
    A source texture map provided through the Texture Multiplier attribute will be used to get the greyscale or RGB values

Store Values

When this option is on the current data output is remembered and always used. Use this to freeze the output of this operator. It will also be saved with the scene. To clear the values simply uncheck this option.

Use Source Value Range

When on, used strand values will be clamped with minimum and maximum values

Minimum Source Value

Any strand values less than this will be clamped to the minimum target value

Maximum Source Value

Any strand values larger than this will be clamped to the maximum target value

Use Target Value Range

When on, the generated values will be rescaled to be in this range, instead of being between 0 and 1

Minimum Target Value

Smallest generated output value

Maximum Target Value

Largest generated output value

Texture Multiplier

When generation method is set to Texture Map or Expression this provides the texture to use for getting source greyscale or RGB values. With expressions texture( u, v, index ) function can be used to get the texture map. Default index is 0.


End User License Agreement

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:

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.


Dynamic Baking

Some Ornatrix modifiers have an option called Dynamic Baking. It can be used to cache the output of the modifier and apply it directly to the input bypassing the modifier evaluation.

The output of the modifier is referenced relative to its input in object-space, meaning that if the input changes the output will be updated accordingly to preserve the object-space deformation of the modifier. Creation of strands as well as modification of hair data is also preserved.

This feature is useful for various reasons:
  • If a procedural effect of a modifier causes temporal artifacts such as "flickering" or "popping" of hair this option freezes the result, avoiding any such artifacts
  • If modifier evaluation becomes very slow, such as in case of collision resolution (e.g. via Resolve Collisions modifier) caching the output avoid the costly re-evaluation while preserving the result
There are also downsides to using this approach:
  • If the base mesh or the hair deforms due to animation the modifier's effects won't be updated and will look incorrect
  • Saving the cache will take up more HDD and/or RAM (depending on the Change Cache Behavior option) space

Cache Behavior

There are different ways that dynamic baking can be applied, controllable via the Change Cache Behavior option:

  • Off
    Dynamic baking is not used, modifier is re-evaluated at each time. Default behavior.
  • Stored
    The output cache of the modifier is stored at the first/next evaluation of the modifier and not updated unless you change some of the modifier's parameters. It is stored with the scene, thus making the .max files larger. It will also guarantee the consistency of the output, even as the scene is reloaded.
  • Precomputed
    Same as Stored option above, but the cache is not stored with the scene. Instead it is (re)computed on the first evaluation of the modifier after a scene opens. This option doesn't require any additional scene memory and only affects RAM.


Edit Guides Modifier

Edit Guides Operator

Overview

Edit Guides operator is the main hub for editing and managing the guides and hair strands in an Ornatrix hair object. You can interactively 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. You can work directly with guide roots, guide vertices or manipulate them using one of several brush tools available.

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 the hair modifiers.

Edit Guides also provides tools for guide management like Strand Groups and Stand Channels which allow to apply and filter different effects based on group patterns and paint masking, as well as shading effects in supported render engines.

Go to attached video

Ornatrix C4D V2 grooming workflow

Go to attached video

Getting started

Select your hair shape and show the hair stack. Use 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

A different set of parameters and tools will be displayed in the operator properties window depending on the selected editing mode or if no editing mode is selected.

The parameters in each Ornatrix operator are separated into different categories, Edit Guides operator is separated as Edit Guides, Interpolation Options, Guide Options, Guide Operations, Roots, Guides, Strand Groups, Soft Selection and Channels.

Edit Guides

  • Edit Modes
    Here you will find the two Edit Mode buttons. These two buttons will set the operator into its Strand or Control Point mode, while activating one of the brush contexts will activate the Brushing mode. In each editing mode you will have different ways to interact with and modify the strands.
    (screenshot needed)
    The editing modes will also allow you to select guides or hair strands by clicking and dragging on the viewport as with any other object. The amount of selected guides will be shown at the bottom of this section. Find more details about the different editing modes in the Roots and Guides sections.

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

  • Apply Amount Parameters
    Those parameter will blend the changes made by the current Edit Guides operator using a slider, a ramp curve, a texture multiplier map or a strand channel. It can be used to dial the changes down and can be animated to achieve blending effects between different poses of a hairstyle 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.

    Go to attached video

    Using the Apply Amount parameters
  • 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.

Interpolation Options

This sections contains options related to strand interpolation when using a brush context.

  • Multi-resolution
  • Interpolation
  • Input Root Interpolation
  • 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.
    Note: This option is only useful if the Multi-Resolution feature is not being used.

Note 2: The parameters in this section do not affect the hair interpolation settings set in Hair from Guides.

Guide Options

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

  • Created Strand Length
    Determines the length of newly created strands.
  • Ignore Backfacing Strands
    When on, any guides which are facing away from viewport camera will not be selectable or affected by the brushes.
  • Show Color Guides
    When on, a different color is assigned to each guide based on the strand groups previously created.
  • Show Vertex Ticks
    When ON, points making up the guides will be displayed.
  • Hide Guides
  • Guides Width
    This parameter is used to change the width of the guides for better visualization.

Guide Operations

This section includes 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.
  • Delete Selected Strands
    Deletes the selected guides or hair strands.
    Note: Ornatrix has a custom way of handling element deletion in shapes. The keyboard Delete button should not be used to delete guides or strands, this action will remove the selected operator. Therefore, you need to use this button instead.
  • Push Away From Mesh
    Used to prevent guide intersection with surface. Use this feature to set a certain distance between each guide vertex and the distribution mesh.
    Push Away Distance parameter determines the distance. While the Push Away from Mesh button only runs this operation once, Auto Push Away From Surface will run the operation after each brush stroke, setting the distance to the value previously specified.
    • Note: This feature will use the actual distribution surface as collision mesh, it does not allow you to use a different mesh for collision. This means that if the hair is distributed on just a hair scalp extracted from the main character mesh you may get some unexpected result caused by an incomplete surface. If you want to use a custom mesh for collision use the Push Away From Surface operator instead.
  • 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.

    Go to attached video

    Using Adopt from Stack Top

Roots

The Root section of Edit Guides is designed to work directly with hair roots. There are some fundamental concepts that usually apply to roots such as roots are always located relative to either a surface or object. In most uses, you will deal with roots that are located relative to faces.

The Root level have options to plant, remove, rotate and import splines curves as Ornatrix guides. You can select and deselect roots inside the viewport like you would vertices, faces, or edges on a mesh using standard selection tools. Once selected, you can use the transform tools to move the guides along the surface of the current distribution mesh. This may be needed to tweak the exact position of guides after they were automatically generated by Ornatrix.

Plant Guide Tool

Adds additional guides to your hair object. After activating the tool, click on top of the distribution mesh surface to plant new roots at these locations. As any other Cinema 4D native tool, you can drop the Plant Guides tool by pressing the space key.

Plant Guide Tool options

  • Adopt Shape
    When this option is on, newly planted guides will use the same shape as the selected 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.
  • Point Count
    Determines the point count for the newly planted guides.
  • Post-Plant Selection Behavior
    Determines how strand selection changes after a new hair is planted:
    • Deselect: All strands are deselected
    • Keep Selection: Previously selected strands remain selected, planted strand is not selected
    • Select Planted: Only planted strand is selected
    • Add Planted to Selection: Planted strand is added to previous selection

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).

Draw Strands

Use it to draw guides or hair strands directly on a polygon mesh. When using this tool with Edit Guides modifier below Hair from Guides modifier it will add guides that will be used for hair interpolation. When this tool is used with Edit Guides operator above Hair from Guides it will add single hair strands that will not be part of the interpolation.
h4. Draw Strands Tool options

  • Create new Strands
    When off, no new strands will be added but existing strands can still be edited if Edit Existing Strands is checked.
  • Edit Existing Strands
    When on, clicking and dragging on existing strands will modify its shape.
  • Point Count
    Sets the point count of the created strands.
  • Draw Along Surface
    When on, the tool allows you to draw strands wrapped to the distribution surface.
  • Distance from Surface
    When Draw Along Surface is checked, this parameter sets the distance at which the strand will be drawn on the surface.
  • Apply Smoothing
    Resample the created strands to smooth out its vertices.
  • Smooth Amount
    This parameter sets the smoothing strength when Apply Smoothing is checked.
  • Select Edited Strands
    When on, each strands is selected after editing it.
  • Maximum Length
    Sets the maximum length for newly created strands.
  • Inherit Strand Group
    When on, a strand drawn next to existing guides takes the strand group of the closest one.
  • Inherit Strand Channels
    When on, a drawn strand takes the per-vertex and per-strand channel data of the closest guide, resampled onto its own points.
  • Inherit Widths
    When on, a drawn strand takes the widths of the closest guide, resampled onto its own points.
  • Inherit Rotation
    When on, a drawn strand takes the rotation of the closest guide.

Rotate Strands

When using Mesh from Strands to convert the hairs to polygon mesh, this tool allows you to manually rotate a strand or a group of strands.

Import Multiple Curves

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. The import dialog have some options to customize the import process.
h4. Import Multiple Curves options

  • 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.

Guides

This section deals with everything related to the direct manipulation of strand shapes when working in Edit Control Points mode. The term "direct manipulation" in this case means editing of strand vertices much like you would edit vertices of a mesh. Of course doing that alone would be a nightmare; that is why a set of tools is introduced to organize these strand vertices and manipulate them in a very intuitive manner.

A special IK solver system is used to simplify the task of moving strands. The reason for an IK system is to preserve strand length while editing. Human hair has a very high strength ratio and thus virtually doesn't stretch along its direction. Note that even if you do want hair to stretch (for example if you're doing a length variant hairstyle and would like to form both shape and length at the same time), you can turn off strand length preservation and deal with stretching as well as moving.

To manipulate strands special helpers are used - Control points. Control points can be thought of as vertices located somewhere on hair. Like other vertices in a mesh they can be moved, rotated, and scaled individually or as a group in all transform spaces (world/object/screen etc.). You have the full control over the position of control points along the strand and the influence that they have on each strand.

  • Control Point Position
    Determines the position of the control point or manipulation handle along the strand. Use this slider to position the control point where you want to make the strand deformation.
  • Control Point Influence
    Determines the range of influence of the control point or manipulation handle. Imagine this value as a soft selection range, but instead it works in a per strand point basis.
  • Preserve Strand Lengths
    When on, strands will not be stretched or compressed during brushing.
  • Ik Iterations
    Determines how many times IK solver will iterate before converging on a solution. Generally the higher this value is the slower IK solver will act.
  • Preserve 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.
  • Elastic Mode

Strand Groups

This sections contains tools for creation and management of 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 modifiers. Various Ornatrix modifiers provide an option to specify the group index which it will apply to. You can use multiple modifiers to separately style hairs belonging to different groups. See Working with Strand Groups for additional details.

  • Use Strand Groups
    Activate this option to allow the use and creation of strand groups in the selected Edit Guides operator.
  • Display Strand Groups
    Every strand group will have a unique color assigned to it. By default these colors will only affect the guides, not the hair. When this option it's on, the strand group colors will be displayed directly on the hair strands.
  • Strand Group
    Enter the strand group index that you want to assign to the selected guides.
  • Assign
    Assign the strand group index or indices entered in the Strand Group box to the selected guides.
  • Assign Unique
    Assign the next available strand group index to the selected guides. For example, if index 1 has already been used, this command will assign index #2 to the selected guides.
  • Select by order:
    This section includes commands to select the previous index and next index based on the currently selected group.
  • Select by Group
    When on, if you select a single strand that belongs to a strand group, the whole group will be selected.

Strand Channels

This sections contains the tool for creation and management of strand channels.

Strand Channels are additional data added to guides or hair strands in the form of black to white values. Strand channels can be used to control other parameters on all Ornatrix operators, like hair frizz, hair width etc. See Working with Strand Channels for additional details.

Here you will find tools to create or modify strand channels. Channels inside an Edit Guides operator are created non-destructively. This means that any channels already existing before the modifier is applied will not be affected if this modifier is later removed. However, existing channels can be removed by this modifier down the modifier pipeline.

  • Current Channel Value
    Use this slider to choose a value between 0 and 1 or black to white. This is the value that will be assigned to the selected guides when you click the Assign Value button.
  • Permanent Channel Display
    By default the black and white values assigned or painted on the guides in strand channels will be only visible on the guides, and only when an Edit Guides operator is selected in the hair stack. When this option it's on, the strand channel values will be displayed directly on the hair strands and regardless of the selection.
  • Display Channel Overlay
    When Permanent Channel Display it's on, this menu allows you to choose how the channel values will be displayed.
    • Single-channel display(greyscale)
      Allows you to display channels that are composed of a single channel.
    • Multi-channel display(color)
      Allows you to display channels that are composed of three channels to form other colors: R, G, B.
  • Strand Channels box
    This box contains the list of created channels by category: Per-Strand Channels and Per-Vertex Channels. You can create new channels using the Add button and newly created channels will appear inside this box. Select the Per-Strand channel category and then click Add to create a Per-Strand channel. If you want to create a Per-Vertex channel select the Per-Vertex channel category instead. There are also buttons to Delete, Rename and Select all the channels.
  • Assign Value
    Assign the float value chosen in the Current Channel Value slider to the selected guides.
  • Select by Value
    Allow you to select strands by its strand channel color values suing the Threshold slider to determine the range of values that you want to select.
  • Threshold
    Allows you to select a range of values to be selected when using the Select by Value 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 modifier.
  • Changing distribution parameters such as method, map, and multiplier in Guides from Mesh modifier.

It is therefore a good practice to use the "Remember Root Positions" option prior to making changes in the Edit Guides operator,

Scripting

Writing custom brushes with Python

Aside from stock set of brushes Ornatrix allows you to easily create your own custom brushes through Python scripts. This is described at detail in the Writing Plugin Brushes section.

Troubleshooting

Guides are corrupt and jumbled

  • Problem: After making edits and other operations within the scene Edit Guides messes up all of the guides.
  • Cause: The order and/or count of input guides has changed. Edits made to the guides are being applied to incorrect guides.
  • Solution: Make sure that you restore the same input guides parameters as they were when you made guide edits. See Ensuring consistent results section for more details.

Related Topics

  • Working with the Grooming Tools
  • Working with Strand Groups
  • Working with Strand Channels
  • Writing Plugin Brushes
  • Generate Strand Data


Grooming Tools

Overview

Ornatrix provides a range of grooming tools designed to give you more artistic control over your digital grooms on a non-procedural manner. All tools can work over guides and directly on hairs, allowing you to manually scatter and sculpt the hair as you desire.

The grooming tools can be found in the Object tab of the Edit Guides modifier. Depending on the editing mode different tools will be displayed. This page describe the tools found in the Brush Editing Mode. For more information about the other editing modes visit the Edit Guides modifier page.

Brush Editing mode

The grooming tools work in conjunction with the Edit Guides modifier. This operator contains all the manual or non-procedural edits that you perform on the hair. Like drawing new guides, scattering hairs, painting channels and creating strand groups. Most of the following tools use Edit Guides, therefore this modifier have to be present in the the Operator Stack to be able to use them.

Brushes

Create

The Create brush allows you to quickly scatter strand roots on a distribution surface. This brush works together with Edit Guides operator to store the generated data. The length of the newly added strands can be set using the Created Strands Length parameter, but this length value will only be applied if there are no previously created strands present in the current hair stack. If there are any existing strands, the newly created strands will adopt their shape instead.

The Create brush will scatter the strand roots in different random positions depending on its settings, so it will not plant two strands in the same position, ensuring that two strands do not share the same root. This is important to avoid other issues related to grooming. You can also set the spacing between roots or plant a single guides by settings the Root Position to Center and increasing the Root Spacing parameter.

Parameters

Root Creation

  • Position
    Parameters to define the way the roots are created on the distribution mesh:
    • Center
      In this position mode roots will be planted at the center of the brush as you click and drag across the distribution surface.
    • Random
      Default mode. The roots will be evenly distributed inside the brush volume as you click and drag.
  • Spacing
    Determines the space between the scattered roots.
    The amount of roots to be added on each click.

Delete

As its name suggest, the Delete brush will remove in a uniform manner the hair strands inside the radius of the brush shape.

Comb

This brush is designed to intuitively change the shape of hair based on the flow of user's mouse movements. Comb brush in particular will act as a real brush, changing the strands' orientations locally as you 'touch' them.

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.

Cut

This brush will cut the strands up to the strand vertex that is inside the brush radius. The strand vertices or points will be reordered to preserve the global point count.

Grab

Different from the Comb brush, the Grab brush will grab and drag the strand points that are inside of the brush radius. It works like pulling a rope by its middle point.

Grow Shrink

Grow and Shrink the strands when clicking and dragging up and down using a maximum and minimum length value. When a strand is shortened it keeps its original shape, so growing it back restores the original curvature.

When strands are grown beyond their original length, the Curved Extension option continues each strand along its existing curvature instead of appending a straight segment, for a more natural result. See Curved Extensions for details.

Parameters

  • Max. Limiter
    Sets the maximum strand length allowed.
  • Min. Limiter
    Sets the minimum strand length allowed.

Paint

Allows you to paint Per-Strand and Per-Vertex Strand Channels that can be used to apply and mask out the different effects and deformations performed by all Ornatrix operators. Almost every Ornatrix parameter can be controlled by a Strand Channel, essentially allowing you to paint different effects and deformations on the hair. Strand Channels can also be inserted in your shading network to paint fine details or masks on the hairs.

The Paint brush can drive up to three consecutive channels at once (for example an RGB color channel), with real-time feedback in the viewport as you paint.

Painting colors and channel values

  • Drag the brush over the hair to add to the value of the currently selected channel(s).
  • Use Assign to Selection to flood the whole channel, or the selected strands, with the current value.
  • To paint color, create a Per-Vertex channel with the RGB type (see Strand Channels) and select it as the paint target; the hair updates to show the painted colors as you work.

Painting with bitmap textures

Go to attached video

In V4 the Paint brush can also stamp bitmap textures onto the hair for advanced texturing and decal workflows, not just flat values:

  • Select a brush texture from the texture list.
  • While painting, transform the texture interactively:
    • Hold Alt and move the mouse to pan the texture.
    • Hold Alt + Shift and move the mouse to zoom the texture.
    • Hold Ctrl and move the mouse to rotate the texture.
  • With no modifier key held, drag the brush to stamp the texture onto the hair.
  • Use Tile Texture (on by default) to repeat the texture while dragging; turn it off to stamp a single tile per stroke.
  • Click Browse above the texture list to open the folder that holds the brush texture bitmaps. Add or remove PNG files there to change the textures available in the list.

Parameters

  • Color
    Set the color to paint on the strands.
  • Target Channel Type
    set the channel type to paint on. The available options are: Per-Strand Channel and Per-Vertex Channel. See Working with Strand Channels for more information.
  • Target Channel
    Select the target channel from a list of previously created channels.
  • Create Channel if one Doesn't Exist
    Adds a new channel if no channel is selected from the Target Channel list or creates a new channel if none exists.
  • Target Data Type
    The type of color data to paint. The options are Color or Scalar.

See Working with Strand Channels for more information about strand channels, its creation and use cases.

Pull

Pull the hair strands away from the distribution surface.

Revert

Reverts the strands to the state they were in before the current Edit Guides was applied, essentially straightening them.

Smooth

Resample the strand vertices or points to smooth out the strand.

User Brush

Allows you to create Ornatrix custom brushes using Python. The Ornatrix installation includes access to the Ornatrix hair interface that will give you access to internal functionality, allowing to create custom brushes that adapt to your workflow.

Go to attached video

Custom brush scripting

Common Brush Settings

While some Ornatrix brushes have a small set of unique options, most settings are common across all brushes. The unique brush settings are described above in the Brushes section on this page. In this section we will describe the settings shared across all brushes, which are divided in different sections.

Target Shape

The target shape is the Edit Guides shape node that will store the changes made with any of the brushes. The following settings allow you to change the behavior of the target shape based on the active brush.

  • Selected
    If an Edit Guides shape is selected it will be used to apply the brush changes.
  • Top
    If there are multiple Edit Guides shapes in the stack the very top one will be used.
  • Any
    Any Edit Guides shape within the stack can be used. Top overrides Any if it's on.
  • New
    When on, a new Edit Guides shape node will be added to the stack.
  • Create Guides
    When on, and New option is selected, guides will be created instead of hairs.
  • Target All Shapes
    When on, all shapes in the scene will be considered. Otherwise only the shape which contains the selected node will be considered.

Brush Settings

  • Shape
    Choose the shape to use with the brushes. You can select between a Circle, Square and a Line.
  • Size
    Sets the size of the brush shape.
  • Strength
    Sets the strength of the active brush.
  • Use Surface Brush
    Enables surface brushing. This mode allows you 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. This mode can also be activated temporarily by holding down the Ctrl key.

Mirroring

  • Mirror Axis
    Selected the axis on which you want to mirror the active brush.
  • Mirror in World Space
    The active brush will be mirrored in world space coordinates.

Strand Filtering

  • Affect Selected Only
    Only the selected strands will be affected by the active brush.
  • Affect by Roots Only
    Only the strand points near the roots will be affected by the active brush.
  • Respect Vertex Weights
  • Ignore Back-Facing Strands

Strand Modification

  • Preserve Strand Length
    When on, ensures that the active brush will not affect the length of the strand.
  • Optimize Strand Geometry
  • Resample Strands
    When on, the strand points of the strands affected by the active brush will be resampled after each brush stroke.

Elastic Brushing

Elastic Brushing allows you to deform the strands in a way similar to how elastic deformation works. The strand shapes follow the deformation of an elastic continuous medium - imagine the hair embedded in a large block of jelly, which is being deformed by the selected tool. The strength, extent, and application point of the deformation are determined by the brush or by the control point parameters. Elastic mode has the following settings:

  • Elastic Mode
    Activates Elastic Brushing
  • Poisson Ratio
    Sets the Poisson ratio of the elastic deformation (between -1 and 0.5), which determines how much hair will expand in one direction if it's compressed in the perpendicular direction. Incompressible materials have a Poisson ratio of 0.5; the default value of 0.2 is typical.
  • RK4 Integration
    When on, the numerical integration is carried out with greater precision. This is slightly slower but results in better reversibility: if the tool is dragged back to the original point, the resulting deformation will be minimal.
  • Multi-Scale
    When on, the deformation has a faster falloff (is more localized).
  • Moving Center
    When on, the deformation center moves with the tool during dragging. When off, the center stays at the initial position of the tool.
  • 2D Brush
    When on, a 2D deformation is applied in the viewing plane. When off, the deformation is three-dimensional.
  • Reverse Sign
    When on, the sign of the deformation is reversed.
  • Pinch
    When on, the Scale tool uses a pinch-type deformation.
  • 3D Depth
    For 3d deformations, this can be used to position the deformation center in front of or behind the viewing plane. A zero value means the deformation center lies in the viewing plane.


Grooming Workflows

In this tutorial series we explore different methods to generate and comb hair showing the versatility of Ornatrix.
This page will help you understand every grooming workflow that Ornatrix offers and which one fit better into your project and pipeline.

Hairs from Curves

https://youtu.be/SF_Nb5O7xFk

Hairs from Polygon Strips

https://youtu.be/0Rx-vRh7SC8

Hairs from Guides

Combining Hairs from Polygon Strips and Hairs from Guides

https://youtu.be/95XiLF-0TR8

https://www.youtube.com/watch?v=SF_Nb5O7xFk&list=PLpRi3ovyFM-1iQ93rvOdPkgt3tZUQ8tjO


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


Graft Grooms

Graft grooming allows placing complete procedural grooms onto any existing surface in Cinema 4D.

Grafting a groom

Choose the Graft Groom tool, pick a surface template and a groom, then click and drag over the target mesh to fit the graft surface onto it. The groom is created when the drag finishes.

While the fit is being dragged the groom's hair is not drawn, so placing a dense groom or preset stays responsive. The hair returns as soon as the fit ends. Turn off Hide Hair While Fitting in the Graft Groom dialog to watch the hair follow the graft surface as it is dragged instead. The option changes only what the viewport draws during the drag - the fitted groom, and what a render produces, are the same either way.


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.

You can also join our Discord community for faster support and discussions!

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