介绍
在Three.js中,HDR(高动态范围)渲染是一种渲染技术,其目的是提供更广泛的亮度范围和更准确的颜色表示,以更好地模拟真实世界的光照情况
-
更广泛的亮度范围: HDR允许场景中的亮度范围更广,可以包括非常明亮和非常暗的区域。传统的渲染技术可能在亮度极端值上失真,导致细节丢失或颜色变淡。HDR可以捕捉并呈现这些极端的亮度值,使图像更真实。
-
更准确的颜色表示: HDR使用浮点数格式来表示颜色,而不是常规的8位或16位整数。这使得它能够表示更多的颜色细节,尤其是在光照变化较大的情况下。这对于模拟光照、反射和折射等光学现象非常重要。
-
逼真的光照效果: HDR有助于实现逼真的光照效果,特别是在模拟光源的强烈辐射、高光和镜面反射时。这使得渲染的场景更接近于真实世界中的观察体验。
举个栗子:
这里添加了一个环境HDR,创建了一个立方体,材质粗糙度0,金属度1,可以清晰的反射出HDR的环境贴图。
代码实现
import * as THREE from 'three';
import { RGBELoader } from 'three/examples/jsm/Addons.js';
// 主要代码
const rgbeLoader = new RGBELoader();
rgbeLoader.load(
'/path/你的hdr文件.hdr',
(texture) => {
const pmremGenerator = new THREE.PMREMGenerator(this.renderer);
pmremGenerator.compileEquirectangularShader();
const envMap = pmremGenerator.fromEquirectangular(texture).texture;
// 设备为背景(也可以用其他的的场景背景)
scene.background = envMap;
// 设为场景中所有物理材质的环境贴图
scene.environment = envMap;
texture.dispose();
pmremGenerator.dispose();
},
undefined,
(error) => {
console.error('Error loading HDR texture', error);
},
);
可以用到的地址
- Three 在线编辑器 调整参数和效果很方便
- HRD下载地址:hdri-haven 、 Poly Haven