Unity--复杂光照渲染/渲染路径

渲染方式

  1. 标记Not Important,采用逐顶点或SH球谐。
  2. 场景中最亮的平行光采用逐像素。
  3. 被标记为Import的光采用逐像素。
  4. 如果上述逐像素灯数量小于工程中逐像素灯数量的话,会有更多的灯采用逐像素。
    ForwardBase仅用于一个逐像素的平行光,和所有逐顶点和SH的光。
    ForwardAdd用于其他所有逐像素的光(每个光源一个Pass)。

前向渲染路径

使用深度缓冲区判断一个片元是否可见,如果可见,就更新颜色缓冲区中的颜色值。
Unity中的前向渲染:Base Pass + Additional Pass。Base Pass只调用一次,Additional Pass根据影响该物体的光源数调用多次。
在这里插入图片描述

顶点照明渲染路径

前向渲染路径的子集。所有可以在顶点照明中实现的,前向渲染都可以实现。
一个物体仅渲染一次,并且所有的光照计算都在顶点执行。性能最优,支持的硬件最广。
不支持像素级别的效果,如果阴影、高质量高光等。

延迟渲染路径

使用G-buffer存储我们所关心的表面信息。
两个Pass组成:
几何处理G-Buffer Pass:一个Pass如果深度缓冲区可见,则在G-buffer Pass中存储表面信息。
光照处理Lighting Pass:在另一个Pass中间进行光照计算。
如果游戏中使用了大量的光照,应该使用延迟渲染。
在这里插入图片描述

优点:

  1. 影响一个物体的光源数量是没有限制的。
  2. 每一个光源都是逐像素级别的效果。

缺点:

  1. 不支持半透明效果
  2. 不支持抗锯齿
  3. 内存开销较大
  4. 不支持正交相机

延迟渲染的支持条件:

  1. 显卡必须支持Multiple Render Targets(MRT),多渲染目标(RT0,1,2,3…)
  2. ShaderModel在3.0及以上
  3. 手机平台在OpenGL3.0及以上

LightMode Pass Tags

· Always:默认设置,任何情况下都会渲染
· ForwardBase:前向渲染Bass
· ForwardAdd:前向渲染Addition
· Deferred:延迟渲染
· ShadowCaster:渲染对象的shadowmap或depthTexture

Shadow Map

把摄像机的位置与光源重合,摄像机看不到的位置就是需要显示阴影的区域。
Unity使用LightMode为ShadowCaster的Pass单独计算shadow map,输出阴影映射纹理。如果没有ShadowCaster的Pass,无法接收其他物体的阴影。
Unity使用屏幕控件的阴影映射技术:

  1. 调用LightMode=ShadowCaster的Pass来得到可投射阴影的【光源的阴影映射纹理】和【摄像机的深度纹理】。
  2. 如果摄像机记录的深度大于转换到光源的阴影映射深度,说明该表面是【可见但有阴影】的。

Inspector面板:
Cast Shadows: 加入shadowmap计算
Receive Shadows: 接收来自其他物体的阴影

阴影三剑客

SHADOW_COORDS 阴影纹理坐标变量
TRANSFER_SHADOW 把坐标从模型空间变换到光源空间后存储到SHADOW_COORDS
SHADOW_ATTENUATION 负责使用SHADOW_COORDS对相关的纹理进行采样,得到阴影信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值