渲染路径之forward rendering path

unity相机支持多种渲染路径主要有三种:forward rendering path、deferred rendering path和vertex rendering path
而shader中的lightMode有:
1、Always:不管使用哪种渲染路径,该pass总会被渲染,但不会计算任何光照
2、ForwardBase:该pass会计算环境光、自发光和最重要的平行光(场景中最亮的平行光),和逐顶点的光源和SH光源
3、ForwardAdd:该pass会计算额外的逐像素光源,且每个pass对应一个光源
4、Deferred:
5、ShadowCaster:

相机中的renderingPath和shader中的lightMode对应的关系是:在相机中选择不同的rendering path时,shader中的运行的pass也是对应的,比如在forwardbase中的frag输出红色、deferred中的frag输出黄色,当相机选择forward rendering path时,当前shader对应的物体就是显示红色。

**

Forward渲染

有三种处理光照的方式:逐顶点处理、逐像素处理和SH处理。这三种方式的选择取决于两点:光源的类型(是否是平行光?)光源的渲染模式(是否important)
因此总结了以下的规律供参考
在这里插入图片描述
首先按照光源的重要性(距离物体的远近和光源的强度)排行,如果有光源选取了important则排在前面,选取上述图片中pixel light count中的数目的光源作为逐像素处理,之后最多4个光源按照逐顶点处理,剩下的光源按照SH处理。
在pass中进行光照计算
forwardPass分为两种:
1、ForwardBase
2、ForwardAdd
BasePass中会进行一个逐像素的平行光(最亮的平行光)、所有逐顶点的光源和SH光源的光照计算(可实现的光照效果包括:光照纹理、环境光、自发光和阴影),并且每个BasePass只会执行一次。
AdditionalPass中会进行其他的逐像素光源的光照计算,每个光源都会执行一次AddPass。
值得注意的是:
1、因为BasePass中的个平行光是默认支持阴影的,而AddPass中渲染的光源是默认没有阴影的,因此添加
#pragma multi_compile_fwdadd_fullshadows编译指令来代替
#pragma multi_compile_fwdbase(有了这条编译指令保证光照衰减等光照变量可以被正确赋值)
2、在AddPass中我们需要添加Blend One One指令来开启混合模式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值