Project Overview
The Graffiti Painter system handles modular paint accumulation to a render texture based on brush size, distance, and flow rate. It simulates realistic paint behavior with dripping effects controlled by a dryness rate and gravity-aware surface normals. The responsive spray can shader updates visuals in real time.
Role: Developer
Game Engine: Unity
Programming Languages: C#, HLSL
Technologies: Shader Graph, Adobe Photoshop, Blender
Platform: PC
Date: 2025
Why I Built It
I built this while interviewing at Tangible Interaction, the team behind Graffiti+. After passing the first round, I had a second interview coming up with the dev team. Going through my projects, I realized they were all games, and I didn't like that I'd have nothing relevant to their product to talk about.
So in three days, I built this proof of concept, including something they didn't have in place yet. It impressed them, and I got the job. I now work on Graffiti+ itself (see Experience).
Features
Key mechanics and systems implemented in the Graffiti Painter:
Render Texture–Based Paint Accumulation
User input updates a Render Texture dynamically based on brush size, spray distance, and flow rate to accumulate paint in real time.
Directional Drip Logic
Implements dripping by storing wet paint data in a secondary render texture. When paint exceeds a threshold, it transfers to adjacent pixels based on gravity and surface normals, creating realistic drips.
Gravity direction adapts to object rotation, enabling drips in any orientation. Dryness rate gradually reduces paint over time.
Responsive Spray Paint Can Material
A Shader Graph–based can material that reflects brush texture, color, and intensity dynamically on the spray can model.
Time-Lapse Recording
Records painting sessions to a time-lapse video for playback and demonstration purposes.