Mesh from Strands 

This operator converts strands of hair into a mesh shape. It can be used in conjunction with the Render Settings operator, 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. You can also use this operator with Guides from Guide Mesh operator for cloth-based simulation and Hair from Mesh Strips operator for generating and baking hair textures.

There are a number of parameters that control mesh creation and shader assignment.


Using Mesh from Strands with Rotate operator
 

Output mesh types 

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

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

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

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

    Proxy mesh-based hair allows you to take any mesh shape(or a set of shapes) in the scene and use it as a strand. Ornatrix will stretch the object along the strand and deform it using the strand's shape. There are options to inherit hair's shape, thickness, orientation, and texture coordinates for any number of arbitrary mesh objects. If multiple objects are added to the list they will be randomly assigned to each strand. This assignment can also be controlled through a seed parameter or a map.
 

Hair Group Meshing 

Ornatrix offers a powerful feature that allows you to create volumetric mesh approximations of hair by grouping strands. This is useful for real-time applications, stylized characters, and even 3D printing.


Creating volumetric grouped hair meshes

To create grouped hair meshes:

  • Using Clump operator: # In the Clump operator, under Sub-Clumping section, enable the "Set Clump Strand Groups" option. This assigns strand groups based on which clump each strand belongs to. # Add a Mesh from Strands operator. # Enable the "Group Strands" option, and set the mesh type to cylindrical with desired Side Count. # Each unique strand group will create its own volumetric hair mesh clump.
  • Using Edit Guides: # Add an Edit Guides operator. # Select desired strands and turn on the Strand Groups option. # Use the "Auto Group" button to assign a unique strand group to your selection. # Add a Mesh from Strands operator after Edit Guides. # Enable the "Group Strands" option and set the desired mesh type and Side Count. # You can filter which groups get meshed using the Strand Group filter value.

The hair thickness is taken into account when generating the meshes. You can adjust it in the Change Width operator to make the mesh volumes thicker.

This process is entirely procedural - you can continue editing the hair below in the stack and see the modified mesh update in real-time.

 

Texture Generation for Hair Cards 

The world of real-time graphics and many stylized characters still relies heavily on textured hair meshes and hair cards. Ornatrix provides workflows to streamline this process, including generating hair textures from grouped hair on the fly.


Generating hair textures for real-time graphics

To generate hair textures from grouped hair:

  1. Ensure your hair is partitioned into groups (refer to the Group Meshing section above for setup methods).
  2. Add a Mesh from Strands operator at the top of the stack and enable the "Group Strands" option.
  3. Choose the appropriate mesh type:
    • Cylindrical groups - For volumetric hair encapsulation
    • Flat ribbons - For traditional hair cards
  4. Adjust the "Side Count" parameter to control the mesh topology based on your chosen mesh type.
  5. Navigate to the "Texture Generation" section and:
    • Set a file path for the generated texture
    • Adjust the "Bitmap Size" parameter based on your desired texture resolution
    • Click the "Generate" button to create the texture
  6. The generated alpha/opacity texture will contain each strand group as its own texture island.
To see your generated texture in the viewport:
  • Assign a shader such as "Standard Surface" to the hair mesh
  • In the shader's "Geometry" section, enable the "Thin Walled" option
  • Connect the generated texture as the opacity map
  • If needed, enable Hardware Texturing in viewport shading settings
For a fully procedural workflow:
  • In Maya's preferences (Windows > Settings > Preferences), under Files/Projects settings, enable "Automatically reload updated image files"
  • This ensures that any changes to your hair will automatically update the texture when you regenerate it
You can further customize your hair cards by:
  • Adding a Rotate Strands operator before Mesh from Strands to control the orientation of mesh strips
  • Modifying hair thickness in the Change Width operator and regenerating the texture to preserve proper shape appearance
 

Parameters 

  • Strand Group
    Allows you to isolate the effect of this operator by selecting a particular Strand Group created in the Edit Guides operator.
  • Group Strands
    When enabled, creates volumetric mesh approximations based on strand groups. Each unique strand group creates its own mesh volume.
  • Side Count
    Determine the amount of sides in the hair mesh.
  • Use Tangent Normals
    When on, the normals of the mesh will be parallel with the flow of the strands instead of perpendicular to them.
  • Cross Section Ramp
    Use this Ramp curve to manipulate the shape of the hair mesh.
  • Is Mesh Guide
    Use this option to convert guides to mesh, which can be later converted back to guides using Guides from Guide Mesh. This is used to simulate guides as cloth strips and then convert back to guides. This option is automatically enabled when you use the Nucleus Simulation button.
  • 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
 

Texture Generation 

  • Output Path
    Specifies the file path where the generated hair texture will be saved.
  • Bitmap Size
    Controls the resolution of the generated texture. Higher values create more detailed textures but require more memory.
  • Generate
    Click this button to create or update the hair texture based on current settings.
 

Create Nucleus Simulation 

Create a Nucleus simulation and your guides will now be affected by it. Guides from Guide Mesh operator will be added to the top of the operator stack to convert the simulated cloth strips back into Ornatrix guides. A special Nucleus operator will also be present within the stack. Use it to adjust simulation properties.

All operations using Nucleus such as caching and setting of initial shape can now be done with the simulated hair.

 

Mapping coordinates 

MeshFromStrands operator provides a flexible way of controlling the texture coordinates and UV sets of output mesh. These controls are available inside the Mapping Coordinates Attribute Editor group.

The resulting mesh can contain more than one UV set. Each UV set can have its own unique settings. This is very useful when using blend maps and materials to have textures with varying mapping inside the same mesh. Map Channel Count parameter specifies the number of UV sets to produce.

  • Selected Map Channel
    Specifies the 0-based index of the output UV set for which current parameters are applied
  • Mapping Type
    Specifies how the texture coordinates are generated for current UV set. You can specify one of these options:
    • Per-vertex mapping
      Will generate one UV coordinate at each vertex of the resulting mesh. This is the most detailed way of generating texture coordinates but also uses more memory.
    • Per-segment mapping
      Will generate one UV coordinate at each strand segment of the mesh. The UVs will vary along the strand length but not along its width.
    • Per-root vertex mapping
      Will generate one UV coordinate at each vertex but only at the root of each strand. This will vary the UVs among strands but not along their length.
    • Per-root mapping
      Will generate one UV coordinate at each strand root only. This will vary the texture coordinates between strands only.
    • Inherit
      Using this mapping type will copy all texture channel data directly from input hair instead of generating it like the other mapping options do. Operators below current one can generate texture mapping for hair in unique ways. This data may also be stored per-strand or per-vertex. This mapping type will respect the storage type of texture data. Note that only the channel at current index will be inherited. For example, if you're editing this setting for channel 2 then only inpur hair's texture channel 2 will be copied to the mesh (assuming there are at least 3 texture channels present).
  • Per-Strand Coordinates option, when on, will generate a complete UV space (going from [0,0] to [1,1]) for each strand. All strands will be able to contain a full texture map on them. This is good for mapping feathers and foliage onto generated strand meshes. When this option is off, the UVs assigned to strands will be determined from the UV coordinates of base distribution mesh and vary along its surface.
  • Create Atlas option gives you the ability to create texture island in combination with the previous settings.
  • Strand Group Islands will create UV islands based on strand groups created in Edit Guides.
  • Coordinate Stretching parameter can add a little stretch offset when varying texture coordinates along the base mesh surface

Feather texturing using multiple UV maps and blending
 

Using multiple hair shaders 

Ornatrix provides a way to control hair shaders on the resulting strand meshes. You can have more than one shader within the scene assigned to different strands. This can be either done randomly or controlled via a strand group, guide channel, or a map.


Shader scattering to create feathers

To use multiple per-strand shaders:

  1. Expand the Shaders List Attribute Editor group
  2. Click Add New Item button once for each desired shader
  3. In the text boxes created below type in the names of Maya materials to use

To control the distribution of shaders among generated strand meshes:

  • If parameters are left as default the shaders will be scattered among generated strand meshes randomly
  • Use Shader Scatter Multiplier to assign a custom 2d map. This map will control the indices of shaders per each strand based on its grey-scale values and the total number of shaders specified. For example, if there are 5 shaders, black values in the map will result in shader 1 being used, grey values will result in shader 3 being used, and white values will result in shader 5 being used. The map will use the distribution surface texture coordinates.
  • Use Scatter Channel drop down to select a strand channel to control the shader assignment to strand meshes. The integer values within the specified channel will be used to determine the shader index to use from the list.
  • Use the Use Strand Groups for Material Ids option to make strand groups of each strand specify the shader index to use for its generated mesh
 

Related Videos 

  • Using Edit Guides and Mesh From Strands operators to make braids:
  • Creating volumetric grouped hair meshes:
  • Generating hair textures for real-time applications:
Missing Something? Let us know if this page needs more information about the topic.