Q1:Lightmap在PC上顯示正常,但是轉(zhuǎn)到Android平臺(tái)上存在色差,顏色普遍偏暗。
一般來講,有兩種情況可能會(huì)導(dǎo)致色偏和亮度差異。
1.Unity烘焙的Lightmap是32bit的HDR圖,而移動(dòng)設(shè)備通常不支持HDR圖(32bit per channel),會(huì)按照LDR圖(8bit per channel)的形式進(jìn)行處理,因此會(huì)出現(xiàn)色偏問題。因此我們建議:
在移動(dòng)平臺(tái)下使用Mobile/Diffuse材質(zhì),可載入Standard Assets(Mobile) package獲得。如果要獲得更合適的效果,需要自行修改Lightmap的DecodeLightmap函數(shù),該函數(shù)可在Unity\Editor\Data\CGIncludes\UnityCG.cginc文件中找到。需要說明的是,這種方法也不能達(dá)到與PC端完全一致的效果。
如果需要PC和移動(dòng)平臺(tái)的顯示效果一致,可以用圖像編輯軟體修改Lightmap為LDR格式,例如PNG(8bit per channel)。
為了避免類似問題,請不要使用過于強(qiáng)烈的Light進(jìn)行烘焙,因?yàn)長ight的強(qiáng)度(Intensity)越高,色偏問題會(huì)越嚴(yán)重。若有陰影丟失時(shí),可以嘗試檢查一下模型的Lightmapindex、Lightmapscaleoffset、UV2等影響Lightmap采樣的一些參數(shù)。
2.另一種可能是存在過曝現(xiàn)象,可以嘗試將playersettings -> use direct3d 11關(guān)閉,看問題是否解決。
Q2:Lightmap丟失。用Unity5.1.2的AssetBundle做熱更新,資源導(dǎo)出的時(shí)候分析了所有的依賴項(xiàng)單文件導(dǎo)出。比如在導(dǎo)出場景的時(shí)候場景的烘焙出來的LightmapSnapshot.asset文件導(dǎo)出不了,導(dǎo)致運(yùn)行的時(shí)候場景的Lightmap丟失了。
LightmapSnapshot.asset 本身是Editor下使用的,并不能單獨(dú)被打包進(jìn)AssetBundle。 運(yùn)行時(shí)加載Lightmap,一種方法是把場景(.unity 文件)打成AssetBundle加載,Lightmap 信息會(huì)打入場景AssetBundle(因?yàn)長ightmap信息和場景綁定)。另一種是通過Lightmapsettings.Lightmaps方法來運(yùn)行時(shí)設(shè)置。需要注意的是,同時(shí)還需要重設(shè)Prefab的Lightmap信息(Lightmapindex和Lightmapscaleoffset),因?yàn)長ightmap信息在Unity 5.x下不會(huì)保存在Prefab 上。
另外存在一種可能,Unity 5.x中加入了Shader Stripping功能,在打包時(shí),默認(rèn)情況下會(huì)根據(jù)當(dāng)前場景的Lightmap及Fog設(shè)置對資源中的Shader進(jìn)行代碼剝離。這意味著,如果在一個(gè)空場景下進(jìn)行打包,則Bundle中的Shader會(huì)失去對Lightmap和Fog的支持,從而出現(xiàn)運(yùn)行時(shí)Lightmap和Fog丟失的情況。 而通過將Edit->Project Settings->Gaphics下Shader Stripping中的modes改為Manual,并勾選相應(yīng)的Mode即可避免這一問題。