Three.js 实战:使用 PBR 贴图打造真实地面材质

在 Three.js 中,我们可以通过 MeshStandardMaterial 材质配合多张贴图来实现真实的地面效果。这种方式模拟了物理世界中光照与表面材质的复杂交互,常用于构建高质量场景,如数字孪生、建筑可视化、游戏等。

本文将以一个完整示例为基础,详细讲解每一类贴图的作用、用法和注意事项。

什么是 PBR 材质贴图?

PBR(Physically Based Rendering)物理渲染模型支持多种纹理贴图,每种贴图都在模拟真实世界中的一个属性:

贴图类型 Three.js 属性名 作用说明
颜色贴图 map 表面基础颜色(必备)
环境遮蔽贴图 aoMap 模拟局部阴影区域(如缝隙)
粗糙度贴图 roughnessMap 控制表面的粗糙程度(影响高光模糊)
法线贴图 normalMap 模拟表面细节凹凸而不改变几何形状
位移贴图 displacementMap 根据灰度值真实改变网格的顶点高度

加载五种贴图创建地面

javascript 复制代码
// 灯光设置
const ambientLight = new THREE.AmbientLight(0xffffff, 0.3); // 环境光
const directionLight = new THREE.DirectionalLight(0xffffff, 0.5); // 平行光
directionLight.position.set(3, 3, 3);
scene.add(ambientLight, directionLight);

// 纹理加载器
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load('infinity-10537028.jpg'); // 示例用一张图

// 创建地面
const planeGeometry = new THREE.PlaneGeometry(10, 10, 100, 100); // 位移贴图需要较多顶点
const planeMaterial = new THREE.MeshStandardMaterial({
  map: texture,              // 基础颜色贴图
  aoMap: texture,            // 环境遮蔽贴图
  roughnessMap: texture,     // 粗糙度贴图
  normalMap: texture,        // 法线贴图
  displacementMap: texture,  // 位移贴图
  displacementScale: 0.5     // 位移高度控制
});

const plane = new THREE.Mesh(planeGeometry, planeMaterial);

// 贴图生效关键步骤:设置第二套 UV 给 aoMap 使用
plane.geometry.setAttribute('uv2', new THREE.BufferAttribute(plane.geometry.attributes.uv.array, 2));

// 地面旋转使其水平
plane.rotation.x = -Math.PI / 2;
scene.add(plane);

📌 注意事项

1. aoMap 环境遮蔽贴图需要第二套 UV

Three.js 默认只创建一套 UV 坐标(uv),而 aoMap 使用的是 uv2。必须手动复制一份:

javascript 复制代码
plane.geometry.setAttribute('uv2', new THREE.BufferAttribute(plane.geometry.attributes.uv.array, 2));

2. displacementMap 位移贴图要求几何体有更多细分(segments)

否则视觉上无效果,因为顶点太少无法形变:

复制代码
javascript 复制代码
new THREE.PlaneGeometry(10, 10, 100, 100); // 加细分

3. 所有贴图建议使用专属图(颜色、法线、AO、粗糙、位移各自一张),格式推荐 .jpg 或 .png,尺寸为 2 的幂次(如 512、1024)以便兼容性更好。

可免费获取完整 PBR 贴图集的网站包括:

搜索关键词如 asphalt, tile, metal, wood 即可获取对应材质的五张贴图。

属性 控制什么
map 颜色
roughnessMap 粗糙程度(影响高光)
normalMap 表面细节(比如划痕)
metalnessMap 是否是金属表面
aoMap 缝隙暗影(更立体)
displacementMap 真实变形(起伏)
相关推荐
魔士于安4 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
小柯南敲键盘11 天前
跨马翻译:AI批量图片翻译与视频字幕翻译工具,助力跨境电商高效运营
贴图
小柯南敲键盘11 天前
跨马翻译AI图片翻译工具,批量处理图片视频字幕,助力跨境电商高效运营
贴图
来让爷抱一个13 天前
2026 纹理一致性实战:贴图不许花脸,百智云精灵图把材质契约写进素材包
人工智能·机器学习·材质·贴图
三棵树园艺15 天前
工程方案|高速服务区B1级阻燃软装全案设计(文旅融合+合规落地+商业增效)
创业创新·材质
tianxuanjg18 天前
工业/协作机器人研发采购指南:如何适配新品迭代的CNC加工合作
人工智能·经验分享·机器人·无人机·材质
m0_6145235519 天前
故障排查:移动物体表面贴图为什么会漂移?从稳定纹理到连续帧验收
网络·人工智能·贴图
m0_6145235519 天前
透明材质抠图怎么判断合格?用黑白灰背景检查边缘和孔洞
材质
三棵树园艺21 天前
商用大空间软装技术方案|2026悬浮仿真景观行业数据、场景适配与标准化落地复盘
创业创新·材质
Rina GO22 天前
PS怎么把文字贴在圆柱体上?2种实用方法教程附不规则物体贴图
人工智能·贴图·ps插件·不规则物体贴图·文字贴图·ai贴图