经纬志
首页 / three.js / API 文档

MeshStandardMaterial

先看结论

基于物理的金属度—粗糙度材质,是三维场景里表现真实表面的默认选择。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-28 · 引用本文
new THREE.MeshStandardMaterial(parameters) → MeshStandardMaterial

构造参数是一个配置对象,对象里的键会直接赋给同名属性: new THREE.MeshStandardMaterial({ color: 0x99aabb, roughness: 0.7 })。 未传入的属性取默认值。

常用参数

参数默认说明
color0xffffff基础色,十六进制或 Color 实例
roughness1.0粗糙度,0 为镜面,1 为完全漫反射
metalness0.0金属度,0 为绝缘体,1 为纯金属
emissive0x000000自发光颜色,不受光照影响
emissiveIntensity1自发光强度倍数
mapnull颜色贴图,乘到 color 上
normalMapnull法线贴图,需要几何体带切线或由导数推算
roughnessMapnull粗糙度贴图,取绿通道
metalnessMapnull金属度贴图,取蓝通道
envMapIntensity1环境贴图影响的强弱
flatShadingfalse关闭顶点法线插值,呈现块面效果
vertexColorsfalse开启后读取几何体的 color 属性
wireframefalse只画三角面边线
sideTHREE.FrontSide渲染面,可选 BackSide、DoubleSide
transparentfalse开启透明混合,需配合 opacity
opacity1.0不透明度,仅在 transparent 为 true 时生效

成员

成员说明
normalScaleVector2,默认 (1, 1),控制法线贴图的强度
aoMapIntensity默认 1,环境光遮蔽贴图的影响强度
displacementScale默认 1,置换贴图的位移倍率
displacementBias默认 0,置换的基准偏移
alphaTest默认 0,低于该 alpha 的片元直接丢弃
depthWrite默认 true,关闭后不写深度,透明物体排序时要小心
fog默认 true,是否受场景雾影响
onBeforeCompile回调,可向内置着色器注入代码

方法

方法说明
clone()复制一份材质,贴图引用共享
copy(source)把另一份材质的属性覆盖到自身
dispose()释放 GPU 侧程序与 uniform,移除物体后仍需显式调用
needsUpdate属性而非方法:增删贴图槽位或改 vertexColors 后置为 true

基本用法

const material = new THREE.MeshStandardMaterial({
  color: 0x8fa6c0,
  roughness: 0.62,
  metalness: 0.15,
  side: THREE.DoubleSide
});

const mesh = new THREE.Mesh(
  new THREE.BoxGeometry(4, 4, 4),
  material
);
scene.add(mesh);

改颜色这类标量或颜色属性直接赋值即可生效; 增删贴图(例如把 map 从 null 换成一张纹理)必须写 material.needsUpdate = true,否则着色器不会重编译。

粗糙度与金属度怎么取

这两个参数决定高光的形状与强度。metalness 为 0 时高光颜色来自光源, 为 1 时高光颜色取自材质本身。混凝土、木材、地形这类表面应保持金属度为 0, 粗糙度在 0.7 到 1 之间;金属栏杆、幕墙玻璃则把金属度提到 0.6 以上,粗糙度压到 0.3 以下。

金属度大于 0 的材质几乎只靠环境贴图提供颜色。没有 scene.environment 也没有 envMap 时,金属部分会变成一片暗色, 这是场景「发黑」的最常见原因。

顶点色与批量着色

// 几何体带 color 属性时,材质要显式开启
material.vertexColors = true;
material.needsUpdate = true;

// 关闭光照相关计算,适合纯色示意
const flat = new THREE.MeshBasicMaterial({ vertexColors: true });

顶点色与 color 是相乘关系。想用顶点色表达高程色带时, 应把 material.color 保持白色,否则颜色会被整体压暗。

这是渲染材质,不处理坐标。MeshStandardMaterial 只描述表面如何被光照,不关心数据是经纬度还是米制坐标。 三维场景里的位置、比例与投影都由几何体和相机决定,材质只负责外观。

引用本文

经纬志(2026)。《MeshStandardMaterial》。https://www.jingweizhi.com/three/api/mesh-standard-material.html(访问日期 2026-11-03)。