Stylized Rim Light & Reflections
A set of Unreal Engine rendering features for art-directable rim lighting and stylized reflections aimed at achieving a graphic-novel-inspired non-photoreal look.
Overview
  • Built as part of a highly parameterized stylized shading plugin (custom BRDF, edge breakup, texture-based shading, outlines).
  • Implements per-object rim lights controlled via Blueprint actors and material functions, plus LAB-space banded reflections for toon-like specular.
  • Used on a production animated project with strict lookdev targets and art direction feedback loops.
  • My Role
  • Technical Artist responsible for designing and implementing rim light and stylized reflection features in the shared plugin
  • Translated paintover visual targets into shader logic and artist-friendly controls exposed through Blueprints and materials.
  • Collaborated with art, lighting, and engineering to integrate with existing NPR shading and maintain engine performance.
  • Rim Light System
  • Introduced a scene-level rim light system using Blueprint actors rather than hardcoded material-only logic.
  • Created a Rim Light Receiver component that attaches to characters and tracks up to three rim lights, updating all relevant materials for that actor.
  • Implemented Rim Light Effector components that act as art-directable rim lights with parameters for:
    • Color, presence/intensity, thickness, edge texture scale.
    • Falloff sharpness, blur, occlusion power, opacity falloff position and size (top-down gradient along the body).
  • Updated the base stylized material to accept up to three rim lights and delegate calculations to a shared material function.


  • Stylized Reflections & Midtone Shading

  • Implemented banded specular highlights for metallic materials in Shading Model by quantizing specular response into discrete bands.
  • Extended Reflection Environment Pixel Shader to quantize environment reflections in LAB color space for stable, toon-like bands and optional blur of the cubemap samples.
    • e.g. see how the specular highlights change when Bands = 2 (left) vs Bands = 5 (right)
  • Added a midtone shadow tint system by encoding shadow color into available GBuffer/CustomData channels, then reconstructing it in the stylized BRDF for a controllable midtone gradient.
  • Built a bp_shadowControls Blueprint to globally drive midtone tint, intensity, shadow blur, and offset across tagged actors.

  • Challenges & Solutions
  • Multi-rim control per character
    • Issue: Initial rim implementation lived only inside materials and wasn’t easily reused or managed per character.
    • Solution: Externalized rim lights into Blueprint actors/components, with receivers scanning the scene for effectors and pushing parameters to each character’s materials.
  • Rim artifacts and unwanted internal highlights
    • Issue: Rim light appeared inside mouths and shadowed regions.
    • Solution: Added occlusion map support and an Occlusion Power control, plus refined normal-based calculations to better confine rim to silhouettes.
  • Limited GBuffer space for extra stylization parameters
    • Issue: Couldn’t freely add new buffers for stylized data.
    • Solution: Reused CustomData and existing channels to encode shadow tint and bands, then unpacked them in the stylized shading model.
  • this website was made with love by me!