技术美术 3.4 延迟渲染管线

延迟渲染管线介绍

介绍内容主要分为三个部分:渲染路径,渲染方式,其他。

渲染路径

渲染路径:决定光照的实现方式,简而言之就是实现关照的流程。

渲染方式

渲染方式主要分为:前向渲染(Forward Rendering)和延迟渲染(Deferred Rendering)
前向渲染和延迟渲染的区别:

前向渲染

前向渲染流程,每个顶点/片元都要执行一次片元着色器代码,这时需要将所有的光照信息都传递到片元着色器当中。虽然大部分情况下的光源都趋于小型化,而其照亮的区域也不大,但即是光源离这个像素所对应的世界坐标很远,计算光照时也会把所有光源考虑进去。
例如,物体受n个光源的影响,那么在每一个片元执行代码时,都必须把这n个光源都传递进片元着色器进行计算。有n个光源,那么计算所需的消耗就是n倍的单光源消耗。
技术美术 3.4 延迟渲染管线_第1张图片
正向渲染有以下的三个规则:

  • 规则一:最亮的几个光源会以逐像素的方式进行渲染
  • 规则二:做多四个光源会以逐顶点进行渲染
  • 规则三:剩下所有的光源会以球面调谐光照进行渲染,这是一种模拟光照
    规则一的补充:
  • 最亮的光一定是像素光照
  • Light的Render Mode是important的一定是像素光照
  • 如果前面的两条加起来像素光照小于Quality Setting里的Pixel Light
    Count(最大像素光照),那么才剩下的光源中找出最亮的那几盏光源,实现为像素光照。
  • 最后剩下的光源则按照规则二和三进行渲染
  • 在base pass里执行一盏像素光,所有的顶点光和球面调谐函数,并进行阴影计算。
  • 其余的像素光每盏一个additional Pass,这些Pass没有阴影计算
  • 场景中看到的阴影,全是base pass中计算出最亮的那盏像素光的阴影,其他的像素光是不计算阴影的。
延迟渲染

延迟渲染主要解决的是大量光照渲染的方案
延迟渲染的实质,是先不要做迭代三角形做光照计算,而是先找出来你能看到的所有像素,再去迭代光照。直接迭代三角形,由于大量三角形你是看不到的,无疑会做到极大地浪费。
延迟渲染是基于屏幕空间的信息进行渲染的,正常的前向渲染流程是先渲染可见的所有图元,再将图元进行计算存储到片元当中进行渲染。
而延迟渲染是先把所有的顶点信息都渲染到了一张基于屏幕的RT中,再将光照统一与G-Buffer中的信息进行渲染然后叠加。·
技术美术 3.4 延迟渲染管线_第2张图片
将渲染拆分为两个Pass。
第一个Pass称为几何处理通路。首先将场景渲染一次,获取到待渲染对象的各种几何信息存储到名为G-buffer的缓冲区中,这些缓冲区在之后会用作更加复杂的光照计算。由于有程度测试,所以最终写入G-buffer中的各个数据都是离摄像机最近的片元的几何属性,这意味着最后G-buffer中的片元必定要进行光照计算。
第二个pass称为光照处理通路。该Pass会遍历所有G-buffer中的位置,颜色,法线等参数,执行一次光照计算。

不同渲染路径的特性

1.后处理方式不同
如果想要中使用一张深度图,在前向渲染中你需要再格外渲染一张深度图,而在延迟渲染中直接拿来使用就可以了。
2.着色计算不同
在前向渲染中可以对多个物体使用不同渲染方式,而延迟渲染由于是将所有信息整合在一起的,只能用一种光照模式进行渲染。如果要更改风格,只能换不同的Pass。
3.抗锯齿不同
延迟渲染对MSAA算法相当不友好。
MSAA是一种将一个像素内的片元分割为多个采样点对图元进行采样,从而得到更为精确的抗锯齿技术。而延迟渲染他已经将图元信息保存在RT中了,无法对一个已经降样过的fragment增加采样点来实现抗锯齿。

观看后的一些感悟

总结来说,延迟渲染就是用一种用空间换计算量的方法。随着硬件的内存和显存越来越大,我们可以接受这种用大量的带宽去换计算量的方式。
延迟渲染需要渲染很多个RT来保存各种各样的属性,比如说Color,Normal,Tangent等等信息。有时对于低带宽来说过于复杂的计算,可以用一部分内存来预处理好所有要用的结果再进行统一的计算。
所以看完整节课之后,我对延迟渲染的理解就是用内存在渲染之前对所需要的属性进行保存,是一种用空间换时间的方法。
而随着计算机内存和显存的不断扩大,我可以理解为什么是视频的最后说延迟渲染正在成为一种越来越主流的技术。因为如果想要实现更好的结果,无疑是需要大量的计算,成几何倍数增长的运算量是现代计算机无法赶上的。但是计算机内存的发展允许我们用内存换计算量,从而实现减少计算量到一个可以接受的地步。

作业:

总结延迟渲染管线优缺点
前向渲染优点:

  • 支持半透明计算
  • 支持使用多个光照Pass
  • 支持自定义光照的计算方式
    前向渲染缺点:
  • 光源数量对计算复杂度消耗影响巨大
  • 访问深度等数据需要额外计算

延迟渲染优点:

  • 大量光照场景优势明显
  • 只渲染可见像素,节省计算量
  • 对后处理支持良好
  • 用更少的shader
    延迟渲染缺点:
  • 对MSAA支持不友好
  • 透明物体渲染存在问题
  • 占用大量的显存带宽

延迟渲染管线如何优化

  • 及时清理延迟渲染中的RT图
  • 对多个RT图采用压缩算法节省采样次数
  • 避免大量的overcall和顶点量
  • 采用连续的内存空间保存RT而不是选择采用随机空间
补充部分:

延迟渲染管线和前向渲染是比较通俗易懂的一种思想。但是都有着各自的优缺点,结合各自的优缺点,又有了许多新的算法。

延迟光照(Light Pre-Pass/Deferred Lighting)

传统延迟渲染是将所有光照的计算信息存储到Buffer当中,最终再通过许多屏幕后处理对屏幕进行计算。
延迟光照是在延迟渲染上改进的一种技术,延迟光照在第一个Pass中只计算存储了Z-Buffer和Normal Buffer,其余的放在第二个Pass中进行计算。
本质思想是对使用频率较高的信息做预处理。

Forward+
Forward+是一种分块的算法,应用场景是场景中拥有大量点光源,但是每个光源仅仅影响场景中的一部分像素。
在这种应用场景下有一种算法就是查找场景中每个光源对多少个块(Tile)产生了影响。在对每个光源进行计算时,仅仅对这个光源所影响的块进行计算。就能避免对整个屏幕进行计算。
Forward+必须要执行的一步就是先用pre-pass计算出z-buffer。有了z-buffer之后就能根据屏幕像素和z-buffer对摄像机的视锥体进行分割。
分割之后要怎么处理就可以具体项目具体分析。

分簇渲染之后单独开一章。

你可能感兴趣的:(百人计划,技术美术,算法,计算机视觉)