Graffiti Painter

This project simulates real-time graffiti painting in Unity, C#, Shader Graph and HLSL for surface shaders to paint on render textures. It handles dynamic paint accumulation, directional dripping, and lighting-responsive visuals—all built on top of Unity’s standard rendering pipeline. I focused on making the system modular and performant, and I have plans to expand on this project further in the future.

Role: Developer Game Engine: Unity
Programming Language: C#, HLSL
Technologies: Adobe Photoshop, Blender, GitHub, Visual Studio
Platform: PC
Date: 2025

Features

Here are some of the key features and mechanics I have incorporated so far in the project:

Render texture–based paint accumulation

The user’s input updates a Render Texture with different data depending on the context—such as brush size, distance between the spray can and the surface, and the spray can’s flow rate.

Directional drip logic using gravity and surface normals

To enhance the experience, I implemented a dripping effect where painting too long on the same spot causes paint to drip. This behavior is controlled by a “dryness rate” and the spray can’s flow rate.
This system uses a separate double Render Texture setup to store wet paint data. It calculates how much wet paint is present per pixel and determines whether to drip or transfer paint to a neighboring pixel based on gravity.

Gravity is assumed to be downward, but it’s calculated in real time to account for object rotation, since texture UVs alone can’t define what “down” means.
Yes, doing gravity in an alien planet where gravity pulls upwards is very possible!

Drips are generated by storing the paint amount in the red channel of a given pixel. Once this value exceeds the drip threshold, part of it transfers to the green channel of the neighboring pixel in the gravity direction. This process continues across frames to simulate the dripping effect, while a dryness factor gradually reduces the paint value to mimic drying over time.
You can see this behavior in the debug map shown in the following clip.

Responsive Spray Paint Can Material

A Shader Graph–based material worth showcasing is the Spray Paint Can shader. It visually reflects the brush texture, color, and intensity directly on the can, with all values dynamically updated through the shader.

Here's a little time-lapse of the tool in action (could use the help of a better artist to do this than myself.)

Back to Projects