Scrying Eye - Procedural Eye Shader | Unreal Engine 5, HLSL

Idle to triggered transition

Idle: cool palette, slow blinks, settled gaze

Idle: cool palette, slow blinks, settled gaze

Triggered: warm palette, fast blinks, rapid saccades

Triggered: warm palette, fast blinks, rapid saccades

Exposed parameters: iris, pupil, blink, saccade, core glow

Exposed parameters: iris, pupil, blink, saccade, core glow

Live parameter response

Parameter plumbing into a single HLSL custom node

Parameter plumbing into a single HLSL custom node

Baldur's Gate 3 Scrying Eye Reference

Baldur's Gate 3 Scrying Eye Reference

Inspired by the Scrying Eyes from Baldur's Gate 3. The whole eye lives in one HLSL custom node - no baked iris textures. The iris is a front-to-back raymarch through 126 layers of animated smoke, accumulated with transmittance so the fibres occlude one another instead of blending flat, each layer taking its own parallax offset so the depth holds up as the camera moves. The pupil is a vesica SDF: dilation is one scalar, the silhouette stays correct at any aperture. Saccades and blink run on accumulated phase rather than frequency, so they can be ramped in Sequencer without popping.

The shader drives two art-directed states - idle and triggered - through the same parameter set.

The first working version unrolled all 126 iterations, producing roughly 378 texture instructions in the shader body - minutes to compile and a crawl to run. A dynamic loop, hoisted loop invariants, three early exits and a transmittance cutoff brought it into budget with the image unchanged.

The discharge is a second shell mesh with its own procedural material - bolts along randomly oriented great circles, jaggedness from wrapping fBm with linear interpolation, line width locked to screen pixels so it holds at any distance. The eye floats in six-way lit volumetric fog.

Album
Date
August 9, 2026