Multi-layer moss/fur effect

This article is based on this method:

As in the tutorial, the naive way to do this is simply copy the target mesh N time, then create N material instance with different cutoff value. This become akward when you want actually good looking effect, which often require >20 layer. Also, most of time we only want this apply to part of mesh, likely where the grass should be. In addition, each material instance will incresae drawcall. To solve this, we can combine all duplicated mesh into one, and assign different UV to them. Then we can manuplate their postiion&cutoff value in a single material.

The original mesh

To make the duplicating proccess less a hassle, I make a Houdini HDA to handle all the stuff:

    1. Find the mesh section using a specified material

    1. Duplicating it multiple time, also reduce its vertex count if possible

    1. Assign these mesh different UVs, and combine them into a single mesh

it looks like this in houdini(the offset is exaggerated abit)

It’s also possible to create a editor BP using procedural mesh to acheive all these stuff, but the buidin BP node doesnt give any material infomation, so you has to create a custom node to get them from FStaticMeshSection.MaterialIndex.

The material itself is pretty straightforward, it scale each layer by it own local space, sample and mask out pixel gradually, and offset them to different height.

Naive vertex offset
Fix vertex offset artefect, add shadow
Add gravity & turbulance

By writing a editor plugin, the mesh creation workflow can be further simplified with one click

Leave a Reply

Your email address will not be published. Required fields are marked *