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.
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.
The rest of it
- 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.





