Skip to content

About

PBR texture painter: paint, bake mesh maps and design materials with a node graph. Rust + wgpu.

Resources

Contributing

Stars

326 stars

Watchers

2 watching

Forks

Repository files navigation

Material Painter

Smart materials painted in Material Painter

Support Material Painter on Ko-fi   Download   Join the Discord

Material Painter is free and open source. If it saves you time, buy me a coffee on Ko-fi to keep it going.

A fast, lightweight PBR texture painter for game and film assets: paint materials onto 3D models with layers, smart materials and masks, bake mesh maps, build materials in a node graph and write your own node shaders.

Material Designer: a node graph next to the material on the mesh

Early access. Material Painter works and is in daily use, but it is young: expect rough edges, and please report what you find.

Features

  • Material Paint: a layer stack with paint, fill and folder layers, blend modes and opacity; brushes with tips, grain, pen pressure, stabilizer, symmetry and screen, surface or UV projection; polygon fill by triangle, quad, face loop, flat area (up to an angle), loose part, object, UV island or texture set, by click, drag, box or lasso.
  • Channels: base color, roughness, metallic, height, opacity, emission, normal and specular level, each painted and filled like any other. Opacity (or an image's alpha) is see-through in the 3D view and the path tracer and exports as the base color's alpha; emission glows with bloom; normal-map images on fills add detail, projected in UV or tri-planar, and merge with the baked normal on export.
  • 3D mouse: navigate the 3D view with a 3Dconnexion SpaceMouse (or another six-axis controller), read straight from the device: no vendor SDK needed. Speed and direction are in Preferences > Viewport. On Linux the device needs read access to its /dev/hidraw node (a udev rule).
  • Auto-unwrap: meshes without UVs are unwrapped on import (xatlas), one non-overlapping layout per texture set, or every set when you choose to replace the file's UVs (Preferences > General). File > Export mesh saves the model with its new UVs for use with the exported textures.
  • UDIM tiles: a mesh laid out across UV tiles (1001, 1002, …) gets a texture set per tile of each material, baked and painted on its own, and exported as Name_BaseColor.1001.png (or wherever $udim sits in the file name), which Unreal, Maya, Blender and Houdini read as UDIMs. File > Export mesh puts the UVs back in their tiles. A stroke stays within the tile being edited. Off in Preferences > General for meshes that move islands out of 0..1 on purpose.
  • Texture sets: a mesh with several materials gets one texture set per material, each with its own layers, size, baked maps and exported files. Hide a set's part of the mesh, or highlight it to see which part it is.
  • Smart materials and masks: dozens of ready-made materials, smart mask generators (edge wear, dirt, dust, rain streaks, drips, cavity grime...), mask layers with blend modes, and mask filters (levels, blur, warp, noise breakup...).
  • Mesh map baking: ambient occlusion, curvature, cavity, thickness, normal and height from a high poly, position, world normal, ID and more, with match-by-name and a cage that never leaves holes: averaged normals close it over hard edges, rays skip faces they reach from behind, misses take the nearest surface, and you can paint the cage out or in where the live preview shows misses or bleeding, or fit it with Auto-fix. Custom bake maps add what happens around the model: fluid flow from any direction, wind exposure and erosion, sand and snow drifts, contact between parts and distance from a point.
  • Material Designer: a node graph of tileable textures that drives fill layers and masks, with live previews and a 3D view of the result.
  • Shader Maker: write custom nodes in WGSL with syntax highlighting, a live preview and compiler errors pointing at your lines.
  • Export: presets for Unreal, Unity (URP, HDRP, Built-in), Godot, glTF, Roblox and Blender, or your own channel packing; PNG, TIFF, TGA, JPEG and EXR at 8, 16 or 32 bits.
  • Preview shaders: build the 3D view's look as a node graph (toon, clay, unlit, rim light, or your own) and texture with it; shading nodes read the painted channels, baked maps and lighting, and custom ones are plain WGSL like any node.
  • Path tool: place points on the mesh or the UV map and lay the brush evenly along the curve, for clean stitches, seams and panel lines.
  • Asset library: about 2,900 free CC0 materials from Poly Haven and ambientCG, one click from the shelf, plus a community library of material graphs and nodes that users share from inside the app. Downloads are plain image files with a meta.json, so nothing is locked into Material Painter.
  • Open Substance 3D Painter projects (.spp): the model and every texture set, with the final look of base color, roughness, metallic, height, opacity, emission and painted normal details, and each layer stack rebuilt: fills with their images, paint layers and painted masks replayed from Painter's recorded strokes and polygon fills, smart masks as the closest ones here. Procedural (Substance) materials and filters don't come across; the import report says exactly what did. Details and limits: docs/substance-painter-import.md.
  • Docking workspaces, path-traced preview, HDRI lighting, and an MCP server so AI agents can drive the app (off by default).
Material Paint Shader Maker
Painting workspace Shader Maker

Ready-made material graphs

Download

Ready-to-run builds are on the releases page, all free; donations on Ko-fi fund development.

  • Windows: the installer, or the zip to unpack and run.
  • Linux: the tarball. Unpack it, run ./material-painter, and optionally ./install.sh to add it to your app menu.

Updates come from inside the app (from 0.1.7 on): at start it asks GitHub whether a newer release is out (turn that off in Preferences > General, or check by hand with Help > Check for updates). Choose Download and install and the new version goes in when you close the app: the installer updates an installed copy, an unpacked zip or tarball gets its files replaced, and the macOS app bundle is swapped. Only packages signed by the release workflow install, so a file that didn't come from it is refused. Nothing about you or your work is sent.

Requirements: 64-bit Windows 10 or 11, or Linux (x64, glibc 2.35 or newer: Ubuntu 22.04, Fedora 36, Debian 12 and later), and a GPU with DirectX 12 or Vulkan support (most cards from 2016 on). 8 GB of video memory is comfortable for 4K texture sets.

Building from source

Install Rust (stable), then:

git clone https://github.com/alla2001/material-painter
cd material-painter
cargo run --release

cargo test runs the unit tests. The GPU tests render offscreen (no window) and write images to target/bake_test/:

cargo test --bin material_painter -- --ignored --test-threads 1

Community

Questions, renders and shared materials: join the Discord. Bugs and feature requests are welcome there or as GitHub issues.

Want to help build it? See CONTRIBUTING.md (AI-assisted contributions are welcome; AGENTS.md is the guide for coding agents).

If Material Painter is useful to you, a donation keeps development going:

Support Material Painter on Ko-fi

License

Material Painter is free software under the GNU General Public License, version 3 or later.

Third-party code is listed with its licenses in THIRD_PARTY_NOTICES.html. The bundled HDRIs and PBR textures are from Poly Haven (CC0), and the icons are Phosphor (MIT).

Reading Substance 3D Painter projects is adapted from SubCraft by Aalzard and the SubCraft contributors (MIT), in src/spp with its license. Material Painter is not affiliated with or endorsed by Adobe; Substance 3D Painter is a trademark of Adobe.

About

PBR texture painter: paint, bake mesh maps and design materials with a node graph. Rust + wgpu.

Resources

Contributing

Stars

326 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages