unity 烘焙 光照贴图 以及一些灯光的相关问题(一)

在做游戏场景的时候,由于一般场景大部分的物体都是静止不动的(static),如果这些物体使用实时光照的话,会有很大的性能开销,比如物体的阴影。但是由于很多情况下,场景中大部分物体的位置不会在游戏运行的时候改变,对应的阴影也不会改变。光照环境不改变的话(例如不会存在白天黑夜的切换)场景的展现效果也不会改变。因此针对这样的情况,我们会使用光照贴图(Lightmap)的技术,事先烘焙(bake)好效果,节省性能的消耗。

注:文章中有些字段的名称可能在不同的Unity版本中不一样,大家自己拓展了~

首先我们简单的搭建一个场景(如图),方便测试效果。场景里Scene内的物体勾选为static,胶囊体People为动态物体,然后有一个白色的光照。为了防止天空盒的影响,我们将Lighting设置中的环境光全部设置为黑色(Window->Rendering->Lighting Settings)。

 

Unity GI(global illumination 全局光照),有Realtime GI和Baked GI两种(如上图Lighting的设置中)。当我们将场景的物体勾选为静态物体的时候会发现对应的Mesh Renderer中,会自动配置上Lightmap的相关设置(Lighting设置中勾选了Auto Generate ,否则要手动烘焙一下)

选择上RealtimeGI的话会生成对应的Realtime Lightmap,会根据场景的灯光实时更新,选择上BakedGI的话会生成对应的Baked Lightmap,只有在烘焙的时候才会根据设置好的灯光更新(勾选了自动生成的话,每次灯光或静态物体改变都会重新烘焙)

Unity中光源的光照模式(Light组件的Mode属性)有三种,Realtime,Mixed和Baked。在不同的GI情况下,不同模式光源会产生不同的效果,我们可以在上面的测试场景中新增baked光源和mixed光源进行测试:

Realtime GI 和 Baked GI 都不勾选(静态物体无lightmap)

Realtime实时渲染时:静态物体和动态物体都会计算该光源
Mixed无法选择该模式
Baked无法选择该模式

 

只勾选Realtime GI(静态物体有 realtime lightmap)

Realtime

烘焙时:静态物体的realtime lightmap会计算接受到该光源的间接光

实时渲染时:静态和动态物体都会计算该光源

Mixed无法选择该模式
Baked无法选择该模式

我们会发现,场景和灯光都不变的情况下,勾选了Realtime GI,静态物体小方块的几个面比之前变得更白,底部还会出现一些白色的阴影。我们观察生成的realtime lightmap(双击详情)可以发现,图片的左上部分代表了两个正方形各自的六个面左下大面积的部分代表了平面Plane。而那些白色的部分就是realtime光源的间接光信息,平面贴近小方块的地方,光源折射会从平面折射到小方块的面上,也会从小方块的面上折射到平面上,形成间接光(光的折射是GI最重要的一部分bounces)。而远离小方块的地区没有间接光的接受,所以lightmap中显示为黑色。实时渲染的时候会计算lightmap信息和realtime光源信息,所以造成了更白的现象。

只勾选 Baked GI (静态物体有 baked lightmap)

Realtime

烘焙时:静态物体的baked lightmap不会计算该光源

实时渲染时:静态和动态物体都会计算该光源

Mixed

烘焙时:静态物体的baked lightmap会计算接受到该光源的间接光信息

实时渲染时:静态和动态物体都会计算该光源

注:不同的Lighting Mode设置会有不同的效果,文章的后面详细描述(当前为默认的shadowmask模式)

Baked

烘焙时:静态物体的baked lightmap会计算接受到该光源的直接光和间接光信息

实时渲染时:静态和动态物体都不会计算该光源

baked:

我们可以在场景中新增一个光源Baked,颜色选为红色,Mode选为baked,烘焙好后的效果图与光照贴图如下:

可以发现,动态物体(胶囊体)不受红光影响,lightmap为baked光源的红色,实时渲染的时候计算了realtime的白色光源。此时运行Unity,再修改baked光源颜色,或删除该光源都不会对场景产生影响。

但是此时你会发现场景中静态物体会产生两个阴影,一个realtime的实时阴影,一个baked的烘焙好的阴影,这肯定不是我们要的效果。若隐藏了realtime光源,则动态物体不会产生阴影,这显然也是不对的,游戏中不可能场景中的房子有阴影但是行走的人却没有。那如何使静态物体只有烘焙的阴影,但是动态物体有实时的阴影呢,这就需要下面的混合光源Mixed的帮助了。

mixed:

在bakedGI下,若场景只有realtime光源,则不会有lightmap,动态物体和静态物体的阴影都需要实时计算。若只有baked光源,则静态物体会烘焙好阴影,但是动态物体却不受该光源的影响,无法产生阴影。若你想把静态物体烘焙成lightmap,同时同一个光源又对动态物体产生影响,可以形成动态阴影,那就需要mixed光源的帮助了。

我们隐藏场景中的其他光源,新建一个光源,颜色选为绿色,Mode选为mixed,烘焙好后的效果图与光照贴图如下:

此时运行unity,移动胶囊体,阴影会随着跟着移动。隐藏小方块阴影并不会跟着消失,因为是事先烘焙好的。修改mixed光源的方向的话,动态物体的阴影和光照效果都会随之改变,静态物体的光照效果会改变但是阴影不会。

 

Realtime GI 和 Baked GI 都勾选(静态物体有 realtime lightmap和baked lightmap)

Realtime

烘焙时:静态物体的realtime lightmap会计算接受到该光源的间接光信息,baked lightmap不会计算该光源

实时渲染时:静态和动态物体都会计算该光源

Mixed

烘焙时:静态物体的realtime lightmap不会计算该光源信息,baked lightmap会计算接受到该光源的间接光信息

实时渲染时:静态和动态物体都会计算该光源

Baked

烘焙时:静态物体的realtime lightmap不会计算该光源信息,baked lightmap会计算接受到该光源的直接光和间接光信息

实时渲染时:静态和动态物体都不会计算该光源

若Lighting设置中Environment Lighting的Ambient Mode选择Realtime,运行时改变环境光的属性静态物体和动态物体的光照效果都会发生改变(静态物体的Realtime lightmap改变),而选择Baked,则会把环境光也烘培起来,运行时改变环境光,并不会改变静态物体的光照效果 。

 

搞清楚GI和光源的关系后,我们接下来看看Lighting设置中Mixed Lighting的Lighting Mode的三个设置。首先我们只勾选Baked GI,然后场景中只留之前绿色的mixed光源。

baked Indirect

只烘培静态物体的受到的间接光照,直接光以及阴影进行实时计算。运行时改变灯光,直接光照和阴影就会变,但间接光不变(如果间接光弱,视觉影响不大)。只减少间接光照的实时计算,适合对光照要求较高的场景,内存消耗小,当然性能的消耗也大。 

运行后的效果如下,动态与静态物体的阴影随着mixed光源实时计算,静态物体烘焙的间接光效果不变。

shadowmask

除了烘焙静态物体受到的光照,同时也会把静态物体受直接光照产生的阴影烘培到ShadowMask中,动态物体不受影响。运行时改变灯光,只有静态物体的间接光照和阴影不变。内存中多了一份Shadowmask,减少了静态物体阴影的计算,占用性能小了一点。

注意:开启Shadowmask需要在QualitySettings设置Shadowmask Mode为Shadowmask。

subtractive

烘焙静态物体受到的直接光和间接光的信息(包含阴影,如同baked光源)。运行时改变光照,静态物体直接光、间接光、阴影不受影响,性能消耗最小。 

  • 30
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Lightmapping光照贴图是一种用于实时渲染的技术,它通过预计算光照信息并将其存储在纹理中,以提高渲染效率。在Unity中,有几种光照贴图的方法可以使用。 渐进光照贴图程序(Progressive Lightmapper)是一种基于路径追踪的光照贴图系统,它提供了能在编辑器中逐渐刷新的烘焙光照贴图光照探针。它的特点是可以在烘焙过程中提供估计时间,烘焙时间更加可预测。此外,它还可以单独为每个纹素分别烘焙全局光照,无需采用上采样方案或依赖任何辐照度缓存或其他全局数据结构。这使得渐进光照贴图程序具有强大的功能,并允许您更快地测试和迭代场景。\[1\] 另一种方法是使用单一光照贴图。这是一种简单的技术,适用于任何渲染路径。它通过烘焙一个设置为自动模式的光源、天光和自发光材质,获得一个单一通道的光照贴图。这个光照贴图可以应用于任何可被烘焙的物体,而不考虑阴影距离。\[2\] Unity完全集成了光照贴图功能,可以通过编辑器创建完整的光照贴图。所有材质会自动获得光照贴图,这意味着所有灯光的特性将被直接映射到Beast lightmapper并烘焙到纹理中,以提高性能。Unity专业版还扩展了全局光照功能,可以烘焙出更真实而漂亮的光照效果,尽管这将不是实时的。此外,Unity专业版还提供了天光和发光材质,为您增加更有趣的场景照明效果。\[3\] 综上所述,Lightmapping光照贴图是一种用于预计算光照信息并提高渲染效率的技术,在Unity中有多种方法可以实现光照贴图,包括渐进光照贴图程序和单一光照贴图。这些方法可以通过Unity编辑器进行设置和调整,以获得更好的场景照明效果。 #### 引用[.reference_title] - *1* [光照贴图(个人笔记)](https://blog.csdn.net/zaizai1007/article/details/126838512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [光照贴图深入学习 Lightmapping In-Depth](https://blog.csdn.net/hcud024/article/details/52190231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值