用途:处理 three.js 经典(非 Node)材质相关问题,包括内置网格材质选择、贴图槽位(albedo、normal、roughness、metalness、ao、emissive)、envMap、透明排序、alphaTest、depthWrite、混合模式、单双面渲染,以及 ShaderMaterial/RawShaderMaterial 的 uniforms、includes 与光照管线兼容性;也覆盖 Line、Points、Sprite 材质用于矢量叠加与粒子。
主要能力:按光照模型选类——MeshBasic(无光照)、Lambert/Phong(旧式光照)、Standard/Physical(PBR);分配贴图并区分 albedo 与数据贴图的色彩空间;从 cube 或 equirect 设置 envMap,对齐 metalness/roughness,必要时用 MeshPhysicalMaterial 处理 transmission/IOR;处理透明排序与 alphaTest/depthWrite 取舍;编写 ShaderMaterial 并说明所需灯光与 lights: true 行为;性能上建议跨网格共享材质、避免逐帧克隆。
使用方式:先按光照模型确定材质类,再配置贴图与色彩空间(配合 threejs-textures),设置环境贴图与 PBR 参数,最后处理透明与着色器。示例见 examples/workflow-pbr-transparent.md。
适用场景:需要标准 PBR 贴图、物理 clearcoat/sheen、自定义 GLSL、粒子与矢量叠加时使用。
限制:范围仅限文档 Core Materials 中的非 Node 材质(不含 *NodeMaterial);完整 Nodes 目录属 threejs-node-tsl,composer 内后处理材质属 threejs-postprocessing。常见陷阱包括法线贴图 normalMapType 或切线空间错误、预乘与直通 alpha 不匹配导致边缘光晕、transmission 需厚度与良好环境、材质过多影响排序与批处理。PBR 与 ShaderMaterial 行为随 three.js 文档版本变化,颜色异常时需结合 threejs-renderers 的渲染器/输出设置。官方参考:https://threejs.org/docs/#Materials、https://threejs.org/docs/MeshStandardMaterial.html、https://threejs.org/docs/MeshPhysicalMaterial.html、https://threejs.org/docs/ShaderMaterial.html。