# 环境光遮蔽

在现实中,光线会以任意方向散射,它的强度是会一直改变的,所以间接被照到的那部分场景也应该有变化的强度,而不是一成不变的环境光。其中一种间接光照的模拟叫做环境光遮蔽(Ambient Occlusion),它的原理是通过将褶皱、孔洞和非常靠近的墙面变暗的方法近似模拟出间接光照。这些区域很大程度上是被周围的几何体遮蔽的,光线会很难流失,所以这些地方看起来会更暗一些。站起来看一看你房间的拐角或者是褶皱,是不是这些地方会看起来有一点暗?

下面这幅图展示了在使用和不使用SSAO时场景的不同。特别注意对比褶皱部分,你会发现(环境)光被遮蔽了许多:

avatar

尽管这不是一个非常明显的效果,启用SSAO的图像确实给我们更真实的感觉,这些小的遮蔽细节给整个场景带来了更强的深度感。

提示

SSAO提供了两种实现方式 分别是 SSAO和SSAO2
他们的区别 只是在内部实现算法不同
SSAO2性能要高于SSAO 但是使用复杂度更高

# 初始化

使用SSAO类添加环境光遮蔽效果。

import { 
    
    KernelSize,
    Postprocessing, 
    SSAO, 
    SSAOOUTPUT

} from '@tx3d/postprocessing';

// 创建后处理类
const postprocessing = new Postprocessing( engine );

// 添加后处理效果
const effect = postprocessing.addEffect( SSAO, { kernelRadius:16 } );
1
2
3
4
5
6
7
8
9
10
11
12
13
14

提示

SSAO初始化参数,详见SSAOParams

# 属性

🌏 output 输出模式

effect.output = SSAOOUTPUT.Default;
1

🌏 kernelRadius 采样数量

effect.kernelRadius = 16;
1

🌏 minDistance 深度最小阈值 避免深度相差太小的影响

effect.minDistance = 0.005;
1

🌏 maxDistance 深度最大阈值 避免深度相差太大的影响

effect.maxDistance = 0.1;
1
Last Updated: 3/10/2023, 1:05:22 PM