为什么我们使用 CPU 而不是 GPU 进行光线追踪?

Why do we use CPUs for ray tracing instead of GPUs?

在对光栅化和光线追踪做了一些研究之后。我发现互联网上没有太多关于 CPUs 如何用于光线追踪的信息。我在 CPU 上看到一篇关于 Pixar 以及他们如何预渲染汽车总动员 2 的文章。他们每帧花费 11.5 小时。使用相同的图像质量,GPU 不会更快地渲染它吗? http://gizmodo.com/5813587/12500-cpu-cores-were-required-to-render-cars-2 https://www.engadget.com/2014/10/18/disney-big-hero-6/ http://www.firstshowing.net/2009/michael-bay-presents-transformers-2-facts-and-figures/ 干杯, 山姆

我是一家拥有专有渲染器的大型 VFX 和动画长片工作室的渲染软件架构师(不是 Pixar,虽然很久很久以前我也曾经是那里的渲染软件架构师)。

几乎所有高质量的电影渲染(在所有大型工作室,所有主要渲染器)都是 CPU。出现这种情况的原因有很多。排名不分先后,一些真正引人注目的问题可以让您了解问题的本质:

  • 只有当一​​切都在内存中时,GPU 才会运行得更快。最大的 GPU 卡有 12GB 左右,它必须容纳 所有东西。好吧,我们通常渲染具有 30GB 几何体和引用 1TB 或更多纹理的场景。无法将其加载到 GPU 内存中,它确实大了两个数量级。所以 GPU 根本无法处理我们最大(甚至平均)的场景。 (使用 CPU 渲染器,我们可以在需要时从磁盘分页。GPU 不擅长这个。)

  • 不要相信炒作,使用 GPU 进行光线追踪并不能明显战胜 CPU。 GPU 非常擅长高度连贯的工作(同时对大量数据执行相同的操作)。光线追踪非常不连贯(每条光线都可以去不同的方向,与不同的物体相交,遮蔽不同的材料,访问不同的纹理),因此这种访问模式会严重降低 GPU 性能。直到最近,GPU 光线追踪才可以与基于 CPU 的最佳光线追踪代码相媲美,即使它已经超越了它,也没有太多,不足以扔掉所有旧代码并重新开始使用 buggy GPU 的脆弱代码。最大、最昂贵的场景是 GPU 仅稍微快一点的场景。在简单的场景中快很多对我们来说并不重要。

  • 如果您在基于 CPU 的渲染器中有 50 或 100 人年的生产硬化代码,您只是不要扔掉它并重新开始以获得一个2 倍加速。软件工程工作量、稳定性等更重要,也是更大的成本因素。

  • 同样,如果您的工作室投资了一个拥有 20,000 个 CPU 核心的数据中心,所有这些都采用您能做到的最小、最省电和最热效率的外形,那也是一个沉没成本投资,你不只是扔掉。用包含顶级 GPU 的新机器替换它们会大大增加渲染农场的成本,而且它们更大并产生更多的热量,因此它实际上可能不适合您的建筑物。

  • Amdahl 定律:实际的 "rendering" 本身只是生成场景的一个阶段,GPU 对此无能为力。假设完全生成场景并将其导出到渲染器需要 1 小时,"render" 需要 9 小时,并且在这 9 小时中,有一个小时用于从磁盘读取纹理、体积和其他数据。因此,在用户体验渲染的总共 10 个小时中(按下按钮直到最终图像准备好),GPU 可能会加速 8 个小时。因此,即使该部分的 GPU 速度是 CPU 的 10 倍,您也会从 10 小时变成 1+1+0.8 = 将近 3 小时。所以 10 倍的 GPU 加速只能转化为 3 倍的实际增益。如果 GPU 在光线追踪方面比 CPU 快 1,000,000 倍,您仍然有 1+1+tiny,这只是 5 倍的加速。

但是游戏有什么不同呢?为什么 GPU 适合游戏而不适合电影?

首先,当您制作游戏时,请记住它必须实时渲染——这意味着您最重要的限制是 60Hz(或其他)帧速率,并且您会在必要时牺牲质量或功能实现这一目标。相比之下,对于电影来说,牢不可破的约束是让导演和 VFX 主管对他或她想要的质量和外观感到满意,而你需要多长时间才能达到(在一定程度上)次要的。

此外,在游戏中,您会逐帧渲染,呈现在每个用户面前。但是对于电影,你实际上是在渲染一次,而交付给影院的是电影文件——所以电影观众永远不会知道或关心你是否每帧花费 10 小时,但他们会注意到它是否看起来不好看。因此,只要它们看起来很棒,花费很长时间的渲染就会受到较少的惩罚。

在游戏中,您实际上并不知道要渲染哪些帧,因为玩家可能在世界各地漫游,几乎可以从任何地方观看。你不能也不应该试图让它变得完美,你只是希望它一直都足够好。但是对于一部电影来说,镜头都是手工制作的!每个镜头的构图、动画、灯光和合成都需要花费大量的人工时间,然后您只需要渲染一次。想想经济学——一旦 10 天的日历(和薪水)用于照明和合成镜头恰到好处,在一小时(甚至一分钟)内渲染它与一夜之间相比,优势很小,而且不值得图像质量或可实现的复杂性的任何牺牲。