又来开坑了,看到群里好像很多人搞不懂unity的灯光烘焙,所以我单开一个系列来讲这些,希望你看完应该能对Unity灯光有系统性的认识。
这篇我先概括讲很多知识点。
也许现在你没法全部看懂,但看完我的整个灯光系列,你就能掌握。
灯光可以分为两大类
- 直接光源(Direct)如太阳,灯泡,蜡烛等,光源直接照亮物体的部分
- 间接光源(Indirect)所有其他衍生光,如直接光造成的环境反射,间接光等
两种光源又会产生各自的 漫反射(Diffuse)和镜面反射(Specular)。
于是排列组合一下
- DirectDiffuse 亮部
- DirectSpecular 高光
- IndirectDiffuse 环境间接光
- IndirectSpecular 环境反射
再加上Shadow 阴影,这就是组成光影的五个元素。
这点很重要!有助于美术转换思维方式

上面5张图,均为实时光效果。
- 实时的优点:可随意修改模型位置,随视角变化实时改变效果。(如高光,阴影位置)
- 实时的缺点:需要更精准的效果,实时计算多个灯光效果叠加,付出的代价较大。(如点光源的实时阴影)
所以需要“作假”,选择项目里不需要“实时变化”的部分,提前渲成离线内容,即烘焙。
注:高光会根据视角变化,没法烘焙,亮部烘焙成光照贴图会导致高光消失。
|unity灯光分类
下图是我总结的unity灯光分类

可见,烘焙主要是在间接光和阴影上做文章。
|间接光的作假
理想的一盏灯,即要对静态物体生成光照贴图,又要照亮动态物体。
早期unity灯光只有bake和realtime两种模式,想实现上述目的,必须创建两盏灯,极其不方便,于是应需增加了Mix灯光。
而这个混合灯光与烘焙模式之间的关系,是入门光照系统中,最大的一道坎。

上图为各种模式的灯光,产生间接光的流程(放大看)
橙色为灯光类型,深蓝色为间接光作假方式,蓝绿色为接受灯光的物体。
- BakeGI:将间接漫反射颜色记录成图片(光照贴图),针对静态物体
- 光照探头:将间接漫反射颜色记录成球谐信息(光照探头),针对动态物体
- RealtimeGI:与BakeGI相似,灯光可实时改变颜色方向(本来被弃用,但新版本HDRP又加了回来)

更详细的解释可以看unity官方文章
https://unity.cn/projects/progressive-lightmapper unity.cn
|阴影的作假
阴影有四种模式:Realtime,Bake,Shadowmask,Distance Shadowmak
同一个模型的Realtime和Bake效果

- 可以看到Realtime下,灯光会在模型表面产生高光。
- 而Bake模式烘焙成贴图,省性能,能设置阴影软硬。但无法产生高光。
那有没有办法全部获得所有优点?
Shadowmask

把模型移开,地面的阴影依然存在,可见是烘焙阴影。但直接光依然是实时,所以有高光点。

Distance Shadowmask
回到Project Settings。Shadow Distance指的是,实时阴影在距离摄像机多远处消失。距离越远,阴影的精度会越低。

假设远处有一栋房子,在阳光下参数投影。在阴影边界处,无法避免出现下图现象

这时候,如果烘焙Distance Shadowmask,则可以用极低分辨率的mask来补全远处阴影。下图地面大小10m*10m,shadowmask贴图像素只有 64 * 64

下面是我的artstation地址:
https://www.artstation.com/luteli
当然你也能看看我原来写的文章
https://www.zhihu.com/people/lute-li/posts
如需转载请与作者联系并标注作者名字和原始网址
本文深入讲解Unity中的灯光系统,包括直接光源与间接光源的区别、漫反射与镜面反射的概念、实时与烘焙效果的优缺点对比,以及如何通过混合灯光模式实现最佳光影效果。

被折叠的 条评论
为什么被折叠?



