UE5 / Production Note

Anime Face Shadow Map for UE5

Production notes for stabilizing anime face shadows with authored masks instead of relying only on raw normals and light direction.

UE5 first

Production Note

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: Production notes for stabilizing anime face shadows with authored masks instead of relying only on raw normals and light direction.

02

Use Cases

Production NoteClose-up anime facesBest when automatic light direction creates awkward nose or cheek shadows.
Production NoteCharacters with flat face planesUseful for stylized heads where authored face masks are more stable than raw normals.
Production NoteShots where automatic lighting breaks the expressionUse when the expression matters more than strict lighting response.

03

Core Blocks

1. Authored face 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. Light direction blend

Treat this as a named building block, not a hidden math island. It should be easy to preview, tune, and reuse.

Why: small readable parts make the final graph easier to review and extend.

3. Nose and cheek control

Treat this as a named building block, not a hidden math island. It should be easy to preview, tune, and reuse.

Why: small readable parts make the final graph easier to review and extend.

4. Shadow softness

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.

5. Shot-specific overrides

Name the control after the decision it represents. Runtime values should be obvious when someone opens the instance months later.

Why: clean parameter naming is production work, not polish.

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 authored = SampleMask(maskUV).r;
float lightTerm = saturate(dot(faceForward, mainLightDir));
float stableShadow = smoothstep(shadowStart, shadowEnd, lerp(authored, lightTerm, lightBlend));
return lerp(shadowColor, litColor, stableShadow);

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.