【《Unity Shader入门精要》 提炼总结】(十五)第十五章·光照系统进阶教程&Unity的渲染路径介绍&前向渲染路径&顶点照明渲染路径&延迟渲染路径

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iceSony/article/details/84887592

本文由@唐三十胖子出品,转载请注明出处。  
文章链接:https://blog.csdn.net/iceSony/article/details/84887592

这篇文章将总结和提炼《Unity Shader入门精要》的第十章“高级纹理”的内容。

通过这篇文章,你可以知道

1)Unity的渲染路径介绍

扫描二维码关注公众号,回复: 4415840 查看本文章

2)前向渲染路径

3)顶点照明渲染路径

4)延迟渲染路径

一.Unity的渲染路径介绍

之前章节用到的是单一平行光(大多数手游就是如此)

但PC实现光照往往更加复杂,处理的数目与种类更多的光源。

Unity的渲染路径

渲染路径:决定光照如何应用到shader中,写在Pass/Tags中的LightMode中

Unity在5.0版本自带三种渲染模式:前向渲染、延迟渲染、顶点照明渲染

但在5.0版本之后顶点照明渲染被抛弃,有了新的延迟渲染机制,但都对旧有代码的兼容

在Unity调整默认渲染路径(事实上在博主用的5.6.5版本这个选项已经被剔除了)

Edit->Porject Settings->Player->Other Settings->Rendering Path中选择项目所需的渲染路径。

这是一种默认的设置方式,我们还可以通过设置摄像机的Rendering Path来修改不同的方式

上面使用的是默认的渲染路径,当你的显卡不支持该渲染路径,Unity会自动使用更低一级的渲染路径。比如当GPU不支持延迟渲染,就会替换为前向渲染。

 

事实上在Shader中这三种渲染路径仍可以细分

除了我们一直用的forwardbase,还有其他类型如下表

接下来我们将一一讲解

二.前向渲染路径:最常见的渲染路径

前向渲染的原理:当进行逐片元的渲染,利用深度缓冲判断当前片元是否可见,如果可见就更新颜色缓冲区的颜色

对于每个逐像素的光源,我们都要进行上述的完整渲染流程。

如果物体处在多个逐像素光源影响区域,那么该物体需要执行多个Pass,每个Pass计算一个逐像素光源的光照结果。

最后在帧缓冲中(每帧结束数据处理的区域)混合得到最终的显示颜色。

为了减少Pass数目,Unity渲染时会限制物体的逐像素光照数目。

前向渲染对光照的处理

分三类处理光照:逐顶点处理、逐像素处理、球谐函数处理

逐顶点处理/SH处理:光源Render Mode设置为Not Important

逐像素处理:场景中最亮的平行光;光源RenderMode设置为Important;逐像素光源数量小于QualitySetting中的逐像素光源数量,那么原本采用逐顶点处理/SH处理的会自动变成逐像素处理

在之后的前向渲染Shader编写中,往往包含两个Pass:一个Pass仅仅执行一次,另一个会根据逐像素光源数目多次调用

内置的光照变量和函数

三.顶点照明渲染路径:性能最高、效果最差

顶点照明渲染原理:通常为一个Pass,计算所有光线照明。

在本质上顶点照明渲染是前向渲染的子集,除了不支持阴影、法线映射、高光映射等

所以在现在的版本这个已经被剔除了= =

四.延迟渲染路径:适用于大量光源

比起前向渲染的颜色与深度缓冲区,还添加一个Geometry缓冲来保存表面信息,包含法线、位置、材质等

原理:两个Pass,第一个Pass计算片元是否可见,可见就存储到G缓冲区

第二个Pass利用缓冲区片元信息,进行光照计算

Unity中的延迟渲染

分为旧版与新版,且不支持抗锯齿,不能处理半透明物体,对显卡有要求。

除去深度缓冲&模板缓冲,默认的G缓冲区包含:

RT0:格式为ARGB32,RGB存储漫反射颜色,A通道没用到

RT1:格式为ARGB32,RGB存储高光反射颜色,A通道存储高光反射的指数

RT2:格式为ARGB2101010,RGB存储法线,A通道没用到

RT3:格式为ARGB32(非HDR),用于存储自发光+lightmap+反射探针

可用的内置变量与函数

 

之后的文章我们将重点讲解Unity最常见的前向渲染(= =手游无光,且不用考虑硬件问题)

 

感谢阅读:)

猜你喜欢

转载自blog.csdn.net/iceSony/article/details/84887592