UE5 / Style Direction

Anime Hair Shader for UE5

Hair shading notes for flow-based highlights, shadow bands, rim separation, and readable hair silhouette.

UE5 first

Style Direction

UE5 is the source of truth here. Keep the graph readable first, then branch into project-specific versions only when the base is proven.

01

Goal

Target: Hair shading notes for flow-based highlights, shadow bands, rim separation, and readable hair silhouette.

02

Use Cases

Style DirectionAnime hair cardsGood for hair strips that need highlight flow and silhouette separation without heavy lighting.
Style DirectionStylized character hairHelps keep highlight bands consistent across front, side, and back hair groups.
Style DirectionSilhouette-driven character shotsUse when hair needs to separate from dark backgrounds or busy costumes.

03

Core Blocks

1. Hair flow mask

Preview this signal alone and make sure its range is useful before it drives color, opacity, or emission.

Why: a clean mask makes later tuning feel deliberate instead of guesswork.

2. Anisotropic-like highlight

Separate color choice from brightness. It keeps palette changes safe when the effect moves between levels.

Why: artists can rebalance mood without accidentally changing the mask logic.

3. Shadow bands

Separate color choice from brightness. It keeps palette changes safe when the effect moves between levels.

Why: artists can rebalance mood without accidentally changing the mask logic.

4. Rim separation

Use this to protect the silhouette first. Edge response should help the form read before it becomes decoration.

Why: rims and contact lines are usually the cheapest readability fix in a busy scene.

5. Strand breakup

Keep the noisy part weaker than the main shape. Noise should add life, not become the design.

Why: over-contrasted noise is one of the fastest ways to make a material feel unfinished.

04

Node Graph Flow

Input dataShape signalAnimateRemap colorControl alphaOutput

Start from the signal

Get a clean black-and-white read first; color, glow, and distortion should only support that read.

Expose decisions

Every exposed value should answer a real art question: how fast, how wide, how bright, how soft.

05

HLSL Equivalent

float ndl = saturate(dot(normalize(worldNormal), normalize(mainLightDir)));
float band = smoothstep(shadowThreshold, highlightThreshold, ndl);
float3 shade = lerp(shadowColor, litColor, band);
float rim = pow(1.0 - saturate(dot(viewDir, worldNormal)), rimPower) * rimIntensity;
return shade + rim * rimColor;

06

Artist Controls

07

Production Notes

Production check: keep the read clean, then measure cost in the scene where it actually ships.
  • Preview masks by themselves before judging the finished color.
  • Name parameters the way an artist would search for them in a Material Instance.
  • Keep a cheaper instance for background, crowd, or repeated usage.
  • Write down the gotchas while they are still fresh.