【问题标题】:Unity 4.3 + Android - I Need to Update Texture2D or RenderTexture at least 30 FPS at 1080 x 1920Unity 4.3 + Android - 我需要在 1080 x 1920 下更新 Texture2D 或 RenderTexture 至少 30 FPS
【发布时间】:2014-02-19 23:33:52
【问题描述】:

快速说明 - 如果您的 Unity/Android 代码将在 Unity 端以 30+ FPS 播放 视频流 h264,而不是完整视频,并且可以分享一下,这样可以救我!

说明: 我有 Unity Pro 4.3。第一种简单的方法是创建一个 Color32 [1080*1920] 数组,并将元素分配给通过数学函数创建的值。 主要目标是创建一个 Texture2D 并使用像素颜色数组,并能够以 30+ FPS 逐帧更新它们。以下是我目前的结果:

Texture2D Unity Side Only:

  • 纹理的分配不是问题。
  • Apply() 的使用是个大问题。这是实际更新纹理所必需的。
  • 使用 1080 x 1920 纹理以 0.5 FPS 运行。当然太慢了。

Unity和Android端之间的Texture2D:

  • 我已经看到并尝试使用 Android Java OpenGL ES 示例。
  • 如果我能够找到解决方法,这听起来和听起来仍然是最好的方法。
  • 我通过桥将 Texture2D 的“指针/ID”传递给 Java 端。
  • 尝试使用“指针/ID”更新 Java 端的 Texture2D,方法是: glBindTexture(GL_TEXTURE_2D, texturePtr);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, s_resolutionWidth, s_resolutionHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  • 使用这个“指针/ID”,我可以进行大量调用,在 GL 调用之前和之后,在 Java 端这一切都应该是合法的。
  • 这声称它是答案,但这在我在 Unity 端使用 Apply() 之前没有任何影响,这当然会破坏它。
  • 我的假设是 Java 代码已经改变,我需要弄清楚什么可以解决我的问题。

渲染纹理:

  • 这也是我认为的潜在答案。
  • 它声称通过纹理更改可以更快地更新,但它似乎只能通过相机设置纹理。
  • 我想用数学计算的至少 30 FPS 的简单 1080 帧更新 RenderTextures。
  • 我发现这样做的唯一方法是不幸地使用 Texture2D,当然需要 Apply()!
  • 所以到目前为止,这似乎接近可用,但总的来说不可用。

我真的需要知道在 Unity 中以 30 FPS 更新纹理的最佳方法。一旦我知道如何做到这一点,即使是最简单的形式,我也能取得进步。

【问题讨论】:

  • 您可能不得不硬着头皮购买 Unity Pro 才能使用 movie textures 免费的 Unity 社区视频脚本并不多,而且 30FPS 要求很高。您可以首先确保您的纹理是 2 的幂,这会稍微提升性能。
  • 我有 Unity Pro。正如描述所言,我不得不处理一部电影的所有单独流。一部电影可以有大量的视频、声音和其他流,所有这些流都是一致创建和运行的。因此,我需要能够更改流并显示我们在自己的数据流中创建的数据。我有这个专门在机器人上工作,我只需要找到一种方法将数据缓冲区从流移动到 Unity 并更新主纹理。

标签: java android opengl-es unity3d


【解决方案1】:

您不能指望使用标准 glTexImage2D() 函数获得接近 30 fps 的速度,因为它会复制和转换每张图像,这使得速度太慢。该功能仅适用于加载一次并多次使用的静态图像。 Android 平台通过使用 EGL Image Extension 来避免此功能,应用程序也可以这样做。但是,它确实需要本机代码。本文给出了Android的介绍和示例代码:

http://software.intel.com/en-us/articles/using-opengl-es-to-accelerate-apps-with-legacy-2d-guis

【讨论】:

  • 非常感谢您的快速回复!我只来得及做一个轻快的运行,但我想你很清楚这种情况。今晚我将通读它,我会看看它如何适用于我的情况。我有一个简单的问题,你可能有也可能没有答案。这种方法是否允许我直接在 Unity 端显示它,或者我是否需要以某种方式让 Unity 级别除了 UI 之外是透明的,以便看到快速变化的纹理?
  • 我很了解 Android 上的 OpenGL ES,但我不了解 Unity。我试图提供帮助的主要原因是我很想知道您对此的了解,所以请务必分享!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2019-05-03
  • 2015-11-13
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多