真机适配问题记录(二)
几乎每个版本,都有各种奇怪的引擎适配问题出现,手机还不能像PC那样给玩家装环境,什么时候手机系统和驱动标准能统一一下啊!🤣
华为手机大量像素无法渲染
机型:大部分华为手机,并且系统在Android9.0以下
表现:部分像素无法渲染出来,而且无法渲染的像素一直在动,不稳定。
原因:华为手机的OpenGL渲染驱动Bug,在华为Android9.0使用MSAA 4x以上并且启动HDR RT的情况下会导致问题,9.0以上的系统已解决。
解决方案:
- MSAA切换到4x以下
- 升级Android系统
- 切换到Vulkan
目前使用方案1解决。
华为机器下进入草原卡死
表现:GPU渲染错误,系统卡死,无法操作手机只能重启。
复现机器:mate20,honorv20,Android9.0
复现工程:
ShaderBug.rar :场景中有问题的模型和材质是石头,此时阴影距离为0,MainLightShadowCasterPass不会执行,_MainLightShadowmapTexture没有赋值
ShaderHuaweiBug.rar :最小复现场景,只有一个Shader,Shader在FS只调用了SampleCmpLevelZero,阴影距离为0,项目配置为线性空间,API为OpenGLES3,其他都是默认配置。
起因:TA替换了新的Pbr材质,该Pbr材质基于Unity BRDF1,因此阴影部分也是使用SAMPLE_TEXTURE2D_SHADOW/SampleCmpLevelZero采样深度/Shadowmap纹理。
原因:见ShaderHuaweiBug工程,华为机器下,使用SampleCmpLevelZero采样非深度纹理/未赋值深度纹理都会卡死,其他机器(测试小米9)正常。Gamma空间正常(Gamma使用OpenGLES2)。阴影距离大于1正常 。
都是由于MainLightShadowCasterPass没有执行,_MainLightShadowmapTexture没有赋值,使用SampleCmpLevelZero采样未赋值的深度纹理会在OpenGLES3下会卡死。
解决方案:_MainLightShadowmapTexture赋值的时候再采样,否则不进行阴影采样: