mcpField
T
threejs-materials

threejs-materials

github.com/akillness开发5357 次安装今天更新
代码仓库

关于 threejs-materials

用于选择和调整 Three.js 网格材质的技能,关注渲染意图、性能成本和资源所有权。内容涵盖常见材质类型、PBR 输入、透明度处理与验证。

主要功能

  1. 01按渲染意图选择材质
  2. 02配置 PBR 表面参数
  3. 03处理透明度与渲染顺序
  4. 04管理共享和克隆材质
  5. 05检查外观、变体与资源清理

适用场景

  1. 01为场景表面选择材质
  2. 02排查透明排序或背面显示问题
  3. 03分析后减少材质变体
  4. 04避免克隆材质造成资源泄漏

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/akillness/jeo-skills --skill threejs-materials

安装后在 Claude Code 中输入/threejs-materials确认已加载。

附带文件evals/evals.jsonSKILL.toon

详细介绍

Three.js 材质

此技能适用于网格表面的语义与成本。图像贴图/UV/HDR 资源请使用 threejs-textures,光照和阴影设置请使用 threejs-lighting,自定义 GLSL 请使用 threejs-shaders。

何时使用此技能

  • 为无光照、经典光照、PBR、风格化或自定义工作选择合适的材质类型
  • 配置基础颜色、金属度、粗糙度、法线/AO/自发光贴图以及环境响应
  • 修复透明度排序、背面不可见、编辑意外共享或材质泄漏问题
  • 在分析性能后减少材质变体、着色器复杂度或绘制调用碎片

说明

步骤 1:选择能表达意图的最简单材质
需求默认材质
无光照 / 调试 / 类精灵网格MeshBasicMaterial
低成本经典漫反射场景MeshLambertMaterial
经典高光外观MeshPhongMaterial
常规基于物理的表面MeshStandardMaterial
清漆层、透射、高级 PBRMeshPhysicalMaterial
卡通着色风格MeshToonMaterial
自定义顶点/片元程序通过 threejs-shaders 使用 ShaderMaterial

常规 PBR 工作应从 MeshStandardMaterial 开始,仅在视觉收益足以抵消着色器成本且渲染器支持时,才添加物理特性。

步骤 2:合理设置 PBR 输入
const material = new THREE.MeshStandardMaterial({
  color: 0x9ca3af,
  metalness: 0.65,
  roughness: 0.28,
  map: baseColorTexture,
  normalMap,
  roughnessMap,
  metalnessMap,
  envMapIntensity: 1,
});

基础颜色贴图需要正确配置色彩空间;法线、粗糙度、金属度和 AO 等数据贴图不能采用相同的显示色彩处理方式。关于贴图加载和 UV 通道要求,请参阅 threejs-textures。应在有代表性的光照和环境贴图下评估材质值,而非在没有光照的空场景中评估。

步骤 3:明确处理透明度

仅在确实需要 Alpha 混合时使用 transparent: true。根据已诊断的视觉需求设置 depthWrite、 side、alphaTest 和 renderOrder;随意覆盖渲染顺序可能掩盖底层排序问题。如果能满足所需外观,硬边裁切的树叶/贴花应优先使用 Alpha 测试。

步骤 4:尊重材质所有权

材质通常会被多个对象共享。修改 mesh.material.color 会影响所有使用该材质的对象。对单个对象进行修改前应先克隆,明确管理克隆的生命周期,并在最后一个使用者不再使用它时调用 dispose()。

const uniqueMaterial = sharedMaterial.clone();
mesh.material = uniqueMaterial;
uniqueMaterial.color.set("#3b82f6");
步骤 5:验证外观与成本
  • 测试直射光、环境响应、阴影和中性背景。
  • 测试透明对象彼此之间以及与不透明几何体重叠的情况。
  • 检查某项改动是否产生大量不同的材质/程序变体。
  • 测试替换或克隆材质及其所拥有贴图的清理情况。

示例

金属产品表面

使用 MeshStandardMaterial、经过校准的基础颜色、金属度/粗糙度贴图和 HDR 环境。没有环境的金属物体几乎无物可反射;添加任意点光源无法替代缺失的 IBL 信号。

单个对象的高亮

仅当无法通过 uniform、实例属性、轮廓通道或其他不产生重复的机制实现高亮时,才克隆共享材质。选择状态变化时应还原或释放该材质。

最佳实践

  1. 在调整大量参数前,先根据渲染意图选择材质。
  2. 正确处理纹理色彩空间和 UV 通道规则;错误的贴图解读无法通过猜测粗糙度来修正。
  3. 尽量减少重复几何体中的材质变体。
  4. 在目标设备上测量成本较高的物理/透射特性。
  5. 释放克隆及其专属特性所拥有的纹理,但绝不要过早释放共享资源。

参考

评论

支持 Markdown