前向渲染路径细节

前向渲染路径细节

此页描述前向渲染路径的细节。

前向渲染路径对每个物体渲染一个或者多个pass,具体情况由影响该物体的灯光决定。根据灯光的设置和亮度,前向渲染会区别对待。

实现细节

在前向渲染的情况下,影响物体的最亮的灯光中一部分以逐像素光照模式渲染。然后最多4个点光以逐顶点的方式渲染。其余的灯光以球谐(Spherical Harmonics,SH)方式计算,计算速度很快但是仅仅是一个近似。一个灯光是否是逐像素灯光依赖以下条件:

  • RenderMode设置为NotImportant的灯光作为逐顶点或者球谐处理。
  • 最亮的那个方向光总是逐像素灯光。
  • RenderMode设置为Important的灯光总是逐像素的。
  • 如果以上符合逐像素灯光的灯的数量少于Pixel Light Count(见 Quality Setting),那么将按照灯光亮度递减的顺序取排在前面的灯光作为逐像素灯光。

对于每个物体的渲染流程如下:

  • Base pass处理1个逐像素的方向光,以及所有的逐顶点/球谐灯光。
  • 剩余的逐像素灯光在Add pass里处理。每个灯光一次pass。

举例来说,如果某个物体受到许多灯光影响(下图的一个圆圈受到了从A到H的灯光的影响):

在这里插入图片描述

假设从A到H的灯光都拥有相同的颜色和强度,并且都设置了Auto的RenderMode,那么对于这个物体这些灯光就会按照从A到H的顺序排序。那些最亮的灯光将会以逐像素光照模式渲染(A到D),然后最多4个灯光以逐顶点光照模式渲染(D到G),最后剩下的灯光以球谐光照模式渲染(G到H)。

在这里插入图片描述

请注意,上面的分组有重叠。例如最后一个逐像素灯光融入到逐顶点光照模式里,因此在物体和灯光移动时可以减少光照突变的现象。

Base pass

Base pass使用1个逐像素的方向灯光和所有的球谐/顶点灯光来渲染物体。这个pass也添加灯光贴图、环境光和自发光光照。在此pass里渲染的方向灯光可以拥有阴影。请注意使用灯光贴图的物体不会获得球谐灯光的照明。

请注意,如果着色器里使用了“OnlyDirectional”pass标记,那么ForwardBase pass将只渲染主方向灯光、环境光/灯光探针以及灯光贴图(球谐和定点灯光不包括在此pass里)。

Additional pass

对于影响此物体的每一个额外的逐像素灯光,都将渲染一次Additional pass。在这个pass里默认不含阴影(因此前向渲染支持一个含阴影的方向灯光),除非使用了 multi_compile_fwdadd_fullshadows 变体。

性能因素

球谐灯光的渲染速度非常快。它们在CPU端只有微小的开销,并且实际上能在GPU上无代价地应用(这里的意思是Base pass总是计算球谐光照。但是因为球谐灯光的工作原理,无论有多少个球谐灯光,计算开销都是一样的。)。

球谐灯光的缺点如下:

  • 它们在物体的顶点上进行计算,而不是像素级别。这意味着它们不支持灯光剪影,也不支持法线贴图。
  • 球谐光照是非常低频的。你无法使用球谐灯光获得锐利的灯光过渡。它们只能影响漫反射光照(对于镜面高光来说,球谐光太过低频)。
  • 球谐光照不是局部性的。靠近物体表面的点状或者聚光球谐灯光看起来不对。

总的来说,球谐灯光对于小的动态物体已经足够好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值