我了解您通常在 Blender 或其他一些 3D 建模软件中创建复杂的 3D 模型,然后将其导出为 .obj。这个 .obj 文件被解析到你的程序中,openGL 会渲染它。据我了解实时渲染。
现在我想知道是否有类似预渲染对象的东西。我有点困惑,因为关于实时渲染的文章/视频太多了,但我没有找到任何关于非实时渲染的信息。这样的事情是否存在?由于没有实时渲染,我唯一想到的就是视频。
我想这几乎是一个是或否的问题:) 但如果它存在,也许有人可以将我指向一些带有解释的网站。
“实时渲染”意味着帧的生成速度与显示速度一样快。“非实时渲染”或“离线渲染”是指一次生成一帧,花费尽可能多的时间来获得所需的图像质量,然后将它们组合成电影。可以实时渲染视频游戏质量的视频;然而,像皮克斯电影这样精致的东西必须在离线模式下完成。单个帧仍可能需要数小时的渲染时间!
尚不完全清楚“预渲染对象”是什么意思,但是有些东西称为 VBO 和顶点数组,它们将对象的几何图形存储在 VRAM 中,以便不必使用glVertex3f()
或类似的每一帧将其加载到渲染管道中。这称为立即模式。
使用 VBO 和顶点数组而不是立即模式,因为它们比调用图形驱动程序为每个顶点将数据加载到 VRAM 中要快得多,因为它们保存在 VRAM 中,这比普通 RAM 快,准备好启动到渲染中管道。
此处的页面也可能有所帮助。
没有什么能阻止您渲染到屏幕外帧缓冲区(即 FBO),然后将其保存到磁盘而不是显示到屏幕上。例如,在 CUDA、OpenCL 等出现之前,GPGPU 技术就是这样工作的。您可以将数据加载为未过滤的浮点纹理,使用 FBO 上的像素着色器执行计算,然后保存结果返回磁盘。
在我上面发布的链接中,它在概述中指出:
这个扩展定义了一个简单的接口,用于绘制到渲染目的地,而不是由窗口系统提供给 GL 的缓冲区。
然后它继续说,
通过允许使用可附加帧缓冲区的图像作为渲染目标,此扩展支持一种“离屏”渲染形式。
因此,您可以通过在屏幕外渲染一些渲染速度低于 30fps 的场景来获得“非实时”渲染,然后将这些结果保存到可以在以后播放的某个电影文件或文件序列格式中.