写在前面
Unity的光照贴图在5.0版本做出了重大的改善,从 Beast全局光照系统替换为Enlighten全局光照系统。
Lighting Data Asset记录了整个场景的GI数据(Global Illumination (GI)不仅记录直接从光源击中表面的光(直接光),也可以记录模拟光从一个表面反射到其他表面的间接光的系统)以及整个场景所需要的光照信息。包括实时lightmaps, 烘焙过的 lightmaps, light probes, reflection probes 和一些记录这些如何协同工作的额外的数据。
生成的Lighting Data Asset(Lightmap Snapshot在Unity 5.3之后又重新命名为了Lighting Data Asset),当加载场景时,光照贴图也会自动加载(你懂得,自动就代表着想做出变更就是与他这个自动的过程相悖)
那么运行时Lighting Data Asset可以替换来达到替换光照贴图的效果么?
答案是 不可以。因为Lighting Data Asset是一个只可以Editor使用的资源
正题
首先关于替换Lightmap的方法
在这个不能运行时替换Lighting Data Asset的前提条件下,当需要加载or替换一组已经烘焙的光照贴图,就不能通过任何借口方法直接作出替换。所以官方给出了一种解决方案:
https://forum.unity3d.com/threads/problems-with-instantiating-baked-prefabs.324514/#post-2177524
解答详见六楼,我此处就不做赘述。
另外同样运用这个方法(记录每一个mesh的lightmapOffsetScale和lightmapIndex)的,也提供一篇博客
http://blog.csdn.net/langresser_king/article/details/48914901
关于我遇到的一个坑,我没有找到帖子有提到,也就发出来给大家一个参考。(发这篇的主要原因)
那么总算进入我这篇文章真正想叙述的部分了。
我的工程,一直为同一个Scene,加载不同的地图的地图预制来切换场景,即 换地图等价为加载地面模型的整体预制件,附带一组已经Bake好的Lightmap。
在PC环境下,我的一切Lightmap加载都完全正常。
当我导出到Android平台下,Bake的Lightmap显示不出(有两种表现:Mesh表面没有光感,Mesh表面全黑色)
问题情况很容易描述,直接说明解决方法吧。
最终解决的情况是这样的。
① 场景的 LightmapSetting设置成Non-Directional
② 场景指定的Lighting Data Asset,从一个LightmapList渲染长度为0的Lighting Data Asset,变更为一个长度大于等于2的Lighting Data Asset(我渲染后是2张Lightmap),即 设定一个LightmapList长度大于当前渲染张数的Lighting Data Asset。
关于LightmapList长度的说明:
再进行安卓打包,场景显示就正常了。
重点
写这个文章的时候,我尝试重现我说过的问题,提供一些截图的时候。我发现我并不能重现。
所以我很怀疑我做出的这个解决方案的正确性,请各位阅读之后做一个参考,而不是一个绝对正确的解决方案。
所以这篇写的如此不严谨很是抱歉,但是我确实是这个方案下解决了问题,也就发出来了。
转载请注明,出自喵喵丸的博客 (http://blog.csdn.net/u011643833/article/details/77505642)