Physically Based Rendering(渣翻)前言
Physically Based Rendering(渣翻)前言
2023.10.16补充
在我网上冲浪的时候,我发现已经有人翻译过这本书了。以下是工程地址,所以我决定不在继续自讨没趣了。打开工程你看到的就只是一堆代码,如果你要PDF的话可以去Release下下载。如果你信不过这个译者,你可以对着英文原版看。我大概看了一下就知道这个翻译比我好太多了。所以我不在进行后面的翻译了。但是由于我自己还是写了一部分,这部分就保留在我的博客里吧,也算是我自己的一点私心。
关于翻译
因为我没有找到关于这本书的翻译那就只好自己来了。可是我英语并不怎么好,所以大部分是通过有道翻译进行翻译的。但是有些我个人感觉有问题的翻译会进行修改。当然这其中也有我改后变得不好的地方。如果有翻译的问题,请大家帮忙指出来。我在此谢谢大家了。Physically Based Rendering: From Theory to Implementation (pbr-book.org)的原文地址。前言部分没有什么关于渲染方面的知识点,大家可以跳过。我到是为了自己英语练习才从头看到尾。虽然因为自己英语很差所以大部分都是看有道的翻译结果,但是我觉得这也有点儿进步吧。
前言
[就像]其他信息应该提供给那些想要学习和理解的人一样,程序源代码是程序员从他们的前辈那里学习艺术的唯一手段。这对不允许其他剧作家读他们的剧本(或允许他们)在剧院演出,甚至禁止做笔记的剧作家是不可想象的。同样,任何优秀的作家都是博览百书的,正如每个想要写作的孩子所阅读的字数都是他所写字数的百倍。然而,程序员被期望发明字母表,并学会自己写长篇小说。除非下一代程序员能够接触到前人所收集的知识和信息,否则其就无法学习编码和提高编码能力。————Erik Naggum
PS:我搜索出来大概是这个人吧。Erik Naggum
渲染是计算机图形学的一个基本组成部分。以最抽象的话来说,渲染就是将三维场景的描述转换成图像的过程。动画、几何建模、纹理和计算机图形学的其他领域的算法都必须通过某种渲染过程来传递它们的结果,以便它们可以在图像中可见。渲染已经无处不在;从电影到游戏等等,它为创意表达、娱乐和可视化开辟了新的领域。 在该领域的早期,渲染研究主要集中在解决基本问题,例如从给定的视口中可以看到哪些物体。随着对这些问题的有效解决方案的发现,以及由于图形学其他领域的持续进步,更丰富、更逼真的场景描述已经成为可能,现代渲染已经发展到包括来自广泛学科的思想,包括物理学和天体物理学、天文学、生物学、心理学和感知研究,以及纯数学和应用数学。渲染的跨学科性质是它是一个如此迷人的研究领域的原因之一。 本书通过有文档源代码的完整渲染系统,呈现一个精选的现代渲染算法。这本书中几乎所有的图像,包括封面上的那个,都是由其渲染的。所有生成这些图像的算法都在这些页面中进行了描述。pbrt系统使用一种称为literate programming的编程方法编写,混合了描述系统的文字和实现它的源代码。我们相信literate programming是介绍计算机图形学和计算机科学思想的一种有价值的方法。通常,在实现之前,算法的一些微妙之处可能是不清楚或隐藏的,因此查看实际实现是获得对该算法细节的扎实理解的好方法。事实上,我们相信,以这种方式深入理解少数算法,比肤浅地理解许多算法,为进一步研究计算机图形学提供了更强大的基础。
PS:pbrt是作者开发的渲染的引擎在我翻译的时候这个引擎已经到了第四版了。下面是其GitHub连接。literate programming又被称为文学编程,以下是文学编程_百度百科对其的介绍。知乎上也有对其的讨论。这里我保留原文的描述。
除了阐明算法在实践中是如何实现的之外,在一个完整而重要的软件系统的背景下呈现这些算法还允许我们解决中型渲染系统的设计和实现中的问题。渲染系统的基本抽象和接口的设计对实现的优雅性和以后扩展的能力都有实质性的影响,但很少讨论这一设计领域的权衡。 pbrt和本书的内容都专注于逼真的渲染,它可以被不同地定义为生成与相机在照片中捕获的图像无法区分的图像的任务,或者作为生成图像的任务,引起人类观察者观察实际场景的相同反应。我们有很多理由专注于照片写实主义。逼真的图像对电影特效行业至关重要,因为计算机生成的图像经常必须与现实世界的镜头无缝混合。在所有图像都是合成的娱乐应用程序中,真实感是一种有效的工具,可以让观察者忘记他或她正在观看一个实际上不存在的环境。最后,真实感给出了一个合理定义的度量来评估渲染系统输出的质量。
受众
这本书主要面向三种读者。第一种是研究生或高级本科计算机图形学课程的学生。本书假设读者已经具备大学入门水平的计算机图形学知识,不过这里将回顾一些关键概念,如基本的矢量几何和变换。对于没有经历过包含数万行源代码的程序的学生来说,iterate programming风格为这种复杂性提供了一个温和的介绍。我们特别注意解释系统中一些关键接口和抽象背后的原因,以便让读者了解为什么系统是以这种方式构建的。 第二个受众是计算机图形学的高级研究生和研究人员。对于那些正在进行渲染研究的人,本书提供了对该领域的广泛介绍,并且pbrt源代码提供了一个基础,可以在此基础上进行有用的构建(或者至少使用其中的一些源代码)。对于那些在其他领域工作的人,我们相信对渲染有一个透彻的理解可以帮助他们继续前进。 我们最后的受众是行业中的软件开发人员。虽然本书中的许多思想对这些读者来说可能很熟悉,但看到以literate(注:这里只的是iterate programming)风格的算法解释可能会提供新的视角。pbrt包括许多高级和或难以实现的算法和技术,例如细分曲面、Monte Carlo采样算法、双向路径跟踪、Metropolis采样和次表面散射;这些应该是有经验的渲染从业者特别感兴趣的。我们希望深入研究一个完整的、不平凡的渲染系统的特定部分,也会给这样的读者带来启发。
概述和目标
pbrt基于光线追踪算法。光线追踪是一种优雅的技术,它起源于镜头制作;Carl Friedrich Gauß在19世纪用手通过透镜追踪光线。计算机上的光线追踪算法仿效无限小光线穿过场景的路径,直到它们与一个表面相交。这种方法提供了一种简单的方法来查找从任何特定位置和方向看到的第一个可见对象,并且是许多渲染算法的基础。
PS:Carl Friedrich Gauß,我这里保持了原名。我在网上搜索的时候,我只找到了这个约翰·卡尔·弗里德里希·高斯_百度百科。虽然我感觉可能不是,但是看其经历好像又对得上。
pbrt的设计和实现有三个主要目标:它应该是完整的,它应该是说明性的,它应该是基于物理的。 完整性意味着系统不应该缺乏高质量商业渲染系统中的关键特性。尤其是,它关乎着重要的实际问题,如抗锯齿、鲁棒性、数值精度和有效渲染复杂场景的能力,都应该得到彻底解决。从系统设计的一开始就考虑这些问题是很重要的,因为这些特性可能对系统的所有组件都有微妙的影响,并且在实现的后期阶段很难对系统进行改造。 我们的第二个目标意味着我们尝试谨慎地选择算法、数据结构和渲染技术,并着眼于可读性和清晰度。由于与许多其他渲染系统相比,它们的实现将被更多的读者检查,因此我们试图选择我们所知道的最优雅的算法,并尽可能地实现它们。这个目标还要求系统足够小,一个人就能完全理解。我们使用可扩展的体系结构实现了pbrt,系统的核心是根据一组精心设计的抽象基类实现的,并且在这些基类的实现中尽可能多地实现了特定的功能。其结果是,为了理解系统的基本结构,不需要理解所有的具体实现。这使得深入研究感兴趣的部分并跳过其他部分变得更加容易,而不会忽略整个系统是如何整合在一起的。 完整和说明这两个目标之间存在矛盾。实现和描述每一种可能有用的技术不仅会使这本书长得令人无法接受,而且会使系统对大多数读者来说过于复杂。在pbrt缺乏特别有用的功能的情况下,我们尝试设计体系结构,以便在不改变整个系统设计的情况下添加功能。 基于物理的渲染的基本基础是物理定律及其数学表达式。pbrt被设计为使用正确的物理单位和概念来计算数量和实现算法。当设定为这样做时,pbrt可以计算物理正确的映像;它们准确地反映了灯光,就像在真实世界的场景中一样。决定使用物理基础的一个优点是,它给出了程序正确性的具体标准:对于简单的场景,预期结果可以以封闭形式计算,如果pbrt没有计算相同的结果,我们知道实现中一定存在错误。同样,如果pbrt中不同的基于物理的照明算法对相同的场景给出不同的结果,或者如果pbrt没有给出与另一个基于物理的渲染器相同的结果,那么其中一个肯定是错误的。最后,我们相信这种基于物理的渲染方法是有价值的,因为它是严格的。当不清楚某个特定的计算应该如何进行时,物理学给出了一个保证结果一致的答案。
PS:可以以封闭形式计算,原文中是can be computed in closed form。我觉得意思就是这个结果是可以确定的。但是我不确定自己理解是否正确,所以保留了有道的翻译结果。
效率的重要性低于这三个目标。由于渲染系统在生成图像的过程中经常运行数分钟或数小时,因此效率显然很重要。然而,我们主要局限于算法效率,而不是底层代码优化。在某些情况下,明显的微优化让位于清晰、组织良好的代码,尽管我们确实做了一些努力来优化系统中大部分计算发生的部分。 在介绍pbrt和讨论其实现的过程中,我们希望传达多年渲染研究和开发的一些来之不易的经验教训。编写一个好的渲染器比将一组快速算法串在一起要复杂得多;使系统既灵活又健壮是一项艰巨的任务。随着更多的几何形状或光源被添加到系统中,或随着任何其他复杂轴被推进,系统的性能必须平稳地下降。数值稳定性必须小心处理,不浪费浮点精度的算法至关重要。 开发一个解决所有这些问题的系统的回报是巨大的——编写一个新的渲染器或向现有的渲染器添加一个新功能并使用它来创建以前无法生成的图像是一件非常愉快的事情。我们写这本书最根本的目标是把这个机会带给更多的读者。我们鼓励读者在阅读本书的过程中使用该系统来呈现pbrt软件分发版中的示例场景。每章末尾的练习建议对系统进行修改,这将有助于澄清其内部工作原理,并通过添加新功能来扩展系统的更复杂的项目。
PS:我们鼓励读者在阅读本书的过程中使用该系统来呈现pbrt软件分发版中的示例场景。原文为: Readers are encouraged to use the system to render the example scenes in the pbrt software distribution as they progress through the book. 我觉得翻译有点奇怪,但是我也不知道怎样翻译更好。
这本书的网址是pbrt.org。最新版本的pbrt源代码可从这个站点获得,我们还将发布勘误表和错误修复、要呈现的其他场景以及补充实用程序。pbrt中的任何错误或本文中未在网站上列出的错误都可以报告到电子邮件地址bugs@pbrt.org。我们非常重视您的反馈!
PS:原文中网址的链接就是https://pbrt.org/。但是不知道为什么这个网页有时候会进不去。接下来就是说明了版本改动,这个我觉得意义不大了,所以我就不给出翻译了。如果你对这个有兴趣可以去查看英文版本的在线原文:Preface。前言后面一些我觉得不重要的就没有去翻译了。虽然我觉得鸣谢这部分其实也没有什么好翻译的,但是我出于尊重还是翻译一下。不过我不打算做太多的处理,就是直接翻译软件翻译一下。
鸣谢 Pat Hanrahan对这本书的贡献超出我们的想象;我们欠他一个大人情。他孜孜不倦地主张干净的界面,并在整个系统中找到正确的抽象,他对渲染的理解和方法深深地影响了系统的设计。他愿意在Stanford的渲染课上使用pbrt和这份手稿,这对他很有帮助,尤其是在它生命的早期,当时它还很粗糙;他在整个过程中的反馈意见对于使案文达到目前的状态至关重要。最后,Pat在Stanford图形实验室帮助召集的一群人,以及他所培养的开放环境,创造了一个令人兴奋、刺激和肥沃的环境。Matt和Greg都感到非常荣幸能在那里。 我们对1999年至2004年间在Stanford大学和Virginia大学的课程中使用本书初稿的许多学生表示感谢。这些学生提供了大量关于这本书和论文的反馈。这些课程的助教特别值得一提:Stanford大学的Tim Purcell、Mike Cammarano、Ian Buck和Ren Ng,以及Virginia大学的Nolan Goodnight。这些课程中的许多学生提供了特别有价值的反馈,并发送了错误报告和错误修复;我们特别要感谢Evan Parker和Phil Beatty。Bill Mark和Don Fussell在德克萨斯大学奥斯汀分校以及Raghu Machiraju在俄亥俄州立大学教授的课程中使用了这本书的草稿;他们的反馈是无价的,我们很感激他们将这个系统纳入课程的冒险精神,即使它还在编辑和修改中。 Matt Pharr要感谢同事和同事在渲染相关的努力,他们一直是教育的重要来源,并极大地影响了他编写渲染器的方法和他对该领域的理解。特别感谢Craig Kolb,他通过rayshade光线追踪系统的免费源代码为Matt提供了早期计算机图形学教育的基石,以及Eric Veach,他也慷慨地奉献了他的时间和专业知识。还要感谢Doug Shult和Stan Eisenstat分别在高中和大学期间为Matt提供数学和计算机科学的形成课程,最重要的是感谢Matt的父母,感谢他们一路上提供的教育和不断的鼓励。最后,还要感谢Nick Triantos、Jayant Kolhe和NVIDIA在本书第一版准备的最后阶段给予的理解和支持。 Greg Humphrey非常感谢他在Princeton读本科时容忍他的所有教授和助教。许多人鼓励他对图像的兴趣,特别是Michael Cohen、David Dobkin、Adam Finkelstein、Michael Cox、Gordon Stoll、Patrick Min和Dan Wallach。Doug Clark、Steve Lyon和Andy Wolfe也监督各种独立研究的琐事,一次也没有笑过。有一次,在一次关于一个长达一年的机器人项目的小组会议上,Steve Lyon生气地喊道:“不要再告诉我为什么做不到,想想怎么做吧!”——这是一堂永远不会被忘记的即兴课。Eric Ristad在Greg大一毕业后(甚至在夏天开始之前)解雇了他的暑期研究助理,把他交给了毫无戒心的Pat Hanrahan,从此开始了一段长达10年、横跨两岸的咨询关系。最后,Dave Hanson告诉Greg,识字编程是一种很好的工作方式,计算机编程可以是一种美丽而微妙的艺术形式。 2004年,Wenzel Jakob在本科学习期间收到了第一期pbrt的邮件,他非常兴奋。不用说,这对他的事业产生了持久的影响——因此,Wenzel首先要感谢他的合著者邀请他成为本书第三版的一部分。Wenzel非常感谢Steve Marschner,他在Cornell大学度过了充实的五年博士导师。Steve把他带进了研究的世界,并一直是他灵感的源泉。Wenzel还感谢图形组的其他成员,包括Kavita Bala, Doug James和Bruce Walter所创造的指导和刺激的研究环境。Wenzel与Olga Sorkine Hornung一起度过了一段美妙的博士后时光,Hornung向他介绍了几何处理。我非常感谢Olga对Wenzel参与这本书的支持。 对于第一版,我们还要感谢Don Mitchell,他帮助我们理解了采样和重建的一些细节;Thomas Kollig和Alexander Keller,他们解释了低差异抽样的优点;以及Christer Ericson,他对改进我们的kd-tree实现提出了许多建议。对于第二版,我们感谢Christophe Hery和Eugene d 'Eon帮助我们处理地下散射的细微差别。 对于第三版,我们特别要感谢Leo Grünschloß回顾我们的抽样章节;Alexander Keller对这一章主题的建议;Eric Heitz在microfacet方面提供了广泛的帮助(并回顾了我们关于该主题的文本);Thiago Ize彻底审查了关于浮点错误的文本;Tom van Bussel报告了我们的BSSRDF代码中的一些错误;感谢Ralf Habel审阅我们的BSSRDF文本;以及Toshiya Hachisuka和Anton Kaplanyan对我们的轻型运输章节进行了广泛的审查和评论。与Eric Veach关于浮点舍入误差和光线追踪的讨论对我们开发该主题的方法非常有帮助。我们还要感谢Per Christensen, Doug Epps, Luca Fascione, Marcos Fajardo, Christophe Hery, John“Spike”Hughes, Andrew Kensler, Alan King, Chris Kulla, Morgan McGuire, Andy Selle和Ingo Wald的有益讨论,建议和研究指导。 我们还要感谢这本书的审稿人,他们都对手稿的各个阶段提出了富有洞察力和建设性的反馈意见。我们特别要感谢为本书第一版和第二版提供反馈的评论者:Ian Ashdown、Per Christensen、Doug Epps、Dan Goldman、Eric Haines、Erik Reinhard、Pete Shirley、Peter-Pike Sloan、Greg Ward和许多匿名评论者。对于第二版,Janne Kontkanen, Nelson Max, Bill Mark和Eric Tabellion也提供了许多有用的建议。 许多人不仅为pbrt做出了贡献,而且通过错误报告、补丁和关于更好实现方法的建议,帮助我们更好地理解渲染。其中一些人多年来做出了特别重大的贡献——我们要特别感谢Solomon Boulos、Stephen Chenney、John Danks、Kevin Egan、Volodymyr Kachurovskyi和Ke Xu。 此外,我们还要感谢Rachit Agrawal、Frederick Akalin、Mark Bolstad、Thomas de Bodt、Brian Budge、Mark Colbert、Yunjian Ding、Tao Du、Shaohua Fan、Etienne Ferrier、Nigel Fisher、Jeppe Revall Frisvad、Robert G. Graf、Asbjørn Heid、Keith Jeffery、Greg Johnson、Aaron Karp、Donald Knuth、Martin Kraus、Murat Kurt、Larry Lai、Craig McNaughton、Swaminathan Narayanan、Anders Nilsson、Jens Olsson、Vincent Pegoraro、Srinath Ravichandiran、Sébastien Speierer、Nils Thuerey、Xiong Wei、Wei-Wei Xu, Arek Zimny和Matthias Zwicker的建议和bug报告。最后,我们要感谢LuxRender开发者和LuxRender社区,特别是Terrence Vergauwen, Jean-Philippe Grimaldi和Asbjørn Heid;我们很高兴看到他们在pbrt的基础上构建的渲染系统,我们从阅读他们的源代码和新渲染算法的实现中学到了很多东西。 特别感谢来自Framestore的Martin Preston和stephen Bruning帮助我们使用了《Gravity》的框架(图片由华纳兄弟和Framestore提供),以及来自Weta Digital的Joe Letteri, Dave Gouge和Luca Fascione帮助我们使用了《霍比特人》的框架。《The Battle of the Five Armies》(©2014华纳兄弟娱乐公司和米高梅电影公司(美国、加拿大和新线外国领土),©2014米高梅电影公司和华纳兄弟娱乐公司(所有其他地区)。版权所有。
引用
Fraser, C., and D. Hanson. 1995. A Retargetable C Compiler: Design and Implementation. Reading, Massachusetts: Addison-Wesley. Knuth, D. E. 1984. Literate programming. The Computer Journal 27, 97–111. Reprinted in D. E. Knuth, Literate Programming, Stanford Center for the Study of Language and Information, 1992. Knuth, D. E. 1986. MetaFont: The Program. Reading, Massachusetts: Addison-Wesley. Knuth, D. E. 1993a. TEX : The Program. Reading, Massachusetts: Addison-Wesley. Knuth, D. E. 1993b. The Stanford GraphBase. New York: ACM Press and Addison-Wesley. Reinhard, E., G. Ward, P. Debevec, S. Pattanaik, W. Heidrich, and K. Myszkowski. 2010. High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting. San Francisco: Morgan Kaufmann. Ruckert, M. 2005. Understanding MP3. Wiesbaden, Germany: GWV-Vieweg.
PS:突然发现还有在线版本的前言,但是我想偷懒一下。反正这也没有什么关于渲染的知识点,以后我要是无聊就把这部分翻译了。