【问题标题】:What tasks in 3d program does CPU / GPU handle?CPU / GPU 处理 3d 程序中的哪些任务?
【发布时间】:2014-06-12 11:52:12
【问题描述】:

在 3D 建模界面中旋转场景时,该任务的哪一部分由 CPU 负责,哪一部分由 GPU 负责? (网格顶点移动、着色、跟踪 UV 坐标 - 可能会抵消它们、照亮三角形并正确渲染透明度)

此类建模程序(实时)通常使用哪种渲染模式 - 立即或保留?

【问题讨论】:

  • 立即/保留之间的区别与仅光栅化的图形处理器一样陈旧。自从硬件 T&L 正式引入我们的词汇表以来,任何为利用硬件渲染而编写的新建模软件都将尽可能多地将这些东西推送到 GPU 上。非交互式高质量渲染可能由专有软件渲染器处理,但您看到的实时预览将使用现代 API 完成,这排除了即时模式。

标签: opengl gpu cpu render mode


【解决方案1】:

首先,GPU 负责将点、线和三角形放到屏幕上。但是,这涉及到一定数量的计算。

通常的管道是,对于每个顶点(属性的组合,通常包括但不限于位置、法线、纹理坐标等),将顶点位置从模型局部空间转换为标准化的设备坐标。在大多数实现中,这是一个 3 阶段的过程。

  1. 从模型局部空间转换为视图 = 眼睛空间 - 眼睛空间坐标稍后可用于照明计算等事情
  2. 从视图空间到剪辑空间的转换,也称为投影;这决定了视图空间的哪一部分稍后将在视口中可见;这也是引入仿射透视的地方
  3. 通过坐标均匀化映射到标准化的设备坐标(如果使用仿射投影,后面的步骤实际上会创建透视图)。

上述计算通常由 GPU 执行。

在 3D 建模界面中旋转场景时,该任务的哪一部分由 CPU 负责,哪一部分由 GPU 负责?

嗯,这取决于您的意思是哪种轮换。如果您的意思是改变视口,但场景输入数据中的任何内容实际上都没有改变。唯一改变的是第一个转换步骤中使用的参数。该参数通常是一个 4×4 矩阵。旋转视口时,会在 CPU 上计算新的模型视图转换矩阵。然后将该矩阵传递给 GPU 并重新绘制整个场景。

但是,如果模型实际上在建模器中进行了修改,那么计算通常在 CPU 上进行。

(网格顶点移动、着色、跟踪 UV 坐标 - 可能会抵消它们、照亮三角形并正确渲染透明度)

在在线渲染器中,这通常主要由 GPU 完成,但某些部分可能由 CPU 预先计算。

不可能做出明确的陈述,因为工作负载的共享方式取决于实际的应用程序。

【讨论】:

  • 旋转视口时,会在 CPU 上计算新的模型视图变换矩阵。然后将该矩阵传递给 GPU 并重新绘制整个场景。然而,如果在建模器中实际修改了模型,则计算通常在 CPU 上进行。 因此,在第一种情况下 - CPU 进行小计算,结果传递给 GPU 进行进一步计算,在第二种情况下,全部在 CPU 上?
  • @NoobCoder:有点,是的。在第一种情况下,计算是作为绘图过程的一部分执行的,但结果只是屏幕上的像素(除非所谓的“变换反馈”用于将顶点变换结果引导到缓冲区以供回读)。跨度>
  • @NoobCoder:但实际上这并不重要。如今,您不应将 GPU 视为与 CPU 分开的硬件。统一内存 GPU 架构正在兴起,AMD 已经将功能强大的 GPU 与 CPU 放在同一个芯片上;英特尔也是如此。就像 25 年前 FPU 曾经是独立的单元并成为 CPU 的一部分一样,GPU 也是如此。
【解决方案2】:

这个问题我的意思真的是REALLY含糊。 一般来说,无论发生什么,因为它真的取决于程序和它的制造商。较旧的程序大多都是 CPU,因为 GPU 不存在或太弱而无法处理大量场景。 然而,今天 GPU 已经足够强大,可以处理大量场景,程序创建者可以提供各种解决方案,但它通常是一个抽象系统,您可以在其中拥有数据和视图,因此它们允许您在编辑视口中指定您想要的内容:实时 /即时,预处理,高或低细节。程序通常会为了速度而牺牲准确性,以便您轻松编辑。

例如 3ds max 使用渲染设备、视口处理程序和渲染器。渲染器处理生产质量输出今天它们不仅限于 CPU,因为它们可以利用 GPU(想想 OpenCL 或 CUDA),同时保持质量并降低渲染时间。其次,任何人都可以制作插件以按照他们想要的方式实现视口渲染器,让它成为 CPU、GPU 或混合渲染器。 因此,抽象在建模工具中很常见,场景信息被输入视口渲染器,该渲染器通常与游戏引擎的渲染器非常相似。如果您考虑一下,因为它是一个工具,并且有一个 UI 和各种系统,它需要通过在 GPU 上进行尽可能多的渲染工作来处理尝试尽可能多地卸载 CPU,因此编辑发生在内存中关于在“一般”数据结构中比向您显示的数据结构,我不确定,但我认为他们也可能使用图形 api(让它是 OpenGL 或 DirectX)来进行挑选(选择)。

渲染模式就像我所说的“按需”,它通常在需要时渲染,所以在实时预览关闭的场景中,它只会在您修改某些内容或移动相机时渲染,并且作为只要你做了一些需要不断更新的事情,它就会做到这一点。

除此之外,还有混合方法,用户希望获得类似生产的质量,即使在今天,GPU 也很难做到这一点,因此他们选择了真实渲染器的快速淡化版本,以尽可能接近生产质量可能,一个简单的例子是 3dsMax 的“现实”视口,它执行环境光遮蔽,它不是“实时”的,但它执行得足够快,因此它实际上很有用。在更高级的情况下,他们制作了特殊的扩展卡来处理快速光线跟踪,以便能够制作快速/高质量的图形,但即使在这些情况下,主要的事情是相同的,他们以通用内部格式存储可编辑数据并将其输入某种输出某些东西的渲染器,不一定与您从非常高质量的离线渲染器中获得的相同,但它仍然很好地概述了它的样子。

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2017-03-08
    • 2021-12-03
    • 2018-09-10
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多