我是Metal的新手,我能够实现一个简单的简单场景Quad在屏幕上旋转,但是我想导出1分钟的视频/帧而不必实时进行。 因此,请考虑一下用户,只要打开应用程序并点击“导出按钮”,cpu / gpu就会全速输出Quad旋转的1分钟视频/帧,而无需预览。
我知道如何使用AVFoundation将帧转换为视频,但不实时地将3d场景转换为帧。
有人可以指出我去哪里看吗?
非常感谢您!
答案 0 :(得分:3)
我修改了答案here和Apple Metal游戏模板以创建this sample,该模板演示了如何直接从Metal渲染的一系列帧中录制视频文件。
由于Metal中的所有渲染均绘制为纹理,因此适应普通的Metal代码并不难,因此适合离线渲染到电影文件中。回顾核心录制过程:
AVAssetWriter
AVAssetWriterInput
的{{1}},以便您可以编写视频帧.video
,以便您可以将AVAssetWriterInputPixelBufferAdaptor
作为帧添加到视频中关于驱动录音,由于您没有从CVPixelBuffer
或MTKView
获得委托回调,因此您需要自己做。基本模式如下:
CADisplayLink
如果呈现和记录代码是异步的并且是线程安全的,则可以将其放在后台队列中以保持界面响应。如果渲染需要很长时间,您还可以引发进度回调以更新UI。
请注意,由于您不是实时运行,因此需要确保任何动画都考虑到当前的帧时间(或帧之间的时间步长),以便在回放时一切正常。在我的示例中,我只是通过使多维数据集的旋转直接取决于帧的显示时间来实现此目的。