0. 写在之前
其实针对这个问题已经写了一篇很简单的填坑笔记了,但是UWA说希望那篇文章稍微扩充一下放到USpark系列中,于是有了此文。在整理本文的过程中,又想明白了一些之前没有想明白的技术问题,算是对线性空间下烘焙场景变暗的原因有了一个真正的理解,这也是整理和写博客的收益之一吧~
1. 问题确认
最近(临近测试之前……),美术同学反馈在移动设备上场景感觉比平常开发的PC上要暗很多。其实之前观察到过这个现象,当时场景的烘焙效果还没完全确定,以为是不同的烘焙版本,或者设备屏幕亮度不同、色差等问题,一直没有怎么关注。
知乎有句名言——“先问是不是,再问为什么”,那么解决问题之前第一步要做的事情就是确认问题。
其实方法很简单,就是排除前面提到的不同烘焙版本、设备色差等问题,使用同一烘焙版本的场景,在移动设备上进行截图操作,然后传输到手机上在同一块屏幕下进行对比,发现场景亮度差别的确很大。
手机设备上的截图效果
PC设备上的场景截图效果
2. 原因排查
确认问题的确存在,而且很严重之后,我们先做一系列的排查实验来检查问题可能出现的原因。
首先在同一屏幕下对截图进行对比,观察是否是全屏变暗,发现使用实时光照的角色没有这个问题,因为对比的关系反而会觉得角色更亮(请忽略上面截图中的角色灰色问题,那个是因为在我的MX4 Pro上材质兼容性存在问题导致的。。。),排除可能是某些错误的后处理导致全屏变暗的可能,基本确认是场景lightmap相关的问题。
检查Unity Editor中切换到安卓平台,直接运行没有问题,但是如果加载AssetBundle包进行运行,就出现了和设备上一样的问题。推测可能和AssetBundle的打包相关,但是无法确认更多细节。
制作一个简单的Demo,使用非AssetBundle的方式进行打包,放置到手机上进行截图对比,发现也存在变暗的问题,排除单纯的AssetBundle打包导致的问题;
在Demo中,将我们自己的材质替换为Standard材质,进行打包对比测试,依然有变暗的问题,排除我们项目自身材质bug。
因为我们在移动设备上使用了线性空间,因此怀疑可能是线性空间导致的,切换颜色空间进行对比实验,发现伽马空间下烘焙效果也有色差,但是没有线性空间明显。
经过这一系列的实验对照之后,我有点怀疑这是一个Unity的“特性(bug)”了。。。顺便说句题外话,我们使用的是比较新的Unity 5.5.4f版本,之所以从之前较为稳定的5.3.6版本升级上来,很重要的原因之一是我们想要在移动设备上使用线性空间。
3. 资料检索
问题的矛头指向了烘焙,又是Standard材质也会存在的问题,那么猜测网络上应该有不少问题反馈和相关资料,于是照常进行一波相关资料的检索和收集。
3.1 Unity Issue Tracker
首先怀疑是否是Unity的官方“特性(bug)”,搜索了一下issuetracker,果然找到一个似乎相关的bug汇报BAKED LIGHTMAP IS DARKER ON ANDROID PLATFORM COMPARED TO PC PLATFORM说是Fixed in Unity 5.5.5,没提到线性空间的设置,我们7月份要测试也等不到5.5.5版本了,所以暂时先记录下,继续。
3.2 UWA问答
一般来讲,有两种情况可能会导致色偏和亮度差异。
1.Unity烘焙的Lightmap是32bit的HDR图,而移动设备通常不支持HDR图(32bit per channel),会按照LDR图