其他分享
首页 > 其他分享> > SSAO

SSAO

作者:互联网

SSAO

       也叫环境光遮蔽,那么也就是对环境光的一种处理,尽管空间中存在许多的环境光,但是还是会存在一些阴暗的角落,光线一旦进去,就很难再出来,因此,也难以进入人的眼睛,光线好像被遮蔽了,这便是环境光遮蔽。

 

 

 

采样核心

       SSAO技术可以通过计算一个片段附近有多少片段再观察空间的深度低于当前片段来决定其遮蔽程度,这个遮蔽程度被称为遮蔽因子。那么要获得遮蔽因子可以对周围一篇空间进行采样。采样的信息主要是观察空间下的位置信息。一个采样核心往往是一个半球,通过在半球空间中进行随机撒点后转换到观察空间中从而进行采样。

 

 

       随机点生成的代码:

 

  同时,经过一些随机的旋转,可以减少采样核心的使用数量,同时也可以获得更好的效果,从而模拟均匀取点的情况。这次把这个信息存储在一个纹理当中。

  这样,就得到了一个采样核心,在后面的阶段中,可以从这些纹理中获取这些信息来来进行遮蔽因子的计算。

延迟渲染

       延迟渲染可以将处理到的空间位置、法线等一些信息事先通过渲染计算出来,方便后面的阶段处理。同时,由于对每一个片段的真正渲染和计算推到了最后进行,就不必对每一个片元进行重复渲染。也不用转递大量的数据信息了。在场景单位较多的时候可以起到优化计算量的目的。同时,延迟渲染预处理信息的特性也同时给SSAO带来了方便。这里用了一个帧缓冲来处理延迟渲染所需要的信息。

GBuffer

       前面提到的预处理信息被存储在Gbuffer当中,Gbuffer是自己定义的一个帧缓冲,里面可以存放需要的信息。这里为了SSAO,在这个帧缓冲当中存储了位置、颜色和法线信息。通过一次渲染将这些信息通过不同的纹理输出通道存储到这些预定义的纹理当中。相关代码看起来是这个样子。定义了三个纹理缓冲并将他们绑定到帧缓冲当中。

  接下来的渲染会把位置、法线和光照需要用到的信息存储到这几个缓冲当中。之后,Gbuffer中的内容有这些。

SSAO核心

       下面可以使用上面提供的信息进行SSAO纹理计算,以下是核心代码。

  渲染出来的SSAO贴图会是一个灰度贴图,因此用的时候只需要读取其中的r颜色信息。以下是SSAO贴图。

 

标签:采样,渲染,缓冲,信息,遮蔽,SSAO
来源: https://www.cnblogs.com/LH2000/p/16606970.html