关于 threejs-materials
threejs-materials 是用于回答 three.js 核心材质问题的 Agent 技能,涵盖 PBR、透明效果和自定义着色器。它帮助区分传统材质与节点着色,并指出配置中常见的问题。
主要功能
- 01按光照模型选择材质
- 02配置材质贴图与色彩空间
- 03处理环境贴图和透明效果
- 04使用 ShaderMaterial 与 RawShaderMaterial
- 05规避性能和渲染问题
适用场景
- 01按光照模型选择 three.js 材质
- 02排查贴图色彩空间或法线问题
- 03处理透明排序与 alpha 行为
- 04判断使用传统材质还是节点着色
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ full-stack-skills/ threejs-skills --skill threejs-materials安装后在 Claude Code 中输入/threejs-materials确认已加载。
附带文件agents/openai.yamlexamples/workflow-pbr-transparent.md
详细介绍
何时使用此技能
当用户提及以下内容时,始终使用此技能:
- 在内置网格材质、贴图槽(albedo、normal、roughness、metalness、ao、emissive)、
envMap之间进行选择 - 透明度排序问题、
alphaTest、depthWrite、混合模式、side/双面渲染 ShaderMaterial/RawShaderMaterial的 uniforms、includes,以及与灯光管线的兼容性- 用于矢量叠加层和粒子的线条、点、精灵材质
重要提示:经典材质与 node-tsl
| 需求 | 技能 |
|---|---|
| 使用贴图的标准 PBR、物理清漆/丝绒效果 | threejs-materials |
TSL 节点、NodeMaterial、面向 WebGPU 的着色、计算式图形 | threejs-node-tsl |
| 将 ShaderMaterial 迁移到 TSL | threejs-node-tsl(概念层面);在切换完成前仍在此处使用 ShaderMaterial |
触发短语包括:
- “MeshStandardMaterial”、“MeshPhysicalMaterial”、“ShaderMaterial”、“transparent”、“alphaTest”
- “PBR”、“物理材质”、“透明”、“自定义着色器”
如何使用此技能
- 选择类:根据光照模型选择
MeshBasic(无光照)、Lambert/Phong(旧版光照)或 Standard/Physical(PBR)。 - 分配贴图,并确保 albedo 与数据贴图的色彩空间设置正确(链接 threejs-textures)。
- 环境:从立方体或等距柱状图设置
envMap;调整metalness/roughness;必要时考虑使用MeshPhysicalMaterial实现透射/IOR。 - 透明度:调整对象顺序,或权衡使用
alphaTest/depthWrite;说明排序的局限性。 - ShaderMaterial:除非有意为之,否则尽量减少重新实现光照的工作;根据对应版本文档,说明所需灯光和
lights: true标志的行为。 - 性能:在多个网格间共享材质;避免每帧克隆材质。
- 蒙皮/变形:在适用时设置
skinning/morphTargets——网格侧的内容见 threejs-objects。
参见 examples/workflow-pbr-transparent.md。
文档索引(官方)
范围
- 范围内: 文档核心 Materials 中列出的非 Node 材质(
*NodeMaterial除外)。 - 范围外: 完整的 Nodes 目录(threejs-node-tsl);composer 中的后处理 pass 材质(threejs-postprocessing)。
常见问题和最佳实践
- 错误的法线贴图
normalMapType或切线空间会破坏光照;请确认几何体包含切线,或使用合适的模式。 - 预乘 alpha 与普通 alpha 不匹配,会导致植被出现边缘光晕。
MeshPhysicalMaterial的transmission需要厚度和良好的环境贴图——结合 threejs-textures/PMREM 使用。- 独有材质过多会影响排序和批处理——尽可能合并。
文档和版本
PBR 和 ShaderMaterial 的行为以 three.js 文档中的 Materials 章节为准。现代版本中,色彩管理和默认 envMap 的处理方式有所变化——颜色异常时,回答材质问题时务必同时参考 threejs-renderers 中的渲染器/输出设置。
Agent 回复检查清单
使用此技能回答时,优先做到以下几点:
- 根据情况链接
MeshStandardMaterial、MeshPhysicalMaterial或ShaderMaterial页面。 - 用户询问“着色器”或“节点”时,明确区分此技能与 threejs-node-tsl。
- 使用 threejs-textures,区分贴图的用途(albedo、roughness、normal),并说明
colorSpace的预期设置。 - 针对排序渲染,指出透明度和
depthWrite之间的权衡。 - 说明
*NodeMaterial类型属于节点技能,而非此技能。
参考资料
- https://threejs.org/docs/#Materials
- https://threejs.org/docs/MeshStandardMaterial.html
- https://threejs.org/docs/MeshPhysicalMaterial.html
- https://threejs.org/docs/ShaderMaterial.html
关键词
英文: meshstandardmaterial、meshphysicalmaterial、shadermaterial、pbr、transparency、envmap、materials、three.js
中文: 材质、PBR、MeshStandardMaterial、物理材质、透明、环境贴图、ShaderMaterial、three.js
评论
支持 Markdown