threejs-materials
Classic three.js materials (non-Node): MeshStandardMaterial, MeshPhysicalMaterial, Phong/Lambert/Toon/Basic, Line/Points/Sprite materials, MeshMatcapMaterial, MeshNormalMaterial, depth/distance materials, ShaderMaterial and RawShaderMaterial. Use when tuning PBR maps, transparency, depth write, skinning flags, or writing GLSL in ShaderMaterial; for TSL/NodeMaterial/WebGPU shader graphs use threejs-node-tsl instead.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/threejs-materials/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How threejs-materials Compares
| Feature / Agent | threejs-materials | Standard Approach |
|---|---|---|
| Platform Support | multi | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Classic three.js materials (non-Node): MeshStandardMaterial, MeshPhysicalMaterial, Phong/Lambert/Toon/Basic, Line/Points/Sprite materials, MeshMatcapMaterial, MeshNormalMaterial, depth/distance materials, ShaderMaterial and RawShaderMaterial. Use when tuning PBR maps, transparency, depth write, skinning flags, or writing GLSL in ShaderMaterial; for TSL/NodeMaterial/WebGPU shader graphs use threejs-node-tsl instead.
Which AI agents support this skill?
This skill is compatible with multi.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
## When to use this skill
**ALWAYS use this skill when the user mentions:**
- Choosing among built-in mesh materials, map slots (albedo, normal, roughness, metalness, ao, emissive), `envMap`
- Transparency sorting issues, `alphaTest`, `depthWrite`, blending modes, side/double-sided rendering
- `ShaderMaterial` / `RawShaderMaterial` uniforms, includes, and compatibility with lights pipeline
- Line, points, sprite materials for vector overlays and particles
**IMPORTANT: classic materials vs node-tsl**
| Need | Skill |
|------|--------|
| Standard PBR with maps, physical clearcoat/sheen | **threejs-materials** |
| TSL nodes, `NodeMaterial`, WebGPU-first shading, compute-style graph | **threejs-node-tsl** |
| Migrating ShaderMaterial → TSL | **threejs-node-tsl** (conceptual), keep ShaderMaterial here until cutover |
**Trigger phrases include:**
- "MeshStandardMaterial", "MeshPhysicalMaterial", "ShaderMaterial", "transparent", "alphaTest"
- "PBR", "物理材质", "透明", "自定义着色器"
## How to use this skill
1. **Select class** by lighting model: `MeshBasic` (unlit), Lambert/Phong (legacy lit), Standard/Physical (PBR).
2. **Assign maps** and ensure **color space** correctness for albedo vs data maps (link threejs-textures).
3. **Environment**: set `envMap` from cube or equirect; align `metalness`/`roughness`; consider `MeshPhysicalMaterial` for transmission/IOR when needed.
4. **Transparency**: order objects or use `alphaTest`/`depthWrite` trade-offs; mention sorting limitations.
5. **ShaderMaterial**: minimize re-lit work unless intentional; document required lights and `lights: true` flag behavior per version docs.
6. **Performance**: share materials across meshes; avoid cloning per frame.
7. **Skinning/morph**: set `skinning`/`morphTargets` where applicable—mesh side in **threejs-objects**.
### Example: Transparency with alphaTest vs depthWrite
```javascript
// Option A: alphaTest — hard cutoff, no sorting issues
const matA = new THREE.MeshStandardMaterial({
map: texture, alphaMap: alphaTexture,
alphaTest: 0.5, transparent: true
});
// Option B: depthWrite false — soft transparency, needs manual sorting
const matB = new THREE.MeshStandardMaterial({
map: texture, transparent: true, opacity: 0.6,
depthWrite: false // prevents depth-fighting but requires back-to-front sorting
});
```
See [examples/workflow-pbr-transparent.md](examples/workflow-pbr-transparent.md).
## Doc map (official)
| Docs section | Representative links |
|--------------|----------------------|
| Materials (core) | https://threejs.org/docs/Material.html |
| PBR | https://threejs.org/docs/MeshStandardMaterial.html |
| Physical | https://threejs.org/docs/MeshPhysicalMaterial.html |
| Custom GLSL | https://threejs.org/docs/ShaderMaterial.html |
## Scope
- **In scope:** Non-Node materials listed under Core **Materials** in docs (except `*NodeMaterial`).
- **Out of scope:** Full Nodes catalog (threejs-node-tsl); post pass materials inside composer (threejs-postprocessing).
## Common pitfalls and best practices
- Wrong normal map `normalMapType` or tangent space breaks lighting; verify geometry has tangents or use appropriate mode.
- Premultiplied alpha vs straight alpha mismatches cause fringe halos on foliage.
- `MeshPhysicalMaterial` `transmission` needs thickness and good env—combine with **threejs-textures** / PMREM.
- Too many unique materials hurts sorting and batching—merge where possible.
## Documentation and version
PBR and `ShaderMaterial` behavior track the [Materials](https://threejs.org/docs/#Materials) section in [three.js docs](https://threejs.org/docs/). Color management and default `envMap` handling changed in modern releases—always pair material answers with renderer/output settings from **threejs-renderers** when colors look wrong.
## Agent response checklist
When answering under this skill, prefer responses that:
1. Link `MeshStandardMaterial`, `MeshPhysicalMaterial`, or `ShaderMaterial` pages as appropriate.
2. Force a clear choice vs **threejs-node-tsl** when the user asks for “shaders” or “nodes”.
3. Separate map **roles** (albedo vs roughness vs normal) and `colorSpace` expectations with **threejs-textures**.
4. Call out transparency and `depthWrite` trade-offs for sorted rendering.
5. Note that `*NodeMaterial` types belong to the node skill, not this one.
## References
- https://threejs.org/docs/#Materials
- https://threejs.org/docs/MeshStandardMaterial.html
- https://threejs.org/docs/MeshPhysicalMaterial.html
- https://threejs.org/docs/ShaderMaterial.html
## Keywords
**English:** meshstandardmaterial, meshphysicalmaterial, shadermaterial, pbr, transparency, envmap, materials, three.js
**中文:** 材质、PBR、MeshStandardMaterial、物理材质、透明、环境贴图、ShaderMaterial、three.js