UE4:输出游戏帧到文件

UE4: output game frames to file

这适用于Unreal Engine 4.9

每一帧,我都想把它保存到文件中(覆盖现有的)。

对于我制作的一个简单的 D3D11 演示,我已经能够做到这一点:

void Engine::CaptureFrame(D3DX11_IMAGE_FILE_FORMAT format, const LPCTSTR fileName){

    backbuffer->GetResource(&resource);
    ID3D11Texture2D* texture;
    HRESULT hResult = resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&texture));
    D3DX11SaveTextureToFile(deviceContext, texture, format, fileName);

    //Clean up
    texture->Release();
    resource->Release();
}

我也用 OpenGL 做到了这一点,使用了一个名为“FreeImage”的库。

我不想修改 UE4 源,正在寻找一种方法 "hook" 进入 UE4 和 "capture" 框架。

我已经设法用 Open Broadcasting Software 做到了这一点,但我想在 UE4 中通过 C++ 或蓝图本机地做到这一点。

我也知道I can do this from the editor,但这不是我想做的。我想在 运行 时间自动执行此操作。

我该怎么做?有可能吗?

对于其他想要这样做的人,您有两种选择。

选项 A

如果你不关心生成多少个截图文件,也不关心它们叫什么,那么你可以使用蓝图:

图像将输出到 \Unreal Projects\ProjectName\Saved\Screenshots\Windows,其中 ProjectName 是您的项目名称。

选项 B

如果您不想要多个屏幕截图文件并且需要控制它们的去向,那么您可以通过代码实现:

//Called every frame
void AMyDempActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    FString filename = "test.png";
    FScreenshotRequest::RequestScreenshot(filename, false, false);

}

这是FScreenshotRequest

上的文档