【发布时间】:2022-01-13 15:46:47
【问题描述】:
我有一组表示相机位置的变换矩阵。我想用这些来截取许多屏幕截图(成千上万)。
我想按如下方式执行:
- 从数组中读取转换
- 将摄像头放在需要的地方
- 截屏(自动)
- 转到 1。
使用此蓝图,虚幻引擎崩溃,我认为这是由于尝试在 1 帧以下运行的循环。
如何正确截取这些自动截图?
PS:UE 新手。
【问题讨论】:
标签: unreal-engine4 unreal-blueprint unreal-engine5
我有一组表示相机位置的变换矩阵。我想用这些来截取许多屏幕截图(成千上万)。
我想按如下方式执行:
使用此蓝图,虚幻引擎崩溃,我认为这是由于尝试在 1 帧以下运行的循环。
如何正确截取这些自动截图?
PS:UE 新手。
【问题讨论】:
标签: unreal-engine4 unreal-blueprint unreal-engine5
不管崩溃问题如何,您都可能不得不将自己限制为每帧一个屏幕截图,因为您希望在截屏之前让渲染器有时间使用新的摄像机角度进行更新。
因此,我建议在您的蓝图上使用 Index 变量,并且在每一帧中:
然后等到下一帧。我建议先截取屏幕截图的原因是,您可以让游戏/渲染线程有时间更新您在最后一帧结束时设置的最后一个相机变换。
希望对您有所帮助!附:您可能想查看 Sequencer,特别是其中的 rendering out videos。工作流程与我上面概述的大致相同,但您可以跳过屏幕截图步骤并渲染出图像序列。我没有为你提供完整的端到端解决方案,只是想出一个想法供你研究。
【讨论】:
您应该在两次调用之间使用合理的延迟,足以保存文件。
不要使用 for 循环,因为它会导致过多操作的阻塞调用。
这是应该起作用的东西:
调用一次“start”,然后调用一次“take next”。 “Take next”是递归的,所以在这之后,您只需要等待所需的时间,直到所有图像都制作完毕。
您也可以考虑使用“文件存在”节点来检查您要制作的屏幕截图是否已经制作,如果是则跳过。这样,即使中途崩溃,也无需重新制作所有截图。
【讨论】: