Skip to content

PBR材质介绍

PBR 材质,全称是 Physically Based Rendering(基于物理的渲染) 材质,是一种更加真实模拟光照与材质交互的渲染方式。它广泛用于现代 3D 引擎(如 Three.js、Unity、Unreal)中,以提升图像的真实感。上述常用材质中的MeshStandardMaterial MeshPhysicalMaterial属于PBR材质。

1、核心理念

PBR 不是某种具体的材质,而是一种渲染方法论,它基于物理原理模拟光的行为,让材质在不同光照环境下具有一致且真实的外观。

2、常见属性

PBR 材质通常使用以下几种贴图或参数:

属性含义说明
Albedo / Base Color材质的基础颜色,不包含阴影、光照或高光。
Metallic(金属度)控制表面是否为金属,非金属为 0,纯金属为 1。
Roughness(粗糙度)控制表面光滑或粗糙程度,0 是非常光滑(有清晰高光),1 是完全粗糙(无高光)。
Normal Map模拟表面细节纹理(如凹凸),不改变几何形状。
AO(Ambient Occlusion)环境光遮蔽模拟角落等区域的阴影,增加空间感。
Height / Displacement提供表面凹凸的实际位移效果(可选,用于高级效果)。

3、属性示例

(1)roughness(粗糙度)从0-1的变化,图中从左到右的值依次为:0, 0.25, 0.5, 0.75, 1.0

image-20250803222014352

javascript
for (let i = 0; i < 5; i++) {
    const roughness = i / 4; // 0, 0.25, 0.5, 0.75, 1.0

    const material = new THREE.MeshStandardMaterial({
      color: 0x00ff00, // 绿色
      roughness: roughness,
      metalness: 0.0, // 非金属
    });

    const mesh = new THREE.Mesh(sphereGeometry, material);
    mesh.castShadow = true;
    mesh.position.set(i * 3 - 6, 2, 6);
    scene.add(mesh);
  }

(2)metalness(金属度)从0-1的变化,图中从左到右的值依次为:0, 0.25, 0.5, 0.75, 1.0

image-20250803222433927

javascript
for (let i = 0; i < 5; i++) {
    const metalness = i / 4; // 0, 0.25, 0.5, 0.75, 1.0

    const material = new THREE.MeshStandardMaterial({
      color: 0xff6600, // 橙色
      roughness: 0.1, // 保持较低粗糙度以突出金属效果
      metalness: metalness,
    });

    const mesh = new THREE.Mesh(sphereGeometry, material);
    mesh.position.set(i * 3 - 6, 2, 2);
    mesh.castShadow = true;
    scene.add(mesh);
  }