substance-3d-texturing
Comprehensive skill for Adobe Substance 3D Painter texturing and material creation workflow. Use this skill when creating PBR materials, exporting textures for web/game engines, optimizing 3D assets for real-time rendering, or automating texture workflows. Triggers on tasks involving Substance 3D Pa
By freshtechbro · 1,898 installs
npx skills add freshtechbro/claudedesignskills --skill substance-3d-texturing
Source repository · Upstream listing
Substance 3D Texturing
Overview
Master PBR (Physically Based Rendering) texture creation and export workflows for web and real time engines. This skill covers Substance 3D Painter workflows from material creation through web optimized texture export, with Python automation for batch processing and integration with WebGL/WebGPU engines.
Key capabilities:
PBR material authoring (metallic/roughness workflow)
Web optimized texture export (glTF, Three.js, Babylon.js)
Python API automation for batch export
Texture compression and optimization for real time rendering
Core Concepts
PBR Workflow
Substance 3D Painter uses the metallic/roughness PBR workflow with these core channels:
Base Texture Maps:
baseColor (Albedo) RGB diffuse color, no lighting information
normal RGB normal map (tangent space)
metallic Grayscale metalness (0 = dielectric, 1 = metal)
roughness Grayscale surface roughness (0 = smooth/glossy, 1 = rough/matte)
Additional Maps:
ambientOcclusion (AO) Grayscale cavity/occlusion
height Grayscale displacement/height
emissive RGB self illumination
opacity Grayscale transparency
Export Presets
Substance 3D Painter includes built in export presets for common engines:
PBR Metallic Roughness Standard glTF/WebGL format
Unity HDRP/URP Unity pipelines
Unreal Engine UE4/UE5 format
Arnold (AiStandard) Renderer specific
For web engines, PBR Metallic Roughness is the universal standard.
Texture Resolution
Common resolutions for web (powers of 2):
512×512 Low detail props, mobile
1024×1024 Standard props, characters
2048×2048 Hero assets, close ups
4096×4096 Showcase quality (use sparingly)
Web optimization rule: Start at 1024×1024, scale up only when texture detail is visible.
Common Patterns
1. Basic Web Export (Three.js/Babylon.js)
Manual export workflow for single texture set:
Steps:
1. File → Export Textures
2. Select preset: "PBR Metallic Roughness"
3. Configure export:
Output directory: Choose target folder
File format: PNG (8 bit) for web
Padding: "Infinite" (prevents seams)
Resolution: 1024×1024 (adjust per asset)
4. Export
Result files:
Three.js usage:
2. Batch Export with Python API
Automate export for multiple texture sets:
3. Resolution Override per Asset
Export different resolutions for different assets (e.g., hero vs. background):
4. Custom Export Preset (Separate Channels)
Create custom preset to export metallic and roughness as separate files:
5. Mobile Optimized Export
Aggressive compression for mobile WebGL:
Post export: Use tools like pngquant or tinypng for further compression.
6. glTF/GLB Integration
Export textures for glTF 2.0 format:
7. Event Driven Export Plugin
Auto export on save using Python plugin:
Integration Patterns
Three.js + React Three Fiber
Use exported textures in R3F:
See react three fiber skill for advanced R3F material workflows.
Babylon.js PBR Materials
See babylonjs engine skill for advanced PBR workflows.
GLTF Export Pipeline
1. Export textures from Substance (as above)
2. Export model from Blender with glTF exporter
3. Reference Substance textures in .gltf JSON
4. Use gltf pipeline for Draco compression:
See blender web pipeline skill for complete 3D asset pipeline.
Performance Optimization
Texture Size Budget
Desktop WebGL: ~100 150MB total texture memory
Mobile WebGL: ~30 50MB total texture memory
Budget per asset:
Background/props: 512×512 (1MB per texture × 4 maps = 4MB)
Standard assets: 1024×1024 (4MB per texture × 4 maps = 16MB)
Hero assets: 2048×2048 (16MB per texture × 4 maps = 64MB)
Compression Strategies
1. JPEG for baseColor (70 80% quality) 10× smaller than PNG
2. PNG 8 for data maps (normal, metallic, roughness) lossless required
3. Basis Universal ( .basis ) GPU texture compression (90% smaller)
4. Texture atlasing Combine multiple assets into single texture
Channel Packing
Pack grayscale maps into RGB channels to reduce texture count:
Packed ORM (Occlusion Roughness Metallic):
Red: Ambient Occlusion
Green: Roughness
Blue: Metallic
Export in Substance:
Mipmaps
Always enable mipmaps in engine for textures viewed at distance:
Common Pitfalls
1. Wrong Color Space for BaseColor
Problem: BaseColor exported in linear space looks washed out.
Solution: Substance exports baseColor in sRGB by default (correct). Ensure engine uses sRGB:
2. Normal Map Baking Issues
Problem: Normal maps show inverted or incorrect shading.
Solution:
Verify tangent space normal format (DirectX vs. OpenGL Y flip)
Substance uses OpenGL (Y+), same as glTF standard
If using DirectX engine, flip green channel in export
3. Metallic/Roughness Channel Order
Problem: Metallic/roughness texture has swapped channels.
Solution: Default Substance export:
Blue channel = Metallic
Green channel = Roughness
Matches glTF 2.0 specification
4. Padding Artifacts at UV Seams
Problem: Black or colored lines appear at UV seams.
Solution: Set padding algorithm to "infinite" in export settings:
5. Oversized Textures for Web
Problem: 4K textures cause long load times and memory issues on web.
Solution:
Default to 1024×1024 for web
Use 2048×2048 only for hero assets viewed close up
Implement LOD system with multiple resolution sets
6. Missing AO Map in Engine
Problem: AO map exported but not visible in engine.
Solution:
Three.js: Requires second UV channel ( geometry.attributes.uv2 )
Babylon.js: Set material.useAmbientOcclusionFromMetallicTextureRed = true
Alternative: Bake AO into baseColor in Substance
Resources
See bundled resources for complete workflows:
references/python api reference.md Complete Substance Painter Python API
references/export presets.md Built in and custom export preset catalog
references/pbr channel guide.md Deep dive into PBR texture channels
scripts/batch export.py Batch export all texture sets
scripts/web optimizer.py Post process textures for web (resize, compress)
scripts/generate export preset.py Create custom export preset JSON
assets/export templates/ Pre configured export presets for Three.js, Babylon.js, Unity
Related Skills
blender web pipeline Complete 3D model → texture → web pipeline
threejs webgl Loading and using PBR textures in Three.js
react three fiber R3F material workflows with Substance textures
babylonjs engine Babylon.js PBR material system integration