zt3ff3n 发表于 2021-12-1 13:34

教你Unity灯光烘焙1

又来开坑了,看到群里好像很多人搞不懂unity的灯光烘焙,所以我单开一个系列来讲这些,希望你看完应该能对Unity灯光有系统性的认识。
这篇我先概括讲很多知识点。
也许现在你没法全部看懂,但看完我的整个灯光系列,你就能掌握。
灯光可以分为两大类


[*]直接光源(Direct)如太阳,灯泡,蜡烛等,光源直接照亮物体的部分
[*]间接光源(Indirect)所有其他衍生光,如直接光造成的环境反射,间接光等
两种光源又会产生各自的 漫反射(Diffuse)和镜面反射(Specular)。
于是排列组合一下

[*]DirectDiffuse 亮部
[*]DirectSpecular 高光
[*]IndirectDiffuse 环境间接光
[*]IndirectSpecular 环境反射
再加上Shadow 阴影,这就是组成光影的五个元素。
这点很重要!有助于美术转换思维方式


上面5张图,均为实时光效果。

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

下图是我总结的unity灯光分类


可见,烘焙主要是在间接光和阴影上做文章。
|间接光的作假

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


上图为各种模式的灯光,产生间接光的流程(放大看)
橙色为灯光类型,深蓝色为间接光作假方式,蓝绿色为接受灯光的物体。

[*]BakeGI:将间接漫反射颜色记录成图片(光照贴图),针对静态物体
[*]光照探头:将间接漫反射颜色记录成球谐信息(光照探头),针对动态物体
[*]RealtimeGI:与BakeGI相似,灯光可实时改变颜色方向(本来被弃用,但新版本HDRP又加了回来)


更详细的解释可以看unity官方文章
|阴影的作假

阴影有四种模式: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地址:
当然你也能看看我原来写的文章
如需转载请与作者联系并标注作者名字和原始网址

redhat9i 发表于 2021-12-1 13:36

啥是烘焙啊,兽老师。灯光不都是实时的吗[惊喜]查看图片

zifa2003293 发表于 2021-12-1 13:40

大实时时代来临了吗
瑟瑟发抖

xiangtingsl 发表于 2021-12-1 13:46

刚学的这 容我多看几遍

NoiseFloor 发表于 2021-12-1 13:47

看了两个钟 看懂了 (你让我输的这么彻底 焯)
页: [1]
查看完整版本: 教你Unity灯光烘焙1