- Python 100%
| docs | ||
| .gitignore | ||
| __init__.py | ||
| ASSESSMENT.md | ||
| blender_manifest.toml | ||
| compat.py | ||
| LICENSE | ||
| operators.py | ||
| patterns.py | ||
| presets.py | ||
| README.md | ||
| ui.py | ||
| updater.py | ||
Texturly
Quick materials & textures for VRChat worlds — a standalone Blender add-on by Unity AI Lab. Point it at world / instance geometry (not avatars): pick a material, trim your edges, bake a texture, done.
What it does
Materials
- One-click PBR materials — pick a preset (Concrete, Asphalt, Brick, Wood, Plastic, Rubber, Glass, Gold, Silver, Chrome, Copper, Iron, Brushed Metal, Emission) or dial it in yourself with Base Color, Reflectivity (metallic), Roughness, Shine (specular), and Emission. Go from concrete to gold in one click.
- Procedural patterns — layer a surface pattern between two colors: Checker, Bricks, Noise (concrete/grime/stone), Gradient, Wood Grain, Voronoi Cells, or Dots, with adjustable scale. Optionally let the pattern vary roughness for natural surface break-up.
Edges & trim
- Selection helpers — let Texturly do the selecting: Select by Angle (auto-pick edges sharper than N°), Select Boundaries, Select Seams, plus Mark Sharp / Mark Seam. Or just select edges yourself in Edit Mode.
- Edge trim — lay a real trim material (gold, silver, chrome, a solid color, anything) along the edges you choose (Selected / Sharp / UV Seams / Boundary / Auto) at a set Width (thin gold line ↔ thick gold band). The trim is baked into the object's texture as a band along those edges — no geometry is added, so your base mesh (verts, normals, corners, smooth shading) is left exactly as-is, there's no floating plate and no see-through gap. It works the same on cubes, arches, n-gons, curved low-poly and messy meshes like Suzanne. Stack as many trims as you like (gold on the corners, silver on the seams, …) and remove them individually; it's fully undoable. Because it's a standard Principled material + baked maps, what you see in Blender is what you get in Unity / VRChat — trim needs UVs (Texturly auto-unwraps if there are none).
Textures
- Generate Texture — bake the current pattern + colors to a standalone image texture (PNG), no object required. "Create a texture for me."
- Bake to texture — bake an object's material color to an image (auto-unwraps if needed).
- Bake PBR map set — bake Diffuse / Roughness / Metallic / Normal / Emission / AO
each to its own image (roughness/metallic/normal/AO in Non-Color space). (Metallic is baked
via an emission-swap, since Cycles has no native metallic pass.) Saves PNGs next to your
.blend(or packs them if unsaved).
Exporting to Unity / VRChat — the trim previews live in Blender as a node material, but Unity can't reconstruct a node graph, so bake it to textures first:
- Bake for Unity — bakes the trim + base into image textures (base colour / metallic / roughness / emission) and replaces the material with a plain Principled that uses those images. Now it's a normal textured material.
- Export for Unity — writes FBX + glTF (GLB) with Unity/VRChat-friendly settings, textures
carried through, into a
TexturlyExportfolder next to your.blend.
Both buttons are in the Bake panel. (If you Export before baking, Texturly warns you the trim isn't baked yet.) Tip: if trim lines look harsh, raise Bake Size (2048/4096).
Where it lives
3D View → Sidebar (N) → Texturly tab: Material, Trim, Bake, and Lab Plugins panels.
Updates
Texturly checks the Unity AI Lab Forgejo for newer releases so you never have to hunt the
zip and reinstall by hand. When a newer version exists, an update banner appears in the
Material panel — click Download & Install and it pulls the release zip from
git.unityailab.com, installs it over the top, and a Blender restart finishes the swap. You
can also check manually from Edit → Preferences → Add-ons → Texturly (there's a Check
for updates on startup toggle there too, on by default). The check is anonymous and
non-blocking; if the host is unreachable it just quietly does nothing.
Blender version support
Single codebase spanning 2.93 LTS → 3.x → 4.2 LTS → 5.x via a compatibility layer
(compat.py) + dual packaging (legacy bl_info for 2.93–4.1, blender_manifest.toml
extension for 4.2+). 2.93 LTS is a first-class target — it's a top-recommended Blender
for VRChat authoring.
The compat layer feature-detects per version and loads the path that works rather than
hard-coding one API: the edge-trim material uses the unified Mix node on Blender 3.4+ and
falls back to the classic MixRGB on 2.93–3.3; scalar channels are built from Math nodes
(present on every version); the Blender 4.0 Principled BSDF socket renames are resolved
automatically; images are created as data/Non-Color without the newer is_data= argument.
Verified on Blender 2.93.18 and 5.1.2 (the trim + PBR bake pipeline runs identically,
producing standard textures on both). On startup the console prints which mix path loaded.
Updating: after installing a new version, restart Blender — Python add-ons keep the old code in memory until a restart, so reinstalling over a running Blender (or just opening a new file) won't load the update. The built-in updater (Preferences → Add-ons → Texturly → Check for Updates → Download & Install) does the swap and reminds you to restart.
Standalone + plays nice
Texturly is fully standalone. It detects sibling Unity AI Lab plugins (Cats Blender
Expanded, Deform Doctor, Jiggle Lab) for a friendly note in the Lab Plugins panel, but
shares no namespace with them (texturly.* vs cats_* / deformdr.* /
jigglelab.*), so there are zero registration conflicts.
License
GPL-3.0-or-later. Original work by Unity AI Lab. See LICENSE.