【Unity】关于GPU异步回读Android兼容性问题

1、前言

        我们需要做RVT的功能,所以需要使用Unity的GPU 异步回读的功能。也就是使用如下API:AsyncGPUReadback 。其官方文档如下:

        Unity - Scripting API: AsyncGPUReadback

那么这个API是否能无脑使用呢?

        Unity版本:2018.4.36f1

2、 OpenGL不支持GPU异步回读?

        但是在实际使用时,发现其兼容性有问题:这个API在安卓手机上,只能在Vulcan模式下使用,而在OpenGL上不能使用。 而关于这一点,Unity的官方回复如下:

        也就是 AsyncGPUReadback 这个接口,不支持OpenGL(在安卓上只支持Vulcan)。在Unity 2021.2 + 的版本,Unity提供了对OpenGL的支持。

        正常情况下,就只需要设定打包时用Vulcan即可。但是我这个项目还有别的问题:

3、  Vulcan不支持视频播放

        如果使用Vulcan模式,会导致视频播放不出来。无论是Unity原生的API,还是第三方插件,都无法播放视频。

        我们项目使用了 AVPro Video 这个插件,在Vulcan模式下报错:

        在其官方用户手册的解释如下:

         注意,上面这个文档是 AVPro Video的最新版本文档。也就是说,即便是升级到最高级的 AVPro Video ,也是不支持 Vulcan 的!

        其他市面上的主流插件,也没有提供对Unity2018版本、以及Vulcan的支持。如果使用Unity的原生播放视频的插件 (Video Player),也是会遇到同样的问题:

         在Unity的官方文档,说明如下:

         如果需要在Vulcan模式下播放视频,解决方案只有一个:升级Unity至2019.1以上。然而我这个项目并不能升级,因此只有放弃Vulcan。

4、 在OpenGL上实现GPU异步回读

        这里需要使用一个插件:   AsyncGPUReadbackPlugin/UnityExampleProject at Android · kidapu/AsyncGPUReadbackPlugin · GitHubUnity plugin that provide AsyncGPUReadback for OpenGL - AsyncGPUReadbackPlugin/UnityExampleProject at Android · kidapu/AsyncGPUReadbackPluginhttps://github.com/kidapu/AsyncGPUReadbackPlugin/tree/Android/UnityExampleProject        这个插件是在OpenGL上实现异步回读的,实测在2018上也可以使用。具体的接入方法在Git工程里面有写,其接口与Unity原生接口类似,没有什么难度。

        性能上,与Unity原生的 AsyncGPUReadback 差不多 。不过要注意的是,他这个原本的工程里只有 armeabi-v7a 的架构,如果需要 arm64-v8a 架构需要自己在 Android Studio 中构建。因为已经有源代码了,所以构建也很简单。

        注意,这个插件不支持 x86 架构,因此在模拟器上会有问题。

猜你喜欢

转载自blog.csdn.net/cyf649669121/article/details/125321140
今日推荐