← Back to projects
tools · 2025 · Completed

Graffiti Painter

UnityC#HLSLShader Graph
Graffiti Painter — Video Thumbnail

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.

Spray Can Shader Graph

Time-Lapse Recording

Records painting sessions to a time-lapse video for playback and demonstration purposes.