Table of Contents Show
For those who don’t know the tool: OptiDraw is an in editor mesh painting extension for Unity that aims to keep vertex, mask, and splat style painting close to your materials, shaders, and scene context.
A mesh painter that stays in engine
OptiDraw positions itself as a framework for texturing work inside the Unity Editor, with a focus on centralizing painting and data handling rather than sending artists on a DCC roundtrip for every tweak. Marketing claims call out a zero lag painting experience on static and animated meshes, plus workflows designed to feel familiar to artists coming from Adobe Substance 3D.

The core pitch: paint directly on meshes in the editor, store paint data in reusable assets, and keep the iteration loop short enough that you actually use it. If your pipeline already leans on mesh painting to drive blends, wear, grime, decals, or procedural masks, the idea here is simple. Do the edits where you preview the final shading.
Setup, shortcuts, and the first five minutes
OptiDraw claims (!) a one click setup flow. You open the Mesh Painter window from a top menu entry labeled R2G then OptiDraw then Mesh Painter, dock it where you want, and select an object in the scene.


On selection, the tool describes an auto initialization step that prepares a MonoBehaviour component, adds a Mesh Collider to the selected GameObject, and links a ScriptableObject asset to store painting data. The tool also bringsa Draw Mode toggle you can hit via the B key or a Draw Mode button to enter paint mode, with a brush gizmo shown in the Scene view.

There is also a compatibility check concept baked into the workflow. The documentation describes checks for mesh and shader compatibility, and it describes UI states where Draw Mode becomes non interactive if no compatible object is selected.
Data management, not just brushes
OptiDraw leans hard on a ScriptableObject driven data model, with an OptidrawData asset as the persistent storage for vertex colors and mask data, and an OptiDraw Mesh component as the bridge that connects that data to a GameObject.
The tool has a non destructive auto copy approach that keeps the original mesh untouched while managing the data needed for painting. It also includes a folder strategy split between an Editor folder setup intended to keep final build size smaller by excluding raw data, and a Runtime or Resources approach intended for cases where you need to modify paint data via C# during gameplay for things like dynamic damage or snow.

This matters more than it sounds. A painter that creates mystery folders and fragile references becomes a liability fast. OptiDraw makes claims about clean data management and efficient linking. In practice, you still want to verify how it behaves with prefab variants, source control, and multi artist merges before you bet a production on it.
Two engines, two very different failure modes
OptiDraw exposes two headline painting modes: Vertex Painting and Splat Painting.
Vertex Painting stores data directly in mesh vertices. The documentation frames it as useful for variation, blending, and environmental detailing without high resolution texture overhead. It also calls out the obvious constraint: resolution depends on mesh density, and topology changes after painting can break the relationship between vertex IDs and the stored data. If you plan to repaint after mesh edits, you will want a repeatable process and a stable asset handoff.

Splat Painting stores data in a texture map via UV coordinates, framed as a way to get pixel precise masks for complex blends and weathering effects. The documentation also lists the expected tradeoffs: texture memory, a need for clean non overlapping UV layouts, and some performance overhead from shader sampling compared to reading raw vertex data. If you ship on constrained hardware, this becomes a budgeting conversation, not a feature checkbox.

The tool also describes channel targeting across RGBA, paint operations like add, replace, and erase, a normal limit control to reduce bleed across sharp angles, and a seamless paint option to minimize seams across UV islands, texture borders, or submeshes. Around one third into a production, this is also where you will appreciate having robust undo and redo instead of a single irreversible mistake that haunts your repo forever. Marketing claims say undo and redo is robust. I did not test that.
Animated meshes and the unglamorous armpit problem
OptiDraw supports Mesh Renderers and Skinned Mesh Renderers. For skinned meshes, the documentation describes an Animation Draw tab that appears automatically when a Skinned Mesh Renderer is detected.
Animation Draw Mode is described as a specialized mode that lets you paint directly on meshes while they are in motion or at a specific animation frame, with a single Animation Clip slot you drag and drop into the UI. The UI is described with play and pause controls, a scrubber, frame stepping, and a clip duration readout.

The documentation describes the workflow advantage in plain terms: you can pose a character to access difficult regions and paint fixes in context, rather than guessing in T pose. It also claims deformation consistency by being aware of bones and weights, with the goal of avoiding texture sliding or warping issues. That is a marketing claim, and it is exactly the kind of thing you should stress test on your own rigs, since skinning setups vary wildly.

If your project sits inside game development production reality, you already know the rule: always test on the worst character in the build, not the best demo mesh.
UV channels, UDIM tiles, and why your mesh can still be the bottleneck
OptiDraw has support for up to four UV channels, UV0 through UV3, and it also describes UDIM aware splat painting for UV islands that extend beyond the standard 0 to 1 space. The documentation frames this as important for splat painting setups where textures use clamp for performance and where other tools might force remapping.
It also describes how UDIM support gets surfaced in the UI. You link an OptidrawData asset, inspect mesh info to see which UV channels support UDIM and how many submeshes exist, then navigate UV tiles through a viewer that shows tile coordinates. You then input those coordinates into the OptiDraw Mesh component per submesh, with the note that optimized workflows typically separate tiles into different submeshes for material needs.

Mesh compatibility still matters. The documentation describes an incompatible mesh case where the active UV channel contains overlapping islands or islands that cross tile boundaries, which can cause incorrect painting results and unexpected behavior. It also describes a compatible mesh case where at least one UV channel contains islands properly contained within a single tile, even if other channels have cross tile UVs.
It also describes a Unity side fix for missing or invalid UV data using the model importer option to generate lightmap UVs, producing a secondary UV channel where islands pack into a single tile. That is a pragmatic fallback, but it does not magically fix every projection requirement. Asset quality still sets the ceiling for how well any painter behaves.
Layers that look like a familiar UI, with an unfamiliar performance bill
OptiDraw includes a Layer System similar to modern image editing software and also similar to Unity Terrain Layers in how you select and paint a specific layer. There is also an explicit performance warning: the system is designed to support four PBR texture layers as a sweet spot. The documentation says the system can support eight layers or more on a single object but advises against eight layers on one mesh due to performance bottlenecks from texture sampling and memory overhead. That warning is more useful than most feature lists, because it tells you where the tool expects you to stop.
If your shader stack already sits in URP, you will still want to validate how many texture samples you can afford in your target platforms, and how many variants you want to maintain once layers enter the mix.
Shader integration: template route or build your own
OptiDraw describes shader requirements for proper data communication between the painter and the mesh, and it frames shader integration as either plug and play with templates or a custom setup.

The documentation says the package includes 11 template shaders located at Assets then Run2Go Studio then OptiDraw by ProfX then Shaders, and that you can find them in the shader picker under a category labeled R2G then LayeredLit. It also says that for developers using Unity 6.3, the tool is compatible with an official Sample Texture Terrain Shadergraph with minor tweaks. For custom setups, the documentation describes Shader Graph custom support via 21 subgraphs and custom HLSL scripts for blending and vertex modifications, described as modular so you can include or exclude functions.
Utility tools: channel packing with guard rails
OptiDraw includes a Texture Channel Packer described as a free utility that combines up to four grayscale textures into a single RGBA texture. The documentation frames this as a standard channel packing workflow for PBR maps to reduce texture samplers and memory footprint, and it says the tool supports custom channel mappings including common conventions like ORM.

Export formats are TGA and PNG, and the channel packer window cannot be docked as a tab within the Unity Editor.
Price and release details
On the Unity Asset Store, OptiDraw is listed as an “Extension Asset” and the latest version 3.2.2 and an original Unity version of 6000.0.67. The render pipeline compatibility section shows compatibility for Built in, URP, and HDRP at Unity version 6000.0.67f1.
The Asset Store price is €36.79.
As always, test any new tool before you let it touch production assets. Verify the data it generates, the shader hooks it expects, and the performance profile on your target hardware before you scale it across a project.
Link Citation Block
https://assetstore.unity.com/packages/tools/painting/optidraw-advanced-mesh-painting-tool-361248?clickref=1110l3SaYMtQ