The Snow Sparkle Pipeline


Blue Sky’s renderer couldn’t generate the kind of sparkle that gives snow its life. That interaction of light across a surface, the way it shifts and catches as the camera moves, wasn’t something we could get out of the box. It had to be built as part of the workflow.


The solution was a custom Nuke tool I created called SnowSparkle, a procedural projection system designed to apply a sparkle texture onto any layer’s set geometry using the shot’s own spatial data.


The approach works like a gobo. A virtual overhead camera is positioned above the scene and used to project a procedurally generated sparkle map (built from layered turbulence noise at multiple scales and color channels) down onto the shot geometry, using the same camera, Z depth, and live geometry that drove the original render. Because the projection reads the actual shot camera and geometry rather than painting sparkles flat onto the image, the effect parallaxes correctly as the camera moves and responds to the angle and slope of each surface independently.


The noise system driving the sparkle map was layered by three offset turbulence passes at different scales, separated into RGB channels and recombined, with a hue shift tied to camera delta so the sparkle color shifted naturally as the camera moved. Shadow and slope correction passes ensured the effect respected the physical surface behavior of the snow rather than sitting uniformly across the frame. The map itself ran at 12K to ensure sufficient sparkle density without tiling artifacts across any shot scale.


What made it work well for the production wasn’t just the effect itself but the automation for the larger teams. The tool was designed to run directly on the set plate with minimal per-shot configuration, like a read helper or diffusion pass. A lighting artist could place the tool in their scene with a projected target for easy placement, set altitude and FOV, and the tool handled the rest and a comp finishing artist could then finalize any details. It ran on every applicable shot, reading the shot’s own spatial data without manual sparkle placement per frame.