如何在 Unreal Engine 4 中获取帧缓冲区?

How to get framebuffer in Unreal Engine 4?

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

我试过截图保存到文件,但是这种方式太慢了。

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

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

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

您要查找的内容在 unreal engine 中称为渲染目标和场景捕获。

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

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

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

unreal engine 也不支持直接在进程之间访问 gpu 资源。我知道使用渲染目标太慢了,也许可以看看 UE4 中的 twitch 流插件以找到他们的流式传输快速解决方案。

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

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