Brushstroke Shader is a real-time painterly rendering system for Unity URP that transforms 3D models into a hand-painted aesthetic. Instead of relying on pre-rendered textures, it covers your geometry with layered and individually generated brush strokes that follow the surface, react to lighting, and maintain consistent world-space size.
Build anything from broad, expressive paint coverage to fine layered detail, directional brushwork, flowing strokes, and loose painted edges. The system works with static and animated meshes and includes reusable presets and workflow tools for applying a consistent style across entire scenes.
─────────────────────────────────────
☑️ Real-Time Surface Brush Strokes
Cover any UV-mapped mesh with individually generated brush strokes that follow the surface. Stroke size remains consistent across the object regardless of its UV layout, avoiding the stretching and visible seams associated with texture-based approaches.
☑️ Layered Brushwork
Combine multiple stroke layers from broad to fine. Each layer has independent control over spacing, scale, aspect ratio, opacity, density, rotation, randomness, and subtle animated wiggle.
☑️ Custom Brush Shapes
Use your own brush textures to define the shape of each stroke. Texture atlases are supported, with adjustable weights for controlling how frequently individual brush shapes appear.
☑️ Material Properties
Add brush normal maps to create the appearance of thick, raised paint. Strokes respond to your object's material properties, including colour, normal maps, alpha maps, metallic, gloss, emission, and baked lighting.
☑️ Directional Brushwork control
Control the direction of your strokes using multiple rotation modes:
• Random / Manual
• Curl Noise for procedural flowing patterns
• Flow Maps for custom directional control
• Texture Gradient for strokes that follow contours and edges in your color texture
Add Stroke Bend to curve brushwork along changing flow directions.
☑️ Flow Map Support
Use custom directional flow textures to guide both surface and shell strokes. Green-channel flipping is supported for compatibility with different flow-map conventions.
☑️ Loose Shell Strokes
Add a second layer of strokes slightly above the surface to break up hard 3D silhouettes and create a more expressive style. Control their size, spacing, offset, tilt, randomness, wiggle.
Also a separate Brush Texture can be used exclusively for the Shell Layer.
☑️ Consistent World-Space Scale
Choose between World and Local reference space. World Space keeps brush strokes at a consistent real-world size when objects are scaled, while Local Space makes the strokes scale together with the object.
☑️ Animated Characters
Brush strokes are pinned to animated meshes and move with the surface during animation. All Brushstroke Settings apply here as well.
☑️ Reusable Brushstroke Settings Presets
Save complete brush styles as Brushstroke Settings assets and apply them across multiple objects. Edit one shared preset to update the look of every object using it.
☑️ Scene-Wide Workflow Tools
The Asset comes with its own Workflow Tools, making a conversion of an existing project or general scene management easier.
• The Shader Manager can convert existing materials and set up multiple scene objects in bulk, making it easy to apply and manage brushstroke styles in larger projects.
• The Requirements Window checks your project setup and provides one-click fixes for them.
☑️ Runtime Control
Create different Brush Settings presets for different quality levels and switch between them at runtime. Use Refresh() to apply changes and control the amount of generated brushwork for different hardware targets.
☑️ Lighting & Atmospheres
Support for baked lightmaps, adaptive light probes, ambient lighting, dynamic lights, as well as post processing effects and fog. Allowing you to create atmospheric painterly looks under different lighting conditions.
🎮 Supported Pipeline & Platforms
Universal Render Pipeline (URP)
Graphics APIs: DirectX 11, DirectX 12, Vulkan, Metal
Requires GPU compute shader support
Tested with:
Unity 6000.1
Unity 6000.2
Unity 6000.3
Unity 6000.4
─────────────────────────────────────
⚠️ Important
Brushstroke Shader is URP-only and does not support Unity's Built-in Render Pipeline or HDRP.
Use DirectX 11, DirectX 12, Vulkan, or Metal.
Painted meshes require a UV map. For builds, Read/Write must be enabled on the mesh import settings, and painted objects must not be marked Batching Static.
See the documentation for complete requirements, setup instructions, limitations, and performance considerations.
─────────────────────────────────────
📄 Documentation: https://packages.immerea.com/brushstroke-shader/documentation/
✉ Support: support@immerea.com