Painted 3D Aesthetics • Stroke-Based Lighting • Custom Texture Tools
The goal was to make a 3D scene look like a genuine 2D painting. Standard toon shading often looks too "clean" or gradient-based. I wanted the lighting to feel like distinct, deliberate brush strokes.
The Technique: Instead of calculating lighting per-pixel, I sample it per "stroke center." In traditional painting, a single brush stroke usually has a consistent color/value. By locking lighting calculations to stroke centers, the shader mimics this effect, avoiding smooth gradients within individual strokes.
To support this, I developed a custom tool that generates encoded stroke textures. It paints random strokes onto a canvas, but instead of RGB color, it encodes the center position of each stroke into the texture data for the shader to read.
The shader reads the "center position" texture, calculates lighting for that specific point in world space, and applies that single lighting value to the entire stroke shape. This creates a stepped, painterly look that reacts dynamically to lights.
A dynamic 3D scene that retains the charm and imperfection of a 2D painting, with lighting that feels manually applied by an artist's brush rather than computed by a machine.