How to Texture VRChat Avatars from Scratch (Complete Beginner Guide)

tutorialvrchatunityavatarpoiyomitexturing

Stepping into VRChat with a blank grey 3D model or an uncolored mesh feels like showing up to a costume party in a cardboard box. If you want your character to express real personalities, capture stylized anime aesthetics, or showcase realistic clothing materials, learning how to texture VRChat avatars from scratch is the single most transformative skill in your creation toolbox.

Unity 3D character texturing software workspace showing VRChat avatar creation and Poiyomi shader material setup

Configuring custom albedo and normal maps inside Unity using the Poiyomi Toon shader allows you to texture your VRChat avatar with professional studio lighting response.

However, texturing a character for social VR is significantly more demanding than painting a standard static illustration. VRChat avatars run across thousands of distinct user platforms—from high-end PC VR rigs to standalone Meta Quest headsets—meaning every texture asset must balance vibrant visual fidelity with strict VRChat performance ranks (Good or Excellent). Below is the complete beginner-to-intermediate technical guide to texturing your VRChat avatar using Unity and modern shader workflows.

Understanding the VRChat Texturing Workflow

Before painting a single brush stroke, it is critical to understand how Unity and VRChat shaders interpret surface information. A fully textured character does not rely on a single image file; instead, it combines several distinct texture layers inside a specialized shader package like Poiyomi Toon, lilToon, or the built-in VRChat Mobile/Toon Lit shader.

Every professional avatar material utilizes four foundational texture channels:

  1. Albedo / Main Texture (Base Color): The primary RGB color map defining skin tones, clothing dyes, eye designs, and painted shadows.
  2. Normal Map (Bump Map): A purple/blue directional vector map that simulates physical micro-geometry, giving clothing seams, fabric weaves, and leather straps 3D depth without adding polygon triangles.
  3. MatCap (Material Capture): A sphere-projected gradient texture applied over anime models to generate stylized metallic shine, silk sheen, or glossy latex highlights independent of world light direction.
  4. Emission Mask (Glow Map): A black-and-white or RGB mask dictating which portions of the avatar (such as sci-fi neon lines, glowing eyes, or cybernetic runes) emit self-illuminated light in dark worlds.
[VRChat Avatar Texturing Pipeline]
Source 3D Character Mesh (Blender / FBX)


[Step 1: Paint / Export Textures from Substance Painter or Photoshop]
       ├── Base Color Albedo Map (2048x2048 PNG)
       ├── Normal Map Surface Detail (2048x2048 PNG)
       └── Emission / MatCap Shading Masks


[Step 2: Unity Asset Import & Compression Optimization]
       ├── Set Max Resolution to 2048 (PC) or 1024 (Quest)
       ├── Enable Normal Map Texture Type for Normal Maps
       └── Apply BC7 / ASTC High Quality Compression


[Step 3: Poiyomi / lilToon Shader Configuration & SDK Build]

Step-by-Step Guide to Texturing Your VRChat Avatar

To build an avatar that looks exceptional under dynamic world lighting while staying lightweight for social instances, follow this structured three-phase texturing workflow inside Unity.

1. Preparing Your Character Maps in Blender and Substance

  1. Open your character model inside Blender (UV Editing workspace) and verify that every material zone (Body, Face, Hair, Outfit) possesses a clean, non-overlapping UV layout restricted inside the 0 to 1 coordinate boundary.
  2. If painting inside Substance 3D Painter, bake your mesh data (Normal, Ambient Occlusion, Curvature) at 2048x2048 resolution before creating layers. This enables smart masks to automatically detect clothing crevices and edges.
  3. Export your finished texture sheets as 24-bit PNGs (Base Color, Normal DirectX/OpenGL, Roughness/Metallic) directly into your Unity project’s Assets/AvatarName/Textures/ directory.

2. Importing and Configuring Texture Compression in Unity

  1. Open your VRChat avatar project inside Unity and locate your imported PNG textures inside the Project asset drawer.
  2. Click on your exported Normal map (Outfit_Normal.png). In the Inspector panel on the right, change Texture Type from Default to Normal map and click Apply. (Skipping this step will cause Poiyomi or Unity shaders to render inverted, broken shading!)
  3. Select all your Albedo/Main textures and check their Max Size setting in the Inspector. For PC VR avatars, set Max Size to 2048. For Meta Quest / Android mobile versions, set Max Size to 1024 to prevent exceeding the 10MB texture memory limit required for green Good performance rankings.
  4. Set Compression to High Quality (BC7 for PC, ASTC 6x6 for Android/Quest) to keep skin gradients smooth while shrinking disk file size.

3. Setting Up the Poiyomi Toon or Standard Shader

  1. Select your avatar’s body or outfit material in the Project window and ensure the shader dropdown at the top of the Inspector is set to .poiyomi/Poiyomi Toon (or lilToon).
  2. Expand the Main & Alpha > Main collapsible section. Drag and drop your Base Color PNG directly into the Main Texture slot.
  3. Scroll down and expand the Normals section. Drag your imported normal map into the Normal Map slot and adjust the Normal Intensity slider between 0.5 and 1.2 until clothing wrinkles and stitching look well-defined without appearing harsh.
  4. If your outfit features metallic buckles or glossy latex, expand the MatCap section, enable the checkbox, assign a metallic MatCap texture, and dial down Border Strength to 0.3 for natural rim reflections.

PBR Parameter Reference Table for VRChat Avatars

Shader Channel / PropertyRecommended Value SettingTechnical & Visual Rationale
Main Texture (Albedo)sRGB Enabled, Max Size 2048 (PC) / 1024 (Quest)Preserves accurate skin color tones and keeps total VRChat VRAM footprint optimized
Normal Map (Bump)sRGB Disabled, Texture Type Normal mapLinear normal vectors required for GPU lighting calculations; prevents inside-out shadows
Normal Intensity0.6 to 1.0 (Poiyomi / lilToon)Keeps fabric weaves and leather stitching grounded without causing dark lighting artifacts
Culling Mode (Cull)Off (Double Sided) for Hair/Capes; Back for SkinPrevents single-sided clothing and hair meshes from rendering invisible from behind
Lighting ModeFlat Lit or Toon Lit with Min Brightness 0.2Ensures your avatar remains partially visible and colorful even inside pitch-black VRChat horror worlds

Creating Custom Clothing Textures with AI Tools

While repainting flat colors is straightforward, crafting authentic fabric textures—such as coarse knitted wool, embossed leather harnesses, or woven denim—requires generating clean normal and roughness masks. Adding surface normal maps to your VRChat avatar instantly upgrades flat anime clothing into textured, tangible outfits that catch light naturally across every movement.

If you want to create custom fabric normal maps from any pattern illustration or photograph without building complex procedural nodes in Substance Designer, accelerate your creation pipeline with our Free Online Normal Map and PBR Generator — Try Knitted Wool Sweater. You can also generate completely seamless textile patterns for your character hoodies and skirts using our Seamless Texture Generator Online.

VRChat Avatar Texturing Quick Checklist

  • All source textures placed cleanly inside Assets/AvatarName/Textures/.
  • Normal maps explicitly imported with Normal map Texture Type (sRGB disabled).
  • PC textures capped at 2048 resolution; Quest textures capped at 1024 (Good rank compliance).
  • Shader set to .poiyomi/Poiyomi Toon or lilToon with Cull Off for two-sided garments.
  • Minimum lighting brightness set (0.15~0.25) to prevent total darkness in unlit worlds.

Related reading: How to Edit VRChat Avatar Textures Like a Pro · Why Adding a Texture Makes Your VRChat Avatar Invisible · What is a Normal Map? · Roughness Map Guide

Ready to create your own materials?

Turn any image into a production-ready PBR texture in seconds.

Open NormalMap.ai Editor