Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南

Arnold(C4DtoA) Mr.R 1个月前 (01-18) 1434次浏览 已收录 61个评论 扫描二维码

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 1Arnold 是一个路径追踪渲染引擎,用于制作故事片(左:2013《地心引力》华纳兄弟,Framestore;)、商业广告(中:2016 《Racing Faces》The Mill;)、动画电影(右:2017 《内裤超人》 梦工厂;)、电视连续剧、音乐视频、游戏动画、运动图形等等…Arnold渲染引擎具有照片级真实感和艺术指导的视觉效果。

Arnold是一个基于物理的渲染器,用于长篇动画和视觉效果制作。在这个对复杂的、真实的、基于多通道光栅化工作流程需求日益增长的时代,Arnold横空出世,来承担所面临的挑战。

Arnold使用简单优雅的,暴力蒙特卡洛路径追踪算法,来生产实际的渲染,然而要实现这一点,则需要构建一个健壮的光线追踪核心,它需要能摄取几何图形着色和照明的大量细节,并能高保真度的效果,生成最终图像,同时能充分利用内存和处理器的能力,且具有良好的扩展性。

阿诺德的指导原则是尽可能少地暴露控制,为艺术家提供快速的反馈,而且能够适应各种生产工作流。

在本文中,我们会描述Arnold的体系结构,重点关注在开发过程中的演化,为满足上述需求和目标,而做出的设计和实现的方法。

Arnold主要是一种单向路径跟踪器,它避免了使用难以管理和易受人为因素影响的缓存,并且位于光线跟踪引擎的顶层,该引擎经过优化后,可以在整个场景中摄取和遮蔽数十亿条,在空间上不连贯的光线。Arnold 也提供了全面的系统的 API 配置、扩展功能、场景描述、场景渲染和保存结果的方法。

CCS 概念: 算法→射线追踪;
关键词: 渲染系统、产品渲染、光线追踪,蒙特卡罗,路径追踪,全局照明…

1、介绍
在纯技术层面上,计算机生成现实主义视觉的图像,可以归结为两个方面:

注意:本段内容须成功“回复本文”后“刷新本页”方可查看!

几十年来,主流的渲染生产系统,都是基于微多边形栅格化的(Cook et al.1987)。而这些算法模型,可以处理复杂的几何数据集,可是光照模拟的质量较差,而光线追踪可以达到更高的质量,并具有精确的照明效果,只是运行成本太高,然而,除了在一些简单的场景中使用,大多数情况下,光线追踪被认为并不适合用于生产。

多年来,对现实主义效果的日益增长的需求,迫使受到微多边形光栅化限制的用户,想要找到产生更复杂、更合理的照明效果的方法。而添加着色或间接光等功能,需要使用各种预计算过程,来创建着色贴图或漫反射缓存,然后,在这些中间过程的运作期间,再将摄像机可见物体进行光栅化着色,从而生成最终图像。

然而,这种方法导致了一个复杂的工作流,围绕着各种渲染过程之间的复杂依赖关系的管理,以及期间的结果存储,输出的质量依然受限,又要调整诸多参数,并且由于使用了各种类型的缓存和插值,在时间上也难以把控,导致艺术家们在画面和镜头上的运作变得缓慢。

此外,许多令人满意的效果,如镜面反射、折射、准确的间接照明,都是不容易实现的。而在渲染器中添加光线追踪功能,可以在最终效果出来期间,有选择性的去添加这些效果(Christensen et al.2006)。现在,光线追踪正在慢慢受到追捧,但艺术家需要一种更简单、可扩展的方法,来获得自然的合理的照明效果,同时对迭代速度的要求更快、生产出错率要更少。

1.1 路径追踪(Path Tracing)

随机路径追踪(Kajiya 1986)提供了一个优雅的真实的照片绘制方法,它不受栅格化问题的影响,可以模拟所有自然的照明效果,例如:柔和的阴影、间接照明、光泽度、反射、运动模糊、景深、毛发、皮毛、体积等等……而不需要将渲染分解为中间的过程,来计算这些效果,用户只需提供场景和设置,就可立即执行最终图像的计算。

除了分解渲染工作流程之外,路径追踪还有其他优点,通过少量的采样参数,进行控制相对容易,近似值的误差以细粒度噪点的形式出现,这种噪点比基于缓存的方法的“污点”痕迹,在视觉上更能令人接受,也不易受到动画中低频闪烁的影响,它还允许进行渐进式渲染,从而可以快速迭代着色和照明,并且随着采样数的增加,噪点量可以预期性的减少。

路径跟踪的优点是众所周知的,但其较长的渲染时间和较低的效率,以及一些重要的生产特性,如运动模糊、复杂的几何图形和体积,似乎是暴力路径追踪方法的一个弱点。然而,当下,生产工作流程变得如此复杂,以至于艺术家们浪费了大量的时间和精力,尽管路径跟踪的速度可能会更慢,但可以更轻松完成工作呀。

在发挥路劲追踪优势的同时,尝试和解决路径跟踪的缺点,变得很有搞头,特别是考虑到,艺术家花上一小时来创作,却要花费数百倍的时间来计算。

1.2 阿诺德理念
Arnold 的发展是由于需要一个基于物理的,同时又能用于流水线型生产的渲染器,并且可以更具影视需求的复杂性进行扩展。Arnold 的目标是打造高效地渲染核心,能够完成复杂度极高的动态场景,且无人工痕迹,并简化工作流、满足基础建设需求和用户体验,路径跟踪自然地成为首选。

我们的指导原则是:渲染器必须易于使用,并能够向艺术家提供快速的反馈,当然速度和内存效率,对于用于生产的渲染器也很重要。通过本文,我们将讨论实现这些目标所采用的一些策略。还有一点,容易被大家忽略的是,简单对于节省艺术家的时间也很重要。减少调节按钮、滑块,不仅使得渲染器更容易使用,而且还能降低错误的设置选择,因为错误的设置,也可能导致渲染速度变慢或不起作用。

如上所述,这些目标,在很大程度上,是从光栅化到路径追踪的转换来实现的。为了能让用户专注于他们的创作,Arnold 则专注于解决复杂性的实现、可预测性、可扩展性。

与特定管道定制的内部渲染器不同,Arnold 这样的商业渲染器,必须与独特的工作流集成,可以针对不同的工具进行定制。因此 Arnold 被认为是一个程序编程接口(API),也就是可以将 Arnold 合并到现有的内容创作工具中,并通过扩展其功能(着色器、文件加载器、用户终端应用等…),来满足用户自定义的需求。

2.系统概述
Arnold 被设计为用于离线和交互式渲染,但其 API 允许用户,实现自己的基于光追的功能,例如:渲染纹理(烘培)。
交互性不仅限于相机运动,还可能是场景的调整,为了减少交互式渲染的延迟,我们避免了费劲的计算,并做了全局优化。例如,将几何体对象合并到单个光追加速结构中、预计算着色或照明。

2.1 节点结构
该渲染系统建立在一个基于可编程节点的结构之上,每一个场景组件,包括几何体、灯光、摄像机…都是一个节点,它们只是一个带命名参数集合的类型,节点可以多次实例化,并在编辑器中进行互联。

所谓的”程序”节点,可以调用用户提供的代码,例如,创建子节点来表示鸟毛,或者从自定义文件格式中导入数据。节点数据可以包含在 Arnold 场景源文件(.ass 格式)中。

Flat 列表存储顶层几何节点,如三角形网格、曲线集、程序,每个节点都有自己的转换形式。使用这种简单的结构,可以提高代码的绘制效率和光追结构加速。

它不支持分组节点转换,但在实际工作流中并没有太大的限制,因为场景转换器弥补了,复杂输入层次结构扁平化的不足。必要时,Arnold 内部任意深度的层次结构,仍可以通过程序节点嵌套实现,如我们在 3.5.4 节中讨论的那样。

2.2 初始化和节点延迟处理
一旦通过 API 或程序节点中的代码创建了所有节点,就会(自底向上)计算所有几何节点的边界,并在顶级节点上构建光线跟踪加速结构,即层次包围盒(bound-ing volume hierarchy, BVH)。单独的节点在自身内容之上有独立的 BVHs,对于程序来说,是子节点。然而,每一个这样的 BVH 的构造,以及任何涉及到的几何基元处理,都被延迟,直到一条射线与节点的边界相交。

延迟处理有两个主要的好处
一种是,如果射线没有击中一个对象,我们可以避免处理其相应节点,以节省时间和内存开销。需要处理的程序包括多边形、曲面细分、平滑、错位和最终几何基元的 BVH 构造,如第 3 节所述。当应用了细分对象时,节省下来的开销会很大。
这种方法的另一个好处是,它可以减少交互式渐进渲染会话中的第一个像素的时间,允许在处理场景中的所有对象之前,快速渲染和显示一些像素。这种情况在大型户外环境中尤其常见。事实上,在第二或第三次渐进渲染时,一些对象处理仍然会发生,这是很正常的,因为到目前为止,在场景中追踪到的光线相对较少。

延迟处理也有缺点
一个是代码复杂性增加,特别是在并行性方面,确保线程不会阻塞正在处理追踪射中对象的光线。另一个原因是它,使得跨 BVH 层次结构的优化变得更加困难,正如我们稍后在 3.4 节中讨论的那样。

直到最近,程序节点代码的执行也被延迟,直到光线与节点边界相交。

这有两个原因:
一种是为整个节点层次结构的优化打开大门,比如 BVH 构造或节点 w.r.t.的镶嵌,w.r.t.是所有实例中离摄像机最近的距离。
另一种方法是减轻用户,必须为顶级 BVH 构造,所需的过程性边界指定的负担。计算这样的边界需要额外的预处理,而且并不总是很容易完成,等等。用于程序生成或存档、磁盘转储、几何图形。结果,界限往往太松或太紧,导致效率低下或错误的 BVH。虽然稍微增加到第一个像素的时间,但执行延迟过程的扩展,带来了总体性能的提高,同时增加了用户的便利性。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 2

电影《银河护卫队》中的空间站,包含了 12 亿个独特的三角形,使用 Arnold 和 30GB 内存渲染。©2014 漫威影业/迪斯尼电影公司,由 Framestore 提供。

2.3 光线和着色处理

Arnold 的光线跟踪内核不使用光线包,而是一次处理一条光线并与其对应的点进行着色。在 BVH 遍历过程中,我们仍然受益于 SIMD 并行(Wald et .2008),并通过将多个基元与射线相交,或将单个基元与射线相交。如果我们在光线相干的情况下,使用大的光包,我们可能会获得更高的性能。例如,小光圈相机发出的光线(Bouloset .2007;Reshetov et al.2005)。然而,大多数路径追踪光线不符合这个标准。根据我们在制作渲染方面的经验,随着场景复杂性、反弹次数、运动模糊和景深的使用的增加,相干光线的百分比会下降。这使得追踪射线包变得困难,因为它们只加速了所有射线中的一小部分。

将相似的光线或着色器组合在一起,有助于找到更多的一致性。这对于 SIMD 着色和纹理化特别有吸引力,即使是单光线遍历(Afra et al.2016; Eisenacher et al.2013; Lee et al.2017)。虽然批量着色,是我们想要探索的途径,但是我们必须注意,在 Arnold 中加入这样的策略,很可能不会与之前的 C++着色器一起工作,而需要一个新的更具限制性的着色 API,并且会给用户编写向量化着色器带来负担。

然而,随着采用更高级的着色语言(见第 4.6 节),通过自动着色矢量化,批处理可能变得更实用(Gritz et al.2010; Lee et al.2017)。

3.几何体

Arnold 不支持(out-of-core)几何结构(Pharr et al.1997; Son and Yoon 2017; Budge et al.2009)。这种自我强加的限制,使得渲染器更简单、更容易改进,这反过来又让我们将精力集中在,更常见的(in-core)场景上。

3.1 网格处理

与几何节点边界相交的第一条光线,会触发节点的相关几何处理步骤的执行,这些步骤以 BVH 构造结束。对于多边形网格节点,这些步骤是细分、置换和法线调整。

3.1.1 细分

Arnold 支持 Catmull-Clark 和线性(Linear)细分。该方法适用于,生产网格中经常出现的、具有任意 N-Gons 的、非流形拓扑结构的网格。
该系统还将细分与多边形和顶点关联的用户数据。此外还支持,不同的边界插值模式,以及顶点和边缘上有限锐利和柔软的皱褶。这要归功关于细分规则的模板针对性,和相邻极限法线的简单近似化,皱褶不会增加太多复杂的代码。细分曲面与 OpenSubdiv(2017)定义是兼容的,对于一些依赖于公共语言规范,在供应商之间共享框架,这是一个困难的要求。最终的细分,对应于均匀或自适应的每个面片的细分。用户也可以选择对视图/切割相机/屏幕外的自适应或跳过细分,因为这些细分,不太可能影响最终图像的生产。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 3
曲线基元最常用来绘制头发和皮毛。Maya @2015 SSE,由 The Mill 提供;

3.1.2 置换(Displacement)和自动凹凸(Autobump)
Arnold 的置换只能移动现有的顶点,因此需要添加细分,提供足够的分辨率,来达到用户想要的轮廓形状和整体的平滑度。任何不能(或不切实际的)用实际几何图形,去表示的额外高频位移细节,都可以通过一个我们称为自动凹凸的表面法向调整特性来完成。

在着色过程中,我们为每个着色点运行置换着色器三次,以确定其可能的位移位置和切面。然后倾斜着色法线以捕捉高频细节。这与实际置换几何体的着色并不完全匹配,但在实践中能得到很好的近似。这种方法的缺点是与法线映射非常相似。

自动凹凸功能,允许通过降低细分级别来节省内存,但是由于置换着色器的额外评估,它的成本和代价更高。随着内存容量的增长,网格密度越来越接近每像素一个三角形,这时会对自动凹凸的依赖可能会减弱。

3.2 曲线(Curves)和点(Points)

对于光线追踪器来说,由于光线采样密度不足而产生的潜在混叠现象(上图),又细又薄的基元比较难以处理,为缓解这个问题,我们受到 RenderMan 的启发(Cook et al.2007)使用最小像素宽度参数,从而防止混叠。
通过(1)扩大曲线和点的宽度,使其至少覆盖穿过像素的指定距离;
以及(2)通过使曲线成比例地更透明来补偿这种扩展。这种更改会产生稍微不同的效果,因此必须在效果开发周期的早期决定是否使用该特性。一旦对象的效果得到认可,切换该功能就会变得非常困难。另一个缺点是,由于沿射线的半透明交叉点数量的增加,性能会受到影响。我们通过随机不透明度来解决这个问题,详见 5.5 节。

曲线可以以分段的三次贝塞尔、Catmull-Rom、B 样条曲线和线性格式存储。
在交集测试中,我们使用基矩阵,来允许现有控制点作为贝塞尔曲线相交点。基于曲线基础,将曲线分割成若干段,然后将这些段存储在一个规则的轴对称的 BVH 中。因为长对角线是常见的,我们也将每一条都绑定在一个定向柱上,这样可以更有效地剔除遗漏的光线。如果一条射线与定向柱相交,那么我们做一个相对昂贵的射线曲线相交测试(Nakamaru and Ohno 2002)。所有这些步骤都是在 SIMD 中完成的,例如一次测试四个柱面。点基元也可以使用 SIMD,一次相交 4 个。

3.3 体积和隐式表面

精细的流体模拟效果,如烟火、水,通常用高度不均匀的体积数据来描述。
Arnold 有一个体积积分器和一个隐式曲面求解器,为了提高它们的效率,我们要求体积插件节点,沿给定射线,提供有效或有趣数据的间隔。严格的射线边界,能显著提高数值隐式求解器的体积积分和收敛速度。通过要求插件动态的计算光线间隔,不需要在本机之外,构建额外的加速结构或缓存。例如,OpenVDB 等分层体积结构,已经提供了快速确定验证数据间隔的方法(Museth 2013)。在为 Arnold 开发 OpenVDB 插件的过程中,我们增加了对光线交叉和通过叶单元收集光线区段的支持,这是 OpenVDB 首次实现完整的光线追踪。

3.4 射线加速度结构

当 Arnold 被引入时,统一栅格被认为是可以快速构建和遍历的。例如,大约在同一时间出现了第一个交互式光线跟踪器,它基于栅格(Parker et al.1999)。当时,SIMD 还不用于光线跟踪,运动模糊的几何体非常少见,应用场景也非常简单,在一层或两层栅格中,“teapot-in-a-stadium(体育场茶壶)”问题通常可以很容易地避免。

从那时起,SIMD 被证明在光线跟踪方面,具有广泛的优势,包括在网格中投射光线(Wald et al.2006),但对于通过网格追踪不相干的光线来说,它就不实用了。

运动模糊的对象和复杂的场景,在生产渲染中变得越来越重要,这在网格中是很难支持的。一旦研究表明 BVH 结构可以解除这些限制(Wald et al.2007,2008), Arnold 就完全转向并使用这种结构。目前,它采用了 4-Wide BVH(Wald et al.2008),使用一种结合的表面积启发式(SAH)方法构建(Popov et al.2006)。

射线会通过 BVH 进行连续遍历,使用我们健壮的 SIMD 遍历算法,以确保在遍历过程中,不会由于数值精度误差,而错过有效的交叉点(Ize 2013)。

3.4.1 并行按需构建
相交于几何节点边界的第一条射线开始其 BVH 构造,如果与此同时,其他光线击中节点,那么它们的线程将加入这一工作,而不是简单地阻塞来等待构建完成。尽管增加了复杂性,但我们的并行构建还是很快的。在双路 E5-2697 V3 CPU 上,它可以在 56 个逻辑内核上以 0.31 秒(23M tri/s/s)和 5.6 秒(1.3M tri/s/s)的速度,构建流行的 7.2M 斯坦福亚洲龙三角形模型。当考虑到英特尔的单核睿频 3.6GHz 的构建,或默频 2.6GHz 的使用时,这会接近于线性扩展。此外,与专用的串行构建相比,使用一个线程运行的并行构建,没有任何显著的时间开销,这一点很重要,因为许多小对象最终都是由单个线程构建的。

除了时间效率,内存效率在构建过程中也很重要,在构建期间内存使用量,如果出现短暂的峰值、超过系统或用户设置的内存配额,会导致 Arnold 奔溃。这意味着我们只能使用,不消耗大量内存的并行 BVH 构造策略,尤其是在线程数很高的情况下,我们的并行结构在专用串行实现上,只有很小的恒定大小的内存开销。

3.4.2 节点树品质(Tree Quality)

Arnold 中的每个几何节点,都有自己独立的 BVH,这是按需处理的结果。由于嵌套的过程,会生成的多层的任意深度的 BVH(参见 3.5.4 节),这允许快速到达第一个像素。但是,与在整个场景几何结构上构建单个 BVH 相比,它也会导致整体渲染速度变慢。
Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 4
该场景由 152 个网格组成,共 402K 个三角形,使用 Arnold 的多级 BVH(在本例中为两级)进行渲染,所需的时间比使用单个扁平 BVH 进行渲染的时间多 9%。

在上图的浴室场景中进行测试,在整个几何结构中使用单个 BVH,结合其他积极的 BVH 和三角形交叉优化,将遍历和交叉时间减半。然而,总的渲染时间稍微提高了 9%,因为只有大约 20%的时间用于光线遍历和交叉测试。有趣的是,除了阴影投射之外,26%的时间花在了对场景中两个光源的采样上。另外 10%用于预着色计算,即射线微分、法线;9%用于相对简单的纹理上;剩下的时间被分配到不同的领域。虽然不能完全代表实际的生产场景,但这个测试表明,今天的渲染时间并不是由光线追踪控制的,因此进一步加速它,回报也会减少。

当输入场景中,各个 BVH 之间存在较大的重叠时,合并 BVH 带来的改进会更大;这样的场景在实践中很常见。不幸的是,按需将节点的内容插入全局 BVH 中,很难以线程安全的方式正确有效地完成。尽管存在这个挑战,我们希望最终能够支持它,这样用户就不需要关心重叠的对象。

3.5 内存效率

我们选择的路径追踪核心,需要场景中所有的几何形状载入到内存中,我们通过使用各种压缩数据和消除冗余的技术,同时在渲染时间和内存使用之间的平衡,并加以改进。

例如,我们放弃了 BVHs 空间分割带来的速度提升(Popov et al.2009; Stich et al.2009),因为我们觉得这并不能证明,潜在的内存增长是合理的。此外,由于 BVH 性能通常不是我们的渲染器的主要成本,所有更容易加强内存的 BVH 优化。

3.5.1 数组压缩

我们使用无损压缩和有损压缩的数据数组,例如,少于 256 个顶点的网格可以将它们的索引,精确地存储在一个 8 位整数中,此外,着色法线可以从 12 字节(3 个浮点数)压缩为 4 字节,每个字节的精度损失可以忽略不计(Engelhardt and Dachsbacher 2008)。

3.5.2 多边形描述

如果可以的话,将四边形而不是三角形存储为基本的基元,这样可以在网格和 BVHs 中节省大量的内存。例如,如果网格中的所有三角形对,都可以转换为四边形,那么基本类型的数量就减半了,这样又可以将为该网格构建的 BVH 中的节点数量减半。

3.5.3 实例化

另一种减少内存占用的常见方法是将几何节点实例化,以便对于包含植被、人群、碎片、城市等的大型场景,进行紧凑的描述。虽然传统的实现只允许覆盖转换和材质,但是我们包含了几乎所有的非几何对象属性。例如,我们支持覆盖每个实例的 UV、面和顶点颜色。这种灵活性使艺术家更容易添加有趣的变化,同时保持场景的核心。

3.5.4 程序嵌套

程序化的子节点本身可以是程序化的,以形成潜在深度的节点层次结构。此外,阿诺德(.ass)文件可以在其他文件中引用,(.ass)文件作为程序文件,也就是场景数据的本地磁盘缓存形式,以这种方式使用时,重复引用相同的(.ass)文件,将会自动创建相应程序节点的实例,以节省内存。这在具有巨大环境的电影中起到了广泛的作用,例如《极乐世界》中的环形空间站(上图)。这个环由四个实例象限组成,这些象限又依次递归地包含实例树和房屋,这些树和房屋的数量变化很大,可以达到单个物体的级别,该站的几何结构由一个复杂的有向非循环图有效地表示,并相互引用的(.ass)文件。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 5

《极乐世界》的生产版本(左、中)由 5 万亿个三角形组成,这要归功于多级实例化的使用,以及(.ass)文件和 Arnold 的空间效率几何结构。我们拥有的场景的不完整版本,没有纹理,只有 4 万亿(1.44 亿个独立的)三角形,使用 Arnold 当前版本(5.0.2)渲染需要大约 9GB 的 RAM,右侧显示了内存使用的部分细分。我们目测,对于纹理(工作室用了 4GB 的纹理缓存)和额外丢失的数据(最大 2gb),它最多可能需要 15GB。@2013 CTMG,由 Whiskytree 提供。

4 渲染

可以预测性,随着复杂度的增加,弹性的渲染性能和图像逼真度非常重要,因为它可以帮助艺术家在质量和资源使用之间找到良好的平衡。为此,防止图像伪影,特别是动画中的闪烁,以及高难度照明配置中的极端噪点,也尤为重要。我们的目标是在不向用户暴露,不必要的复杂性的情况下,优化 Arnold 的可伸缩性,当然,在避免在极端情况下的渣渣表现,这有时可能需要用户干预。

4.1 路径追踪

Arnold 的渲染子系统是基于摄像机的暴力路径追踪算法(Kajiya 1986),a.k.a. 也就是下一个事件预估,以及在第一个可见表面和/或介质上的可选分割。除了用于调整采样数量和反弹次数的控制之外,几乎没有公开关于该过程的其他细节。目前减少噪点的经验法则是,简单地增加相机样本的数量(每个像素的路径等),并保持一个分裂因子(漫反射,光泽度等)。在过去,当使用较少的灯光效果和较短的路径时,调整单个的分裂因子会更有效。

我们坚持使用这个简单的算法,因为它的基本原理很容易让用户理解和控制,并且在生产中,在最常见的照明配置中表现良好,比如开放环境和以角色为中心的画面。

然而,这也与我们追求的的两个目标:速度和简单,可能发生冲突。例如,基于缓存的算法,如辐照度缓存(Ward et al.1988)和光子映射(Jensen2001),通常允许更快的渲染。然而,它们也容易出现暂时闪烁的图像痕迹,需要进行额外的调整来改进,或者它们的性能和内存占用,在复杂场景和单一核心硬件中,可能无法充分扩展。

复杂的双向方法通常比单向路径跟踪更能适应不同的光照配置(Georgiev et al.2012; Hachisuka et al.2012),但在绝大多数的制作场景中,它会导致渲染速度更慢,也会使相机的光线微分计算变得更复杂。马尔可夫链方法(Hachisuka et al.2014; Jakob and Marschner 2012)也有类似的问题,并且在像素估算中产生相关性,这些相关性在动画中非常容易产生闪烁。

在 Arnold 中添加这些可选模式违背了我们的简单性目标,反而会导致更慢的渲染。另一个值得研究的生产解决方案是单向路径引导(Miller et al.2017),然而,这些技术涉及缓存,这会增加代码的复杂性,特别是在运动模糊的情况下,而且更容易在动画中闪烁。

4.2 激进的方差缩减

虽然单向路径跟踪通常不容易产生人工痕迹,但在强光和聚焦的间接光下,会产生极端的噪点,一些有经验的用户知道如何处理某些特殊情况。例如,他们将避免将光源放置在几何形状附近,并将在开口处使用不可见的平面光,来模拟凹进灯具,或者,他们将把这些光源的照明范围限制在最小的距离,然而,更多涉及多反射光透射或光滑表面的一般情况,需要更一般的方法。我们使用一种技术来避免从极端但强烈的光路所产生噪点,就是将每个相机采样数的总光照强度和间接光照强度,限制在一个用户设置的阈值上。

一种更精细的噪点抑制方法是,利用光在漫反射或粗糙光滑表面反射的模糊效果。高频照明的细节往往不能通过这样的反弹看到,也难用路径跟踪器模拟。Arnold 在默认情况下使用的技术避免了在处理这些路径时,尽可能地保持能量守恒。这包括自适应地增加表面粗糙度,路径空间正则化(Kaplanyan and Dachsbacher 2013)和跳过苛性的高光路径。表面粗糙度被裁剪到最小值,依赖于沿路径看到的最大粗糙度,虽然焦散会被模糊,但可以大大减少间接照明的变化,同时保持整体效果。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 6利用低光阈值和我们的灯光 BVH,在 2013 年的一台计算机上,以大约 1.5 小时/帧的速度,用了 100 万个光源绘制,让这幅伦敦立交桥的图像成为可能。公司图片/ Stormdog©2013。

4.3 光源裁剪

出于效率的考虑,Arnold 忽略了光源对被着色点的预期贡献,低于某个用户设置的阈值。虽然估算点光源的贡献是微不足道的,但由于几何因素和潜在的纹理发光,让区域光变得更加复杂。虽然我们可以通过对每个阴影点进行光照采样来进行估算,但是一种更有效和可伸缩的方法是计算每个光影响区域的轴向边界框,然后忽略那些不包含被着色点区域的边界框。我们在这些盒子上创建一个 BVH,我们遍历这些盒子,快速找到每个着色点贡献显著的光的列表,然后我们进行直接照明采样。

这种裁剪技术适用于大多数场景,并允许缩放到多个灯光。例如,上图显示了伦敦的一个夜晚场景,该场景被一百万盏灯照亮,其中大多数着色点只需要 10 到 50 盏灯的采样,少数小区域大约需要采样 100 盏。

然而,我们的技术在某些情况下可能会完全失效,在这些情况下,光的个体影响很小,但组合起来就很重要,比如电视屏幕上的每个像素都被建模为单独的光,这些问题的情况,通常可以通过将单个灯加载纹理来解决,一盏灯也更快,更容易取样,不过,如果艺术家们不需要处理这些棘手的问题,那就更好了。随机光选择是一种很有前途的方法,它允许每个着色点有一个固定的光样本预算(Conty 和 Kulla 2017),而我们当前,至少对每个重要的光进行一次采样。

4.4 运动模糊

Arnold 主要针对动态生产场景的渲染,正确高效的动态模糊渲染至关重要。

我们支持两种任意键数的运动,也就是每个节点的时间采样,变换运动由仿射矩阵表示,而变形运动中,物体的形状(例如它的网格顶点和法线)随时间变化。

4.4.1 变形模糊

对于变形运动的网格,我们在每一对运动键上建立一个 BVH。每一对都给出了开始和结束基元边界框,当在 BVH 遍历期间,进行线性插值时,这些基元边界框将包含移动基元。

4.4.2 体积模糊

对于基于网格的体积数据,例如 OpenVDB,我们实现欧拉运动模糊(Kim and Ko 2007)。每次对数据通道进行采样时,首先在采样位置查询速率通道,然后在快门打开时沿该速率再次查询,然后我们使用这个估算的速率,来回溯最后查询数据通道的位置,注意,这要求模拟具有足够的速率通道填充。

为了不遗漏任何与运动数据的潜在射线交点,体数据的活动单元格被保守地以最大速度乘以帧的持续时间来扩张。作为仿真结果,速率通道可以是非常噪点的,并且包含局部非常高的值,这可能使保守的扩张太大,运动模糊的体积可能使渲染时间暴增。为了缓解这个问题,我们添加了一个异常值过滤器来消除极端速率。这使得在存在错误速率值的情况下,让边界的扩展处于可控范围内,通过对必须的体积进行积分和采样,让射线间隔也相应地变小(参见 3.3 节)。

未来的改进将是更智能地扩展边界,欧拉运动模糊是昂贵的,因为它需要两个额外的查找来估算速率。临时非结构化体积,可以提高体积采样的效率(wrninge2016),然而,它们需要预处理和非标准的数据结构,目前在大多数仿真包中不受支持中,并不支持非标准数据结构。

4.5 纹理

特别是在电影中,一个给定的帧,引用 TB 级的未压缩浮点纹理贴图并不少见(每个贴图的分辨率为 8K 甚至 16K).其中一些纹理(例如顶点置换)可能只需要使用一次,因此在整个渲染期间不需要在 RAM 中保持,然而,大多数其他类型的纹理是为对象着色而制作的,由于路径跟踪的不连贯性,它们会被反复随机访问。这就需要在 RAM 中存储这样的纹理,或者重新调度纹理评估(Eisenacher et al.2013),即使没有 RAM 大小的限制,简单地从本地或网络磁盘获取所有这些数据,即使是以压缩的形式,也可能需要一个小时,如果请求的纹理来自文件服务器或网络,则花费的时间可能更多。

4.5.1 MIP 映射和射线微分 法尔(2017)

需要指出的是,大多数(也不是所有的)电影渲染器,都想要通过使用射线微分(Igehy 1999)来解决上述问题,从数据磁盘块中读入级别的 MIP 贴图纹理,以正确显示纹理,而不需要混叠或模糊处理人工痕迹。这可以使得从磁盘中读取的纹理数据的工作量,减少一到两个数量级。

射线的微分可以应用到表面粗糙度的情况,例如: 通过在光泽反射后,扩大光线覆盖范围(Suykens and Willems 2001)。不幸的是,这样的微分很难推导,计算起来也很费劲,尤其是对于复杂的材质,因此提出了更简单的近似算法(Christensen et al.2003)。Arnold 采取了一种折衷方案,跟踪 Igehy(1999)的射线微分,而不是 Suykens 和 Willems(2001)的附加偏导数,而是根据微表面启发的启发式来扩大射线微分。最近有人提出了更有原则性的研究方法,也是我们想要的,例如(Belcour et al.2017)。

4.5.2 纹理映射

Arnold 直接支持 UV 纹理映射、基于 Tile 方案(如 UDIM)和纹理投射。这些参数化在 MIP 映射中工作得很好,从贴图种选择适当的 MIP 映射级别,获得的一些纹理,可以在射线覆盖范围的所有着色点上重复使用。对于足够大的覆盖范围,这些少量的纹理可以被许多三角形共享,甚至在极限情况下,可以被整个网格共享。这可以导致非常有效的纹理使用,从而提高渲染性能。

一般来说,读取最高分辨率的 MIP 贴图,发生在直接从相机看到的对象,这样的空间一致的着色点,对于采样来说是微不足道的。例如,在基于区块渲染时,可以连续查找经常使用相同的纹理块。一旦该图像区域被渲染,那么该高分辨率 Tile 可能不会再被用到,也因此可以从内存中删除。

4.5.3 纹理缓存

所需的最小纹理数据量可能仍然太大,无法容纳很少未声明的内存,因此我们使用 OpenImagelO(2008)的纹理缓存来进一步减少内存使用。一般来说,一个 2 到 4 GB 的缓存,就足够所有渲染线程共享了。如 Pharr(2017)所示,实施一个良好的纹理缓存,可以扩展到多个核心中。

4.6 API 和着色器

Arnold 提供了一个 C++ API,用于填充和反观场景,以及通过回调实现自定义节点,例如体积、程序和大部分的着色器。多年来,用户和第三方利用 API,添加了超出我们姿势范围以外的功能,包括通过专门的摄像机,将纹理空间映射到摄像机空间来烘培纹理,以及通过着色器扩展,来输出额外的数据,以方便渲染后提取对象遮罩。

着色器可以用 C++或开放着色语言(OSL)(Gritz et al.2010)编写,两者都可以混合在同一个着色器节点中,C++着色器可以自由地返回以任意方式计算的(颜色)值,它可以使用自定义投射光线,甚至可以在查询点中集成入射光。

所提供的灵活性,在过去对于实现诸如轻量级门户、光线异构介质和分层着色模型等特性的用户特别有用(Langlands 2015)。不幸的是,暴露这一级别的灵活性,也有负面的后果,着色器作者可能会走极端,在着色器中实现整个渲染引擎的自定义,这是我们难以支持的,这也限制了 Arnold 的潜力,因为在不破坏 API 的情况下,进行渲染改进变得越来越困难。

随着时间的推移,我们已经添加了足够多的功能,以减少着色器本身,充当光积分器需要。Arnold 现在鼓励用户编写着色器,而不是返回一个闭包,该闭包描述了,被着色点的双向散射分布函数(BSDF) (Pharr et al.2016),这种模式在一定程度上降低了灵活性,但也允许 Arnold 改进其内置的算法和技术,比如:对着色器透明的多重重要性采样(MIS)(Veach 和 Guibas 1995)。闭包范例允许用户将着色器开发的重点,放在对他们最重要的地方——空间上变化的对象效果。OSL 为编写这样的着色器,也提供了一种友好的语法,同时 OSL 着色器通常也比 C++的着色器执行得更快,因为它们即时编译,可以优化整个复杂着色器节点的代码。

5 采样的重要性

多年来,提高采样效率,一直是 Arnold 渲染性能提高的关键。由于使用了(更好的)重要采样技术,许多噪点诱导组件在质量上有了显著的提高,这对用户来说是透明的,此外,俄罗斯轮盘赌(Arvo 和 Kirk 1990)这样的技术,将某些确定性的评估变成随机的,这会使得光线更节省资源,也允许我们模拟更多的效果,同时能消除所有的光照缓存,使用更少的近似算法,从而减少内存使用,简化用户的工作流程。

5.1 采样模式(图案)

降低噪点的有效方法是,使用高质量的分层采样模式,Arnold 使用了相关的多抖动(CMJ)模式(Kensler 2013),我们已经将其扩展到两个级别,这样与更多的追踪摄像机光线相比,在第一个阴影点的分割路径,就不会引入额外的噪点,也就是说,我们要确保所有相机射线,在一个像素上的 CMJ 分割模式的结合,也是一个 CMJ 模式(图 7)。

如果单个决策正确地进行了相关的修饰,那么可以为像素内的每个采样决策,使用单个 CMJ 模式。我们通过对采样应用伪随机变换和 Cranley-Patterson(CP)旋转(Cranley and Patterson 1976)来实现这一点。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 7
每个 M2摄像机光线都可以使用 CMJ 模式分割成 N2路径;这里,M=N=2。每个(左)尺寸为 N2的 M2图案的构造方式是,它们的结合本身就是尺寸为(MN)2(右)的 CMJ 图案。

我们还对每个像素使用相同的 CMJ 模式。当这样做时,传统的智慧规定像素去关联,例如,通过 CP 旋转随机选择每个像素的偏移量,然而,我们发现,通过仔细关联这些跨像素的 CP 偏移量,由此产生的噪点分布的视觉感知,可以显著提高(Georgiev 和 Fajardo 2016)。对于每个像素,对于每个采样维数,我们可以简单地在预先计算蓝色通道的噪点,在遮罩中查找模式 CP 偏移量。

然而,对每个维度使用相同的掩码引入相关性,因为所有维度都会将采样模式偏移相同的量。为了避免相关性,我们对图像空间中,每个采样维度的蓝色噪点遮罩,进行了伪随机移位。

不幸的是,当多个采样维数对像素方差有显著影响时,随机移动抖动遮罩,会破坏理想的蓝色噪点误差分布。理想情况下,应该使用单一的高维遮罩,但在多个维度上实现高质量的蓝色噪点是困难的(Reinert et al.2015)。尽管如此,这种技术是非常便宜的。在单采样维数中(如:运动模糊或直接照明)是主要噪点源,这种情况是非常普遍的。

5.2 区域光源

区域光源的精确照明,一直是路径追踪产品渲染主要卖点。这样的数据源源现在非常普遍,任何采样效率的提高都会使渲染工作受益。Arnold 多年来采用的是船用方法,也就是通过 MIS 将均匀光表面和 BSDF 采样相结合。随后,我们开发了用于均匀采样的四边形和圆盘形灯所包围的立体角的技术(Guillen et al.2017;Urefia et al.2013)。这些技术的使用,除了带来了有价值的降噪效果外,还允许我们忽略了对漫反射表面的 BSDF 采样和对各向同性介质的相位函数采样,从而避免了在这种情况下的错误码,实现了额外的加速。我们还采用了 Conty 和 Kulla(2017)的方法,对多边形网格光源进行近似立体角采样。

5.3 参与介质(体积)

对于制作渲染器来说,渲染参与的介质一直是一个挑战,即使只是模拟单个散射,Arnold 也不例外。为了解决这一问题,我们开发了两种重要的技术,用于沿着给定光线,对光源的直接照明进行采样(Kulla 和 Fajardo2012)。等角采样选择沿射线的传播距离,与光源上给定点的能量衰减平方反比。这项技术可以大大减少靠近光源的光线的方差。

解耦的光行经介质并建立一个表,该表随后用于按比例计算,沿介质的透射率和介质散射系数的乘积,以及对采样距离的重要性。与传统的方法(Perlin and Hoffert 1989)相比,这使得我们可以,将介质和光的采样速率彼此解耦,并忽略不散射光的介质区域,也就是散射系数为零的介质区域。

这两种技术在单散射光的贡献中提取不同的分量,从而实现互补,具有重要意义。因此,我们通过 MIS 将它们结合起来。

我们的异构介质实现依赖于射线路径,它是有偏的(Raab et al.2008),但在实践中,可以比最先进的无偏追踪技术更好地工作(Kutz et al.2017)。首先,它对分层模式规则的介质进行采样,得到一个较低的噪点透射率估计值,其次,当增加步长时(为了降低射线计算的成本)会增加偏差,而随机跟踪器的方差,在增加预期步长时,会呈指数级增长。因此,失败的射线行进,会更加优雅。不幸的是,尽管如此,偏差不能通过简单地发射更多的射线来减少,因为我们没有自动调整的启发式,所以必须手动调整每个体积的步长。那么,设计更有效的无偏技术是很重要的。

5.4 次表面散射

Arnold 的第一个次表面散射(SSS)的实现,是基于扩散点云的(Jensen and Buhler 2002),但是有几个主要的缺点,对于接近相机的半透明物体,表现得不太行,每个半透明对象及其每个实例都需要单独的缓存,这种方法不能很好地扩展,即使使用并行实现,缓存构建时间也会很长,特别是在许多远离摄像机的半透明对象的情况下,此外,缓存密度完全依赖于 SSS 剖面宽度,即自由路径,而不是取决于物体的视觉重要性,点密度必须由用户手动调整,因为 Arnold 无法自动推断着色器映射的剖面宽度。

过低的密度会导致人工痕迹的产生,过高的密度会大大增加内存的使用,也不会带来视觉上的改进。“SSS-in-a-stadium(体育场中的 SSS)”问题 2 出现在外形狭窄的大型物体上,它只能由用户精心调整 SSS 设置,找到一个可接受的内存与效果的权衡。点云还增加了预渲染对象处理的复杂性,在动画中容易闪烁,并且在计算一次瞬间和假设整个运动的恒定照明时,会出现不准确的运动模糊。

解决这些问题的关键是,实现在渲染过程中,实时的估算 SSS 光照模糊积分。为此,我们开发了一种,通过对 SSS 剖面进行重点采样,来对给定着色点附近的表面点进行采样的方法(King et al.2013)。这代替并简化了点云流线型的 SSS 渲染,效果也没有多大改变。它通过允许任意的剖面宽度,只计算实际击中半透明 SSS 物体的光线,来解决 SSS-in-a-stadium 的问题。它还可以渲染完全由这些对象组成的动态场景,如下图所示。我们目前使用的是 Christensen 和 Burley(2015)的 SSS 预设。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 8
这则广告中的所有内容都是由 milk 制作的,这在我们之前基于点云的 SSS 解决方案中是不可能的,因为每帧网格拓扑结构的变化会带来低频噪点。Milk @2013 Czar。感谢 Nozon。

当 SSS 剖面相对于几何特征尺寸较大时(在光学上较薄的物体区域),基于漫射照明的模糊简单方法,会存在能量守恒不足的问题,这是因为 SSS 剖面是在(至少在局部)平面的假设下标准化的,而在实践中几乎从未发生过,当路径在半透明物体上多次反弹时,这个问题就变得更加严重了,为了解决这个问题,我们最近实现了一种更加精确的方法,即在对象内部执行体积随机游走,这与 Wrenning 等人(2017)的方法非常相似。虽然这种方法通常比扩散慢,在薄的光学物体情况下,这种方法比之前的更快,当然,我们仍然提供基于扩散的选项,这样艺术家也可以更快、更容易获得他们想要的效果。

5.5 毛发散射

渲染头发在现代生产中很重要,但在 Arnold 中,由于艺术或像素宽度最小设置的原因(见 3.2 节),渲染头发在半透明状态下非常费劲。

为了使对单个毛发的光照计算更便宜,我们以前只模拟直接反射和单反射漫反射间接光照,从而减少了光线的数量。直接光照被缓存为每个头发片段,并沿其插值为间接光线,这可以使渲染速度提高 3 倍以上,不幸的是,缓存不能很好地用于或直接跳过高光,结果让作品看上去并不真实,显得平淡而卡通。

为了节省资源并近似这些高光,用户尝试了各种方法,如双散射(Zinke et al.2008)。类似于基于扩散的 SSS,这种近似破坏了能量守恒,不能递归应用于多反射照明。实现一个真实效果是困难的,特别是在浅色头发。漫反射缓存也遇到了与 SSS 点云相同的问题,额外的内存使用、动画闪烁、不准确的运动模糊,以及渐进式渲染中启动延迟的增加。我们必须找到一种方法来移除隐藏物,并有效地追踪头发中的大量射线。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 9
通过改变黑素的总量(上),通过改变黑素与真黑素的比例(下)来改变头发黑度。请注意,浅色头发的渲染更蛋疼,因为它需要模拟更多的光反射。

使毛发更节省资源的关键是,增加随机透明度,通过根据头发的不透明度随机将其视为完全不透明或完全透明,可以避免沿光线对每一根透明头发进行着色和照明。这种技术增加了噪点,但也提高了效率,允许更大的采样。它允许我们移除头发缓存,并模拟更多的光反射。这进而使得采用现代现实的头发散射模型成为可能(d’ Eon et al.2011; Zinke and Weber 2007)。这样就可以精确地绘制出金色头发,因为这需要许多镜面反射(图 9,左上角)。然而,在实际操作中,用户并不总是追求写实主义,有时需要卡通的外观或更简单的动物皮毛,为此我们仍然提供一种更节省资源的传统混合模型(Kajiya and Kay 1989; Marschner et al.2003)。

6 颜色和输出

Arnold 支持对输入、输出和渲染阶段的颜色管理控制,以及可定制的渲染数据输出,以满足各种成像和后期制作需求。

6.1 颜色空间

向 Arnold 这样的 RGB 渲染器中,添加物理天空照明、黑体辐射、黑色素吸收或色散等效果,需要在光谱分布和 RGB 系数之间进行转换,这种转换需要知道渲染 RGB 颜色空间的色度(Fairchild 2005)。

我们最近允许用户指定这些色度,并通过 SynColor 和 OpenColorlO(2010)添加了输入和输出图像颜色转换。这反过来也允许用户,在自己选择的色彩空间中使用特定的颜色。

最近采用的广色域格式,解决了 Arnold 所做的 RGB 渲染,相对于真实光谱渲染的不足。光传输本质上是光谱性的,类似于将 RGB 反照率与 RGB 辐照度相乘这样的近似值,在 sRGB 这样的窄色域空间中通常是可以接受的。然而,对于像 ACEScg(Duiker et al.2015)或 Rec.2020(Sugawara et al.2014)这样的大范围空间中的高饱和度颜色,这些近似值会产生越来越不准确的结果和颜色变化(Meng et al.2015;Ward and eydelberg – vilesh2002),到目前为止,在广色域空间工作的用户,已经能够在外观开发和照明过程中弥补这种变化。然而,最终物理上准确的结果,需要光谱渲染。

6.2 深度输出

除了“Beauty”图像外,Arnold 还支持渲染任意输出变量(AOV),即用于调试、去噪、后期编辑的局部着色、照明数据的辅助图像等。自定义多通道(AOV)可以通过可编程的着色器和光路表达式生成(Gritz et al.2010; Heckbert 1990)。在生产环境中,每帧呈现 30 多个通道并不少见,而且 Arnold 经过优化,可以在路径跟踪过程中,有效地积累任意数量的 AOV。后后渲染任务(如合成和景深效果)也受益于所谓的“深度”通道,也就是在距相机不同的距离上,每个像素具有多个值。最小化磁盘占用空间很重要,因为单个原始深度 exr 文件(OpenEXR 2014)的大小很容易超过 100GB。

Arnold(C4DToA)阿诺德渲染教程(111):Arnold体系架构、设计理念、指导思想、技术内幕等 来自Solid Angle开发团队 最新的文献指南 - R站|学习使我快乐! - 10
每像素使用 64 条摄像机光线渲染的场景,每条光线有一个表面深度采样和多个体积深度采样。在默认的质量设置下,我们的深度压缩方法,将每个像素的存储减少到渲染器生成的样本的 0.5%到 7.5%之间,就像“假彩色嵌入”图像显示的那样。分辨率 960×540 32 位深的 EXR 文件,减少了 3.92 gb – 153 mb(4%的原始输入)。而最终输出图像的 EXR 格式大小为 8.1MB。

为了保持深度通道磁盘使用的可管理性,可以压缩每个像素的存储采样数(Lokovic and Veach 2000),我们的方法基于用户设置的误差容限,贪婪地合并具有相似深度的样本对,在完成像素后,当整个输入样本集同时可用时,这将产生最佳结果。由于通道数量多,采样率高,该方案容易产生高内存使用率,为了避免缓存所有输入的体积采样,我们在光线行进期间,提前对其进行动态压缩,生成的输出文件大小,与每个像素的输入采样数量呈强次线性关系,主要取决于场景可见部分的深度复杂性,如上图所示。

7 总结

我们发现,渲染的性能并不是万能的,它是许多优化和用户工作流改进的总和,这些优化和改进,促使路径追踪成为一种实用的、健壮的生产解决方案。在本文中,我们简要介绍了实现此目的的技术。

关键的策略是通过减少流水线步骤、中间缓存和外部控制,来提高用户的生产力。在不给用户带来复杂性的情况下,深入优化性能,我们明智的权衡性能,来提高可用性、内存和时间使用的可预测性,我们也在交互渲染会话期间,尽快将第一个像素渲染给用户,而不是仅仅关注最终画面的性能。

许多核心算法的可扩展性是 Arnold 擅长的领域,无论是追踪光线、计算着色、采样纹理还是体积。我们的目标已经基本实现,也就是不管生成的视觉效果有多复杂,都要与核心的数量成线性关系,随着硬件速度的加快,追踪光线的能力的增强,以及新算法的出现,我们预计 Arnold 将会变得更加简单易用,同时提供更高的质量和交互性。

致谢

除了这篇文章的作者,还有很多人对 Arnold 的改进做出了贡献。特别是,我们感激的贡献 Solid Angle 过去和现在的团队成员:Luis Armengol, Sebastien Blaineau-Ortega, Stephen Blair, Ivan DeWolf, Ben Fischler, Pedro Gomez, Lee Griggs, Orn Gunnarsson, Julian Hodgson, Peter Horvath, Stefano Jannuzzo, Anders Langlands, Jorge Louzao, Pal Mezei, Borja Morales, Jamie Portsmouth, Yannick Puech, Ashley Retallack, Xo Wang.

Autodesk 团队的关键成员:Hakan “Zap”Andersson, Cynthia Beauchemin, Eric Bourque, Niklas Harrysson, Patrick Hodoul.

索尼影业 Imageworks 团队的 Arnold 成员:Solomon Boulos, Alejandro Conty, Larry Gritz, Chris Kulla, Rene Limberger, Clifford Stein.

我们感谢《华尔街日报》的编辑们,特别是 Matt Pharr,感谢他们对本文草稿细节建设性的反馈。

我们对 Arnold 过去和现在的,许多工作室和个人用户的反馈,和出色的工作表示感谢。要列出的实在太多了,但是 Arnold 的成功离不开用户的贡献和倡导。

图 4 中的场景来自 http://amscenes.com/16-bath.html;
坦克模型由 Andreas Bystrom 提供;

——————————————————————————-

作者:ILIYAN GEORGIEV,THIAGO IZE,MIKE FARNSWORTH,RAMON MONTOYA-VOZMEDIANO, ALAN KING,BRECHT VAN LOMMEL,ANGEL JIMENEZ,OSCAR ANSON,SHINJI OGAKI, ERIC JOHNSTON,ADRIEN HERUBEL,DECLAN RUSSELL,FREDERIC SERVANT, and MARCOS FAJARDO,Solid Angle

——————————————————————————-

参考文献:见英文 PDF

PS: 由于本文涉及大量专业技术词汇,翻译未必完全准确,有兴趣的童鞋可以研究英文原版文档,并欢迎指正和一起学习研究,感谢大家的关注和支持!

英文 PDF 地址

注意:本段内容须成功“回复本文”后“刷新本页”方可查看!


修仙㊀群
修仙㊁群
常见问题:1、文件解压请使用Winrar5.5版本以上解压;
2、视频播放有声音无画面,请了解下PotPlayer播放器;
R大技术站 , 版权所有,如未注明 , 均为原创,如需转载请注明来源!
喜欢 (1)
[itdiy@qq.com]
分享 (0)
发表我的评论
取消评论

表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(61)个小伙伴在吐槽
  1. 666666666
    kiroslee2019-02-16 22:40 (24小时前)回复 Windows 10 | Chrome 72.0.3626.109
1 2 3 4