无缝异步场景和纹理加载 - Unity 和 GearVR

Seamless async scene and textures loading - Unity & GearVR

我在使用三星 S6 的 GearVR 上使用 Unity (5.3.4p1) 时遇到两个主要问题:

1) 异步场景加载。有什么变化可以让我在后台加载新场景而不会看到小的冻结吗?场景有约 60k 个三角形,并使用了几个 4k 纹理和约 10 个其他 2k 纹理。 当这个场景正在加载时,有多个短暂的冻结。我知道我可以通过淡出黑色然后开始加载级别来避免这种情况。但这需要大约 10 秒,用户可能会在 VR 耳机打开的情况下长时间看到黑屏而感到困惑。

2) 从使用 WWW class 下载的图像创建纹理。我在另一个场景中使用显示在圆顶上的 360 4k 图像。当我尝试在运行时下载纹理(4k、PNG 或 JPG)时,它是异步完成的。但是当我使用时 Unity 会冻结 2-3 秒:

Texture2D myTexture = www.texture;

除了使用下载的字节并在后台使用非 Unity 算法解压缩 JPG 或 PNG,然后将创建的 rgb 值加载到新纹理之外,是否有任何选项可以避免这种情况? 在 Flickr VR 应用程序中可以看到平滑纹理加载的好例子,但我怀疑他们使用 Unity 来创建这个应用程序。

这两个问题也发生在 Oculus Rift 上,但由于 PC 性能要好得多,所以不太明显。

一般来说,我想使用Unity在Gear VR中实现流畅的加载体验。这有可能吗?

这个问题应该作为两个单独的问题发布,但仍然:

AD 1:添加一个小的预加载器场景,将其呈现给用户,然后他们加载主场景。 Timewarp 应该仍然有效,所以头部方向的变化将是可见的。

AD 2:Android 设备无法呈现 jpeg 或 png。他们必须将它们解压缩为非常大的未压缩纹理,再次加载到内存,然后才进行渲染。这需要大量的内存和时间。

您可以做的是拥有原生 DXT 或 ETC 格式的纹理,然后自己将它们作为纹理加载。我遇到了同样的问题,这使我的纹理加载速度加快了近 10 倍。他们使用的内存也更少。

请注意,下载大小会更大,并且根据纹理格式,您可能需要针对不同平台使用不同的文件。