用途:本技能面向 Three.js 场景中的材质(material)选择与配置,适用于为网格设置外观、加载与使用纹理、编写自定义 GLSL 着色器,以及理解光照与材质的交互。
主要能力:文档按材质类型梳理用途与是否受光照影响,包括 MeshBasicMaterial(无光照、纯色与线框)、MeshLambertMaterial(仅漫反射)、MeshPhongMaterial(高光)、MeshStandardMaterial(PBR 写实)、MeshPhysicalMaterial(高级 PBR,支持清漆、透射、折射、光泽、虹彩、各向异性等)、MeshToonMaterial(卡通分阶着色)、MeshNormalMaterial 与 MeshDepthMaterial(调试)、ShaderMaterial 与 RawShaderMaterial(自定义着色器),以及 PointsMaterial、LineBasicMaterial、LineDashedMaterial 等用于点云与线条的材质。还列出通用属性(可见性、透明、opacity、alphaTest、side、depthTest、depthWrite、混合模式、模板、多边形偏移、dithering、toneMapped),并提供玻璃、车漆、卡通渐变、环境贴图(含 HDR)、材质克隆与运行时修改等示例。
使用方式:以 import * as THREE from "three" 引入,通过 new THREE.MeshStandardMaterial({...}) 等方式创建材质并传入 Mesh。PBR 常用参数为 color、roughness、metalness 与各类贴图;aoMap 需要第二套 UV,示例中通过 geometry.setAttribute("uv2", geometry.attributes.uv) 提供。ShaderMaterial 使用 uniforms、vertexShader、fragmentShader,着色器内置 modelMatrix、modelViewMatrix、projectionMatrix、normalMatrix、cameraPosition 等 uniform 与 position、normal、uv 属性,动画循环中更新 uniform 即可。RawShaderMaterial 不提供内置变量,需自行声明。材质变更时部分情况(如 flatShading、texture、transparent、着色器代码)需设置 needsUpdate。虚线需在 Line 上调用 computeLineDistances()。
适用场景:需要控制网格外观、贴图映射、真实感或卡通风格渲染、调试法线/深度、点云与线条绘制,以及自定义着色器效果。
限制:文档中的性能建议指出应复用材质、尽量避免透明(透明需要排序)、可用 alphaTest 替代透明、按 Basic > Lambert > Phong > Standard > Physical 的顺序选择更简单材质、限制活动灯光数量,并在用完后调用 material.dispose()。linewidth 大于 1 仅在部分系统生效。关于收费、平台与具体版本信息,资料中暂未提供。