SuperAPI AI 工具集

threejs-materials

设计与创作

查看项目

更新于 10-16 06:00

技能介绍

用途

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 仅在部分系统生效,使用时需按资料说明处理。