Cycles X

Cycles X

今天,距离Cycles发布已经整整10年了。在过去的十年中,Cycles已经发展成为一个成熟的生产型渲染器,被许多艺术家和工作室使用。在这10年中,我们学到了很多东西,有运行良好的东西,也有运行不畅的东西,或者随着渲染算法和硬件的发展而变得过时。

我们渴望对核心的Cycles渲染做出更大的改进。然而,过去的一些决定阻碍了性能的提高,并使代码的维护变得困难。为了解决这个问题,Sergey和我启动了一个名为Cycles X的研究项目,目的是刷新架构,为未来10年做好准备。我们不是寻找快速修复或优化,只解决部分问题,而是将架构作为一个整体来重新思考。

项目情况

概括地说,项目的目标是:

  • 为未来的发展改进架构
  • 提高视口和批量渲染的可用性
  • 提高在现代CPU和GPU上的性能
  • 引入更先进的渲染算法

我们的第一个目标是验证新的架构。为此,我们已经实现了一个新的GPU内核的原型,以及视口和批处理渲染的新调度算法。现在有足够的功能来渲染我们的一些基准场景。

当前Cycles X的内核图

今天我们将分享一些初步的性能结果,并发布代码,以便与Cycles贡献者合作。我们为开发者提供了关于新架构的技术介绍,代码可以在git.blender.org上的cycles-x分支找到。

还有很多事情要做。我们预计至少需要6个月的时间,直到这项工作成为Blender官方版本的一部分。

初步结果

首先,用著名的基准场景进行GPU渲染的一些结果。场景已经被修改过了,删除了体积渲染等功能,这些功能还没有实现。

请注意,随着我们对新架构的不断研究,这些数字会发生变化。几天前,Patrick Mours刚刚添加了对OptiX的支持。

渲染测试场景

最显著的改进是在有许多光线反弹和着色器的室内场景中,新内核可以实现更高的占用率和一致性。

在这一点上,CPU的渲染性能与以前大致相同,但新的架构在这方面也开启了新的可能性。

其次,我们一直在努力改善视口渲染。更快的渲染内核有帮助,但我们也发现,改进调度、计时和显示机制可以使视口感觉更有互动性。新的视口支持自适应取样和批量采样,使图像在最初的几个采样完成后清理得更快。

https://www.youtube.com/embed/INa-oT7TlzU?feature=oembed CPU viewport rendering

https://www.youtube.com/embed/VFZQo1go134?feature=oembed CPU viewport rendering with Open Image

Denoiserhttps://www.youtube.com/embed/atQDFQhMS4Q?feature=oembed GPU viewport

renderinghttps://www.youtube.com/embed/L8No9mROO_g?feature=oembed Viewport adaptive sampling comparison

期望

在未来几个月,我们将尝试更多的优化想法,并恢复缺失的功能。当功能缺失时,通常是因为我们想在新架构中采取不同的方法。一些例子。

  • 体积渲染:我们计划用更现代的算法来实现光线行进和光线采样
  • 阴影捕捉器:我们将尝试一种不同的算法,可以考虑到间接光
  • 多设备渲染:我们将尝试更细粒度的无瓦片负载平衡

除此之外,新的架构应该能让我们更容易地适应像路径引导这样的渲染算法,我们将对这些算法进行实验,并研究如何使其对GPU友好

弃用和重写

作为新架构的一部分,我们正在删除一些功能。最值得注意的是:

  • OpenCL渲染内核。有限的Cycles分割内核实现、驱动错误和停滞不前的OpenCL标准的结合,使得维护工作过于困难。我们只有从一个干净的地方开始,才能做出我们现在正在进行的各种更大的改变。
    我们正在与AMD和英特尔合作,让新的内核在他们的GPU上工作,可能会使用不同的API(如CYCL、HIP、Metal…)。这不一定会在第一个版本中准备好,实现需要达到比现在更高的质量标准。长期来看,支持所有主要的GPU硬件供应商仍然是一个重要的目标,我们认为有了这个新的架构,我们将能够有更好的性能和一些稳定性。直到更多的GPU再次在Cycles X中得到支持,这只是一个时间问题。
  • 分支的路径追踪。我们正在努力改进采样算法,使之过时,并在需要的地方更自动地分配采样。改进的自适应采样和灯光重要性采样是关键所在。
  • NLM降噪器。AI降噪算法,特别是OpenImageDenoise通常会产生更好的结果,我们将为它们优化架构和工作流程。

这些功能将在2.83和2.93 LTS版本中保持可用和支持。