教你Unity灯光烘焙1 - 灯光系统梗概

2022-1-22 16:49cgsd 38 0

最近公司项目终于闲下来,重新回来写文章啦,不过还有几个人记得我呢。
我的速度平均两周一篇文章吧,要是看得人多我就加速!评论告诉我你想看什么!
又来开坑了,看到群里好像很多人搞不懂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

鲜花

握手

雷人

路过

鸡蛋

最新评论

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-27 03:03 , Processed in 0.042582 second(s), 18 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.