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

ood*_*600 36 hardware cpu gpu raytracing rasterizing

在对光栅化和光线追踪进行了一些研究之后.我发现没有太多关于CPU如何在互联网上提供光线跟踪的信息.我偶然发现了关于皮克斯的文章,以及他们如何在CPU上预渲染汽车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/ 干杯,萨姆

Lar*_*itz 88

我是大型VFX和动画功能工作室的渲染软件架构师之一,拥有专有的渲染器(不是皮克斯,尽管很久很久以前我曾经是渲染软件架构师).

几乎所有高质量的电影渲染(在所有大型工作室,所有主要的渲染器)都只是CPU.出现这种情况的原因有很多.在没有特别的顺序,一些非常引人注目的,给你的问题的味道:

  • 一切都在内存中时,GPU才会快速运行.最大的GPU卡有12GB左右,它必须能容纳所有东西.好吧,我们经常渲染具有30GB几何体的场景,并引用1TB或更多纹理.无法将其加载到GPU内存中,它实际上是两个数量级太大.所以GPU根本无法处理我们最大(甚至是平均)的场景.(使用CPU渲染器,我们可以在需要时从磁盘中寻找内容.GPU并不擅长.)

  • 不要相信大肆宣传,使用GPU进行射线追踪并不是对CPU的明显胜利.GPU非常适合高度连贯的工作(同时对大量数据执行相同的操作).光线跟踪非常不连贯(每条光线可以朝不同的方向,与不同的物体相交,遮蔽不同的材质,访问不同的纹理),因此这种访问模式会严重降低GPU性能.直到最近,GPU光线跟踪才能匹配最好的基于CPU的光线跟踪代码,即使它已超过它,也不是太多,不足以抛弃所有旧代码并重新启动GPU的多余脆弱代码.最大,最昂贵的场景是GPU速度稍快的场景.在简单的场景中快得多,对我们来说并不重要.

  • 如果您在基于CPU的渲染器中有50或100人年生产强化代码,您只需将其丢弃并重新开始以获得2倍的加速.软件工程的努力,稳定性等等,更重要,也是更大的成本因素.

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

  • Amdahl定律:实际的"渲染"本身只是生成场景的一个阶段,而GPU并没有帮助它.假设完全生成并将场景导出到渲染器需要1小时,"渲染"需要9个小时,而在9小时内,一小时从磁盘读取纹理,卷和其他数据.因此,在用户体验渲染的总共10个小时(按钮直到最终图像准备就绪)中,使用GPU可能加速8小时.因此,即使GPU的速度是CPU的10倍,你也可以从10小时变为1 + 1 + 0.8 =接近3小时.因此,10倍GPU加速仅转换为3倍实际增益.如果GPU比光线追踪的速度快1000,000倍,那么你仍然有1 + 1 +微小的速度,这只是加速的5倍.

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

首先,当你制作一个游戏时,请记住它必须实时渲染 - 这意味着你最重要的约束是60Hz(或者其他)的帧速率,你牺牲质量或功能来达到这个目的.相比之下,对于电影来说,坚不可摧的约束是让导演和视觉特效监督员对他或她想要的质量和外观感到满意,以及你需要多长时间才能获得(在某种程度上)次要.

此外,通过游戏,您可以逐帧渲染,生活在每个用户面前.但是对于电影来说,你实际上是在渲染ONCE,并且传送到影院的内容是电影文件 - 因此电影观众永远不会知道或关心每帧花费10个小时,但他们会注意到它看起来不好看.再说一次,只要它们看起来很棒,那么花费很长时间的渲染就会受到较少的惩罚.

有了游戏,你真的不知道你要渲染什么样的帧,因为玩家可以在世界各地漫步,几乎可以在任何地方观看.你不能也不应该试着让它完美无缺,你只是希望它一直都很好.但对于一部电影来说,镜头都是手工制作的!每个镜头都有大量的人工时间用于构图,动画,光照和合成,然后你只需渲染一次.想想经济学 - 一旦10天的日历(和工资)进入照明和合成镜头恰到好处,在一小时(甚至一分钟)与一夜之间渲染它的优势相当小,而且不值得任何牺牲质量或可实现的图像复杂性.

  • 对于实时光线追踪,我肯定会选择GPU.但它的场景复杂程度要低于我们通常用于电影的场景复杂度. (6认同)
  • @ z-boson:对于具有少量对象和纹理的场景来说,使用GPU可以更快地完成.当你的场景有1亿个多边形并引用600GB的纹理时,这是非常困难的. (5认同)
  • /我敬畏地鞠躬致敬:p (3认同)
  • OP 没有询问实时渲染太糟糕了,因为我认为 GPU 上的实时光线跟踪将是一个有趣的问题。 (2认同)