📖 DOCUMENTATION | 🎮 WEBGL DEMO
Simple Painter is a high-performance, GPU-driven runtime texture painting framework for Unity. It enables real-time painting directly onto 3D meshes with full PBR multi-channel support, covering Albedo, Normal, Metallic, Roughness, Height, and any custom shader property.
The system is built around a phased command pipeline — all GPU work is batched into a single CommandBuffer per frame, ensuring minimal draw call overhead and zero per-frame GC allocations. The architecture is modular and extensible: triggers detect input, stroke methods interpolate brush paths, tools dispatch stamps, and committers finalize the result onto persistent texture layers.
Painting Modes: Simple Painter supports both direct painting (instant commit on stroke end) and simulation-based painting with three tiers of real-time fluid dynamics — from lightweight gravity drips to full MLS-MPM particle fluid. Each simulation tier produces physically-driven effects including flow, absorption, evaporation, and viscous cohesion, all running entirely on the GPU.
Channel & Layer System: Paint onto multiple material channels simultaneously. Each channel supports multiple layers with independent visibility, opacity, blend modes, and initial textures. Blend modes are type-aware — Color channels offer Screen, Overlay, and SoftLight; Normal channels offer RNM, UDN, Whiteout, and MaxSlope; Scalar channels provide standard arithmetic blends.
Input Flexibility: Three built-in trigger types handle different input scenarios: screen-space raycasting (mouse/touch), physics collisions (tire tracks, scratches), and particle system impacts (splatter effects). Four stroke interpolation methods are included: Bezier curves for smooth freehand, Line for straight edges, Dot for stippling, and Anchored for stamp placement with drag-to-resize.
Environment & Simulation: The PaintEnvironment system provides gravity-driven flow fields with optional WindZone integration, noise-based perturbation, and external brush forces (push, pull, swirl). Fluid simulations read from this shared flow context to produce realistic paint behavior on any surface orientation.
Progress Tracking: A built-in progress tracker measures paint coverage on any channel as a 0-to-1 ratio using async GPU readback and Burst-compiled counting. Supports UV island masking and custom mask textures for precise measurement regions — ideal for puzzle or objective-based gameplay.
Simple Painter is compatible with Built-In, URP, and HDRP render pipelines.