Screen Space Directional Occlusion

1.  Screen Space Directional Occlusion

Screen Space Directional Occlusion (SSDO) 是对 Screen Space Ambient Occlusion (SSAO) 的一个改良,其中心思想非常简单,即在对每个 fragment 做半球采样的时候同时累积各个采样方向的 irradiance。假设在半球采样空间中,取均匀分布的N个采样点,每个采样点所占有的 solid angle 2PI / N,那么对于任意采样点 s_i ,其贡献的 irradiance 为:

其中L是来自s_i 所在方向的 radianceV visibility function,按照SSAO的方式来获得; cos(theta)fragment的法线与s_i采样方向的夹角余弦。

将每个采样点贡献的 irradiance 累加起来,乘上漫反射系数 Cdiff 再除以 PI,即得到当前fragment radiance.

2.  Indirect Bounces

SSDO中,那些被遮挡(即 visibility function 的值为0)的采样点是不参与 irradiance的累积的。如果将这些采样点也考虑进来,可以近似的模拟 Indirect Bounces,得到漂亮的 Color Bleeding效果。比如若某采样点s_j,被p点所遮挡,那么根据下面的公式算出p 对当前 fragment贡献的 irradiance,并进行累积即可。

其中 Lp p 点的 radiance, V 的意义同上,后面的一长串类似于 radiosity 中的 form factor.

3.  Implementation

下面提供一个很囧的实现。虽然效果不是很理想,但大体上的特征应该还是体现出来了。因为所使用的参数并没有采用正确的物理量纲,结果在实现中不得已添加了很多丑陋的Scaling 系数,看来以后还是不能偷懒啊。

1.       Variance Shadow Map (VSM)

 

2.       VSM + SSAO

 

 

3.       VSM + SSDO

 

 

4.       VSM + SSDO + First indirect bounce

 

 

RM Project: http://files.cnblogs.com/atyuwen/SSDO.rar

 

增加GPU Pro中的ssdo实现:http://files.cnblogs.com/atyuwen/gpu_pro_ssdo.7z

 

posted @ 2010-03-31 22:33 atyuwen 阅读(...) 评论(...) 编辑 收藏