ImageBasedLighting(IBL)是一种在三维场景中实现高质量光照的技术,它使用高动态范围(HDR)环境纹理作为场景的光源。
IBL 可以模拟出各种光照条件和环境下的表面反射。CesiumJS也在其中集成了IBL技术,以实现高质量的渲染。
本文将介绍如何使用CesiumJS中的IBL技术,以获取高品质的渲染。
在使用 CesiumJS 中的 IBL 技术前,需要先获得一个高动态范围(HDR)的环境纹理。有许多HDR纹理可以从网络上获取,或使用PhotoScan等软件生成。图像必须至少 16 位深,并且必须包含至少两个通道(RGB)。
如果您没有HDR纹理,您可以使用以下HDR素材:
在本文中,我们将使用Honda Proving Center提供的HDR纹理。
在 CesiumJS 中,使用Cesium.CubeMap.fromSpecularTexture
方法从 HDR 环境贴图中创建环境贴图。
var HdrUrl = "path/to/hdrimage.hdr";
var envMap = Cesium.CubeMap.fromSpecularTexture(scene.context, HdrUrl);
使用 CesiumJS 中的setLightingOptions
方法来配置IBL着色器。接受一个对象参数,可使用以下属性:
show
: 布尔类型。指示是否启用环境光的开关。ambientOcclusionTexture
:创建小的阴影并添加更多细节。specularTexture
:指定从纹理中获取反射的外观。brdfLutUrl
:BRDF Look Up Table 链接。imageryLayer
: 映像层。// 初始化IBL
viewer.scene.globe.enableLighting = true;
viewer.scene.highDynamicRange = true;
var oldOptions = viewer.scene.globe.lightingOptions;
var options = {
show: true,
ambientOcclusionTexture: "path/to/image.png",
specularTexture: envMap,
brdfLutUrl: "path/to/brdfLut.png",
imageryLayer: scene.imageryLayers.get(0),
};
viewer.scene.globe.setLightingOptions(options);
CesiumJS中使用ImageBasedLighting技术的步骤很简单,只需要先获得一个高动态范围HDR环境纹理,再配置IBL着色器即可。IBL技术让CesiumJS的场景渲染变得更加真实。