一:安卓端辉光不显示问题
问题描述:项目中使用unity的PostProcessing package实现辉光的功能,在pc上辉光效果一切正常,但是打出apk在真机测试时,辉光基本没效果。
解决思路:PostProcessing Bloom效果需要有HDR支持才能正确显示。项目切到安卓平台时,Unity的Graphics使用的是默认设置,是不支持HDR的:
此时需要手动勾选HDR,并将HDR模式设置成FP16
上图中HDR Mode支持的纹理格式:
FP16:ARGBHalf,每个通道16bit,带Alpha通道。
R11G11B10:一个像素32bit,R11bit,G11bit,B10bit,不带Alpha通道。
上图中Tier1、Tier2、Tier3分别对应着低中高三档手机(手机显示配置的档次),根据自己项目需求去设置对应的tier就可以;
而在pc端一切正常是因为pc配置高,默认hdr就都是全勾选的。
然后打包测试,问题解决,真机也可以有正确的辉光了。
二:安卓端辉光显示异常(爆闪、黑屏等)
问题描述:使用PostProcessing的bloom,在安卓端有些材质显示正常,有些材质辉光显示不正常,具体表现为:配置低的手机显示会闪黑色方块、辉光效果曝的很严重,配置高一些的手机不会闪黑色方块,辉光只会曝的很严重。这些问题在pc端就都没有,一切正常。
解决思路:检查出问题的材质,看看shader是否在安卓端出现了非法值(NaN),因为PC的显卡配置够高,实际上都是 float 格式,没有低精度的 half 格式,安卓配置低,可能会出现上述情况。
当项目中该过shader后,在安卓端显示一切都正常了。
三:总结
翻阅了相关资料,当使用bloom时,开发项目需注意:
1、写shader时需注意安卓端可能出现NaN的情况;
2、在配置场景辉光时,需注意场景中HDR材质的使用,及bloom参数的设置;
Intensity 柔光效果的强度
Threshold 设置一个阈值,高于阈值的亮度可以产生柔光。我一般设置为1(根据项目走)
Soft Knee 在阈值上下做渐变调整
Clamp 控制产生画面柔光的像素数量,我一般设置为2(根据项目走)
Diffusion 设置面纱效果的扩散(Scatter),独立于屏幕分辨率
Anamorphic Ratio 模拟一种镜头变形效果,设置柔光的扩散方向
[-1,0]代表在垂直方向扩展,[0,1]代表在水平方向扩散
Color 柔光滤镜的色调
Fast Mode 通过降低柔光的质量来提高性能
Texture 在镜头上添加脏斑和污迹的贴图(自己玩一下就知道什么效果了)
Intensity 镜头污迹的强度