Getting Started
A minimal paintable object needs a handful of components split across two roles: the canvas (what gets painted) and the tool (what does the painting).
Installation
- Buy and download Simple Paint 3D from the Unity Asset Store.
- In Unity, open Window → Package Manager → My Assets, then Import the package.
- When prompted, also import its dependency
com.deepwave.core.
The 8-step setup
1 — Make the object paintable
Add a Paintable component to the Renderer you want to paint. Set its Texture Size
(the resolution of every paint buffer for that object) and Submesh Index. It works
with regular meshes and with SkinnedMeshRenderer alike.
2 — Pick a canvas type
Add one of the following to the same object or a parent:
| Canvas | Best for |
|---|---|
MultiChannelCanvas | The general case — several channels, each with its own layer stack |
SimulationCanvas | Physically simulated wet paint |
SingleTargetCanvas | One channel, no layer stack, the cheapest option |
3 — Configure its channels
- On a
MultiChannelCanvas, populate Channels — onePaintChannelper material property, each pointing at aChannelDefinitionasset and holding one or morePaintLayerentries. - On a
SimulationCanvas, populate itsSimulationChannellist the same way, plus aThicknessResponsecurve per channel. - On a
SingleTargetCanvas, just assign oneChannelDefinition.
4 — Simulation canvas only: add a solver
Add exactly one of FluidViscousSimulation, FluidInkSimulation or
FluidFilmSimulation as a sibling component — the canvas discovers it automatically.
5 — Build the Tool
On whichever object should receive player input, add PaintTool together with one
InputConfig asset:
MouseInputConfig, PenInputConfig, TouchInputConfig, CollisionInputConfig,
ParticleInputConfig, or ObjectInputConfig.
6 — Assign a DrawConfig
Create a tool asset — StandardBrushConfig or FillMeshConfig — configure its ink
channel list (colour/value, texture, intensity) and assign it to PaintTool.
7 — Optional: assign a stroke preset
Screen-based devices (Mouse/Pen/Touch) can take an optional StrokeConfig preset —
LineStrokeConfig, BezierStrokeConfig, DragDotStrokeConfig or
AnchoredStrokeConfig — for a shaped path instead of the one-stamp-per-ray default.
8 — Optional: progress tracking
Add PaintProgressTracker next to any of the three canvas types to measure paint
completion at runtime.
How the pieces connect
PaintTool.SwitchInput(...) and PaintTool.SwitchPaint(...) can be called at runtime, so
a single Tool GameObject can flip between a brush and a fill, or a Line stroke and a
Bezier stroke, without re-wiring components.