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.
UE5 / Production Note
Production notes for stabilizing anime face shadows with authored masks instead of relying only on raw normals and light 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
02
03
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.
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.
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.
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.
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
Get a clean black-and-white read first; color, glow, and distortion should only support that read.
Every exposed value should answer a real art question: how fast, how wide, how bright, how soft.
05
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
07