Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unity高级开发-光照系统(六)- 加速Lightmap烘焙速度

Unity高级开发-光照系统(六)- 加速Lightmap烘焙速度

作者头像
孙寅
发布于 2020-07-10 02:09:58
发布于 2020-07-10 02:09:58
1.7K0
举报
文章被收录于专栏:宜达数字宜达数字

从Unity 5.0版本我们推出了Enlighten烘焙系统,在Unity 5.6版本开始增加了Progressive烘焙系统作为备选,但是直到Unity 2018.1正式版本才脱离Preview状态。现在国内大部分开发者主要都使用Enlighten系统进行Lightmap烘焙。作为Progressive系统极大优势的GPU加速还需要到今年年底才会推出,因此接下来一段时间内大部分国内游戏开发者应该还会继续使用Enlighten系统。

Lightmap烘焙主要考虑二点:时间消耗与烘焙质量。首先我们先想办法减少烘焙时间。

Reduce the Quality of Indirect Globally

通过调节Indirect Resolution来,我们可以降低全局间接光的质量。如下图所示,Indirect Resolution位于Lighting窗口的全局设置内,应该是大家最熟悉的参数之一了。

Indirect Resolution与Lightmap Resolution不同,并不会影响最终Lightmap中的像素密度,而是影响烘焙中间过程中生成的一张间接光Lightmap(对用户不可见)的像素密度。Indirect Resolution对于烘焙的时间影响需要了解下烘焙的过程。

Enlighten在计算场景的间接光分布时会先把场景按一定粒度体素化,然后把Mesh离散为称作Cluster的小块,然后再以Cluster为单位发射光线收集光强信息,因此Cluster的数量直接影响了烘焙过程中间接光部分的计算时间。而Indirect Resolution是决定Cluster数量的最直接参数,因此Indirect Resolution的大小会很大程度上影响烘焙的总体时间。

Indirect Resolution

Indirect Resolution因为是决定间接光质量的,并不会影响最后出图的阴影效果,因此在保证间接光质量OK的情况下尽量调小这个值即可。

下图是我们对于不同场合下的建议值。场景中有多种场合的情况下可以统一设置一个参数后再对单独Mesh Renderer进行微调。

Indirect Resolution建议值

Reduce the Lightmap Resolution

因为能直接影响最后Lightmap的像素密度,Lightmap Resolution应该是Lighting窗口中大家调整最频繁的参数了。降低这个值可以直接减少烘焙时间以及lightmap占用内存,而质量降低的代价以阴影质量的降低最为显著。一般建议设为Indirect Resolution的10倍大小。

Reduce the Amount of Object Calculated

减少需要参与烘焙的物体数量,光照质量不重要的物体使用Lightprobe或者LPPV进行着色。极端需求下可以全场景使用Lightprobe着色。

这里大概说下方案。因为Unity本身不会给Ligtmap static的物体传输Lightprobe数据到GPU,我们可以利用LightProbes.GetInterpolatedProbe(), SphericalHarmonicsL2.Evaluate() API来得到指定位置的插值LightProbe并得到颜色信息,这样我们可以序列化好这些数据(比如用texture)然后在shader中使用。

Reduce the Reflection Resolution

降低Reflection Probe以及Environment Reflections的分辨率。减少烘焙时间的同时极大降低内存占用。一般建议不要超过256,可以先设置为64,然后再根据效果适当往上调整。

Reflection Resolution memory usage

Reduce Realtime UV Charts

减少Realtime UV Charts的数量,这里说的UV Charts不是最终lightmap的UV Charts,而是烘焙过程中生成的间接光Lightmap的UV Charts。

因为Enlighten的限制,每个Chart至少需要4*4=16个像素填充,因此Chart的数量越多总像素就越多,Cluster的数量也就越多了。所以对于一些形状不规则导致难以用较少的UV chart来展开的物体,例如碎石就应该不参与烘焙过程,使用Lightprobe进行着色。而对于Charts的数量,我们可以通过Scene view中的Global illumination->UV Charts模式来观察。如下图所示,颜色相同的表面使用同一个UV chart。

Realtime UV Charts SceneView

对于那些明显UV Charts太散的Mesh Renderer,我们可以通过勾选Mesh Renderer组件上的Optimize Realtime UVS后调整Max Distance和Max Angle进行修正。这个过程我们需要保证Lighting窗口中的Auto Generate处于勾选状态,Scene view中的可视化才会同步更新。

Adjust Realtime UV Charts

Reduce Clusters

前面我们做的事情归根究底就是为了减少Cluster的数量,除了上面提到的,我们可以通过Lightmap Parameters中的Cluster Resolution直接控制Cluster的密度。

Cluster Resolution的意思是烘焙中间过程的间接光Lightmap里一个texel可以容纳多少个Cluster。这个值一般建议设为0.3-0.6,同样我们可以通过Scene view中的Clustering模式来可视化Cluster的分布情况,如下图所示,方形的色块就是一个Cluster。

Cluster Scene View

对于场景中间接光照不理想的物体,我们可以在这个模式下观察Cluster的密度是否过低,从而通过对物体的Mesh Renderer单独赋予Lightmap Parameters来调高Cluster Resolution。同理对于Cluster密度过大的地方,我们可以调低其Cluster Resolution。

通过以上所述手段我们尽可能把烘焙的时间流程缩短后,可能会发现某些地方的烘焙质量不够,我们可以通过下面列举的方法进行微调。

Selective Lightmap Scale

通过Mesh Renderer上的Scale in Lightmap调整特定物体在最终Lightmap中的像素密度。这个选项大家应该经常用到,需要提醒是:这个值并不能影响间接光的质量。因此在感觉物体接收到的间接光质量太差的情况下,调整这个值并不能起作用,这个时候需要调整间接光Lightmap的分辨率,后面会提到这个参数。

物体在最终Lightmap上的像素密度可以通过Scene view中的Baked Lightmap模式并勾选列表最下方的Show Lightmap Resolution来可视化,如下图所示。

Baked Lightmap Resolution

Increase Indirect Quality Per Object

上面提到对特定物体提高间接光质量不能通过Scale In Lightmap参数,这时需要调整Lightmap Parameters中的Resolution参数。虽然Resolution参数位于Precomputed Realtime GI分类下,但是因为Baked GI也需要使用同一个系统计算间接光分布,因此这些参数直接影响Baked GI中的间接光计算过程。

我们可以通过Scene view中的Global Illumination->UV Charts并勾选列表最下方的Show Lightmap Resolution可视化物体在间接光Lightmap上的像素分布,如下图所示。

间接光Lightmap Resolution

Play Around With UV Padding(Baked UV)

调整UV Chart间的Padding基本都是为了消除Chart之间的Color bleeding。Padding有二种类型,一种是同一个Mesh Render内的UV Chart间的Padding,一种是不同Mesh Render间Chart的Padding。前者需要通过模型制作软件调整,如果Lightmap UV让Unity生成的话也可以在模型导入选项中通过Pack Margin参数调整。后者通过Lighting窗口中的Lightmap Padding参数调整。

Pack Margin

Lightmap Padding

Remove the Compress Lightmaps Option

出于优化内存的考虑,一般开发者都会勾选Lighting窗口中的Compress Lightmaps选项。Lightmap压缩会让着色质量下降,反过来我们可以在Lightmap Resolution不高的情况下不勾选这个选项,有可能就能达到我们想要的质量。因为提高Lightmap Resolution的方式对于Lightmap大小的增加量并不可控,可能最后得到的Lightmap size比一开始不压缩的size还要大。因此在微调质量的时候可以尝试反勾选这个选项,也许会有意外的发现。

Play Around with Baked Shadow Angle

在阴影质量不佳而决定提高Lightmap Resolution之前,我们还可以尝试调整灯光上的Baked Shadow Angle对其烘焙阴影进行一定程度的模糊。参数如下图。

Baked Shadow Angle

Blur the Lightmap

除了对阴影进行模糊,我们还能通过调整Lightmap Parameters中的Blur Radius参数对指定物体的lightmap进行整体模糊。在低lightmap精度要求下需要改善质量的时候不妨尝试下调整这个参数。一般建议设置在2-4之间。

Blur Radius

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Unity高级开发-光照系统(五)-使用Unity的Progressive工具去正确的烘焙光照
1-烘培的代价是非常高的 2-烘培贴图的数量和体积非常的大,因为它是RGB通道的一些彩色图片,所以是无法改变的。 3-通过格式压缩,但压缩会出现质量下降的情况。贴图加载会占用大量的显存。
孙寅
2020/07/10
2K0
Unity高级开发-光照系统(五)-使用Unity的Progressive工具去正确的烘焙光照
Unity 5.6 光照烘焙系统介绍
一、 基本概念 1. 直接光照、间接光照 直接光照:光源直接照射到物体上,并反射到眼中的光照。 间接光照:光源先照射到其它物体上,并经过一次或多次弹射,最终抵达到观察物体,反射到眼中的光照。 2.
李海辰
2017/09/15
8.3K0
Unity 5.6 光照烘焙系统介绍
Unity基础(13)-光照系统
在2017年以前光照贴图技术是游戏光照设置的主流方式。2017年以后,光照的实时计算,近乎真实的光源环境被一系列游戏展示出来如:守望先锋,绝地求生等游戏的火爆,让我们见证了开发者对于光源环境的精细化耕作。
孙寅
2020/06/02
3K0
Unity-BattleStar丨2. Unity光照系统、光照探头、反射探头、Lighting Mode
烘焙(是全局光):对场景进行灯光烘焙将光照信息储存在Lightmap中,当场景运行时,Unity直接读取Lightmap中数据,只进行一次计算。
星河造梦坊官方
2024/08/14
2600
Unity-BattleStar丨2. Unity光照系统、光照探头、反射探头、Lighting Mode
Unity高级开发-光照系统(四)-Unity的内置渲染管线和轻量级渲染管线LWRP下正确烘焙光照
从早期的Enlighten到Progressive CPU ,再到Progressive GPU,从发展轨迹可以看出,大家对光照还是偏向光线追踪算法,认为这是未来的发展方向
孙寅
2020/07/10
1.7K0
Unity高级开发-光照系统(四)-Unity的内置渲染管线和轻量级渲染管线LWRP下正确烘焙光照
Unity高级开发-光照系统-2019.4LFT版本
但是间接光照的实时计算在目前的硬件条件下,只有支持实时光线追踪的硬件才能实现,比如Nvidia的RTX系列显卡,在普通的计算设备上,特别是移动端设备上目前还没有实时光线追踪的解决方案出现。因此我们必须依赖预先计算好的光照贴图来提供这些间接光照信息。
孙寅
2020/07/13
2K0
Unity高级开发-光照系统-2019.4LFT版本
Unity3d场景快速烘焙【2020】
很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交付,小姐姐在这里分享一些自己的经验,希望能帮到受此痛苦折磨的朋友,话不多说,开工!
全栈程序员站长
2022/07/01
4.4K0
Unity3d场景快速烘焙【2020】
项目优化之光照使用(Unity3D)
适当为游戏场景添加光照效果,能够有效增强场景氛围,让玩家体验更佳。今天将为大家分享在Unity中调整光照特效的7个技巧,让整个游戏场景氛围更引人入胜。
恬静的小魔龙
2022/08/07
9850
项目优化之光照使用(Unity3D)
Unity3D-光照系统
这个其实是三维软件中的称呼。其实光从太阳经到达地面是经过无数次的反射和折射。 全局光照里面又有Realtime GI(实时全局光照),默认情况下Unity的光源都是实时的,代表这些灯源会把光线照射到场景并每帧更新,
孙寅
2020/06/02
1.5K0
基础渲染系列(十六)——静态光照
这是关于渲染的系列教程的第16部分。上次,我们渲染了自己的延迟灯光。在这一部分中,我们转到灯光贴图上来。
放牛的星星
2020/07/10
3.9K0
基础渲染系列(十六)——静态光照
Unity通用渲染管线(URP)系列(五)——烘焙光(Baked Light)
· 3.3Light Probe Proxy Volumes(LPPVs)
放牛的星星
2020/12/24
9.1K0
Unity通用渲染管线(URP)系列(六)——阴影遮罩(Shadow Masks)
这是自定义可编程渲染管线的第六篇。使用阴影遮罩来烘焙阴影,并且将其加入到实时光的计算中。
放牛的星星
2020/12/24
5K0
基础渲染系列(十七)——混合光照
这是关于渲染的系列教程的第17部分。上次,我们通过光照贴图增加了对静态照明的支持。现在,我们将烘焙和实时照明的功能相结合。
放牛的星星
2020/07/10
2.7K0
基础渲染系列(十七)——混合光照
Unity DrawCall优化「建议收藏」
一 Mesh Renderer 二 Skinned Mesh Renderer 三 合并要求对比 四 总结 五 场景制作建议
全栈程序员站长
2022/11/04
1.4K0
Unity性能调优手册7:渲染优化,DrawCall,剔除,Shader,LOD,TextureStreaming
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/ 本章介绍围绕Unity图形功能的调整实践。
立羽
2023/10/26
2.9K0
Unity性能调优手册7:渲染优化,DrawCall,剔除,Shader,LOD,TextureStreaming
UE(6):LightMap
今天介绍一下UE中的lightmap(LM)技术,lightmap算是一个高级版的irradiance environment map(envmap),而irradiance envmap[1]则是Ravi教授在2001年首次将球谐引入到图形学中。所以,本文先介绍irradiance envmap技术,如何使用球谐函数;然后介绍LM对envmap的升级,最后是UE中如何生成和使用LM。
Peter Lu
2022/12/22
1.3K0
UE(6):LightMap
游戏TA入门指南PDF
Cocos Creator 创建的材质,默认使用的是 builtin-standard.effect 着色器,又称之为 PBR 材质,PBR 材质使用 PBR 流程中的 Metal/Roughness 工作流。
张晓衡
2022/12/22
2.6K0
游戏TA入门指南PDF
基础渲染系列(十八)——实时光全局光照、探针体积、LOD组
这是关于渲染的系列教程的第18部分。第17部分中总结了烘焙的全局照明之后,我们将继续支持实时GI。之后,我们还将支持光探针代理体积(LPPVs)和LOD组的淡入淡出。
放牛的星星
2020/07/10
4.4K0
基础渲染系列(十八)——实时光全局光照、探针体积、LOD组
Unity通用渲染管线(URP)系列(九)——点光源和聚光灯(Lights with Limited Influence)
这是有关创建自定义脚本渲染管道的系列教程的第九部分。它增加了对点光源和聚光灯的实时和烘焙支持,但还没有实时阴影。
放牛的星星
2020/12/28
4.3K0
Unity通用渲染管线(URP)系列(九)——点光源和聚光灯(Lights with Limited Influence)
Unity可编程渲染管线系列(九)烘焙阴影(混合光照)
这是涵盖Unity的可编写脚本的渲染管道的系列教程的第九部分。它涉及将实时照明与烘焙阴影结合在一起,在减法照明的情况下,将烘焙照明与实时阴影结合起来。
放牛的星星
2020/08/17
3K0
Unity可编程渲染管线系列(九)烘焙阴影(混合光照)
推荐阅读
相关推荐
Unity高级开发-光照系统(五)-使用Unity的Progressive工具去正确的烘焙光照
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档