用途
Three.js Materials 是一份围绕 Three.js 材质系统的参考技能,用于在 Three.js 场景中为网格(mesh)设置外观、处理纹理、编写自定义着色器。当需要给几何体赋予颜色、光照响应、反射、透明、卡通描边等视觉效果时,可依据本资料选择合适材质并配置属性。
主要能力
资料以“材质类型总览表”开篇,列出各材质的适用场景与是否受光照影响:
- MeshBasicMaterial:不受光照,纯色、线框,速度快、始终可见。
- MeshLambertMaterial:仅漫反射光照,适合哑光表面,性能较好。
- MeshPhongMaterial:带高光,适合塑料般的光泽表面。
- MeshStandardMaterial:基于物理的渲染(PBR),推荐用于真实感材质。
- MeshPhysicalMaterial:在 Standard 基础上扩展,支持清漆、透射、折射、光泽、虹彩、各向异性等高级特性。
- MeshToonMaterial:卡通/赛璐璐着色。
- MeshNormalMaterial:可视化法线,用于调试。
- MeshDepthMaterial:渲染深度值,用于阴影贴图、景深效果。
- ShaderMaterial:自定义 GLSL 着色器,带 Three.js 内置 uniform。
- RawShaderMaterial:完全控制,无内置 uniform/attribute。
此外还覆盖 PointsMaterial(点云)、LineBasicMaterial 与 LineDashedMaterial(实线与虚线)。
使用方式
资料给出各材质的构造代码示例,例如 PBR 材质的快速开始:
import * as THREE from "three";
const material = new THREE.MeshStandardMaterial({
color: 0x00ff00,
roughness: 0.5,
metalness: 0.5,
});
const mesh = new THREE.Mesh(geometry, material);
每种材质均列出常用属性,如颜色、贴图(map、alphaMap、envMap)、自发光(emissive、emissiveMap)、法线贴图、凹凸贴图、置换贴图、粗糙度/金属度贴图、环境光遮蔽(aoMap,需第二套 UV 通道)等。MeshPhysicalMaterial 部分还给出玻璃材质与车漆材质的示例写法。
ShaderMaterial 部分展示 uniforms、vertexShader、fragmentShader 的写法,并说明内置 uniform(modelMatrix、modelViewMatrix、projectionMatrix、viewMatrix、normalMatrix、cameraPosition)与 attribute(position、normal、uv)由 Three.js 自动提供;RawShaderMaterial 则需自行声明。
资料还包含:通用材质属性(visible、transparent、opacity、alphaTest、side、depthTest、depthWrite、blending、stencil、polygonOffset、dithering、toneMapped)、多材质与几何体分组、环境贴图(CubeTextureLoader、RGBELoader 加载 HDR)、材质克隆与运行时修改(何时需要 needsUpdate)、性能建议(复用材质、避免透明、用 alphaTest 替代透明、选择更简单的材质、限制灯光数量、材质池与 dispose)。
适用场景
- 为 Three.js 网格选择并配置材质,实现真实感或风格化渲染。
- 处理颜色贴图、法线贴图、粗糙度/金属度贴图、环境贴图等纹理。
- 编写自定义 GLSL 着色器实现特殊效果。
- 制作玻璃、车漆、卡通、点云、虚线等特定视觉表现。
- 调试法线、深度,或优化材质相关性能。
限制
资料未说明该技能的安装方式、运行环境要求、收费情况或平台支持范围,这些信息暂未提供。部分属性存在使用前提,例如 aoMap 需要第二套 UV 通道、虚线需调用 computeLineDistances、linewidth 大于 1 仅在部分系统生效,使用时需按资料说明处理。