mcpField
T
threejs-materials

threejs-materials

github.com/full-stack-skills开发10404 次安装4 周前更新
代码仓库

关于 threejs-materials

threejs-materials 是用于回答 three.js 核心材质问题的 Agent 技能,涵盖 PBR、透明效果和自定义着色器。它帮助区分传统材质与节点着色,并指出配置中常见的问题。

主要功能

  1. 01按光照模型选择材质
  2. 02配置材质贴图与色彩空间
  3. 03处理环境贴图和透明效果
  4. 04使用 ShaderMaterial 与 RawShaderMaterial
  5. 05规避性能和渲染问题

适用场景

  1. 01按光照模型选择 three.js 材质
  2. 02排查贴图色彩空间或法线问题
  3. 03处理透明排序与 alpha 行为
  4. 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 迁移到 TSLthreejs-node-tsl(概念层面);在切换完成前仍在此处使用 ShaderMaterial

触发短语包括:

  • “MeshStandardMaterial”、“MeshPhysicalMaterial”、“ShaderMaterial”、“transparent”、“alphaTest”
  • “PBR”、“物理材质”、“透明”、“自定义着色器”

如何使用此技能

  1. 选择类:根据光照模型选择 MeshBasic(无光照)、Lambert/Phong(旧版光照)或 Standard/Physical(PBR)。
  2. 分配贴图,并确保 albedo 与数据贴图的色彩空间设置正确(链接 threejs-textures)。
  3. 环境:从立方体或等距柱状图设置 envMap;调整 metalness/roughness;必要时考虑使用 MeshPhysicalMaterial 实现透射/IOR。
  4. 透明度:调整对象顺序,或权衡使用 alphaTest/depthWrite;说明排序的局限性。
  5. ShaderMaterial:除非有意为之,否则尽量减少重新实现光照的工作;根据对应版本文档,说明所需灯光和 lights: true 标志的行为。
  6. 性能:在多个网格间共享材质;避免每帧克隆材质。
  7. 蒙皮/变形:在适用时设置 skinning/morphTargets——网格侧的内容见 threejs-objects。

参见 examples/workflow-pbr-transparent.md。

文档索引(官方)

文档章节代表性链接
材质(核心)https://threejs.org/docs/Material.html
PBRhttps://threejs.org/docs/MeshStandardMaterial.html
Physicalhttps://threejs.org/docs/MeshPhysicalMaterial.html
自定义 GLSLhttps://threejs.org/docs/ShaderMaterial.html

范围

  • 范围内: 文档核心 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 回复检查清单

使用此技能回答时,优先做到以下几点:

  1. 根据情况链接 MeshStandardMaterial、MeshPhysicalMaterial 或 ShaderMaterial 页面。
  2. 用户询问“着色器”或“节点”时,明确区分此技能与 threejs-node-tsl。
  3. 使用 threejs-textures,区分贴图的用途(albedo、roughness、normal),并说明 colorSpace 的预期设置。
  4. 针对排序渲染,指出透明度和 depthWrite 之间的权衡。
  5. 说明 *NodeMaterial 类型属于节点技能,而非此技能。

参考资料

关键词

英文: meshstandardmaterial、meshphysicalmaterial、shadermaterial、pbr、transparency、envmap、materials、three.js

中文: 材质、PBR、MeshStandardMaterial、物理材质、透明、环境贴图、ShaderMaterial、three.js

评论

支持 Markdown