Paint Flow Maps Directly on Mesh in Blender
This guide details how to paint directional flow maps directly onto 3D mesh surfaces in Blender using built-in Texture Paint and shader tools. Flow maps use Red and Green color channels to represent 2D directional vectors across a surface, commonly used for animating water, hair, and anisotropic effects. You will learn how to set up a neutral flow canvas, configure a directional brush, build a real-time preview shader, and paint vector data directly onto your model.
1. Prepare the Mesh and Create a Flow Texture
- Select your mesh, switch to the UV Editing workspace, and ensure the model is unwrapped cleanly without overlapping UV islands.
- Switch to the Texture Paint workspace.
- In the Active Tool and Workspace settings tab (on the right-side properties panel), locate the Texture Slots section.
- Click Add Texture Paint Slot and choose Base Color.
- Name the texture
FlowMap. - Set the Color to neutral tangent-space flow:
- Red: 0.5
- Green: 0.5
- Blue: 0.0 (or 1.0 depending on the target engine)
- Alpha: 1.0
- Click OK. The model is now coated in a neutral vector canvas where values of (0.5, 0.5) indicate zero motion.
2. Configure the Directional Paint Brush
To paint vectors that match your stroke direction automatically:
- Under the Texture Paint brush settings, open the Texture rollout and click New to create a brush texture.
- Go to the Texture Properties tab at the bottom of the properties panel.
- Set the texture Type to Blend.
- In the Mapping section, set the progression to Radial.
- Enable Color Ramp and create a circular flow wheel:
- Left handle (0.0): Pure Red
(1.0, 0.0, 0.0) - Center handle (0.5): Pure Green
(0.0, 1.0, 0.0) - Right handle (1.0): Pure Red
(1.0, 0.0, 0.0)
- Left handle (0.0): Pure Red
- Return to the Active Tool settings and expand the Stroke or Texture settings.
- Set the texture Mapping to View Plane or 3D, and set the Angle mode to Rake. Rake forces the brush texture rotation to follow the path of your cursor stroke.
3. Build the Real-Time Preview Shader
To see the flow map distorting a texture dynamically as you paint:
- Open the Shader Editor with your object selected.
- Add your
FlowMapImage Texture node. - Connect the
Coloroutput of theFlowMapto a Vector Math node set to Subtract. - Set the bottom value of the Subtract node to
(0.5, 0.5, 0.0). This centers the vectors so 0.5 becomes 0. - Add a Vector Math node set to Scale (or Multiply) to control flow strength. Connect the Subtract output to it.
- Add a Value node, type
#frame / 24into the field to generate time-based animation, and plug it into a Math (Multiply) node. - Add a Vector Math (Multiply) node to multiply the scaled flow vector by the animated time value.
- Add a Vector Math (Add) node. Connect a Texture Coordinate (UV) output to the top slot, and the animated vector result into the bottom slot.
- Connect the output of this Add node into the Vector input of a detail texture (such as water foam or noise).
- Plug the detail texture into your Principled BSDF Base Color.
4. Paint the Flow Vectors
- Press
Spacebarin the viewport to start playing the timeline animation. - Switch the 3D Viewport shading mode to Material Preview.
- Select your brush in Texture Paint mode and begin drawing strokes across the mesh surface.
- As you paint, the Rake setting injects vector colors into the
FlowMaptexture corresponding to stroke angles, and the shader instantly displaces the detail texture along your drawn paths. - To reset areas back to zero motion, select a standard brush without
the texture ramp, set the brush color to hex
#808000(RGB: 0.5, 0.5, 0.0), and paint over the unwanted areas.
5. Save the Flow Map
Blender does not automatically save painted image textures into external files.
- Go to the Image Editor panel.
- Select
FlowMapfrom the image dropdown. - Click Image > Save As... to export the texture as a 16-bit PNG, TARGA, or OpenEXR file for use in your game engine or rendering pipeline.