lucas

本文作者:洛城

来源:知乎

出处:https://zhuanlan.zhihu.com/p/359117557

很久很久以前,有家公司叫皮克斯

如果计算机图形学的发展历程中只能留下一个名字,那么这个名字毫无疑问应该是Pixar。而Pixar的故事,要从一个叫做EdwinCatmull的年轻人讲起。

沿用“ThePixarTouch”一书中的话:在过去的和正在发生的历史当中,你总能找到这样的一些时空,它们似乎拥有着特殊的魔力,让天才们趋之若鹜,云集于此,反抗权威,激发潜能。对于戏剧而言,它是伊丽莎白时代的伦敦;对于哲学而言,它是公元前三世纪的雅典;对于绘画而言,它是十五六世纪的佛罗伦萨;而这些时空中,一个并不广为人知的,是上世纪六七十年代的盐湖城,更准确的来说,是图形学领域群星璀璨的犹他大学

时年三十出头的IvanSutherland刚刚取得了哈佛大学的终身教职,他在MIT读博士时的毕业论文是一个叫做Skechpad的图形交互绘制系统。在那个图形用户接口都尚未形成的年代(甚至都还没有DOS,所谓编程还是一种在卡带上打孔的古老技艺),Sketchpad的已经允许用户使用电子笔绘画并且显示在电脑屏幕上(对常用数位板的美术同学来说这听起来一定不陌生),可见其思想在当时有多么的超前,后来老先生也因此获得了1988年的图灵奖。

被聘请到犹他大学计算机系后,IvanSutherland给予了学生们最大的学术自由,让他们得以尽情挥洒自己的天分,而学生们也丝毫没有辜负这份期待,组成了堪称图形学最强一届的豪华阵容:他们中有发明了Gouraud着色算法的法国小伙HenriGouraud,有发明了至今仍在实时渲染领域活跃的Phong着色模型的越南小伙BuiTuongPhong,有Adobe公司的创始人之一JohnWarnock,有SiliconGraphics公司(最早的显卡公司)的创始人之一JimClark,当然还有EdwinCatmull。我们的主人公年少时的梦想是进入迪士尼做一个动画师,无奈他并没有绘画方面的天赋,于是这个梦终究没有实现。对他而言抵达梦想的轨迹或许不是一条直线,而是一条精准优美的B样条曲线,它的第一个锚点,是EdwinCatmull踏进犹他大学的那一刻。

本科毕业后的Catmull曾短暂地就职于波音公司,不久后便被裁员(所以面临失业不要灰心)。失业的他又回到了熟悉的犹他大学继续攻读博士,在他的博士论文“Asubdivisionalgorithmforcomputerdisplayofcurvedsurfaces.”中,提到了两个及其重要的算法,一是我们比较熟悉的“Catmull-Clark”曲面细分算法,另一个则堪称实时渲染领域的构建基石:Z-Buffer消隐算法(同年的早些时候,Wolfgang也曾独立提出了该算法,这大概就是英雄所见略同吧)。

lucas and edwin

除此之外,我们也能从他的论文中看到许多熟悉的概念:扫描线算法,基于光栅化的反走样等等,自此也已经颇能窥探到日后名动天下的REYES算法架构的雏形。

毕业后的数年间Catmull在NYIT(NewYorkInstituteofTechnology)领导着一个图形学实验室,致力于计算机生成电影的早期尝试,但做技术的人总归欠缺一些电影叙事的能力,加之技术尚未成熟,空有一身本领的Catmull怀才不遇,期间虽有大量的研究成果,却缺少一部真正划时代的电影作品来证明。

时钟拨到1977年,GeorgeLucas开启了电影史上最伟大的科幻史诗“星战”系列的第一部,随之应运而生的,是大名鼎鼎的工业光魔。导演敏锐地觉察到,计算机图形学可能在未来的电影工业中扮演者不可或缺的角色,至于那角色究竟是什么,还没人知道。他招募了Catmull,并由他负责工业光魔的图形学部门。

年轻的Catmull

当日后回忆起Lucasfilm的那段日子时,EdwinCatmull用到了“Protected”这个词。在我看来,这意味着天才间某种相投的趣味和气场,是彼此的尊重,欣赏和相惜:即使我不懂你在做什么,但我确信你在做一件改变世界的伟大壮举。这种“Protected”的感觉,我们日后还会在SteveJobs身上看到,还会在新生的Pixar公司感受到,它一以贯之,成为了这家动画公司重要的文化内核,也因此滋润和催生了无数天才的想法。

后面的故事你或许听过:被赶出苹果公司的SteveJobs无意间相中了这个小团队,并以500万美元的价格将其买下,更名为Pixar。二十年后,这家公司几乎已经和业界巨头Disney在动画领域平分秋色,于是梦想成为打工人的Catmull衣锦还乡当了老板。

REYES:RendersEverythingYouEverSaw

在Lucasfilm的日子当然没有虚度,一个“渲天渲地但不渲空气”(彼时计算机图形学领域还尚未开始参与介质渲染的研究)的算法架构彼时已经逐渐在Catmull的脑海中形成,取名REYES,意为“渲染一切”。这就是大名鼎鼎的“TheReyesImageRenderingArchitecture”。这篇文章第一次完整地提出了渲染管线的架构,其中的许多思想至今仍广泛应用在图形学的各个领域,对于每个从事实时计算机图形学相关工作的同学来说,我觉得它的意义甚至还要大于那篇著名的“TheRenderingEquation”。

下面这张图是REYES算法的流程图:

整个算法流程大致可以分为三个阶段:Rasterization,ShadingResolve

Rasterization大约相当于现代硬件渲染管线中的VertexProcessing到Rasterization的阶段,每个模型被依次加载进内存,并计算其屏幕空间的包围盒,若包围盒不在屏幕范围内,则将其整个剔除;否则根据其占据屏幕空间的大小,决定是否将其进一步拆分。整个拆分的过程是层次进行的,较大力度的模型拆分称之为Split,已经拆分至较小粒度的模型被称之为“Microgrid”。针对Microgrid,我们将其进一步切分(细粒度的切分,称之为Dice)。根据奈奎斯特-香农采样定理,Microgrid被细分成一系列小多边形,其大小大约为1/2个像素,称之为Micropolygon

紧接着,被切分好的Micropolygons将会以Microgrid为单位,被送去进行Shading。由于这些Micropolygons属于同一模型,在空间位置又相近,因此能够最大限度的利用处理器的并行能力进行向量化的处理,并且在贴图资源的访存方面,也能利用其局部性最大化缓存命中率。如果你对现代GPU的硬件架构有些许了解,就会发现Microgrid其实就是Warp的雏形。

Micropolygon的着色发生在微多边形的顶点上,这样设计的妙处将很快会在Resolve阶段体现出来:为了绘制出具有反走样(Anti-Alias)效果的最终图片,REYES将会在每个像素(Pixel)上随机采样多个样本(Sample),并按照一定规则将其混合作为该像素的最终颜色。每个样本中包含的深度、颜色信息将由其所处的Micropolygon的顶点颜色、深度插值而来。每个像素包含了多个随机位置的样本,实际上是把Visibility的计算和Shading的计算解耦开来:这正是MSAA的核心思想。所有屏幕上的样本组成了一个三维矩阵,称之为A-Buffer。其前两维度是屏幕空间的大小,最后一个维度则是像素内所有样本构成的链表,每个采样位置的消隐计算基于Z-Buffer算法。利用A-Buffer能够轻易地处理顺序无关的半透明渲染(OIT),在2010年前后,随着GPU可编程能力的提升,类似的算法终于得以在实时渲染领域被应用,也就是我们熟悉的Per-PixelLinkedList

REYES架构体现了分而治之的算法思想,其最大的优点在于利用及其有限的计算资源(尤其是内存资源)实现任意规模场景的渲染。在其后的二十年间,它作为离线渲染领域的主流架构影响了无数电影级渲染器的设计,并在完成了它在电影工业革命中承担的使命后,继续影响着实时渲染领域的算法发展,由此可见其设计者们的智慧。

在原论文中附有一张基于REYES架构渲染而成的一盏台灯,出自于1896年的实验短片“LuxoJr.”。短片中有父子两盏台灯,父亲叫做“LuxoSr.”,儿子叫做“LuxoJr.”,短片本身充满了童趣。导演JohnLasseter解释,当时之所以选择台灯作为主角是为了展示REYES架构下最新的动态光照和自阴影算法。这对可爱的台灯父子和那个被小LuxoJr.踢漏气的皮球自此也成为了Pixar动画工作室的象征,伴随着它的每一部动画,一跳一跳地走进世界各地孩子们的眼里。

混合管线的时代

RenderMan的名字来源颇有趣味:彼时的Pixar野心很大,除了软件算法领域的尝试外,他们也在积极地探索硬件解决方案,希望设计出一款便携小巧的机器,能够胜任图像处理的各个阶段。基于这一理念,诞生了一款叫做PixarImageComputer的机器,大约相当于现在的专业图形工作站。但受限于摩尔定律的演化速度,这一思想在当时显得过于超前,最终不得不被搁置。项目参与者之一JeffMock当时正在设计一块巴掌大小的专用于图形渲染的硬件(那不就是GPU吗),并制作出了一个原型机。在那个随身听(WalkMan)还是高科技的年代(00后大概已经不知道随身听是什么玩意儿了),JeffMock逢人就从兜里掏出他的小玩意儿四处炫耀:看看爷的RenderMan!于是虽然硬件尝试失败了,RenderMan却作为软件渲染器的名字保留了下来(有一说一,RenderMan听起来可比GraphicsProcessUnit生动形象多了)。

PixarImageComputer

1988年的“TinToy”是首部使用RenderMan渲染的实验动画短片:儿童总是充满好奇心和破坏欲,对成年人来说,他们是咿咿呀呀的天使;对玩具们来说,他们则无疑是掌握着生杀大权的魔鬼。刚刚进入新家庭的一人乐队演奏玩偶Tinny遇到了好奇宝宝Billy,Billy的破坏欲望让Tinny恐惧,但当它试图逃离时却突然意识到,Billy只是想和它玩而已。于是鼓起勇气回来的Tinny试着逗Billy开心,Billy的注意力却早就被那个装玩具的塑料包装盒给吸引了。

短短五分钟的短片里,恐惧,愤怒,内疚,勇敢,嫉妒这些情绪跃然纸上,这是第一部获得奥斯卡最佳动画短片奖的计算机生成动画,也正是这部短片,让一个有关玩具的故事扎根在了主创们的心中。于是七年之后,才有了第一部长篇计算机动画“玩具总动员”。

一个小彩蛋:为了呈现沙发下藏着的一堆玩具,当时Pixar几乎所有会建模的人都被拉去做了一件玩具模型,REYES一文的作者之一LorenCarpenter建模的是一个红色的消防栓;而EdwinCatmull建模的,则是一只大象

大佬们的建模水平

最初的REYES架构能够很好的适应内存较小的硬件,并具有非常好的可伸缩性,也最大程度利用了着色计算和访存的连续性,但它也有一些明显的缺陷:

(1)对于极度复杂的场景而言,基于光栅化算法的Micropolygon切分并不算高效,尤其是当场景内有大量的小多边形(大小远不足半个像素)时,针对Micropolygon上的每个顶点进行着色更加耗时;

(2)基于光栅化的渲染结构本身只能处理局部照明的问题,却无法模拟全局照明类的效果;

早期的RenderMan在处理全局照明的问题时,往往还是采用一些trick:比如基于ShadowMap算法处理阴影使用ReflectionMap去模拟反射折射利用虚拟的BounceLight去模拟一次间接漫反射。但这些方法既难使用,又难达到效果上的要求。

RayTracing算法恰好天然地适合用于这类全局照明效果。最早期的RayTracing算法由TurnerWhitted等人提出,也就是所谓Whitted-StyleRayTracing。这一算法的思想很简单:从人眼出发,发射一条主光线,在光线射到的位置,根据其表面的法线、折射率以及相对于光源的位置各发射一条光线(共三条),一条用于模拟完美的镜面反射,一条用于模拟完美的折射,一条用于模拟点光源产生的硬阴影。而在反射、折射光线到达的位置,再进一步发射上述三条光线,并不断递归。

Whitted-StyleRayTracing

Whitted-StyleRayTracing的缺陷也很明显:现实生活中并没有完美的镜面反射和折射表面,光源也不可能是一个点。上述算法并不能处理模糊的反射和折射效果,对软阴影模拟也无能为力。于是前面提到的LorenCarpenter等人又进一步扩展了这一思想,提出了DistributedRayTracing,这一算法的核心思想奠定了接下来二十年RenderMan的混合渲染架构。它本质上是一种随机采样的计算方案:既然一根反射光线无法模拟模糊反射,那么就在光滑表面上,在它所有可能的反射方向上随机发射若干条光线,分别计算每条光线交点处的光照并加权平均,作为最终该点的反射效果;类似的,在面光源表面上随机均匀地取一些采样点,与需要计算阴影的着色点相连,计算其可见性并平均,就可以实现软阴影的效果;除此之外,还可以在时间间隔内随机采样实现运动模糊在摄像机镜头上均匀采样实现景深,类似的思想还可以用于一次弹射的间接漫反射以及环境光遮蔽等全局照明和次表面散射类效果的计算。

在2018年NvidiaTuring架构GPU首次引入了光线追踪硬件加速后,基于DistributedRayTracing算法的各类效果才得以应用在实时渲染领域,而Frostbite在当年实时光追演示中提到的HybridRendereringPipeline也并不新鲜,正是三十年前PixarRenderMan的架构。

原文中渲染的这张台球,可以在其中清晰地看到DistributedRayTracing算法对于软阴影、非镜面反射、运动模糊及景深效果的模拟

PathtoPathTracing

实际上PathTracing的算法早在1986年就伴随着那篇“TheRenderingEquation”诞生,之所以长期以来无法在工业界使用的原因主要有几点:

(1)PathTracing算法的Coherency并不好;

(2)PathTracing要求把整个场景装入内存中,以当时的硬件条件而言这不现实;

(3)PathTracing基于MonteCarlo积分,收敛速度较慢,算力不足;

而混合渲染架构也有它自己的缺陷:

(1)混合渲染架构是一个多Pass的渲染架构,其每个Pass都有若干参数需要调控,整个渲染管线比较复杂,不利于美术调整;

(2)混合架构渲染不是渐进式的,这意味着它无法实现效果快速预览,不利于美术反复修改迭代,为此甚至需要开发专门用于预览的独立渲染器,增加了电影开发和制作的成本;

(3)混合架构渲染出的结果是有偏的,无法完全真实的模拟光线传输,也不能很好地实现体渲染和次表面散射等效果;

(4)多Pass算法具有相互依赖,并不利于多线程的利用;

实际上Pixar一直以来都是PathTracing相关领域的先驱,PathTracing领域许多重要的算法都来自于Pixar。包括但不限于MultipleImportanceSamplingBidirectionalPathTracingMetropolis(顺便一提,这几篇文章的作者之一EricVeach同时也是DeepShadowMaps的作者,他的DeepShadowMaps一文有着深远的影响,直接催生了后来电影特效业常用的DeepCompositing,大佬于2000年后加入Google,此后便不再从事图形学方向的研究,但2014年因其对于DeepCompositing技术的先驱贡献,二度获得了奥斯卡金像奖科学技术奖)。得益于这些算法对于PathTracing对收敛速度的提升、更好的采样和降噪算法的发明,加之硬件的迭代速度日新月异,从前PathTracing技术在收敛速度、性能和存储方面的不足得以填补;而其天生的并行性使得这类算法在多核、渲染农场这类硬件场景下的表现更加优越;另外,PathTracing是一类步进式渲染算法,美术可以通过少量路径快速预览最终效果,方便交互迭代。于是RenderMan终于迎来了它的第三代架构:一个纯粹基于PathTracing架构的离线渲染器

FindingDory是Pixar首部基于PathTracing渲染的动画长片

融合的艺术

在过去的35年里,Pixar共制作上映了23部长篇动画其中12部获得奥斯卡奖。在EdwinCatmull看来,所谓“技术与艺术的融合”并不是让科学家们和艺术家们通力合作,而是作为科学家的同时,你也应当是艺术家,反之亦然。他和他的小伙伴们始终践行着这一理念,伴随着一部又一部动画的上映,Pixar也在不断地推进着计算机图形学的边界:

1995年的“ToyStory”是首部计算机生成的动画长篇;

1998年的“ABug'sLife”首次使用Whitted-StyleRayTracing渲染了折射和反射材质;

2006年的“Cars”首次使用了完整的混合渲染架构;

2009年的“Up”首次使用了基于点云的全局照明算法;

2013年的“MonstersUniversity”首次使用了RadiosityCache算法渲染出更为精确的全局光照效果,并进一步完善了基于物理渲染的理论和实践;

2016年的“FindingDory”首次使用了PathTracing;

2019年,我们故事的主角EdwinCatmull因其对计算机图形学和电影工业的卓越贡献获得了图灵奖。于是这位饱含天真,坚持不懈的科学家终于兑现了他年少时的梦想,以一种动画片中特有的“HappyEnding”式的手法,给这个故事画上了句号。

我想有一天,Pixar也应该给他和他的小伙伴们制作一部动画片,纪念他们在过去时光中持续的付出和耕耘,感谢他们让这个世界变得更加有趣可爱。

名字就叫做“TheRenderMan”

参考:

参考^https://www.pixar.com/our-story-pixar^https://en.wikipedia.org/wiki/Sketchpad^ComputerDisplayofCurvedSurfaceshttps://www.semanticscholar.org/paper/Computer-Display-of-Curved-Surfaces-Gouraud/e1e71a43b41452f7389420a3a6c1a1c32149c5c9^Illuminationforcomputergeneratedpictureshttps://dl.acm.org/doi/10.1145/360825.360839^Asubdivisionalgorithmforcomputerdisplayofcurvedsurfaces.https://dl.acm.org/doi/book/10.5555/907242^Catmull–Clarksubdivisionsurfacehttps://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface^Z-bufferinghttps://en.wikipedia.org/wiki/Z-buffering^IndustrialLight&Magichttps://en.wikipedia.org/wiki/Industrial_Light_%26_Magic^abPixar’sRenderManturns25https://www.fxguide.com/fxfeatured/pixars-renderman-turns-25/^TheReyesImageRenderingArchitecturehttps://graphics.pixar.com/library/Reyes/paper.pdf^abTherenderingequationhttps://dl.acm.org/doi/10.1145/15886.15902^Nyquist–Shannonsamplingtheoremhttps://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem^LifeofATrianglehttps://developer.nvidia.com/content/life-triangle-nvidias-logical-pipeline^Multisampleanti-aliasinghttps://en.wikipedia.org/wiki/Multisample_anti-aliasing^Order-independenttransparencyhttps://en.wikipedia.org/wiki/Order-independent_transparency^REAL-TIMECONCURRENTLINKEDLISTCONSTRUCTIONONTHEGPUhttp://developer.amd.com/wordpress/media/2013/06/2041_final.pdf^LuxoJr.https://www.pixar.com/luxo-jr^Raytracinghttps://en.wikipedia.org/wiki/Ray_tracing_(graphics)^abAnimprovedilluminationmodelforshadeddisplayhttps://dl.acm.org/doi/10.1145/358876.358882^DistributedRayTracinghttps://graphics.pixar.com/library/DistributedRayTracing/paper.pdf^RenderMan:AnAdvancedPathTracingArchitectureforMovieRenderinghttps://graphics.pixar.com/library/RendermanTog2018/paper.pdf^Subsurfacescatteringhttps://en.wikipedia.org/wiki/Subsurface_scattering^ShinyPixelsandBeyond:Real-TimeRaytracingatSEEDhttps://media.contentapi.ea.com/content/dam/ea/seed/presentations/gdc2018-seed-shiny-pixels-and-beyond-real-time-raytracing-at-seed.pdf^Lpics:aHybridHardware-AcceleratedRelightingEngineforComputerCinematographyhttps://graphics.pixar.com/library/Lpics/paper.pdf^OptimallycombiningsamplingtechniquesforMonteCarlorenderinghttps://dl.acm.org/doi/10.1145/218380.218498^Bidirectionalestimatorsforlighttransport.http://www0.cs.ucl.ac.uk/research/vr/Projects/VLF/vlfpapers/multi-pass_hybrid/Veach_E__Bi-directional_Estimators_for_Light_Transport.pdf^Metropolislighttransporthttps://dl.acm.org/doi/abs/10.1145/258734.258775^DeepShadowMapshttps://graphics.pixar.com/library/DeepShadows/paper.pdf^Theartofdeepcompositinghttps://www.fxguide.com/fxfeatured/the-art-of-deep-compositing/^ThePathtoPath-TracedMovieshttps://graphics.pixar.com/library/PathTracedMovies/paper.pdf^Point-BasedApproximateColorBleedinghttps://graphics.pixar.com/library/PointBasedColorBleeding/paper.pdf^MultiresolutionRadiosityCachingforGlobalIlluminationinMovieshttps://graphics.pixar.com/library/RadiosityCaching/siggraphtalk.pdf^TowardsBidirectionalPathTracingatPixarhttps://graphics.pixar.com/library/BiDir/paper.pdf

本文作者:洛城

来源:知乎

出处:https://zhuanlan.zhihu.com/p/359117557

tags:
Copyright Your xseozz.com Some Rights Reserved.
Powered By Z-BlogPHP.