Unity动态加载光照贴图的坑

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

Unity的光照贴图,如果在运行时动态加载的话,需要对创建出来的game object的lightmap index做一次重新指派, 然后在设置一下LightmapSetting。基本按照Mr.钱康来的这一系列文章那样子设置。如下链接:

Unity中光照贴图一二坑及解决办法 Unity中光照贴图一二坑续

如果按照老钱的方法去做了,还是有问题的话,那么就要看下 【Project Settings -> Graphics -> Shader Stripping】 菜单下的这个:

就是打包时没把LIGHTMAP_ON相关的shader变体给打进去,因为被strip掉。为了保险,选中Custom,然后所有全部选上,再进行打AB。就能正确加载光照贴图。当然,这样子会导致变体变多变大,所以最好还是仔细分析下,那些勾选上为好。

国内有一个兄弟也是碰到这个问题,在Unity论坛上也有人用这个方案解决了问题

另外,经过实测,只要正确设置好shader stripping之后,无论从AB中装载进来的game object,是不是从static变为非static标签,或者有没有用StaticBatchingUtility.Combine去运行时静态合批,都不影响正确加载lightmap

光照贴图接缝探讨

where did “lightmap static” go

打包Assetbundle以及Shader Stripping导致LightMap全部丢失的解决方法

UWA上的《Lightmap丢失》

Shader Variants 打包遇到的问题

[Stripping scriptable shader variants](Stripping scriptable shader variants)

Stripping commonly unused shader variants in Unity’s built-in render pipeline

Unity帮助文档中和Shader Stripping相关的页面