本期给大家分享面试Unity主程时经常被问的延时渲染管线的问题。记得点赞,收藏加 关注。
先来看Unity渲染管线,它包含内置渲染管线与自定义的可编程渲染管线。
Unity内置渲染管线包含了 向前渲染管线与延时渲染管线;
Unity可编程渲染管线允许用户自定义渲染管线。
Unity也通过Package的方式实现了高清渲染管线与轻量级渲染管线。
在讲解延时渲染管线之前,先讲解向前渲染管线处理多光源的机制
多光源下绘制3D物体,每个光源绘制一次3D物体,再叠加上一次绘制的颜色。
优点: 可以支持任意多的光源,并且渲染的效果比较好。
缺点: 就是每个光源都绘制一次物体, 导致多光源实时光照的性能开销极大。
为了提升多光源实时光照的性能,提出了延迟渲染管线的策略。
就是先按照普通的流程的把物体绘制出来,先不考虑光照计算,这样屏幕上就得到了一个个的“像素点”。把这些像素点的位置,法线等需要光照计算的数据存放到g-buffer。
最后针对每个光源,对每个”像素点”根据位置,法线等信息做光照计算。
优点:多光源实时光照计算性能好;
缺点: 是g-buffer需要的内存会比较大;
渲染的效果不如向前渲染那么好;
渲染半透明的物体无法使用光照;
不能使用基于硬件实现的多层抗锯齿。