Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PIE-engine APP教程 ——基于水体指数或监督分类方法的水体频率计算
本次我们来查看进行水体处理的分布,我们这里首先对数据进行预处理,先进行NDWI,AWEI、MNDWI等计算函数和去云函数,第二部分市机器学习部分这里有三个机器学习模型,分别是随机森林、贝叶斯和支持向量机
此星光明
2024/02/02
2920
PIE-engine APP教程 ——基于水体指数或监督分类方法的水体频率计算
GEE教程:利用sentinel-2数据进行ndwi和ndci指数的计算和下载
NDWI(Normalized Difference Water Index,归一化差异水体指数)和NDCI(Normalized Difference Chlorophyll Index,归一化差异叶绿素指数)都是一种利用遥感影像数据来评估特定地物或地表类型的指数。
此星光明
2024/09/25
3340
GEE教程:利用sentinel-2数据进行ndwi和ndci指数的计算和下载
GEE python高阶——如何使用geemap和eemont包基于MODIS影像计算GNDVI,NBR,NDWI指数并可视化(山西省太原市为例)
 这里我们进行使用geemap和eemont包基于MODIS影像计算GNDVI,NBR,NDWI指数,这里很方便的省去了计算指数、去云和缩放等功能,非常方便。
此星光明
2024/03/13
4280
GEE python高阶——如何使用geemap和eemont包基于MODIS影像计算GNDVI,NBR,NDWI指数并可视化(山西省太原市为例)
基于ENVI与ERDAS的Landsat 7 ETM+单窗算法地表温度(LST)反演
更新:基于GEE的Landsat地表温度反演可以看这篇博客[1],自动批量操作,处理更快。
疯狂学习GIS
2021/07/22
1.7K0
GEE 案例:如何利用Landsat 8 数据和NDWI指数来计算指定区域的水域面积
这里我们进行影像的水域面积计算,这里出了影像预处理后,最主要的过程就是如何进行像素面积计算,另外,如何利用统计函数来进行sum来统计整个像素内的面积是多少。
此星光明
2024/09/13
4330
GEE 案例:如何利用Landsat 8 数据和NDWI指数来计算指定区域的水域面积
PIE-Engine APP:广东省生态遥感指数研究
本文以广东省为研究区,分别计算NDBSI\WET\NDVI\LST各个指数的的计算后遥感生态指数。本文使用的影像是MODIS影像(USGS/MOD09A1/006、USGS/MOD11A2/006、USGS/MOD13A1/006)然后利用QA波段进行去云,然后通过影像集合进行影像筛选和相关去云操作,然后设定可视化参数,之后就是计算每一个指数的参数以及可视化参数。最后我们将chart图表的样式进行设定,然后导出影像。本文所需的函数
此星光明
2024/02/02
2070
PIE-Engine APP:广东省生态遥感指数研究
Landsat 7热红外波段B61与B62的区别及选择方法
  本文介绍Landsat 7遥感影像数据中B61、B62两个热红外波段的区别,以及研究应用时二者选择的依据。
疯狂学习GIS
2023/06/26
3210
Landsat 7热红外波段B61与B62的区别及选择方法
landsat 卫星波段组合以及envi下的展示
Landsat TM (ETM+)7个波段可以组合很多RGB方案用于不同地物的解译,Landsat8的OLI陆地成像仪包括9个波段,可以组合更多的RGB方案。
全栈程序员站长
2022/09/15
4.1K0
TM影像波段介绍「建议收藏」
1.TM1 0.45-0.52um,蓝波段,对水体穿透强,对叶绿素与叶色素反映敏感,有助于判别水深及水中叶绿素分布以及水中是否有水华等.
全栈程序员站长
2022/09/15
4.8K0
基于ENVI的Landsat 7地表温度(LST)大气校正方法反演与地物温度分析
更新:基于GEE的地表温度Landsat反演可以看这篇博客[1],自动批量操作,处理更快。
疯狂学习GIS
2021/07/22
2K0
PIE-Engine 教程:水稻面积提取4—阈值筛选(宿迁市)
这里水稻面积提取用阈值法进行,这里我们需要用到的是将随机森林和svm支持向量机的监督分类分析的结果用mask去除和提取,这里我们所需要用到几个函数
此星光明
2024/02/02
2200
PIE-Engine 教程:水稻面积提取4—阈值筛选(宿迁市)
landset8各波段_landsat8卫星全面
2013年2月11日,美国航空航天局(NASA) 成功发射Landsat-8卫星。Landsat-8卫星上携带两个传感器,分别是OLI陆地成像仪(Operational Land Imager)和TIRS热红外传感器(Thermal Infrared Sensor)。
全栈程序员站长
2022/09/15
1.7K0
NASA数据集——2017 年阿拉斯加和加拿大上空彩色红外图像中的 AirSWOT 水掩模数据集
ABoVE: AirSWOT Water Masks from Color-Infrared Imagery over Alaska and Canada, 2017
此星光明
2024/03/24
1710
NASA数据集——2017 年阿拉斯加和加拿大上空彩色红外图像中的 AirSWOT 水掩模数据集
PIE-engine APP 教程 ——太湖生态环境智能监测系统
本次开发教程是基于太湖生态环境智能监测系统,这个我们首先预加载我们所选的研究区,这次研究区是在太湖研究区,首秀按需要转化为几何,预加载持续时间,颜色图层预设,波段(MODIS、Landsat的QA波段去云函数)去云效果,然后UI界面的设定,这个界面非常长,所以设定了很多label标签、复选框、按钮和textbox,当然每一个部分都在一个面板,最后就是程序的嵌套和各个部分的,本此APP主要分为三个部分:第一部分就是太湖湖泊的监测、第二部分是基于Landsat数据月季年监测、第三部分太湖周围生态监测,最后是其它功能监测,这里每一个部分其实所用到的数据基本上上是相互独立的,这样有利于减少云计算的过程,减少运算压力。每一个部分都可以拿出来单独的使用,每一个部分都是一个单独的APP。
此星光明
2024/02/02
3190
PIE-engine APP 教程 ——太湖生态环境智能监测系统
Landsat9_C2_TOA是每个波段的辐射亮度值转换为大气层顶表观反射率TOA数据集
Landsat9_C2_TOA数据集是将数据每个波段的辐射亮度值转换为大气层顶表观反射率TOA,是飞行在大气层之外的航天传感器量测的反射率,包括了云层、气溶胶和气体的贡献,可通过辐射亮度定标参数、太阳辐照度、太阳高度角和成像时间等几个参数计算得到。为了便于在线分析存储,平台将影像像素值扩大了10000倍。Landsat9卫星包含二代陆地成像仪(Operational Land Imager2,OLI-2)和二代热红外传感器(Thermal Infrared Sensor,TIRS-2)两种传感器。卫星每16 天可以实现一次全球覆盖。OLI-2包括九个波段,空间分辨率为30米,包括一个15米的全色波段,成像宽幅为185×185km。TIRS-2用于收集地球两个热区地带的热量流失,了解所观测地带的水分消耗。相较于Landsat8上的TIRS,TIRS在风险等级和设计上做了改进,以尽量减少杂光影像。前言 – 人工智能教程
此星光明
2024/02/14
5190
基于ENVI的Landsat 7影像处理与多种大气校正方法对比
在我们所获得的遥感影像原始数据中,每一个像素对应的像元值往往是未经明确量化、没有统一量纲的数据(DN值,即Digital Number);而当我们需要利用遥感影像的信息对地物属性进行分析时,则往往需要其辐射亮度值、反射率值等。因此,我们首先需要通过“辐射定标”操作实现上述数据之间的转换。
郭好奇同学
2021/05/28
1.8K0
基于ENVI的Landsat 7影像处理与多种大气校正方法对比
基于ENVI与ERDAS的Hyperion高光谱经验比值、一阶微分法叶绿素及地表参数反演
  前面几篇博客介绍了基于Landsat这一多光谱遥感图像数据的多种地表温度(LST)反演方法,大家可以参考博客1[1]、博客2[2]、博客3[3];那么接下来,我们就将基于比多光谱数据可以说是更进一步的高光谱卫星数据——大名鼎鼎的Hyperion数据,进行多种其他地表参数的反演。其中,在此之前可以先了解一下国内外主流的星载高光谱传感器及其平台的相关信息[4]。
疯狂学习GIS
2021/07/22
1.9K0
使用ArcGIS Python检测洪水影响的区域
【ArcGIS Python系列】系列笔记为学习ArcGIS Pro和ArcPy过程中的总结,记下来方便回看,最新版本会优先发布在我的博客和GITHUB。 洪水发生之后,有时候需要快速分析卫星影像,及时确定被洪水淹没的区域。在本文中,利用了Python自动化识别卫星影像中的洪水区域。首先,会在 ArcGIS Pro 中使用notebook,一步步实现洪水检测的目的。然后,会将代码转换为脚本工具,给其他没有编程基础的人使用。
renhai
2023/11/24
5670
使用ArcGIS Python检测洪水影响的区域
100 Earth-Shattering Users & Applications of Remote Sensing
无论您是初学者还是专业人士,以下关于遥感应用的列表都将改变您对遥感如何改变我们的世界和思维方式的看法。(Whether you are beginner or advanced, this list will change the way you feel about how remote sensing is changing our world and the way we think.)‍
遥感大数据学习
2022/09/20
8780
100 Earth-Shattering Users & Applications of Remote Sensing
推荐阅读
相关推荐
PIE-engine APP教程 ——基于水体指数或监督分类方法的水体频率计算
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档