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

MeshPhongMaterial

先看结论

高光网格材质。按 Blinn-Phong 模型逐像素计算光照,能表现塑料、 抛光石材、水面这类有明确高光的表面。

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

构造参数

参数默认说明
color0xffffff漫反射颜色
specular0x111111高光颜色
shininess30高光锐度,越大越集中
emissive0x000000自发光颜色,不受光照影响
emissiveIntensity1自发光强度
mapnull漫反射贴图
specularMapnull逐像素高光强度,水面、湿地面常用
normalMapnull法线贴图,需要切线数据
normalScale(1, 1)法线强度
bumpMapnull凹凸贴图,不改变几何
bumpScale1凹凸幅度
displacementMapnull位移贴图,真正移动顶点,需要足够细分
displacementScale1位移幅度
flatShadingfalsetrue 时按面片法线着色,得到低多边形风格
sideFrontSide面朝向
transparent / opacityfalse / 1透明度

示例:湿地面

const material = new THREE.MeshPhongMaterial({
  color: 0x9aa3ad,
  map: colorMap,
  normalMap: normalMap,
  normalScale: new THREE.Vector2(0.8, 0.8),
  specular: 0x8899aa,
  shininess: 90,
  specularMap: wetnessMap,   // 白色区域高光更强
  emissive: 0x000000
});

const ground = new THREE.Mesh(planeGeometry, material);

shininess 与行为的对应

值观感
5 到 15高光范围大,像磨砂或橡胶
30 左右默认值,一般的塑料与涂料
80 以上高光集中,像抛光金属与水膜

shininess 只影响高光的集中程度,亮度由 specular 与光源强度共同决定。高光看不到时, 先把 specular 调亮,再考虑提高 shininess。

与 MeshStandardMaterial 的选择

Phong 的计算更轻,参数直观,适合大量中小物体; Standard 基于物理,金属度与粗糙度的表现更接近真实, 但需要更完整的光照与环境贴图才能出效果。 已有旧项目、移动端低配场景,Phong 仍是性价比很高的选择。

法线贴图需要切线。几何体没有 tangent 属性时, three.js 会用屏幕导数近似,视觉上可能出现噪点。 大量使用法线贴图时,用 BufferGeometryUtils.computeTangents 提前算好切线。

引用本文

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