Unity 全局光照系统

浅浅学习unity全局光照系统随笔(后续增加)


前言

作者游戏场景时,网络上会说为了节约性能,会将unity场景中静态物体使用烘焙来节约性能。相关组件,static是否勾选,light mode :baked,mixed,realtime,以及在lighting面板中的baked indirect,subtractive,shadowmask。我嘞个逗啊,啥玩意都是,不听不听,王八念经。但是学习不能不刨根问底啊。于是我翻开了unity 官方文档。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Light mode是什么?

请看unity文档给的解释:

  1. 烘焙:从这些光源产生的直接和间接光照被烘焙成光照贴图,这可能是一个耗时的过程。处理这些光源不需要运行时成本,但是将所产生的光照贴图应用到场景中确实需要很小的成本。
  2. 实时:来自这些光源的直接光照和阴影是实时的,因此不会被烘焙成光照贴图。它们的运行成本可能很高,具体取决于场景的复杂性、阴影投射光源的数量、重叠光源的数量等。此外,如果启用实时全局光照,则会在运行时更新间接光照,从而产生性能成本。
  3. 混合:这种混合模式提供烘焙和实时功能(如烘焙间接光照和实时直接光照)的混合。场景中所有混合光源的行为及其性能影响取决于该场景的光照模式
  4. 必须注意的是,只有启用了烘焙全局光照系统时,光源的模式才有意义。如果不使用任何 GI 系统或只使用实时 GI 系统,那么所有烘焙光源和混合光源的行为就好像它们的 Mode 属性设置为 Realtime 一样。

如果不使用全局光照模式,light mode在你的编辑器里,你会发现它们没有什么区别,实际上他们和realtime是一样的效果。

二、全局光照GI

首先布置这样的场景默认带天空盒,为了让我们看得更加明显,就删除我们手动布置光以外的所有光源:

现在画面应该是漆黑一片,接下来设置一个平行光,新建一个光源设置。

好的,那我们就点击烘焙,禁用光源。然后就会在你的场景屏幕里看到一张吴彦祖的脸。

这是为什么呢,待会再说,先看看下这张图

2.light mode

官方文档里的:我们怎么选择一个灯光的模式,他们各有什么优点?再看看这个?想想为什么烘培后黑了?

首先:我们是要给一个固定场景烘培,那么这些东西都是静态的,按照以上的流程图来说 我们的灯光要选择baked或者mixed吧,然后看看是不是我们之前渲染的灯光mode是实时的,表中contribute to Baked GI是禁止的,删去光后啥都没有。再看看我们的物品是不是勾选上了static?。这些检查好了再去试试?如果觉得慢,换成GPU

这就已经烘培好了。

3.Baked Global Illumination

首先说一说lighting mode ,这个选项更改只会作用于你在场景里的设置light mode为MIxed的灯光。刚刚光源使用的是baked ,所以这里的lighting mode 选择哪一个都不会影响。

当我们把光源改为mixed后,再分别看看这三个区别是什么?

ba

选择和配置渲染管线和光照解决方案 - Unity 手册icon-default.png?t=N7T8https://docs.unity.cn/cn/2020.3/Manual/BestPracticeLightingPipelines.html

subtractive:用于静态物体的廉价烘焙光影动态对象的实时阴影
             Lightprobes 可以提供超低分辨率的阴影
             静态对象到动态对象直接照明是烘焙的,因此没有镜面照明
             静态对象需要高纹素密度才能获得好的烘焙光和静态对象的阴影

左边是静态的,右边是动态的,由于动态物体只有直射光,所以暗处就没有细节。baked 给动态物体提供的光照和实时阴影,相比于静态烘焙的物体影子比较浅。具体原因未深究,猜测可能是因为烘焙后,存在动态阴影的部分依旧会映射烘焙后的光照信息。

但是我给红色的材质球是光滑金属的,使用subtractive:烘培出来是却是粗糙质感的,这又是为什么呢?接着再来看问文档:

如果我们需要物体接受高光,就不能使用baked光源,就要使用mixed或者realtime;使用mixed的画subtracttive物体不能接受动态高光,所以就不能显示出来。

baked indirect:

第一幅图是lightmap

可以只有看见indirect 光被烘焙出来,所有物体不论是静态还是动态都有动态阴影和高光。

Shadowmask:
所有静态物体不能有动态阴影,只有动态物体才会生成动态阴影,性能比baked indirect好很多,适合多为静态物体少数几个动态的场景。

实时和混合可以支持同时开启,作者试了一下,没有看出什么差别,于是读了一下文档:

Unity 允许烘焙和实时 GI 系统同时有效,因此可以访问所有光照功能。但是,务必注意,同时启用这两个系统会大大增加运行时的烘焙时间和内存使用量,因为这些系统不依赖相同的数据集。此外,在运行时对间接光照的交互式更新将给 CPU 带来更大的压力,而且在视觉上比较烘焙和实时 GI 系统提供的间接光照时,应该会看到差异,因为它们依赖不同的技术来模拟间接光照,并且通常以明显不同的分辨率运行。

同时使用这两个 GI 系统应仅限于高端平台和/或以可预测的成本对场景进行严格控制的项目。这种方法只应由非常了解所有光照设置的专家用户使用,因为同时管理这两个系统会增加很大的复杂性。所以,对大多数项目来说,选择两个 GI 系统的其中一个通常是更安全的策略。很少推荐同时使用这两个系统!

有没有大佬能详细讲一下这两个东西!!!!!!,以上内容如果有问题和不严谨的地方,希望大家再评论区里指出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值