【unity】PowerVR GE8320系列GPU渲染问题分析
一、问题背景
- Unity version:2022.3.xx
- Build options:URP、BRG
- Affected devices:使用了GE8320系列GPU的所有设备,包括OPPO A8、Vivo Y20等;
出于高性能渲染海量场景资源目的,项目引入了BatchRendererGroup技术。BatchRendererGroup支持直接绘制(unity6后引入了间接绘制),理论上兼容性因与直接绘制DrawMeshInstanced一致,而不存在与间接绘制DrawMeshInstancedIndirect一样的兼容性问题。项目使用的是BRG直接绘制,但在所有GE8320系列GPU设备上均无法正常渲染,在brg-shooter中的表现如下。

通过分析报错日志发现相应shader在平台上编译失败(实验设备OPPO A8):
为了交叉验证,同时试验了官方brg-shooter Demo以及当前市面上可能使用了BRG技术的游戏,试验情况如下:
| 游戏 | 概述 |
|---|---|
| 《brg-shooter》 | 与本项目一致,BRG相关shader编译错误,场景渲染异常 |
| 《幻塔》 | 游戏无法进入大地图 |
| 《仙剑世界》 | 启动直接粉屏(大量shader编译错误) |
| 《星球:重启》 | 与本项目一致,BRG相关shader编译错误,场景渲染异常 |
| 《原神》 | 与本项目一致,BRG相关shader编译错误,场景渲染异常 |
| 《重返帝国》 | 游戏无法进入大地图 |
由此可见GE8320系列GPU确实存在大量问题。
二、问题分析
鉴于项目使用的是BRG直接绘制方案,结合上述报错日志,以及获取到的设备渲染相关信息(SystemInfo.graphicsShaderLevel=50,对应于shader target:5.0,满足shader target4.5的需求;SystemInfo.supportsInstancing=true支持GPU实例化),可做如下推断:
- 1.设备硬件本身可能至少支持BRG直接绘制;
- 2.问题关键点在于PowerVR提供的设备驱动里关于shader的编译库有问题;
- 3.也有可能是unity自身的bug;
三、问题结论
鉴于PowerVR GPU存在诸多的问题,而米哈游《原神》也移除PowerVR GPU支持,因此项目也可考虑不在兼容PowerVR GPU设备,对于PowerVR GPU包括但不限于GE8320系列GPU,如若再次出现BRG无法正常渲染,可直接放弃;
同时同步向unity官方反馈该bug,以期官方在未来的修复;
