Graphics · In development
Impressionist Oil Paint Shader
A Unity 6 post-process effect that repaints every rendered frame as layered, edge-following oil brush strokes.

I’m building a renderer feature for Unity 6’s Universal Render Pipeline that turns a rendered 3D scene into an impressionist painting, live, every frame.
How it works
The effect runs as four passes:
- Image analysis. A compute pass studies the frame at quarter resolution and works out the dominant edge direction and the amount of detail everywhere in the image.
- Stroke painting. Layers of brush strokes are painted from coarse to fine. The strokes follow the edge flow underneath them, with a little controlled variation so they never look mechanically aligned.
- Relief lighting. The paint gets a thickness, and that thickness is lit to give the strokes an impasto look.
- Temporal blending. The painted frame is reprojected with motion vectors and blended with its history, so the strokes stay steady instead of shimmering when the camera moves.
Under the hood
- A GPU-driven path generates the strokes in a compute shader and draws them indirectly, with an automatic fallback on hardware that doesn’t support it.
- Everything runs through Unity 6’s RenderGraph API.
- Colour harmonies in the OKLab colour space (split-complementary, analogous, complementary, triadic, warm/cool and limited palettes) keep the painting coherent.
- Stability work: strokes are rejected across depth gaps, temporal blending is hue-aware, and history resets on camera cuts.
- A set of debug views, from stroke orientation to motion vectors, shows what each pass is doing.
- It ships as a Unity package, so it drops straight into other projects.





