【Shader笔记9】更复杂的光照-四种渲染路径

渲染路径

  1. Unity5.0版本之前,有3中渲染路径:
  • 前向渲染路径 (Forward Rendering Path)
  • 延迟渲染路径 (Deferred Rendering Path)
  • 顶点照明渲染路径 (Vertex Lit Rendering Path)
  1. 设置整个项目的渲染路径:Edit -> Project Srtting -> Player -> Other Setting -> Rendering Path 中选择项目所需的渲染路径
  2. 使用多个渲染路径,可以让摄像机覆盖Project Setting中的设置
    在这里插入图片描述
  3. 若当前显卡并不支持所选择的渲染路径,Unity会自动使用更低一级的渲染路径,比如:若一个GPU不支持延迟渲染,则会使用前向渲染
  4. LightMode标签支持的渲染路径设置选项
    在这里插入图片描述
  5. 使用了渲染路径,则使用Unity提供的内置光照变量来访问这些属性,不然一些光照变量可能不会被正确赋值

前向渲染

  1. 原理
    渲染该对象的渲染图元,计算两个缓冲区的信息:颜色缓冲区和深度缓冲区。
    利用深度缓冲确定一个片元是否可见,若可见就更新颜色缓冲区中的颜色值。
  2. 前向渲染路径有3中处理光照(即照亮物体)的方式:逐顶点处理、逐像素处理、球谐函数(SH)处理
  3. 处理方式取决于类型和渲染模式:
  • 类型:平行光以及其他类型的光源
    在这里插入图片描述
  • 渲染模式:该光源是否是重要的
    在这里插入图片描述
  1. 在前向渲染中,当我们渲染一个物体时,Unity会根据场景中各个光源的设置以及这些光源对物体的影响程度(例如,距离该物体的远近、光源强度等)对这些光源进行一个重要度排序。
    其中,一定数目的光源会按逐像素的方式处理,然后最多有4个光源按逐顶点的方式处理,剩下的光源可以按SH方式处理。

Unity 使用的判断规则如下:

  • 场景中最亮的平行光总是按逐像素处理的。
  • 渲染模式被设置成Not Important的光源,会按逐顶点或者SH处理。
  • 如果根据以上规则得到的逐像素光源数量小于Quality Setting 中的逐像素光源数量(Pixel Light Count),会有更多的光源以逐像素的方式进行渲染。
  1. 前向渲染可以使用的内置光照变量(LightMode为ForwardBase或ForwardAdd)
    在这里插入图片描述
  2. 前向渲染可以使用的内置光照函数
    在这里插入图片描述

顶点照明渲染

  1. 对硬件配置要求最少,运算性能最高,效果最差

  2. 不支持逐像素才能得到的效果,比如阴影,法线映射,高精度的高光反射

  3. 只是使用了逐顶点的方式计算光照,是前向渲染路径的一个子集,在顶点照明渲染路径实现的功能都可以在前向渲染路径中完成

  4. 渲染了顶点照明渲染路径,Unity只会填充那些逐顶点相关的光源变量,不可以使用一些逐像素光照变量

  5. 顶点照明渲染路径通常在一个Pass中就可以完成对物体的渲染

  6. 顶点照明渲染路径中可使用的内置变量
    在这里插入图片描述
    PS:
    1.一个Pass最多可以访问到8个逐顶点光源,若影响该物体的光源数目小于8,那么数组中剩下的光源颜色会设置为黑色
    2.一些变量也可以在前向渲染中使用,例如unity_LightColor,不过这些变量数组的维度和数值在不同渲染路径中的值是不同的

  7. 顶点照明渲染路径中可使用的内置函数
    在这里插入图片描述

延迟渲染路径

  1. 当场景中包含大量的实时光源时,前向渲染的性能会激素下降,重叠区域内每个物体要执行多个Pass来计算不同的光源对物体的光照结果,最后还要在颜色缓存中将结果混合起来得到最终的光照,很多计算实际上是重复的
  2. 延迟渲染原理:

主要包含两个Pass

  • 第一个Pass不进行任何光照计算,通过深度缓冲技术计算,将可见片元的相关信息(漫反射颜色、高光反射颜色、平滑度、法线、自发光和深度等信息)渲染到屏幕空间的G缓冲区中,对于每个物体来说,这个Pass仅执行一次

  • 第二个Pass用于计算真正的光照模型,利用G缓冲区的各个片元信息(表面法线、视角方向、漫反射系数等)进行真正的光照计算,将最终的光照颜色存储到帧缓冲中

  1. 延迟渲染使用Pass数目通常就是两个,跟场景中包含的光源数目是没有关系的

  2. 如果游戏中使用了大量的实时光照,使用前向渲染会造成性能瓶颈的情况下,那么可能希望选择延迟渲染路径,但这种路径需要一定的硬件支持

  3. 延迟渲染路径中每个光源都可以按逐像素的方式处理

  4. 缺点

  • 不支持真正的抗锯齿功能
  • 不能处理半透明物体
  • 对显卡有一定要求。如果要使用延迟渲染的话,显卡必须支持MRT、Shader Mode 3.0及以上、深度渲染纹理以及双面的模板缓冲。
  1. 默认的G缓冲区,包含了以下几个渲染纹理(Render Texture,RT)。
  • RT0:格式是ARGB32,RGB通道用于存储漫反射颜色额,A通道没有被使用。
  • RT1:格式是ARGB32,RGB通道用于存储高光反射颜色,A通道同于用于存储高光反射的指数部分。
  • RT2:格式是ARGB2101010,RGB通道用于存储法线,A通道没有被使用。
  • RT3:格式是ARGB32,用于存储自发光+lightmap+反射探针
  • 深度缓冲和模板缓冲。
  1. 在第二个Pass中计算光照时,默认情况下仅可以使用Unity内置的Standard光照明模型
  2. 延迟渲染路径中可以使用的内置变量和函数
    这些变量都可以在UnityDeferredLiabrary.cg.inc文件中找到它们的声明
    在这里插入图片描述

总结

四种渲染路径(前向渲染路径、延迟渲染路径、遗留的延迟渲染路径、顶点照明渲染路径)需要根据游戏发布的目标平台来选择渲染路径,如果当前显卡不支持所选渲染路径,那么Unity会自动使用比其低一级的渲染路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值