【问题标题】:How to get framebuffer in Unreal Engine 4?如何在虚幻引擎 4 中获取帧缓冲区?
【发布时间】:2019-11-29 20:36:53
【问题描述】:

我使用 Unreal 作为模拟服务器。现在我可以从 Python 客户端连接到它并通过 UDP 传输/接收数据。但是我仍然没有找到合适的方法来捕获帧并将其流式传输到 Python 客户端以在 OpenCV 中进行处理。

我尝试制作屏幕截图并将其保存到文件中,但这种方式太慢了。

我也尝试渲染到纹理目标,但这对我来说也不是最佳方式,因为我需要渲染 2 次(用于相机和 2d 捕捉器)。

现在我找到了一种访问 Vulkan 帧缓冲区的方法(我在 Linux 上),但我找不到任何文档或示例,如何做到这一点。

如何在自定义 c++ actor 中获取原始帧缓冲区字节数组?

【问题讨论】:

  • 是什么让您认为某处存在“原始帧缓冲区字节数组”? Vulkan 当然没有定义这样的事情。基于 UE4 引擎的应用程序是否还在您当前的进程中运行?
  • @NicolBolas,因为它(帧缓冲区)必须在某个地方,否则呢?此外,我发现了这个template
  • "基于 UE4 引擎的应用程序是否还在您当前的进程中运行?" - 嗯,是的,它是

标签: unreal-engine4 vulkan


【解决方案1】:

您好,您实际上可以从委托中访问此信息: FSlateApplication::Get().GetRenderer()->OnBackBufferReadyToPresent() 这将在帧准备好时调用,它将返回渲染的 SWindow 的指针和FTexture2DRHIRef 包含实际的后台缓冲区,拥有 RHI 纹理是您捕获字节的机会。

UE 已经有一个类可以在他们的实现中为他们与 iPad 一起使用的虚拟相机做你想做的事情。它被称为 FFrameGrabber,您可以使用它,或者如果您需要更复杂的东西,您可以查看 OnBackBufferReadyToPresent 委托的实现方式

【讨论】:

    【解决方案2】:

    您正在寻找的是虚幻引擎中的渲染目标和场景捕获。

    无法为您提供如何将这些信息从 ue4 导出到您的 python 应用程序的确切代码,因为我不太清楚您究竟需要什么,但也许一个好的开始是搜索引擎代码。

    教程设置渲染目标 https://docs.unrealengine.com/en-US/Engine/Rendering/RenderTargets/index.html

    我很确定您能够从 gpu 查询帧缓冲区/渲染目标纹理并在 c++ 中读取它们。然后将其传递给您的应用程序。

    虚幻引擎也不支持在进程之间直接访问gpu资源。我知道使用渲染目标太慢了,不妨看看 UE4 中的 twitch 流插件,了解他们的快速流解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 2020-07-24
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2019-12-09
      相关资源
      最近更新 更多