在场景光照贴图这块,最近遇到了一个场景莫名变暗的问题。记录如下
- 在AB模式下,使用Additive方式加载场景(3D物件场景,有进行烘焙)
- 加载3个场景a,b,c
- 卸载掉一个场景a
- 然后执行AB卸载(true方式卸载),会发现剩下两个的场景b,c的光照贴图变暗了 (场景光照贴图卸载ab后与卸载ab前对比)
- 再加载回场景a,发现变暗的光照贴图恢复了,但是场景b,c的光照贴图UV错乱了。场景a的光照贴图正常
分析
在mac用ab模式执行了测试后,采集了在上述几个步骤中,光照贴图数组(LightmapSettings.lightmaps)的数据变化。(标橙色的是场景a所用的光照贴图)
操作 | 加载a,b,c | 卸载a | AB卸载 | 加载1 |
表现结果 | 光照正常 | 光照正常 | 光照异常:光照贴图变黑 | 光照异常:光照贴图UV错误;新场景光照正常 变暗的光照贴图恢复了 |
分析 | 有重复光照贴图? 非Additive模式?:不会有重复。场景切换会数组会重置干净 | 并没有全部卸载掉1所用的光照贴图 | 场景1所用的全部被清理掉了 | 物件Render的LMIndex不变,但是数组里面对应Index的贴图已改变 |
Index0,grassland01_LMA5_final | Index0,grassland01_LMA5_final | Index0, | Index0,grassland01_LMA5_final | |
Index1,grassland01_LMA4_final | Index1, | Index1, | Index1,grassland01_LMA4_final | |
Index2,grassland01_LMA7_final | Index2, | Index2, | Index2,grassland01_LMA7_final | |
Index3,grassland01_LMA6_final | Index3, | Index3, | Index3,grassland01_LMA6_final | |
Index4,grassland01_LMA3_final | Index4, | Index4, | Index4,grassland01_LMA3_final | |
Index5,grassland01_LM31_final | Index5, | Index5, | Index5,grassland01_LM31_final | |
Index6,grassland01_LMA1_final | Index6, | Index6, | Index6,grassland01_LMA1_final | |
Index7,grassland01_LMA2_final | Index7, | Index7, | Index7,grassland01_LMA2_final | |
Index8,grassland01_LMA5_final | Index8,grassland01_LMA5_final | Index8, | Index8, | |
Index9,grassland01_LMA4_final | Index9,grassland01_LMA4_final | Index9, | Index9, | |
Index10,grassland01_LMA7_final | Index10,grassland01_LMA7_final | Index10, | Index10, | |
Index11,grassland01_LMA6_final | Index11,grassland01_LMA6_final | Index11, | Index11, | |
Index12,grassland01_LMA3_final | Index12,grassland01_LMA3_final | Index12, | Index12, | |
Index13,grassland01_LM31_final | Index13,grassland01_LM31_final | Index13, | Index13, | |
Index14,grassland01_LMA1_final | Index14,grassland01_LMA1_final | Index14, | Index14, | |
Index15,grassland01_LMA2_final | Index15,grassland01_LMA2_final | Index15, | Index15,grassland02_LMA2_final | |
Index16,grassland02_LMA2_final | Index16,grassland02_LMA2_final | Index16,grassland02_LMA2_final | Index16,grassland02_LMA3_final | |
Index17,grassland02_LMA3_final | Index17,grassland02_LMA3_final | Index17,grassland02_LMA3_final | Index17,grassland02_LMA4_final | |
Index18,grassland02_LMA4_final | Index18,grassland02_LMA4_final | Index18,grassland02_LMA4_final | Index18,grassland02_LM34_final | |
Index19,grassland02_LM34_final | Index19,grassland02_LM34_final | Index19,grassland02_LM34_final | Index19,grassland02_LMA1_final | |
Index20,grassland02_LMA1_final | Index20,grassland02_LMA1_final | Index20,grassland02_LMA1_final | Index20,grassland02_LMA2_final | |
Index21,grassland02_LMA2_final | Index21,grassland02_LMA2_final | Index21,grassland02_LMA2_final | Index21,grassland02_LMA3_final | |
Index22,grassland02_LMA3_final | Index22,grassland02_LMA3_final | Index22,grassland02_LMA3_final | Index22,grassland02_LMA4_final | |
Index23,grassland02_LMA4_final | Index23,grassland02_LMA4_final | Index23,grassland02_LMA4_final | Index23,grassland02_LM34_final | |
Index24,grassland02_LM34_final | Index24,grassland02_LM34_final | Index24,grassland02_LM34_final | Index24,grassland02_LMA1_final | |
Index25,grassland02_LMA1_final | Index25,grassland02_LMA1_final | Index25,grassland02_LMA1_final | Index25,grassland03_LMA6_final | |
Index26,grassland03_LMA6_final | Index26,grassland03_LMA6_final | Index26,grassland03_LMA6_final | Index26,grassland03_LMA5_final | |
Index27,grassland03_LMA5_final | Index27,grassland03_LMA5_final | Index27,grassland03_LMA5_final | Index27,grassland03_LMA7_final | |
Index28,grassland03_LMA7_final | Index28,grassland03_LMA7_final | Index28,grassland03_LMA7_final | Index28,grassland03_LMA9_final | |
Index29,grassland03_LMA9_final | Index29,grassland03_LMA9_final | Index29,grassland03_LMA9_final | Index29,grassland03_LMA4_final | |
Index30,grassland03_LMA4_final | Index30,grassland03_LMA4_final | Index30,grassland03_LMA4_final | Index30,grassland03_LMA1_final | |
Index31,grassland03_LMA1_final | Index31,grassland03_LMA1_final | Index31,grassland03_LMA1_final | Index31,grassland03_LM57_final | |
Index32,grassland03_LM57_final | Index32,grassland03_LM57_final | Index32,grassland03_LM57_final | Index32,grassland03_LMA3_final | |
Index33,grassland03_LMA3_final | Index33,grassland03_LMA3_final | Index33,grassland03_LMA3_final | Index33,grassland03_LMA2_final | |
Index34,grassland03_LMA2_final | Index34,grassland03_LMA2_final | Index34,grassland03_LMA2_final | Index34,grassland03_LMA6_final | |
Index35,grassland03_LMA6_final | Index35,grassland03_LMA6_final | Index35,grassland03_LMA6_final | Index35,grassland03_LMA5_final | |
Index36,grassland03_LMA5_final | Index36,grassland03_LMA5_final | Index36,grassland03_LMA5_final | Index36,grassland03_LMA7_final | |
Index37,grassland03_LMA7_final | Index37,grassland03_LMA7_final | Index37,grassland03_LMA7_final | Index37,grassland03_LMA9_final | |
Index38,grassland03_LMA9_final | Index38,grassland03_LMA9_final | Index38,grassland03_LMA9_final | Index38,grassland03_LMA4_final | |
Index39,grassland03_LMA4_final | Index39,grassland03_LMA4_final | Index39,grassland03_LMA4_final | Index39,grassland03_LMA1_final | |
Index40,grassland03_LMA1_final | Index40,grassland03_LMA1_final | Index40,grassland03_LMA1_final | Index40,grassland03_LM57_final | |
Index41,grassland03_LM57_final | Index41,grassland03_LM57_final | Index41,grassland03_LM57_final | Index41,grassland03_LMA3_final | |
Index42,grassland03_LMA3_final | Index42,grassland03_LMA3_final | Index42,grassland03_LMA3_final | Index42,grassland03_LMA2_final | |
Index43,grassland03_LMA2_final | Index43,grassland03_LMA2_final | Index43,grassland03_LMA2_final | Index43,grassland01_LMA5_final | |
Index44,grassland01_LMA4_final | ||||
Index45,grassland01_LMA7_final | ||||
Index46,grassland01_LMA6_final | ||||
Index47,grassland01_LMA3_final | ||||
Index48,grassland01_LM31_final | ||||
Index49,grassland01_LMA1_final | ||||
Index50,grassland01_LMA2_final |
发现了几个要点:
- 在数组中有两份重复的光照贴图数据
- 卸载a后,并没有卸载掉a所有的光照贴图,有残留了一份在数组里,而且index为0的数据始终不会被清除
- 执行卸载ab强制卸载资源后,所有a所用的光照贴图被清除了。这时其他场景的光照贴图变暗了。经谷歌原因是index为0的数据被清除后,就会导致变暗(具体原因不清楚,可能是Unity的bug)
- index为0的数据被清除后,如果后续加载了新的光照贴图,会导致数据错乱
尝试主场景烘焙一张比较小的光照贴图,以保证光照贴图数组中index为0一直有数据,不会被清空。重新测试后,解决了变暗的问题。
重新采集了光照贴图数组数据:(标橙色的还是场景a所用的光照贴图,绿色的是主场景所用光照贴图)
操作 | 加载1,2,3 | 卸载1 | AB卸载 | 加载1 |
正常 | 正常 | 正常 | 正常 | |
Index0,Lightmap-0_comp_light | Index0,Lightmap-0_comp_light | Index0,Lightmap-0_comp_light | Index0,Lightmap-0_comp_light | |
Index1,grassland01_LMA5_final | Index1, | Index1, | Index1,grassland01_LMA5_final | |
Index2,grassland01_LMA4_final | Index2, | Index2, | Index2,grassland01_LMA4_final | |
Index3,grassland01_LMA7_final | Index3, | Index3, | Index3,grassland01_LMA7_final | |
Index4,grassland01_LMA6_final | Index4, | Index4, | Index4,grassland01_LMA6_final | |
Index5,grassland01_LMA3_final | Index5, | Index5, | Index5,grassland01_LMA3_final | |
Index6,grassland01_LM31_final | Index6, | Index6, | Index6,grassland01_LM31_final | |
Index7,grassland01_LMA1_final | Index7, | Index7, | Index7,grassland01_LMA1_final | |
Index8,grassland01_LMA2_final | Index8, | Index8, | Index8,grassland01_LMA2_final | |
Index9,grassland01_LMA5_final | Index9,grassland01_LMA5_final | Index9, | Index9, | |
Index10,grassland01_LMA4_final | Index10,grassland01_LMA4_final | Index10, | Index10, | |
Index11,grassland01_LMA7_final | Index11,grassland01_LMA7_final | Index11, | Index11, | |
Index12,grassland01_LMA6_final | Index12,grassland01_LMA6_final | Index12, | Index12, | |
Index13,grassland01_LMA3_final | Index13,grassland01_LMA3_final | Index13, | Index13, | |
Index14,grassland01_LM31_final | Index14,grassland01_LM31_final | Index14, | Index14, | |
Index15,grassland01_LMA1_final | Index15,grassland01_LMA1_final | Index15, | Index15, | |
Index16,grassland01_LMA2_final | Index16,grassland01_LMA2_final | Index16, | Index16, | |
Index17,grassland02_LMA2_final | Index17,grassland02_LMA2_final | Index17,grassland02_LMA2_final | Index17,grassland02_LMA2_final | |
Index18,grassland02_LMA3_final | Index18,grassland02_LMA3_final | Index18,grassland02_LMA3_final | Index18,grassland02_LMA3_final | |
Index19,grassland02_LMA4_final | Index19,grassland02_LMA4_final | Index19,grassland02_LMA4_final | Index19,grassland02_LMA4_final | |
Index20,grassland02_LM34_final | Index20,grassland02_LM34_final | Index20,grassland02_LM34_final | Index20,grassland02_LM34_final | |
Index21,grassland02_LMA1_final | Index21,grassland02_LMA1_final | Index21,grassland02_LMA1_final | Index21,grassland02_LMA1_final | |
Index22,grassland02_LMA2_final | Index22,grassland02_LMA2_final | Index22,grassland02_LMA2_final | Index22,grassland02_LMA2_final | |
Index23,grassland02_LMA3_final | Index23,grassland02_LMA3_final | Index23,grassland02_LMA3_final | Index23,grassland02_LMA3_final | |
Index24,grassland02_LMA4_final | Index24,grassland02_LMA4_final | Index24,grassland02_LMA4_final | Index24,grassland02_LMA4_final | |
Index25,grassland02_LM34_final | Index25,grassland02_LM34_final | Index25,grassland02_LM34_final | Index25,grassland02_LM34_final | |
Index26,grassland02_LMA1_final | Index26,grassland02_LMA1_final | Index26,grassland02_LMA1_final | Index26,grassland02_LMA1_final | |
Index27,grassland03_LMA6_final | Index27,grassland03_LMA6_final | Index27,grassland03_LMA6_final | Index27,grassland03_LMA6_final | |
Index28,grassland03_LMA5_final | Index28,grassland03_LMA5_final | Index28,grassland03_LMA5_final | Index28,grassland03_LMA5_final | |
Index29,grassland03_LMA7_final | Index29,grassland03_LMA7_final | Index29,grassland03_LMA7_final | Index29,grassland03_LMA7_final | |
Index30,grassland03_LMA9_final | Index30,grassland03_LMA9_final | Index30,grassland03_LMA9_final | Index30,grassland03_LMA9_final | |
Index31,grassland03_LMA4_final | Index31,grassland03_LMA4_final | Index31,grassland03_LMA4_final | Index31,grassland03_LMA4_final | |
Index32,grassland03_LMA1_final | Index32,grassland03_LMA1_final | Index32,grassland03_LMA1_final | Index32,grassland03_LMA1_final | |
Index33,grassland03_LM57_final | Index33,grassland03_LM57_final | Index33,grassland03_LM57_final | Index33,grassland03_LM57_final | |
Index34,grassland03_LMA3_final | Index34,grassland03_LMA3_final | Index34,grassland03_LMA3_final | Index34,grassland03_LMA3_final | |
Index35,grassland03_LMA2_final | Index35,grassland03_LMA2_final | Index35,grassland03_LMA2_final | Index35,grassland03_LMA2_final | |
Index36,grassland03_LMA6_final | Index36,grassland03_LMA6_final | Index36,grassland03_LMA6_final | Index36,grassland03_LMA6_final | |
Index37,grassland03_LMA5_final | Index37,grassland03_LMA5_final | Index37,grassland03_LMA5_final | Index37,grassland03_LMA5_final | |
Index38,grassland03_LMA7_final | Index38,grassland03_LMA7_final | Index38,grassland03_LMA7_final | Index38,grassland03_LMA7_final | |
Index39,grassland03_LMA9_final | Index39,grassland03_LMA9_final | Index39,grassland03_LMA9_final | Index39,grassland03_LMA9_final | |
Index40,grassland03_LMA4_final | Index40,grassland03_LMA4_final | Index40,grassland03_LMA4_final | Index40,grassland03_LMA4_final | |
Index41,grassland03_LMA1_final | Index41,grassland03_LMA1_final | Index41,grassland03_LMA1_final | Index41,grassland03_LMA1_final | |
Index42,grassland03_LM57_final | Index42,grassland03_LM57_final | Index42,grassland03_LM57_final | Index42,grassland03_LM57_final | |
Index43,grassland03_LMA3_final | Index43,grassland03_LMA3_final | Index43,grassland03_LMA3_final | Index43,grassland03_LMA3_final | |
Index44,grassland03_LMA2_final | Index44,grassland03_LMA2_final | Index44,grassland03_LMA2_final | Index44,grassland03_LMA2_final | |
Index45,grassland01_LMA5_final | ||||
Index46,grassland01_LMA4_final | ||||
Index47,grassland01_LMA7_final | ||||
Index48,grassland01_LMA6_final | ||||
Index49,grassland01_LMA3_final | ||||
Index50,grassland01_LM31_final | ||||
Index51,grassland01_LMA1_final | ||||
Index52,grassland01_LMA2_final |
仍然存在的问题是光照贴图数组长度会增加,待后续解决