返回
Three.js PBR 材质大师班:深入了解金属度、粗糙度和环境贴图
前端
2023-10-07 17:14:27
揭开 PBR 材质的面纱
物理渲染(PBR)是一种先进的着色技术,旨在通过模拟真实世界的光照行为来创建逼真的 3D 图形。PBR 材质利用一系列参数来定义材质的外观和响应光照的方式,从而实现令人惊叹的真实感。
金属度:闪亮还是哑光
金属度属性决定了材质对光的反射方式。范围从 0.0(非金属)到 1.0(金属)。较高的金属度值会导致更多镜面反射,产生光滑闪亮的表面,如抛光金属。较低的金属度值产生更多的漫反射,产生哑光效果,如木材或石材。
粗糙度:光滑还是凹凸不平
粗糙度属性控制材质表面的光滑度。范围从 0.0(光滑)到 1.0(粗糙)。较低的粗糙度值产生光滑的表面,导致清晰的光泽反射。较高的粗糙度值产生粗糙的表面,产生更分散的光线反射。
环境贴图:捕捉周围环境
环境贴图允许材质从周围环境中反射光线,从而创建逼真的间接光照效果。这些贴图通常是 HDR(高动态范围)图像,捕获了 360 度的环境。材质表面会反射环境贴图中的信息,模拟真实世界中光线的交互作用。
金属度和粗糙度相互作用
金属度和粗糙度属性相互作用,创造出广泛的材质外观。
- 金属光泽: 高金属度和低粗糙度会导致强烈的镜面反射,类似于抛光金属。
- 金属丝状: 高金属度和高粗糙度产生更分散的光泽反射,类似于拉丝金属。
- 非金属光滑: 低金属度和低粗糙度产生光滑的非金属表面,如釉面陶瓷。
- 非金属粗糙: 低金属度和高粗糙度导致更漫反射的非金属表面,如砂纸。
环境贴图的使用
环境贴图可以通过以下方式增强 PBR 材质:
- 逼真间接光照: 反射环境贴图中的光线,创建逼真的间接光照,模仿真实世界中光线的反弹。
- 材质多样性: 赋予材质以环境影响,通过从周围环境反射颜色和光线来创建不同的外观。
- 动态照明: 环境贴图可以随着场景中光照的变化而更新,从而提供动态的间接光照效果。
掌握金属度、粗糙度和环境贴图
通过了解和运用金属度、粗糙度和环境贴图,您可以提升 Three.js 渲染的真实感和沉浸感。这些属性赋予您控制材质外观的强大力量,从闪亮的金属到粗糙的石头,应有尽有。
在掌握了这些基本概念之后,您可以将这些知识应用于各种场景中,从逼真的 3D 模型到引人入胜的虚拟环境。Three.js 为您提供了探索 PBR 材质的无限可能性,解锁您数字创作的全部潜力。
附录:代码示例
以下代码示例展示了如何在 Three.js 中使用金属度、粗糙度和环境贴图:
// 加载金属度贴图和粗糙度贴图
const metalnessMap = new THREE.TextureLoader().load('metalness.jpg');
const roughnessMap = new THREE.TextureLoader().load('roughness.jpg');
// 加载环境贴图
const envMap = new THREE.CubeTextureLoader().load([
'px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png'
]);
// 创建材质
const material = new THREE.MeshStandardMaterial({
metalness: 0.5, // 范围 0.0(非金属)到 1.0(金属)
roughness: 0.3, // 范围 0.0(光滑)到 1.0(粗糙)
metalnessMap: metalnessMap,
roughnessMap: roughnessMap,
envMap: envMap
});
// 应用材质到模型
const geometry = new THREE.BoxGeometry();
const mesh = new THREE.Mesh(geometry, material);
// 添加到场景
scene.add(mesh);
通过调整金属度、粗糙度和环境贴图的值,您可以定制材质的外观,创建各种逼真的效果。