223

全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 2: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 3: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

全局光照技术:从离线到实时渲染

秦春林 著

电业出版社

北京 ·

Page 4: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

秦春林

本电资料为《全局光照技术:从离线到实时渲染》(暂定名)书部分试读稿件,作者出于与读者交流

的提供免费试读,本书预计于 年下半年由电业出版社出版。本电材料仅供学习使,任何个

或组织不得以任何式复制或转载本电资料的任何内容。

Page 5: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

此书献给这个世界上最伟的爸爸,妈妈

你们对我的支持与包容

造就了我自由的思想

这是我今最有意义的财富

Page 6: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 7: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

推荐序

推荐序撰写者招商中,欢迎荐或引荐,请联系: 或

Page 8: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 9: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

前言

我猜部分读者第次翻开本新书的时候,会先定位到录部分,寻找

感兴趣的内容,如果发现些或者甚部分章节的内容是不太熟悉又正渴望学

习的,这个对的内容基本上决定了购买欲望;接下来的动作则是定位到书中对应这

些章节的地,感受作者的写作风格,知识点讲解的精准性与难易度等,这两个动作

决定了这本书在他中的份量。

我却习惯于通过前部分来获得对本书的期待程度,其原因是因为知识的逻

辑性知识本更重要。那么什么是知识的逻辑性?实际上这是我的种思考,

并未在什么地看到过这样的概念。在我的体会中,学习知识分为两个,其

是个个具体的知识点,例如 语的多态性;第则是关于这些知识点之间

的联系,我把它称为知识的逻辑性,知识逻辑性获取的难度要远远于知识本。科

技的进步是知识的累积的结果,这意味着我们这代需要上代学习更多的知

识,随着这种量的增加,我们越来越多地需要去梳理这些庞杂知识点之间的联系,才

能真正地理解和掌握门技术。通常,我们需要量的阅读量才能总结出这些知识

点之间的逻辑联系。

那么我到底想说明什么呢?先在本书中,各个章节通常还是偏重于讲述知识

点(在局部知识点范围内通常很难清晰地描述全局知识逻辑性),所以在我看来,本

书最适合描述知识逻辑性的地就是本书的前部分。有时候我通过本书的前

部分,就能对我过去些零散知识点成个更好的认识和归纳;其次,由于每个

的知识逻辑性是不样的,因此针对同样知识点的两本书,作者可能分别从完全不同

的度来讲述和理解,这其中反应的正是作者建他的知识逻辑性的过程,这也可以

间接作这本书质量的个权衡量。通常知识逻辑性更强的作者更倾向于在前部分

描述他建知识逻辑性的过程,这甚有时候他书写某个章节的内容更痛快。

客观地说,这个世界上已经不乏优秀的关于计算机图形学的书籍,例如实时渲染

的经典书籍《 》 ,离线渲染中聚焦于

光线追踪算法的《 》

,讲述级全局光照的《 》

Page 10: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

,还有量讲述关于 , 等业界主流底层图形接的,以

及各种针对校学偏重理论基础的计算机图形学教材。那么世界为什么需要另外

本计算机图形学的书籍?

本书的逻辑

我在学本科的专业不是计算机科学技术,那个时候只是出于对计算机的兴趣,

以及在那个年代计算机互联的蓬勃发展的背景下,我选择了要在毕业以后从事软件

开发相关的作,并且在学阶段后两年的时间,我乎将所有时间和精于学习

计算机相关的知识。然这仅限于传统的软件编程,直到作两年之后,我才真正开

始计算机图形学相关知识的学习。

在这期间,我阅读了量关于计算机图形学的书籍和论,从各个校的些经

典教材,到各类以 等图形接为核的实践性较强的书籍,以及这些图

形接的官 档等。我发现计算机图形学学习起来常困难(尤其对于个

计算机科学专业背景的),不仅因为其知识点繁多,也跟当前市上相关书籍的

总体情况有关。

前关于计算机图形学的书概可以分为三类:第类(也是数量最多的类)

以各个分散的理论为基础,按类别逐个介绍各个知识点或者渲染过程中的某个阶段,

例如 , , , , 等等。各种学

的计算机图形学教材都是这类,前提到的《 》也是属于这

类。这类书籍是开始学习计算机图形学最好的门资料,逐个了解计算机图形学

相关的各种概念。然这类书籍的缺点是缺乏系统性,读者很难对渲染过程有个整体

上的认识,这种知识逻辑性的缺乏反过来会制约对某些概念的理解。

第类书籍以图形接如 等为基础,围绕传统的渲染管线来介绍计算机

图形学的各个概念,例如 , , , ,

等等。这类书籍通常具有些完整的例,读者能够对经典的渲染管线有个

总体认识,并对各个理论知识点在渲染流程中的运有些理解,反过来会促进知识

的逻辑性。然实际业中使的渲染法会经典的渲染管线要复杂得多,例如它

可能需要分多次渲染(每次称为个 ),每次成最终结果的部分内容,最后进

合成,例如对动态和静态物体的分开处理,对阴影的处理,对光照的处理,以及最

后对全屏 的处理等;另外,很多业中使的渲染法都需要许

多特定的数据持,这可能需要渲染管线读取 中特定格式的数据并使特定的

算法来实现渲染的某个阶段或过程,这些法的理论般是这类书籍不会涉及的。

第三类书籍则综合计算机图形学理论以及图形硬件环境,图形硬件 等,详细

阐述个完整,系统的渲染解决案。我认为此类书籍最利于构建知识逻辑,因为其

不光告诉我们怎样使图形 来实现光照计算,它更能清楚地告诉我们,各种计算

Page 11: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

机图形学概念怎样被运在实践中,你就能够轻易地理解每个理论的作和机制,针

对同个问题,你甚也许能够提出的思路,使不同的理论法来解决这个问

题。只有在这样的条件下,构建起属于你的知识逻辑,才能真正系统性地理解计

算机图形学,从更有效地进步学习以及解决作中的实际问题。本书正是试图属

于这类书籍。

由于渲染过程的复杂性(例如个渲染器要实现场景表述,坐标变换,表着,

对函数的采样,各种全局光照模型,光源等等,其中全局光照模型部分尤其复杂),尤

其是在实时渲染领域,全局光照不能通过像光线追踪样单的解决案实现,需

要融合多种法,其中每种法可能实现种单的全局光照效果(如 ,

, , 等等),这些细节通常不是

本书能够覆盖的,这乎相当于是从渲染的度讲述个完整的游戏引擎的实现。这

类书籍又可以分为两个类,其中第类以光照模型相对较单的离线光线追踪

见本书第 章 为基础,它通常附有较完整的源代码实现,这类书籍的经典代表是

《 》 。另本最新

也是更门级的书籍则是 的 系列迷你书籍 ,本书则是属

于第类书籍。

为了帮助读者系统性地建知识逻辑,同时讲述除光线追踪以外更多更复杂的

光照模型,第类书籍多以理论为基础,忽略可能常繁琐的细节(这些细

节可能远远超过本书的篇幅)。这类书籍的经典代表作之是《

》,它着重于讲述光线追踪和辐射度两基本的渲染案,并且简要介绍

了结合这两种理论各优点的些混合理论,例如 ,

, , 等;另本聚焦于 的

书籍《 》 也值得阅。

我们看到这两个类的书籍各拥有的优缺点:第类具有较完整的例

帮助读者构建更具体的知识逻辑,但是其内容限于较单的光线追踪模型;第类

能够覆盖更泛的光照模型,但是其很难在本书的篇幅内详细讲述其实现细节。那

么有没有可能综合它们各的优势呢?

随着计算机硬件性能的不断提升,计算机图形学正经历着飞速的发展。每年的

图形学专业会议都会产出百篇计算机图形学论 这些论都由

些校,从事基础图形学理论研究的机构,或者计算机产业中从事图形硬件及接相

关的公司(例如 , , 等)发表,每篇论都是些计算机图形学

基础理论的作。这些基础理论然后被些从事游戏开发,电影动画及特效,游戏引

擎商等融进图形渲染具中,与其它法起形成各种完整的光照解决案。这

由于其杰出的贡献,该书获得了 年的奥斯卡科学技术奖参见: 。

参见: 。

是由 (美国计算机协会计算机图形专业组)组织的计算机图形学顶级年度会议。第届 会议于 年召开,参见: 。

Page 12: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

些层的解决案的结果通常在 及其类似的专业会议上,通常以正式的演讲

的式释出。

所以光照模型最前沿的解决案,来于那些业级的顶级游戏公司 如顽

狗 ,游戏引擎商(如 , , 等)以及动画电影公

司(如克斯,迪斯尼等)。围绕这些具及产品来讲述计算机图形学,不仅能够兼顾

到各种各样前沿的实现案,读者还能够通过使这些产品去了解该实现的最终效果

和功能。

本书正是基于这样的理念来编排整本书的内容:我们以当前业界最前沿的个个

完整的全局光照解决案为核内容,通过结合讲述使这些解决案的具及其产

品的特性及功能,来达到更系统性地学习计算机图形学的的,帮助读者更好地构建

的知识逻辑。

全局光照

全局光照乎代表了计算机图形学渲染相关的全部内容,它是个渲染器求模

拟真实物理世界关于物体表交互的全部然现象的全部内容(当然前计算机图形

学研究领域主要限于何光学,它并不包括更微观的如涉,衍射等光学现象,参见

第 章的介绍):即光从光源出发,以限的速度在环境中直线前进,经过与表发

多次反射和折射,最后进的眼睛形成图像。

然由于光照程是个沿全空间向的积分,这使得渲染过程常耗时,在现

有的硬件条件下乎不可能按照原始的光照程进图形渲染。不过研究发现,我们

并不需要完全按照原始的光照程进计算,即可以成令信服的图像,在这个级

别我们通常称为 。于是们寻求简化的光照模型以求能达到这种

渲染品质,在原始光照程的基础之上,们提出两种简化模型:

基于有限元分解的辐射度理论 有限元分解是种常见的积分计算法,它将个

沿限空间的积分分解为个有限纬度(称为个有限元)的积分,在每个纬度,

我们只需要求出该有限元的均值,并可以很容易地计算出光照积分程。在辐射度

理论中,通常我们通过 等法预计算出每个有限元的均值,供渲染时

光照程的实时计算。

基于 法的光线追踪技术 法通过随机抽样,使有

限个采样点的值,来计算积分程的值(详见本书第 章的内容)。

这两种法均能达到常的图像品质,然它们的计算仍然分耗时,因此主

要于电影等离线渲染领域(例如克斯的渲染产品 就是基于光线追踪

( )是全球规模最的游戏开发者年度专业性会议与展览,其提供开发者之间的技术交流等平台,参见: 。

Page 13: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

的渲染器)。在游戏等实时渲染领域,们寻求更简化的渲染模型,与辐射度和光线

追踪技术通过简化积分程的思路不同,实时渲染领域的主意思路是根据光学现象

或者其它理论拆分光照程,使得光照效果最终由多种效果叠加成,例如

(光从光源出发经过物体表反射或者折射次后进眼), ,

, ,

等等。

这些效果可能分别使不同的法来计算,例如 可以使 的光栅

化特性来计算, 可以使 基于屏幕空间(

)进计算, 则可以使简单的贴图实现;另些算法

则使些特定的数据格式来加速其中的些计算,例如 通过对

整个场景构建个 的数据结构,通过它来加速遮挡关系的计算从实

现 以及 等效果,其它些法则通过使

来存储些点的近似的“环境函数”,从能够快速地计算各种间接反射的效

果。

计算机图形学可能是计算机领域最活跃的领域之,研究员(尤其是实时领域)

和程师直在致于开发新的技术来加速光照的计算,这使得图形学的内容和分

越来越庞杂,初学者想要掌握这些知识必需要花费量的时间和精,才能理解这些

技术之间的关系,优缺点等,从更好地改进产品的渲染性能及品质。这就需要常

具有知识逻辑性的书籍来加速程师对计算机图形学的掌握和运。

反过来,本以全局光照为核内容的书籍,必须要覆盖到以上这些提到的各种

各样的图形学理论。所以通过本书,你能够更系统地综合学习和理解各种计算机图形

学的基础理论知识。

本书特点

尽管从以上的说明读者可能已经基本了解本书的写作风格及内容,为了便于读者

更简单快捷地了解本书的特点,并通过这些特点来决定是否需要进步阅读这本书,

这还是将本书的特点更清晰地总结如下:

知识逻辑性强,覆盖面 个完整的全局光照解决案,要充分考虑渲染的各个

,从游戏场景元素的何表述,于光照计算的( 和 )数据内存结

构,到各个渲染通道,每个通道的每个阶段,各种光学现象的实现等,它乎囊括

了部分图形学的知识。因此读者能够通过对完整的全局光照模型的学习,建起

极强的计算机图形学知识的逻辑和系统性认识。

覆盖业界最前沿的图形学知识 计算机图形学领域近些年虽然发展常快,但是其

基础理论乎没有太变化,这些变化多体现于业中(例如对现有算法的改

进,使些额外的数据结构来加速实时计算等),所以这些变化通常不会反应在

Page 14: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

以计算机图形学理论为基础的书籍中,但本书讲述当前业中使的游戏引擎及中

间件等产品的全局光照实现,所以它能够覆盖最前沿的图形学知识。

详细分析各游戏引擎,实用性强 本书从第 章起,乎每章都是围绕个或多

个游戏引擎具,或者某些中间件产品的全局光照案进介绍,在学习这些全局

光照案的同时,读者也能够学习这些具的特性及原理,从更好地理解和使

这些具。本书覆盖了 , , 等业界主流商业

游戏引擎的全局光照解决案,此外本书还介绍了 , 公司图形

处理器的 等中间件的实现和使,同时覆盖这么多业级的产品,对

于积累读者的专业经验以及扩知识都是极为有益的。

循序渐进的式学习不同的全局光照模型 这些各种不同的全局光照解决案彼此

之间并不是完全独的,它们有着极强的关联,你能够从种解决案中看到另

种案的不,种解决案可能是另种解决案的改进和优化。例如

是与摄像机视相关的,因此改变视则需要重新计算, 则

与摄像机视关,因此它可以将数据预处理,并且能够实现渐进式计算(即将复

杂的计算分布于多帧中,每帧计算个增量并累加个精度更的结果);为了

加速光线追踪计算,与 直接从物体复杂的何表述中获取光照信息不

同, 法则将光照信息存储为个独的数据结构(称为

)这加速了光线追踪的计算。我们可以看到,这些不同的全局光照模型之

间的联系本也能促进我们更透彻地理解这些概念。

实时和离线渲染相结合 多数关于计算机图形学的书籍,都是专门针对实时或者

离线渲染领域,例如《 》针对实时渲染,《

》聚焦于离线渲染。客观的事实

是,实时和离线渲染同属于计算机图形学领域,它们只是在当前硬件平下针对实

时性需求的划分,因此,不仅作为渲染程师我们需要同时掌握实时和离线渲染,

另个事实是,实现渲染中的静态光照贴图,其它些预处理数据等都是需要借助

于离线渲染来实现;此外,很多实时的全局光照模型都是从离线渲染模型优化,改

进来,学习离线渲染对实时渲染中概念理解有极的帮助。因此本书不特别区分

实时和离线渲染,当然我们会特别说明每个光照模型的实时性。

符合按需学习的知识学习过程 很多书籍都是按照知识模块的分类进章节划分,

个知识点接着个知识点,先讲解理论知识,最后再把这些理论于实践当中。

类的学习特点通常是先遇到问题,然后再去寻找和学习解决该问题相关的

知识。在本书中,我们并不在前的章节先按模块介绍后的章节会使到的基

础理论,是围绕个全局光照模型为核,然后在需要的地学习对应的基础理

论知识。例如第 章涉及针对硬件的优化,我们就在第 章讲述 的内存模型;

第 章涉及表的多项式表,我们就在第 章讲述 以及

等(当然本书还是在前两章先讲述本书会涉及到的最重要

和基础的知识)。这也是笔者平时的学习法和习惯。

Page 15: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

此外,本书还列出百多篇本书写作期间参考的论及书籍资料,并在书中每个地

指出具体的参考论供读者进步阅读,相信这些资料能够丰富和完善读者的

知识量。

写作范围

本书定位于计算机图形学领域的中,阶书籍,虽然全局光照技术涉及到计算机

图形学的各种基础理论,但是本书并不会对这些基础理论做深的介绍,相反,本书

假设读者对这些基础理论有定的了解,例如你要能够明贴图的原理及实现法,

顶点及像素着器的作,光栅化等等基本概念。

本书聚焦于各种全局光照解决案的实现思路,例如它需要的内存数据结构,它

涉及到的渲染通道以及每个通道的作,光照模型作的流程,它的核算法使的

基本公式及原理;此外,本书还特别讲解每种全局光照模型对特定的光学现象的实现

及不。总之,本书更偏向于讲解每种全局光照模型的实现原理及过程,每种图

形学相关的概念本。

章节概要

第 章:计算机图形学基础 介绍计算机图形学最基本也是本书的基础知识,包括

全局光照中的各种现象,光照程中的各种度量,光与表的交互,光照程,

理论以及基于物理的渲染相关的理论。本章所涉及的计算机图形学基础知识是与具体

的全局光照模型以及所使的图形接及图形硬件的特性关的。

第 章:图形硬件及渲染管线 本章介绍图形处理器硬件相关的知识(例如

的并发处理,内存模型,数据在 的存储等),以及经典渲染管线相关的内容,例

如光栅化,着器,深度及模板测试, 中存储数据的各种缓冲区对象。除此之

外,本章也会介绍经典渲染管线之外的当前业界较流的延迟渲染技术及相关的思

路,概念。

第 章: 积分 积分是 的核基础,它

也是计算机图形学中泛于各种预处理数据计算的具。 通过使随

机模拟对积分函数进采样,利有限的采样点来近似限元积分程的值。本章将

介绍概率论基础,随机变量的定义,期望,估计, 积分的推导,对随机

变量的采样法,以及减少随机采样差的法。

第 章:光线追踪技术 光线追踪乎是现代整个图形学的基础及未来,不仅当

前电影产业的主要图形学技术都使光线追踪技术实现,在实时的游戏引擎内也

Page 16: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

量涉及到光线追踪技术的使。本章还会特别介绍 与 年开发的全新渲染

器 。

第 章:辐射度理论 对于静态场景,如果我们能够预先计算出些区块的光照

的平均值,则可以加速光照计算。然较积区块的平均值降低了光照的频率,

因此辐射度理论假设场景中的表都是漫反射表,并且仅适于频率较低的间接

光照等,但好处是其丧失了向性,与摄像机位置关可以被预处理。虽然辐射度

法适于静态场景,但是本章也介绍些技术能够动态更新这些“预处理”计算。此

外, 等游戏引擎使的第三组件 也是完全基于辐射度理论来实现

的。

第 章: 光线追踪技术是完全与场景的何关系绑定的,对于

每帧都需要重新计算。 的思路就是要解除这种耦合关系,它将场

景中所有的关照能量存储到个称为 的数据结构中,然后每个点可以根

据周围 的密度进估计,当然 只存储在漫反射表上,因此它通常

还需要结合光线追踪等其他技术起作。

第 章: 的简单实现就是先对所有光源执次粗粒度渲

染,将这个渲染的结果看成看成多个虚拟点光源( ),然后所有这

些粗粒度的点光源对场景进绘制,以获得间接光照。 的前提仍然是漫反射表,

因为只有低频的漫反射表才能使这种粗粒度的表述。然和采样类似的问题,

受限于 的数量,本章介绍了些优化思路,例如在场景变化较复杂的部分增

加 的数量,或者从观察的度来改变采样的重要性等。

第 章: 如果个场景是静态的,那么每次渲

染光照在场景中的传输是不变的,所以我们可以将光源以及摄像机观察向从光照

程抽取出来,然后将剩下的何部分(阴影,多次反射信息等)预计算出来,形成

个对于光源辐射亮度的传输矩阵。这个传输矩阵在离线阶段使光线追踪等技术计算

出来,在实时渲染的时候,只需要在着器中执简单的矩阵计算,这是

常擅长的。

第 章: 于提供实时的间接漫反射光(

),并且它仅提供次反弹。这种法先使 技术成更密度

(每像素)的 ,但是与 不同的是, 并不渲染这些虚拟光源,是使它

们来成个 空间更稀疏的具有向性的间接光表述,这种表述可以于实时快

速插值计算。前 有使这种技术。

第 章:基于体素的全局光照技术 是项时下常流且

持实时渲染的技术,它融合了诸多优雅的技术。先它将场景个叉树表,每

个叶存储的是表上该区域的光照亮度分布,然后使类似 中纹理的过滤技

术将这种分布过滤到叉树的不同层次(或者分辨率),这个数据结构可以使光栅

化特性速渲染。更好的是,基于这个叉树结构,渲染时可以使 技

术快速成间接漫反射或者光光照,这些只是 的半径不同已。最新版本的

Page 17: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

已经全转向 技术,近期将会推出的 游戏《

》也完全基于这种技术。

第 章:基于距离场的全局光照技术 全局光照中的很多计算量的地都归

结于场景物体何遮挡关系的计算,为了加速遮挡关系的计算, 引

了种全新的技术,他们预先对整个场景构建个距离场( )的数据

结构,并将这个数据结构存储在 内存中,渲染器能够实时地从这种数据结构快

速计算何遮挡关系,这样就可以来实现软阴影, 等效果。

读者群体

本书针对的读者群体主要为与计算机图形学有关的学,教师,研究者,研究机

构,游戏开发程师,正在或者希望使 , , 等

游戏引擎开发各种产品的开发者,以及其它业与图形学有关的从业员,例如影视

动画业等。

阅读本书,读者需要具备本科或专及其以上学历,或者对线性代数,微积分等

学基础课程具有定理解的同等基础的员;本书定位为计算机图形学领域的中,

阶书籍,因此读者最好对计算机图形学基础理论有定的了解,熟悉般 渲染

的概念。

本书可以作为学习计算机基础理论的资料,更可以作为巩固已有图形学知

识,系统性地理解这些基础理论在业中怎样被实际运。

关于专业词汇

按照中出版惯例,中书籍当中的英专业词汇应该全部翻译为中。然出

于以下原因,本书采取保留所有英专业词汇:

有量的计算机图形学专业词汇并没有完美的中翻译,例如 翻

译为后处理并不能准确表述其意,这在某种程度上不仅使得句意思晦涩,更容易

使读者对其知识点没有更精准的理解。

在计算机图形学领域,部分的书籍,献和专著都是以英书写的,在读者的后

续学习,以及甚在本书的学习过程中,常常会需要查阅更多的英资料,因此保

留英专业词汇更利于后续学习。

当然,本书中保留的英词汇仅限专业术语,即名词。对于个术语作动词的

情况,本书仍然会选择使更精准中句来描述其意义及过程;同时,对于部分具

有完美翻译的专业词汇,按照本书的思路仍然将保留英形式;另外,对于某些英

Page 18: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

书籍或献,其可能已被翻译为中资料,为了便于查阅,本书仍将提供英名称,

读者需要查询是否具有相关中译本;最后,对于所有这些专业词汇,本书的索引

部分会有全书的引位置供读者查阅。

勘误及更多资源

在本书的写作期间,虽然笔者尽最努保证本书逻辑的严密性,内容的准确性

以及表述的清晰性,然由于近年计算机图形学技术的更新速度常快,以及笔者

知识及经验的局限性等,本书不可避免会存在些错误。在此,笔者向各位读者先

表真诚的歉意!

当您在阅读期间发现任何原因的错误,笔者恳请您能够稍微花点时间将这些错

误反馈给我们,因为笔者希望这本书会作为本相对优秀的教材被精的更新下去,

所以您的每个反馈定会被认真对待以使后续的内容能够更加准确,从造福更多

的读者。为此,我们提供了个与本书配套的站:

来提供勘误以及其它信息,这个站也会提供更多关于全局光照及渲染相关的

优质内容,您可以订阅该站的邮件列表以得到最及时的内容通知。

Page 19: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

致谢

提供有价值试读反馈的读者的名字将会出现在这,欢迎到本书站

上提供您的反馈及建议,真诚地感谢您的持与付出!

Page 20: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 21: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

目录

推荐序

前言

致谢

计算机图形学基础

渲染的逻辑

什么是全局光照

阴影

反射

间接光照

散射

辐射度量学

辐射能量

辐射通量

辐射亮度

辐射强度

辐射照度

物体的表着

何光学模型

光与表的交互

采样和反样技术

采样

Page 22: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

重建

重采样

全屏反样

基于物理的渲染

菲涅公式

理论

材质模型

渲染程

关于离线与实时渲染

并行处理器架构

概述

应程序执模型

缓存

预取

并计算架构

指令级并

线程级并

处理器级并

并计算架构

为什么需要另外个并计算架构

内存结构

图形处理器架构

延迟隐藏

全局内存访问的合并

图形处理器接口

着色管线

着技术概述

着技术基础

光栅化技术

延迟着

延迟光照计算

光源分配

分块着

Page 23: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

分簇着

着器管理

延迟着中的反样技术

形态反样

时间反样

聚集何缓存反样

蒙特卡洛方法

路径追踪技术

光子映射

梅特波利斯光照传输

辐射度理论

即时辐射度

预计算辐射传递技术

辐射照度缓存

光照传播体

基于体素的全局光照

基于距离场的全局光照

虚幻引擎的渲染系统分析

参考文献

专有名词索引

中索引

英索引

数学概念索引

Page 24: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 25: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

渲染的逻辑

什么是全局光照

辐射度量学

物体的表面着色

采样和反走样技术

基于物理的渲染

渲染方程

关于离线与实时渲染

渲染的逻辑

计算机图形学( )的主要的之,就是将个虚拟的数字

场景,模拟光与物体交互的光学原理,利计算机成张数字图像,供屏幕显

使或者保存为数字件格式。

然,要达到逼真的视觉效果,(尤其在实时的环境下)这个渲染的过程却异常复

杂。从技术上讲,这有两个突出的困难需要解决:先,对于表上的每个点,我

们必须在垂直于该点法线向的半空间上( )做积分运算以便求出该点的

颜值,因为每个点可以接受来场景中所有其它点反射的光照;其次,对于空间中

传播的每条光线( ),我们必须遍历场景中所有物体表上的其他的所有点,来

计算出与该光线相交的最近的个点 即最近点测试 ,从进光照计算。在当前的

硬件条件下,我们乎不可能实时处理这两个计算。

Page 26: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

为了解决这两个问题,计算机图形学提出了量的法和理论以简化和加速这两

个的计算,从更快(甚实时)地进光照计算以渲染场景。

我们可以将所有这些法和理论分为两类,其中第类法通过寻找更快的数

学法来计算光照积分程(见第 节),这有两经典法:基于有限元分解

的辐射度理论,以及基于 积分的光线追踪技术。

有限元分解( ,简称 )是种常见的积分计算法,

它将个沿限空间的积分分解为个有限纬度 称为个有限元 的积分 我们只需

要求出每个有限元的均值,并可以很容易地计算出光照积分程。在辐射度理论中,

通常我们通过 等法预计算出每个有限元的均值,供渲染时光照程的

实时计算; 法通过随机抽样 使有限个采样点的值,来计算积分

程的值 详见本书第 章的内容 。这两种法均能达到常的图像品质,然它

们的计算仍然分耗时 因此主要于电影等离线渲染领域 例如克斯的渲染产品

就是基于光线追踪的渲染器 。

与辐射度和光线追踪技术通过简化积分程的思路不同,第类法的主要思

路是根据光学现象或者其它理论拆分光照程,使得光照效果最终由多种效果叠加

成,例如 光从光源出发经过物体表反射或者折射次后进

眼 , , , ,

等等。

这些拆分后的效果可能分别使不同的法来计算(其中部分都是本书要重点

讲述的内容),其中些主要的思路包括:

使 的光栅化特性,例如来简化物体间的阻挡关系和阴影(利光栅化从

光源的度成光照贴图)计算。

为了减少计算量,另些技术从屏幕空间 进计算,例如

可以使 基于屏幕空间计算;还有些技术在屏幕空间

进光线追踪计算。

对于些静态的数据,例如静态光源,环境贴图( )则可以通

过预处理将这些光照贴图在编译阶段成,在运时只需要使简单的贴图即

可;有时候个复杂的积分程的部分静态数据也可以进预处理。

有些算法则使些特定的数据格式来加速其中的些计算:如最近点测试和遮挡

范围计算;例如 通过对整个场景构建个 的数据结

构,通过它来加速遮挡关系的计算从实现 以及

等效果。

对于积分函数中的低频部分( ),我们可以通过使

等函数来存储些点的“环境函数”,从能够快速地进积分计算。

光会在场景中进多次反射或折射才会进到摄像机,模拟这种多次反弹( )

的效果计算量常,但是些近似法通过仅计算次反弹(即光从光源出发,

经过两次与表反射或折射,然后进摄像机)也能获得常好的效果。

Page 27: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

什么是全局光照

从这些众多看似复杂的计算机图形学零散的知识碎中,我们可以看到其实它是

具有定的“逻辑”的。从个个完整的全局光照系统的度,以及通过多个不同全局

光照模型之间层层递进的关系,通过本书读者应该能够很轻易地去理解这些逻辑,从

站在个更的度去看待计算机图形学,最终能够更得应地解决作和学习

中的问题。

什么是全局光照

实际上,计算机图形学中所涉及的光照都是指全局光照。但是由于光照程计算

的的复杂性,早期业中般忽略间接光照,仅考虑光从光源出发,经过表次

反射 折射之后到达眼或者场景中的虚拟摄像机。这种不考虑环境其它光源表

对着影响的光照模型称为局部光照( )模型,反之则称为全局光

照( )模型。如今业中使的主流商业 游戏引擎,如

, 等都持某种程度的全局光照。

由于硬件计算性能的限制,我们很难在产品中达到物理上正确的渲染品质。现阶

段计算机图形学领域的主要标是渲染出令信服的( ),真实的( )

图像品质,所以不同公司的产品往往使不同的法来实现全局光照模型,这些不同

的法在品质上甚会有很的差异,因此我们很难种技术的标准来衡量全局光

照,但我们可以从另个度,即从光与物体的光学特性上去定义个令信服的全

局光照模型应该实现这样些效果。

当然这仅列出些前主流的游戏引擎或其他些离线渲染产品都在实现的

些光学现象,这并不是个标准,也不是全局光照的全部内容。通过这样些现象,

我们可以对全局光照有个直观印象,以及理解作为令信服的图形渲染标,哪些

核因素是个优秀的全局光照模型应该满的。

注意,本书选择在这样没有开始介绍任何具体的图形学知识之前讨论这些全局光

照现象,是希望能够使图形学的术语更加直观地讲述这些现象,因为这是整本书

都在试图达到的标。

阴影

阴影对于眼对 场景的体感觉常重要,在实时渲染领域,直接关照(如

, 以及 )的渲染通常不考虑物体间的遮挡关系

(这是为了利 快速的光栅化特性),所以需要另个单独的通道来处理阴影。

Page 28: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

这个通道可以通过 的光栅化特性,在运时动态成光照贴图( ),

或者利 的 成 等较简单的法实现。

光照贴图是以光源中的单个点为视,利 光栅化渲染的张图,通常它

只包含深度值,所以它记录的只是物体边缘的信息,因此产的阴影为硬阴影(

)。对于硬阴影,通常还需要使适当的反样措施(关于反样技术将在本

章第 节讲述)。

图 软阴影形成的机制,由于光源具有定的积,使其包含完全遮挡,部分遮挡及完全光照三个区域(图来 )。

对于点光源,其光源具有定的积,成的阴影为软阴影( ),

个软阴影包含 个部分:即完全遮挡的 区,部分光照被遮挡的

区,以及完全没被遮挡的 区,如图 所。其中 过渡区可以

通过表到遮挡物体及光源的距离,以及光源的积三个参数求得,光线追踪,

光照图的深度值等技术可以以软阴影效果的计算。本书将会详细介绍相关的阴影计

算,参考资料《 》 包含了量关于阴影技

术的介绍。

对于更积的环境光( ),如 , ,或

者来其它物体反射的间接光照等,其光源往往来整个半空间,往往不可能通过以

上的式计算物体间的遮挡效果。在早期的光照计算中,们通常忽略这种阻挡关系,

这造成场景中的缝隙等被较多遮挡的地实际的效果要明亮(如图 所),这

是因为对于这些地我们并没有考虑它的遮挡关系。如果环境光是个常数,则整个

物体表会看起来更平坦。

和 于 年次指出了这种环境阻

挡对于图形识别以及增强图像质量的重要性, 年

和 因为推进 (以下简称 )在渲染技术中的运

Page 29: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

什么是全局光照

获得当年的奥斯卡科学技术奖 ,之后 被量应于电影产业,如今主流的商

业游戏引擎也乎都持某种程度(静态或动态)的 。

不包含 的场景 仅 包含 的场景

图 对渲染的影响,注意 图中墙砖的裂缝,以及物颈部等地由于部分被遮挡显得更暗(图来 )。

的计算实际上是要针对每个点,在垂直于该点法线的半空间上,针对每个

向对可见性函数( )进积分运算,其值为个介于 到 的表

遮挡程度的值。对于静态的场景可以预计算出这个值;对于离线渲染环境下,可以

使 法使随机抽样的式求积分 ;对于实时环境,则需要更

效的法,例如由 提出的基于屏幕空间的

( ),以及 使 来加速 的计算。关于 本书

后的章节将会做更详细地介绍。这只需要理解其现象即可。

反射

光线在物体表之间穿梭,经过多次反射和折射最后才会进摄像机,形成图像,

如果个表是光滑的,或者不是完全粗糙的,则这些表可以反射它周围的环境,

表越光滑,则其反射的场景越清晰,否则则越模糊。反射乎处不在,它是质

量图形渲染不可缺少的部分,如图 所。

就像对于阴影,般不会真的使光线的穿梭来决定遮挡样,对于反射,通

常也是使其它的技术来实现反射。最经常使的是基于称之为

的技术,这种技术通常将要反射的“环境”渲染为张图,然后在反射使

折射的式贴图;对于粗糙的表可以使样 技术来实现粗糙表的效

果。对于静态的贴图可以进预处理,动态的环境则可以对环境部分实时渲染两次。

这种技术减少了反射效果的计算时间。

于计算对较近的环境的反射,这样的反射是和点的位置有关的。对于

较远的环境,可以认为“环境”是和位置关的,仅与向有关,这样的环境可以使

称为 的技术实现,这种技术可以使个放置于场景中的

Page 30: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 反射处不在,图为台湾桃园国际机场的廊。

图 使 技术渲染物体对环境的反射。

个使鱼眼镜头的照相机,将环境制作成张 或者 ,如

图 所,通常游戏中的 就是张远距离的环境贴图。

间接光照

环境贴图仅于光泽表( ),对于完全粗糙的表(

),则不可能使使环境贴图来计算环境光对其的贡献,其原因是每个点可

以接收来整个环境的的贡献,即是光照计算需要对整个环境贴图进积分计算。

Page 31: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

什么是全局光照

然环境对于 表的影响常重要,它最重要的效果称为

,例如个红的地毯靠近侧墙则会使墙呈现粉红, 的

效果如图 所。

图 环境对 表的影响,这种效果称之为

,这种效果的计算常昂贵。

这种效果的计算特别昂贵,尤其是 的计算,它涉及到光照程

针对整个半空间的积分计算。对于这种 ,前主要的解决法还是

预处理,使 或 法成光照贴图;对于动态物体如

,常的处理法则是对环境进光照采样(在 中这些采样点称为个

,如图 所),然后在运时使插值的法计算 。这

样做的理由是漫反射通常都是低频的,相邻点之间的颜值变化不,其间的点的值

可以通过插值计算。由于这些采样点是预处理的,所以动态物体并不能影响场景中其

它物体,它只能接受来其它静态环境的影响。

图 使 对环境进采样,这发在预处理阶段,在运时阶段,渲染器从邻近的采样点中取值对其间的点进插值。

通过后第 对材质模型的学习, 是由于漫反射光从物体内部反射回空中时,被乘以了个反射率,这个反射率 baseColor 即是物体表的真实颜,因此漫反射光携带了物体的颜,从能够影响周围的环境。

Page 32: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

在全局光照模型中, 效果尤其明显。义的 是指光从光源出

发,经过少次光泽反射,最后通过个光泽或漫反射反射后进摄像机。在计

算机图形学中尤其指光通过反射或折射后,多束光落在同个点上(例如由于玻璃或

等弯曲使折射后多束光落在同点),导致这些点的光照特别明亮,如图 中

所的些常见 的效果。

图 由于多束光经过反射或折射后落在同点上, 效果在全局光照中特别明显(图来 )。

对 的渲染尤其困难,其主要原因是这样向的光束特别少,导致般

的采样法不能获得够的信息,通常 都需要结合某种重要度采样法

( ),本书也将介绍各种 的实现算法。

散射

到前为,所有我们所讨论的全局光照现象,都仅限于光与物体表进交互。

在现实环境中,许多物体部分或全部是半透明的( ):即光进物体表

后,部分被吸收( ),部分发散射( )最后从物体表发射出去

(这个出射点的位置可能和射点的位置不样)。

由于散射效果的计算相当复杂,因此和其它前提到的技术样,计算机图形学

中也存在很多近似的法来处理散射效果。特别地,对于散射的计算,存在两类

法分别处理散射导致的两种较明显的分类效果,即次表散射和

次表面散射

次表散射( )是散射中最复杂的效果,它表由于物体内

部存在介质的不连续性,导致折射进物体内部的光在经历多次散射之后,重新从另

Page 33: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

什么是全局光照

个位置反射会空中。它要求较真实地模拟散射效果,并且它处理的都是要求视觉表

现较真实的材料,例如理,肤,叶,蜡烛,奶等。例如对于肤,它有

约 的光被直接反射,剩下 的光被散射,并且散射之发在表以下部

分厚度的空间内,如图 所。

图 光可以进肤表,由于物体内部介质的不连续,在表以下部分区域内发多次散射,然后从另个地反射会空中。

关于次表散射,本章第 节会介绍 使的近似然精确度很的次

表散射模型,它在了电影《超能陆战队》中除头发以外的所有次表散射情形。

,例如云,烟,雾等在然界是普遍存在的,它们也导致了

很多有趣的视觉现象。当光在 介质中传播时,部分被吸收,其他

则经过多次散射从不同的位置离开表。 与次表不同的是,次

表往往只是物体表很浅的层, 则往往整个介质是半透

明的,光线能够从边进,然后从另边离开。 能够有效地增

强环境的氛围,以及对场景深度的感知。

图 在然中处不在,并且对环境有常的影响。

Page 34: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

辐射度量学

光学中关于光的测量这分,称为辐射度量学( )。 年

次将辐射度量学引到计算机图形学中,于测量和计算计算机图

形学中的光的传播,并推导出光照程( )。光照程保留

了辐射度量学两个最基本的特性即 和 ,

现代图形学理论基于光照程提出来量的模型于简化和加速光照程的计算,在

这两个基本物理特征的保障下,这些模型能够达到常真实的图形品质。

表 辐射度量学中的基本度量,这些度量也成为光照程的基本度量。

中名称 英名称 单位 符号

辐射能量 J Q辐射通量 W Φ辐射照度 W/m2 E辐射强度 W/sr I辐射亮度 W/(m2 · sr) L

辐射度量学定义了组基本的物理量来测量光辐射,因此这些度量也成为计算

机图形学最重要的基本概念,这个度量如表 所。

在开始讨论这些度量之前,必须先了解体( )的概念,如图 所

。在何学中,体是 度的概念在 空间的延伸,它表在 空间,从

某个点观察,另外个物体有多“”。体的数学符号通常 Ω 表,其单位为 sr

(其为 的缩写)。体也可以理解为 空间中沿某点多个向的集合。

图 体的概念,它表单位球体上块区域对应的球部分的积。根据体的定义,如果球上任意块区域的积等于球半径的平,当从该球观察时,该区域积就是1sr。

正如在 中,使单位圆上的段弧线的长度表其对于度的,在

中,使单位球体上块区域积的表其对应的体的。所以个物体

相对于某点的体的,等于这个物体投影到以该点为球的单位球体上的

积。

在球坐标系中,单位球体上任意块区域 A 的积可以简单地表为:

Page 35: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

辐射度量学

Ω =

∫∫

Asinθdθdϕ

其中 θ 表经度,ϕ 表纬度。所以整个球的体为 4π,个正体的

个,从该正体的中点测量的体为 23π。

辐射能量

在辐射度量学中,最基本的单位是辐射能量( ),表为 Q,单位

为 焦 ,辐射能 Q 是以辐射的形式发射,传播或接收的能量。每个光都携带

定的能量,这个能量正于它的频率 v:

Q = hv

其中 h 为普朗克常数 6.62620×10−34J · s 。光的频率(或者说能量),影响着

光与物体表的交互,更重要的是,它影响着光与感应器(例如眼中的视锥细胞

和视杆细胞)之间的作,使不同频率的光被察觉为不同的颜。在可见光谱(

)中,更“蓝”的光具有更的能量,更“红”的光具有更低的能量。

辐射通量

辐射通量 Φ, ,表光源每秒钟发射的功率(dΦ/dt),其单位为

特 W( )。例如个灯泡可能发射 特的辐射通量。在辐射测量中,都是基

于这个辐射通量来测试能量,不是使总的能量 Q,所以以下这些度量都是在单位

时间下发的。

辐射亮度

在辐射度量学中,基本上考虑的是从 A 的部分射出的光能量。这个可能

是虚构的,也可能就是光源的真实的辐射,或固体的个受照。如果固体是不透

明的,则考虑的是反射光;如果固体是透明或半透明的(这是有部分光被吸收或散

射),通常测量的是透射光。

设 P (ξ, η) 是 A 上的个点,以上任意组便的曲线为参考坐标。现在在

P 点取元 dA ,并围绕极 (α,β) 向取体 dω,另外设 dω 向与 dA 法

Page 36: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 辐射亮度表的是某个点在某

个向上的亮度,在计算机图形学中它是束光的亮度,是光照程最终要计算的量。

线的夹为 θ,如图 所,则在单位时间内由元 dA 发射到 dω 内的能量(时间

平均)值 dΦ 可以表为:

dΦ = L θdAdω

其中 L 是个因,般与 (ξ, η) 和 (α,β) 有关,即:

L = L(ξ, η;α,β)

式中引因 θ,是因为物理上有意义的量是 dA 在垂直于 (α,β) 向的平

上的投影, dA 本。 表 θ 的最值为 0,这是因为光不能向该的背

发射。L 称作 (ξ, η) 点处 (α,β) 向上的辐射量度, ,其单位为 W/(m2 ·sr)。测试的是单束光的量度,它也正是感应器(例如的眼睛,或者场景中

的虚拟摄像机)测量的度量,所以它在光照计算中特别重要。计算光照程的的就

是计算出表上的点到摄像机所在向上光的强度。另外值得注意的是,L 的值不随

距离发射点距离的变化变化。

通常两种不同的式把 dQ 分解为两个量的乘积,以表它对 dω 和 dA 的显

关系:

dΦ = dIdω = dEdA

在接下来的两节将分别讲述这两个新的度量 I 和 E。

辐射强度

较程 和 两式,可以得出:

dI =dΦ

dω= L θdA

对个区求积分为:

Page 37: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

辐射度量学

I(α,β) =

∫L θdA

I 称为 (α,β) 向上的辐射强度, ,其单位为 W/sr。I 也是

个与距离关的量,由于光源通常具有定的形状和积,所以图形学中常常使

I 来表个光源的辐射强度分布,这个分布是向的函数,如图 表个点光

源,这个点光源每秒发出 特的辐射通量,但是它在不同的向上具有不同辐射

强度。

图 个灯泡在不同的向上可能具有不同的辐射强度,辐射强度也是计算机图形学中表各种光源光照的度量。

当发反射时,L 随向的变化取决于这个的性质,特别取决于它是粗糙的还

是光滑的,它是发光还是反射或透射别的光。常常允许假设,在很好的近似下,L

与向关,这时辐射称为各向同性的。如果辐射是各向同性的,并且辐射是平,

则程 简化为:

I(α,β) = I0 θ

其中

I0 =

∫LdA

这时在任何向上的辐射强度随该向与法线间夹的余弦变化。公式 通

常称为朗伯余弦定理( ),如图 所。此时,如果是发射,

则称为漫发射;如果是反射,则称为漫反射。

辐射照度

同理,较程 和 两式,可以得出:

dE =dΦ

dA= L θdω

对体取积分:

Page 38: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 在个漫反(发)射,法线向和法线向的每秒光发射情况。每个楔形区域内光的发射量正于它们的积。

dΩθ

I dΩ dA

dΩ dAcos( )θI

dA

E(ξ, η) =

∫L θdω

E 称为 (ξ, η) 点的辐射照度, ,其单位为 W/m2,它是点 (ξ, η) 沿各

个向对辐射亮度 L 的积分,如图 所。值得注意的是,前提到过,在辐射度

量学中,基本上考虑的是从的部分射出或者接收能量,所以辐射照度虽然表述的

是上个点的度量,但它实际上是通过该点所在的单位积来测量的,因为辐射量

度 L 也是通过单位积来测量的。

图 个上某点接收来各个向的辐射亮度形成辐射照度。

由于 表个点接收的来各个向的辐射亮度 L,所以在计算机图

形学中它被来表述表的个点接收的所有光照。光照程所要处理的正是通过

反射定律及后要讲述的其它理论,计算出沿某个向的出射亮度 Lo。

被来测量光进个表的强度,它也可以表光离开个表的

强度,称为出射度, M 表,其也称为 或者 ,例如表

个光源的出射度,或者在 理论(第 章)中先将整个场景栅格化为

多个,将每个视作个光源,然后计算出每个的出射度。通常

来统称个表出射或者射的强度。

在图 所的平光中,光源的辐射强度是不随表到光源的距离发变化的。

但是现实世界中多数光源(例如本章后将要讨论的点光源和聚光灯等)都不是平

光,那么般光源的辐射强度是怎样分布的呢?

Page 39: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

物体的表着

图 平光源的出射度不随表到光源的距离变化变化。

设 dA 是 P 处的元,QP = r 又设 θ 是 QP 与 dA 的法线夹,如图 所

,则光源在单位时间内射过 dA 的能量是 Idω,其中 I 是光源沿 QP 向的辐射强

度,dω 是对 Q 所张的体。由何基础学:

θdS = r2dω

由此,利公式 即可得出:

E =I θ

r2

公式 就是辐射度量学的基本程,它表达了所谓的照度余弦定律(E 与 θ

成正),以及平反定律(E 与 r2 成反)。

图 点光源产的照度。 Q

P

θ

n

dA

由于 E 表的是个表接收周围所有光源(包括直接光源和间接光源)的辐

射照度,所以根据平反定律可以看出,个光源距离该表越远,则其光照贡献

越。

物体的表面着色

在了解了全局光照应该实现的各种物理现象,以及模拟然光照计算需要的些

基本物理度量之后,从本节开始,我们将开始进计算机图形学的世界。

正如前所,本书除了介绍计算机图形学的些基本理论知识,另个重要的

标是试图解释清楚这些理论知识之间的逻辑,本节的标是在没有涉及具体的全局

光照法之前,尝试解释光和物体的交互过程,以及最终怎样被渲染成图像;在本节

Page 40: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

的末尾,仍然通过这种层抽象的物体表着需求(不是从基础的数学公式),推

导出光照程的表达式。然后在下节,将会更详细地解释光照程。

几何光学模型

本节先介绍光的些基础物理特征,这些特征是我们模拟真实的光与物体交互

的基础,从渲染出更真实的图像。

在电磁学中,有两种模型于研究光的性质,第种为物理光学,第种为何

光学。物理光学( ),又称为波动光学( ),它认为光在介

质中以波的形式传播。这种模型可以解释光的衍射和涉等现象。然它以光的波长

为测量尺,这超出了计算机图形学的需求。

由于可见光的波长常短,另种模型忽略光的波长,即相对于 λ→ 0 的极限情

况,并证明 在这种近似处理下,光学定律可以何学的语来描述,这种模型称为

何光学( ),或者称为 ,因为这种模型下能量可以看作

是以定的直线传输。何光学模型正是被计算机图形学泛采的模型。

图 在何光学模型中,反射定律和斯涅尔定律决定光的反射和折射。

当然,何光学模型仍然较复杂,在计算机图形学中,我们作出了些简化假

设,这虽然限制了些效果如衍射,但是它处理起来相对简单,并且满般图形学

的需求。这些假设包括:

物体的表绝对光滑 ( )。

光仅可以被发射( ),反射( )或者传播( )。

光以限快的速度沿直线传播。

感兴趣的读者可以参考书籍 第三章的推导。

当然现实世界的物体表不是绝对光滑的,但是这种粗糙度介于光的波长和个像素的尺之间,这种粗糙度可以通过下节的技术实现,它本质上是反射和折射的种聚合。

Page 41: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

物体的表着

在这些假设下,光的反射由反射定律( )决定,即:给定条

射光线 和表法线 ,反射光和射光处于同个平 并且反射光与法线之间的

夹等于射光与法线的夹,如图 所。

当光在传输过程中,介质的折射率( )发变化,则会发折

射( )。当射光 从具有折射率为 n1 的介质进折射率为 n2 的介质时,

其光线传输向的偏离 由斯涅尔定律( )决定(如图 所),即:

n1 θ1 = n2 θ2

光与表面的交互

为了模拟光学现象成真实的数字图像,我们需要构建套系统,将何光学模

型应到计算机图形学中。这套系统定义了在图形渲染过程中,光与表及其它物体

的交互。

这个系统作的过程可以描述如下:

光从光源(例如太阳或其它光源)或其它发光体中发射出来。

光与场景中的物体进交互,部分被反射,部分被吸收并可能经过定路径传播后

沿其它向从物体表射出。

最后,光被感应器(例如摄像机或者的眼睛)吸收,形成图像。

这个过程涉及到三个组件:光源,材质以及摄像机。在接下来的节中我们将讨

论这些组件,以及它们怎样被在渲染管线中于渲染图形。

光源

光源( )发出光并照亮整个场景,此外,在计算机图形学中,光源

般不会反射或吸收其它光照。

现实世界中的光源是很复杂的,它可能沿不同的向以及光源表上不同的点都

具有不同的分布,在图形学中般仅使少数种简单的光源模型,这种模型都假

设光源的光照分布只随向发变化。这种模型包括:

:平光模拟光从限远的地发射,这意味着所有由它产

的阴影都是平的,因此这种光源模型是模拟太阳光的理想选择。

:点光源从个点向四发出光线,它可以于模拟如现实世界

中的钨丝灯泡发出的光。

Page 42: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

:聚光灯限制点光源发出光线的向,它通常使两个圆锥体作为参

数,其中内部圆锥体的半径内发出的光线最强,从内部到外部圆锥体半径内光线强

度逐渐减零。

以上这些光源发出的光线会在场景中像然光样进传播,即这些光线通过最

近点测试计算出光线与哪个物体表的哪个位置相交,然后根据物体表的材质属

性进着计算。除此之外,出于性能考虑,场景中还有另外些(通常是间接)光

不会通过这种式计算,例如积的环境光通常通过贴图的式计算,这包括

以及其它 ;低频率的间接漫反射的光可以通过 表,

然后在 中使快速的卷积计算( )。

对于直接光源,另个我们最关的问题是这个光源的光照什么物理量表,

以及这个物理量怎样参与到光与表的交互计算之中。

先,虽然眼睛等感应器接收的是辐射亮度 L,但这是个五维(三个维度表

位置,两个维度表向)的量,太过于复杂,所以在图形学中般不会直接表光

源的辐射亮度分布。考虑到图形学中部分直接光源的亮度分布都是只与向有关,

所以辐射强度 I 通常来表本节提到的种直接光源的辐射亮度分布。

当然这个向分布函数不宜太复杂,般引擎不允许定义任意向分布,例如点

光源可能所有向的辐射强度都相同,聚光灯也是沿着个圆的向外递减。在

中,可以对 和 使个称为 的配

置件 。 可以以曲线的式定义光源的光照强度分布,如图 所

图 在 中使 定义 和 的光照强度分布(图来 )。

通过第 节我们知道,在计算光与物体表交互时,表的接收的所有光照使

辐射照度 E 表,光源使辐射强度 I 表,所以这就需要使同样第 节

的平反定律通过 I 来计算 E,为了便,这重新列出该程:

Page 43: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

物体的表着

E =I θ

r2

虽然 E 随着 1/r2 正增长在物理上是正确的,但是在图形学上通常使个不

同的函数来描述 E 怎样随着距离的增加递减。这种函数称为距离递减函数(

),由此 E 可以表为:

E = I θfdist(r)

距离递减函数在计算机图形学中被泛采,有以下些原因:先距离递减函

数可以提供更多的控制来达到些特殊的效果;其次,随着距离的增加,平反函

数趋近于 0 但却永远不会为 0,距离递减函数可以通过设定个最距离范围,超出

这个范围的表接收的辐射强度为 来提性能;平反函数在距离趋近于 0

时趋近于限,距离递减函数可以通过设定个最值,避免这种限的值出

现在着计算中。

例如以下是克斯作室 在电影产品中的距离递减函数:

fdist(d) =

⎧⎨

⎩Mes(

dL )β , d < L

K(Ld )α, d > L

这个函数在个特定的距离 L 处其值为 K,在距离于 L 时逐步达到最值

M,递减指数 α 于控制当距离于 L 时距离递减函数怎样随着距离递减,常数 s 和

β 被设定为特定值以保证函数在过渡点处的导数连续:其中 s ≡ ln(KM ), β ≡ −α

s ,

如图 所。

图 克斯采的距离递减函数。

Page 44: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

材质

光与物体表交互的切,都是由材质及其属性来决定的,材质决定了每个物体

的表最终呈现出来的是什么颜。那么材质到底是什么,这个问题需要从两个

来理解。

图 个由三形格构成的海豚,格构成物体的“形”(图来

)。

先,在计算机图形学中,个物体的“形”与“”是完全分开的,物体的形状由

组顶点( )构成的格( )组成,如图 所,物体的表着则

由称为材质( )的东西决定。所以材质通常包含纹理( ),着器

( )以及其它其它些着程需要的参数,所有这些数据构成个对象被附

加到个物体上,在渲染时这些数据被传输 内存, 执其中的着器

对该物体表着,这个过程包括贴图,光照以及其它相关的计算。关于材质的些

重要参数将在下节讨论。

图 在微观尺上,每个点向不同的向反射或折射光照。

理解材质的另在于,我们需要了解更多关于物体表或内部结构的问题。

在前的描述中,都是假设表是绝对光滑的,在这种情况下,光经过表时按照反

射定律和折射定律进反射或折射。然在微观尺度上 (称为 ,即

于个像素但是于光波长的尺),物体表并不是绝对光滑的,这时虽然在单个

光束与表交互上可以看作该是光滑的,但是在个像素尺度上,它确是不光滑的,

如图 所。那么我们如何处理这种复杂的情况?

由于表在微观尺上是不光滑的,每个像素更的点可能沿不同的向反射

或折射光照,这导致对于个像素点,每条射光会被反射或(和)折射多个向,

计算机图形学中般不考虑于波长的原尺(称为 ),在此尺下可以观察到光的衍射现象,即光可以绕过障碍物沿直线向传播。

Page 45: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

物体的表着

如图 所。这等效于是从个给定的观察向看,个像素点可以接受来多个

向的光照。

图 微观结构的粗糙结构,导致个像素点可以将束像素尺“粗”的射光反射或(和)折射多个向。

对于折射进物体内部的光照会发什么呢,这取决于物体材质的结构。在计算

机图形学中,材质可以分为两类 :属( )和属,后者又称为绝缘体

( ),其中属即吸收所有折射的光照。

对于属,如果该物体是透明的,如玻璃和晶,则折射光会在物体内部直线

传播,直到遇到该物体其他的表后离开表重新回到物体外;对于透明的物体,

由于内部介质的不连续(例如流体,晶体等内部的粒,泡泡,液滴,瑕疵;有机体

表的粗糙度,细胞;以及服布料的纺织纤维等),折射的光会沿着不同的向

继续反射或者折射,在经历定的路径之后,这些折射的光部分被重新(可能从原来

的位置,也可能从其他位置)发射回到外,部分可能被吸收。除该物体是个完

全透明的物体,否则折射的光中总会有部分会发射回到表外,如图 中的蓝箭

头部分光照,这部分光照可能从不同的位置以不同的向发射出表外。值得注意的

是,这种由物体内部发射回来的光通常不具有固定的向性,所以这种反射称为漫反

射( )。

图 对于属材质,经历定路径的散射之后,部分折射进表的光会沿不同的向重新发射回表外。

散射的光重新发射回表外的位置与射点位置之间距离的分布,取决于该物质

表属性。如果这个距离于个像素的尺(即在微观范围中),在着的时候我们

可以假设其距离为 0,这种散射称为 ;否则称为

。在计算机图形学中,这两种现象通常分别使不同的技术实

现。

然界中还存在第三类材质,即半导体,但是半导体在渲染场景中很少见。

Page 46: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 光与物体表交互后反射的光可以分为光泽和漫反射光两部分。

在计算机图形学中,通常将反射和漫反射这两种不同的光照区分开,分别称为光

泽( )和漫反射光 ( )。其中前者主要由于光在物体表的直接反射

形成,后者通常由光进物体表,经历折射,吸收,多次散射过程之后重新从物

体表散射回表外的光形成,如图 所。这样区分的的也在于由于漫反射光

可以接收来全部向的光,因此需要对全空间进积分计算,但是将与向关的

部分分离出来,则可以使更简单的法处理漫反射。关于这些法将在本章后介

绍。

对于光泽部分,这些反射光所处范围的取决于表的粗糙度(下节会讨

论),表越粗糙,则反射的范围越,物体表越模糊;反之表越光滑,反射的范

围越,则表越光亮,如图 所。

图 反射光的范围取决于物体表的粗糙度,物体表越粗糙,它越能接收更范围的光照。

感应器

当光从光源发射出,并在场景中与物体表进多次交互后,最终其中的部分

会进图像传感器形成图像。由于图像传感器接收的是辐射亮度 L(其值由渲染管线

中的像素着器计算出),并且数字图像以定的分辨率存储图像信息,所以可以使

在光学中, (甚( 本)也包含部分由于物体表的粗糙度形成的直接反射光的部分,并不全是由折射进表的光形成。)

Page 47: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

物体的表着

图 来表计算机图形学中的图形传感器成像系统,这 P 点就是场景中的“摄

像机”对象,摄像机沿虚拟屏幕的每个像素的位置发射条射线,称为

(它也是着器计算中光照程的出射向),场景中所有沿 反向传播的光线就会

进摄像机。

图 理想的计算机图形学图像传感器模型。

然事情并不像这么简单,对于给定分辨率的“屏幕”,它的每个像素点总是有

个尺的。对于每个像素,我们通常取其从摄像机发出穿过该像素中点

的向对场景进采样,如果个像素的中点被三形覆盖,则整个像素被填充

个单的颜,否则即使该像素有部分区域被覆盖,它也不会被填充任何颜,

这使得三形的边缘出现锯齿( ),如图 所。这种锯齿是由于采样不

导致的种样现象( ) 尝试避免或者减少这种样的技术称为反样

( )技术。

图 光栅化技术通过测试何图形对像素中点的覆盖来决定是否对该像素点着,这造成在何图形的边缘出现锯齿的现象。

数学理论来解释和解决这种缺陷,涉及到数字信号处理的些理论,如采样,

重建,样等。这些技术的学习不仅有助于理解渲染过程中数字图像的成过程,它

也是计算机图形学的重点内容,例如着器中对纹理的采样, 中很多

都涉及到样技术等等。接下来,我们讨论关于数字信号处理的些理论,并解释这

些理论怎样被在计算机图形学中。

Page 48: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

采样和反走样技术

重新梳理

图像的成本质上是个对各种连续函数(如何图形,光泽分布函数等)采

样,转化为对应的个离散函数(以有限分辨率表的个维图像)的过程。

渲染的部分采样发在光栅化阶段,或者其他由光栅化导致的采样,例如图 中,

三形两个顶点之间的边是连续的,但是被光栅化过程采样为离散的像素值。

图 个连续的信号被采样为离散的信号,然后通过重建还原为接近原连续信号的连续信号。

在数字信号处理( )中,术语采样( )的的是

将连续的信号表述为离散的信号,在采样的过程中,其中的些信息会丢失;为了重

建( )原始连续信号,则需要对离散信号使过滤( )技术来还

原原始离散信号。

采样

关于采样的理论常复杂,它涉及到傅叶变换,积分,级数等数学知识以及像

频率域等滤波相关的概念。然理解采样相关知识是理解样相关知识的重要理论基

础,且在图形学的其他些地也会涉及到这些知识,例如在光线追踪技术中就会

量涉及脉冲函数 理解傅叶变换也有助于理解后的 函数

等。但本节不会严格地推导和讨论傅叶相关的知识,只是使些结论让读者

较容易地理解采样相关的概念及逻辑,关于更多关于数字图像处理的理论知识,可以

参考 。

法国数学家傅叶( )于 年在他的《热分析理

论》书中指出,任何周期 (但该曲线下的积是有限的)的连续函数 f(t) 可以

对于任何周期函数则可以使傅叶级数,表为不同频率的正弦和 或余弦和的形式,每个正弦项和 或余弦项)乘以不同的系数。例如具有周期 T 的周期函数 f(t) 的傅叶级数为:

Page 49: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

正弦和 或余弦和乘以个加权函数的积分来表,这个积分程称为傅叶变换

( )。 F (µ) 表连续变量 t 的连续函数 f(t) 的傅叶变换,则:

F (µ) =

∫ ∞

−∞f(t)e−j2πµtdt

相反,给定 F (µ),通过傅叶反变换可以获得 f(t):

f(t) =

∫ ∞

−∞F (µ)e−j2πµtdµ

利欧拉公式 ,可以把傅叶变换公式 表为:

F (µ) =

∫ ∞

−∞f(t)[ (2πµt)− j (2πµt)]dt

我们看到,由于变量 t 被积分后只剩下 µ, µ 表正弦项或余弦项的频率,所

以傅叶变换 F (µ) 的作域是频率域。频率变量 µ 的单位取决于 t 的单位,例如,

如果 t 表单位为秒的时间,则 µ 的单位为周 秒,如果 t 表单位为的时间,则

µ 的单位为周 。

从义上讲,频率( )指的是个连续函数在它的作域上

的改变有多快,所以个函数通常有多个频率,这些频率构成该函数的个频率谱

( )。傅叶变换正是将个连续周期函数由其时间域

( )或空间域 ( )变换到其频率域。其的是从频率域

可以发现该函数的些重要特征,甚些对函数的操作在频率域进更便。

图 个带限函数的频率域具有个有限的范围,如果采频率于这个带限的宽度,则其采样后的离散信号可以被完美复原(图来 。

X ( ƒ)

ƒB−B

f(t) =∞!

n=−∞cne

j 2πnT

t

其中:

cn =1

T

" T/2

−T/2

f(t)e−j 2πnT

tdt, n = 0, n = ±1, n = ±2, · · ·

ejθ = θ + jsinθ

如果个信号随时间变化,称该作域为时间域。

例如与时间关的静的图像,它的作域为空间位置 x, y, z,称为空间域。

Page 50: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

当个函数被变换到频率域,则可以检测该函数是否存在最的频率,以对于

所有于该频率的傅叶变换函数的值为 0。如果该最频率存在,该函数称为带限

函数( ),这意味着我们可以检测该函数的频率带宽( ),

如图 是某个函数的傅叶变换,其频率带宽为 2B。

当个连续函数被采样成个离散函数之后,其能够被重建为原函数的能取决

于采样点的密度 ,或称为采样率( )。根据采样理

论( ),对于个带限函数 f(t),其最的频率为 B,它能够

完全被系列以 1/(2B) 间隔采样的离散函数表。换句话说,采样率必须或等

于 2B 采样点 秒,或者说对于个采样率 fs,其离散函数能够被完美复原的条件是:

B < fs/2。

当频率带宽 B 太(或者该函数完全不存在频率带宽),则这种不完美的复原导

致的结果就是样( )。这两个临界值 2B 和 fs/2 称作 和

。由该采样定律定义的不等式条件称为 。采样理论又称为

– 以纪念 和 对其

的贡献。

关于对离散函数的重建过程及其法将在下节讨论,本节最后将分析种计算

机图形学中涉及的些较重要的样,通过对这些样现象的分析和了解,将有助

于更好地理解采样率对图像质量的影响。

几何走样

回到第 节讨论的由于光栅化导致的三形的样,如图 所,对于光

栅化,我们按照屏幕的分辨率对何图形的可见性函数( )进采

样,即采样点之间的间距为个像素,采样点的位置为每个像素的中点。

可见性函数是个连续函数,要想最终呈现很质量的图像,必须要在图像上还

原出很好的原始可见性函数,根据采样定律,必须要使 倍于可见性函数最频率

的采样率。然,三形的可见性总是存在不连续,这种不连续性导致限的频率,

从使其傅叶变换不存在有限的频率带宽,因此没有任何采样率可以阻这种样

发;另外根据傅叶变换的条件,只有定义域在限的时间域或空间域才能使其傅

叶变换具有有限的频率带宽。所以对于计算机图形学中有限的维或三维空间域,

样现象是不可避免的。

这种由于对何图形的可见性函数采样导致的样称为 ,它

是计算机图形学中最严重的样现象,因为整个场景图像的渲染都是根据物体表的

的位置来决定的,每个像素点的位置都是光栅化阶段对物体何形状的可见性函数

来决定的。

虽然没有任何采样率可以有效地避免何样的存在(即完美地对可见性函数

采样),但是我们任然寻求些法来减轻这种样现象,其中较流的法称为

Page 51: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

(详见第 节),这种法本质上使图像分辨率更的采样频率

对原始可见性函数进采样,然后使这些采样点来重建像素对应的采样率下的函数

值。这在 渲染中相当于使于图像输出分辨率的频率渲染场景,然后将其缩放

输出分辨率,这个过程称为 。本章后第 将详细讨论这种技术。

着色走样

发于像素着器中,由于像素着器仍然是使屏幕分辨率作

为采样频率导致的样,不同于 的是, 通常是

指对些通过数学公式分析计算出的连续函数采样。

这类样较严重的例是对地粗糙度表光泽的采样,由于表低粗糙度导致

其光泽分布范围更狭窄,如图 所,从导致光泽函数具有更的频率,因更

容易导致样。当对物体表使法线贴图后,这种样现象更明显,因为法线导致

物体表的光泽具有更的频率。

对于 ,其不可能通过后第 节介绍的 技术解决,因

为 对于每个像素的着只计算次(但对 和 值取多个采样点),

所以它对 没有任何影响; 虽然可以减少这类样,但

是其代价太,并且提升效果不是很明显。如图表有法线和光泽的情况下,三种不

同的结果。

对于光照程中由于粗糙度,法线以及其他相关因素导致的采样问题,较有效的

解决思路是,先将这些参数融到光照计算(例如后讲述的 理

论)中去,使这些“原始连续函数”更平缓,然后再对这些光照计算结果采样。这样的

思路在本书的些内容中有介绍。

图 该图显光泽和法线条件下,不同法对 的处理:左图正常绘制,样现象较严重,中图使倍的 ,右图使种直接基于法线计算光泽的法。(图来 博客)。

Page 52: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

时间走样

前的例都是对处于空间域的 个 (x, y) 或者 个 (x, y, z) 连续变量进采

样,然在游戏或者电影动画渲染中,由于量的物体处于运动状态,因此,对于另

个时间域的采样问题也特别突出。

出现于当物体在运动时,由于渲染帧率的限制导致对其运动

过程的采样导致的样。游戏画的渲染是根据帧率按较低的采样率对时间域进采

样,所以对于速运动下的物品,其时间域的频率较,很容易出现样。其中个

较经典的例称为 ,它使个旋转的辐条车轮表现出不同的视

觉效果,例如轮可能看起来实际更慢,或者看起来像静样,甚沿着相反的

向旋转。

对于减轻 ,种较常的法称为 。这种法

跟 样,它依靠对时间域取更多的采样点,然后对其进样,当然

这种法的计算成本很。另种更普遍的法是针对当前帧渲染结果,成个

,然后使这些向在 阶段对

其邻近的像素点样,如图 所。

图 使 实现 ,图中左上表当前帧的原始渲染结果,左中为,左下为 ,右图为最终结果。

重建

是指将采样后的离散函数还原为原始连续函数的过程,为了从

些离散的采样点还原为原始连续函数,必须对离散函数执个滤波器( )。“滤

波”词源于数字信号处理中,于在频率域上接受(通过)或拒绝定的频率分量。

Page 53: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

然滤波器实际的概念常复杂,根据滤波器是离散还是连续,以及被滤波器作的

函数是离散还是连续,滤波器的作以及实现的结果都是不样的。

因为滤波器这种技术分重要,我们很有必要理解它的基本原理。滤波器严重依

赖于卷积的数学概念,卷积在计算机图形学中也是个重要的基础数学具,例如在

后讨论光照程,以及些全局光照案中乎所有涉及到 的

地等都会涉及到卷积,所以本节先学习卷积及其在傅叶变换中的应。

卷积

在数学上,卷积(符号 ⋆ 表)定义为两个函数 f 和 g,在其中个函数被翻

转 180o 之后(以下假设 g 被翻转),两个函数乘积的积分,即:

f(t) ⋆ g(t) =

∫ ∞

−∞f(τ)g(t− τ)dτ

我们可以给卷积做个很直观的视觉解释,在图 中,蓝曲线表函数 f,红

曲线表函数 g,以下过程可以来描述卷积的计算:

图 卷积的视觉解释(图来 )。

对函数 g 执 180o 翻转:g(τ)→ g(−τ)。

Page 54: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

设置个时间偏移 t,使 g(t− τ) 从 τ− 轴的起点位置开始“滑”。

将 t 从 −∞ 滑动到 ∞,即是将 g 从 −∞ 沿 τ− 轴滑动到 ∞ 经过整个时间域,只

要两个函数存在相交,则计算它们乘积的积分,换句话说,在每个时间 t 对 f(τ)

执个权重系数为 g(−τ)。

这个过程形成的波形(在图中没有画出),即是 f 和 g 的卷积。由此可以看出,

卷积计算是对 f 整个定义域的每点,在 g 定义域内的积分计算。因此卷积的计算

量常,我们看到后的些计算中,g 的定义域般都常。此外,卷积是

个线性计算,它输出个和 f 定义域样的结果,例如,如果 f 代表的是张

图像,则卷积计算的结果输出另张样的图像。另外,卷积公式本只是关于

每个点 t 的计算公式,所以卷积实现必须要遍历整个 f 定义域。

根据卷积公式的特性,我们可以很容易想到它可以来平滑函数 f,然不仅如

此,根据卷积计算是作在时间 空间域或者频率域,以及 f 和 g 是离散还是连续函

数,它表现出来的功能特征和结果是不样的,如表 所,以下我们就分别来描述

卷积的这些应场景。

表 卷积的不同运。

连续 f 离散 f

连续 g 平滑 重建离散 g 平滑 平滑

另外,对于卷积和傅叶变换,还可证明(读者可参考

等相关书籍),空间域中两个函数的卷积的傅叶变换等于两个函数的傅叶变

换在频率域的乘积;反过来,如果有两个变换的乘积,则可以通过计算傅叶反变换

得到空间域的卷积。换句话说,f(t) ⋆ h(t) 和 H(µ)F (µ) 是傅叶变换对。这结果

是卷积定理的半,可以写为:

f(t) ⋆ h(t)⇔ H(µ)F (µ)

双箭头于指右边的表达式是通过对左边的表达式执傅叶变换得到的,

左边的表达式是通过求右边表达式的傅叶反变换得到的。

遵循类似的推导可得到卷积定理的另半:

f(t)h(t)⇔ H(µ) ⋆ F (µ)

它说明频率域的卷积类似于空间域的乘积,两者分别与傅叶正,反变换相联系。

卷积定理可以于后即将讲述的重建滤波器技术中。

Page 55: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

平滑

卷积计算最本质也是最直观的特征是平滑,它通过对 f 的每个点考虑该点周围

定范围内的值对该点的影响,来消除该点与周围环境的频率的快速变化。这在计算

机图形学中运时分泛,例如部分可能出现样的地(如前第节讨论的那些

样现象),都可以在采样之前对原始函数进平滑,以减轻样现象。这种滤波器

称为反样滤波器( )。

这举个图像处理的例,在图像处理中,常常考虑 f(x, y) 为个具有定

分辨率的图像,g(x, y) 为个 m× n 的矩形(其分辨率通常于或等于 f(x, y) 的分

辨率),假设 m = 2a+ 1 且 n = 2b+ 1,其中 a, b 为正整数,则式 变为:

g(x, y) ⋆ f(x, y) =a∑

s=−a

b∑

t=−b

g(s, t)f(x− s, y − t)

从这可以看出,卷积的意义相当于使个 m× n 的模板 g,以它的中从 f

的每个像素点经过,对于每个像素点,分别计算模板上对应位置的两个函数的乘

积的和,如图 所,其卷积输出为个新的与 f 分辨率相同的图像。

图 在图像处理中,卷积的意义相当于使个蒙板遍历每个像素点,分布计算蒙板内所有乘积的和,

中纹理过滤相关的技术都是通过卷积的式实现。

重建

除了平滑,借助卷积的特性还可以实现将离散函数还原为原始连续函数,卷积的

这种运称为重建滤波器( )。重建的操作表现为个限连

续的 g 作于采样后离散的 f,然为了直观理解重建的过程,我们需要先从频率

域以及采样定律说起。

设 F (µ) 为对 f(t) 采样后的离散函数 f(t) 的傅叶变换,如图 所,为了使

f(t) 能够被完美重建,先需要保留 F (µ) 所有的频率,在本例中使了个于

Page 56: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

的频率进采样。如果能够从 F (µ) 中包含的这个函数的拷贝的周期序

列中分离出 F (µ) 的个拷贝,那么我们就可以从取样后的版本恢复 f(t)。

图 盒状滤波器通常来在频率域对信号进重建。

为了从原理上了解如何从 F (µ) 复原 F (µ),在图 中 H(µ) 的定义如下:

H(µ) =

⎧⎨

⎩T, −µmax ≤ µ ≤ µmax

0,

当乘以图 中的周期序列时,该函数就隔离了以原点为中的周期,然后通过

H(µ) 和 F (µ) 相乘得到 F (µ):

F (µ) = H(µ)F (µ)

旦得到了 F (µ),就可以通过傅叶反变换来复原 f(t):

f(t) =

∫ ∞

−∞F (µ)ej2πµtdµ

以上这些公式从理论上证明了,以函数包含的最频率的两倍的速率取样得到的

函数的样本,来恢复个带限函数是可能的。

函数 H(µ) 称为低通滤波器( ),因为它通过频率范围低端的频率,

并且消除所有较的频率。所以要想完美复原原始函数,其必须是带限函数。

对式 利卷积定理,可以在空间域得到等价的结果,即:

f(t) = ℑ−1F (µ) = ℑ−1H(µ)F (µ) = h(t) ⋆ f(t)

Page 57: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

可导出 f(t) 的如下空间域表达式(此处略去证明过程,请参考

等相关书籍):

f(t) =∞∑

n=−∞f(nT )sinc[(t− nT )/T ]

这相当于对离散函数使个 (如图 所)的卷积,

的定义如下:

sinc(x) =(πx)

πx

这并不奇怪,因为盒装滤波器 H(µ) 的傅叶反变换就是个 函数。

图 蓝曲线表归化的 ,红曲线表未归化的

,在计算机图形学中般使归化的版本

(图来 )。

我们不禁要问,卷积主要来平滑个离散或者连续函数,那它是怎样实现这种

类似于在样本点之间的插值的效果的。这主要是由于 函数是在限空间连续

的,所以当它划过 f(t) 上的每点时,在 的整个定义域上求积分,即该点的卷

积总是可能具有个值,并且这个值其实是考虑 f(t) 所有点的平滑效果得来的,因

此它能完美还原 f(t),同时实现了使卷积的来重建个离散函数。当卷积被这样使

时,称之为 。

在图像处理中, 主要有两个途:第种为上讲述的从

个采样过的离散函数重建原始连续函数,另种称为重采样(见第 节),即在纹理

被缩或者放时,调整图像的分辨率。这两种场景本质上都是把滤波器看做种计

算某个特定的点的插值的具,即我们并不需要对张图像全部像素点做卷积计算,

是找出另外些当前这些采样点之外的点的值。

Page 58: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

然,式要求样本间的内插有限多项,在实际中,这意味着我们必须找到种

样本间内插有限的近似法,在图像处理中使的主要内插法是最近邻法,双线性

法和双三次内插法,这些插值法将在下节讨论。

重采样

在渲染场景的时候,程序会量使预先采样的数据,如图像,或者场景的某

些离散的表空间结构数据等。这些数据都是具有定的分辨率(或者是按定的

采样率成的数据),当程序中需要在不同分辨率下使这些数据时(例如摄像机靠

近或者原理表导致纹理被放或者缩),我们需要对这些离散的数据进重采样

( ),以成个具有不同分辨率的数据。以下我们主要以 中对纹理

的采样分析分辨率转换的问题。

图 左图的原始经过采样的离散信号,当摄像机靠近物体上需要对信号进放操作(图来 )。

当摄像机靠近物体表时,即发放操作( ),这是摄像机看到更

多细节,它要求对原始函数具有更的采样率。如图 所,这要求成更多的采

样点,根据上节讲述的内容,我们只需要对于离散的图像提供个滤波器,便可以

对任意点的插值。

然,正如前提到的, 函数要求样本间的内插值有限多项,所以我们必

须使些近似法来进插值计算。最简单的法是最近邻内插(

),它采像素复制的放操作。例如,将幅图像放两倍,我们可以

复制每列,这会在平向上将图像尺放倍;然后复制这幅放后图像的每

,在垂直向上将图像尺放倍。相同的步骤可于任意整数倍放图像。

最近邻内插法实际上是对图像使个 ,如图 所。

Page 59: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

图 最近邻内插法直接选择离重建点最近的样本值作为内插值(图来

)。 -1

0

1

1 2 3 4 5 6

双线性插值法( )则分别基于采样点的位置在 X 和 Y 轴上

线性地插值,如图 所。双线性插值法本质上对图像执个 或称

为 。

图 双线性插值法分别基于采样点的位置在 X 和Y 轴上线性地插值(图来 )。 x1 x x2

Q21R1Q11y1

y

y2Q12 R2

P

Q22

双线性插值法仅仅考虑采样点周围的 个 2× 2 像素点,双三次内插法(

)则考虑周围 个 4× 4 像素点,可以给出更平滑的插值结果(最近邻

插值法和双线性插值法都会使还原的函数具有导数不连续的点,即导致常的频率

变化,从导致样较严重)。双三次内插法使的滤波器函数如下:

W (x) =

⎧⎪⎪⎪⎨

⎪⎪⎪⎩

(a+ 2)|x|3 − (a+ 3)|x|2 + 1 |x| ≤ 1

a|x|3 − 5a|x|2 + 8a|x|− 4a 1 < |x| < 2

0

这 a 通常取值 或者 ,注意 W (0) = 1,对于所有 整数 W (n) = 0。

函数具有如图 所的形状。

Page 60: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 双三次内插法考虑周围 个 4 × 4 像素点,可以给出更平滑的插值结果

(图来 )。

全屏反走样

在第 节讨论了种形成样的原因,其中的 和

这两种较明显的样是和分辨率有关的,所以如果我们能够从像素着器

( )来解决样的问题,或许我们能够解决所有由于分辨率带来的样 。

本节基于屏幕空间的反样技术正是基于这样的思路,并且它通常是由硬件在渲染管

线中直接实现的反样技术,因此不对任何具体渲染实现有什么影响。

在开始讨论具体的全屏反样技术之前,先我们应该思考的是,对于固定的屏

幕分辨率(相当于固定的采样率),其反样的思路是什么。通过前对采样及滤波器

等知识的学习,我们知道样是个采样问题,它不能通过任何技术段在采样之后

消除这种由采样不导致的样。那么样是什么,样是由于采样率低导致傅叶

变换的频部分没有被覆盖,从使相邻的采样点之间出现较的差值。所以,对

于固定采样率的前提下,我们能做的事情就是对原始函数进平滑,消除原始函数的

频部分,这通样波器来实现(回想第 节滤波器的主要功能是通过卷积实现

平滑)。

然,在渲染中,我们通常并不能对原始函数进平滑,存储这样的原始

函数(例如何图形的可见性函数)需要量的内存;另,平滑是个相对的

概念,例如个图像数据的频率对于 1920× 1200 的分辨率来说是平滑的,但是它对

于 1024 × 640 的分辨率来说频率带宽仍然太宽。这就是为什么纹理缩时需要使

技术不是直接从原始图像进缩放。

根据以上这些分析, 就是种针对特定分辨率的反样技术,它通

过使个输出分辨率略的采样率对原始函数进采样,并对这个分辨率的样

注意,前提到过 并不能通过本节所讲述的 技术减轻样,本节稍后将会分析其原因。

Page 61: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

采样和反样技术

本函数使滤波器进平滑,然后对这个分辨率的样本函数进重采样得到输出分

辨率的图像。

又称为 ,它是种对每个像素点计算多个采样点

( )的反样技术。其最简单的形式称为 ( ),

对场景以个更的分辨率进渲染,然后对相邻的采样点取平均值得到最终

图像,例如对于个 1000× 800 分辨率的图像,先使 2000× 1600 的分辨率对场

景进渲染,然后对每个 2× 2 的样本积求平均值得到最终图像。这种技术的特点

是实现常简单,但是其计算成本很,每个采样点都需要被使完整的渲染管

线进着。

图 根据实现不同, 对样本点使不同的采样模式(图来 )。

对于 ,需要注意的是,可以对每个像素范围内采样点采样不同的分布,

图 介绍了其中种采样模式 ( ),不同的采样模式具有不同的

优点,例如 对像素格进渲染然后采样,这样得到的结果使得接近平线的

变更平坦,实际上, 指出 的眼睛对接近平或垂直直线的

样更敏感,对 45o 左右直线的样敏感度是最低的; 的

( )使 的采样模式,它对每个像素点使两个采

样点,但是使 的分布模式,使得每个像素可以使周围的 个(个

个点)相邻的采样点进平均求值。当然这只列出少数种采样模式 。

技术对每个采样点的着,深度及位置等都需要进单独的计

算。对于由何图形光栅化导致的样,实际上我们只需要对其可见性函数进采样

即可,即是说我们可以将可见性函数从着当中分离出来,这样对于每个像素点只需

要计算次着(即执次 ),这样将减少反样的计算量。基于

这样思路的反样技术称为多重采样反样( , )技

关于采样模式,我们将在第 章介绍更多的细节。

参见:

更多关于 的模式读者可以参见: 。

Page 62: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

术。然其代价是由于每个像素的颜只计算次,因此它不能实现

的反样,这仍然需要借助 等技术来实现。

需要借助图形 的光栅化技术来实现,在图形渲染管线(见第 章)的

光栅化阶段,光栅化器根据输的何图形的顶点,按照输出分辨率将何图形光栅

化成个个像素点,然后对每个像素点执个像素着器以计算该像素颜,深度,

模板值,其中像素着器只计算颜值,深度值由光栅化器计算,模板值则应程

序对图形接的调来决定。在个实现 的光栅化器,它会对每个像素

成多个采样点,并计算每个采样点的深度和模板值,对于颜值,光栅化器对

每个像素只调次像素着器,然后将计算结果复制给每个采样点。

图 中 的实现,其中 · 为采样点的位置,⃝ 为何图形覆盖的采样点,⋄ 为像素着器执颜计算的位置(图来 )。

图 为 中 的实现,对于每个通过深度和模板测试的采样

点,其深度和模板值将被写到缓冲区,该采样点的颜值由像素着器计算,该

颜将被乘以该像素点的覆盖率,覆盖率是由何图形所占区域的采样点与总采样

点之。

在上述的光栅化过程中,像素着器根据像素点中的位置从纹理采样,以计算

该像素的颜值,然如果何图形只占据像素点的部分,则中点不会被覆盖

到,从导致从纹理中不正确的位置获得颜值。为了保证颜计算的正确性,这个

像素着器使的采样位置可以被调整到覆盖区域中某个点的位置,这种技术称为

,或者 。对于个被何图形覆盖的像素点,

它先从像素中点开始寻找,如果中点没被何图形覆盖,则次向外延伸直到

找到个被覆盖的采样点,该点的位置将作为最终像素着器对纹理采样的位置。

Page 63: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

相对于 减少了计算量(每个像素着器只执次

计算),然 并没有减少内存占, 则进步将像素点的覆盖率从颜

深度 模板值当中分离出来,使其内存占和数据传输的宽度占都得到降低。

图 个 16×的颜和覆盖率存储结构,该设置使 个采样点,但是使 个位置来计算其覆盖率,使得覆盖率数据更精准。

如图 所,除了 中的采样点, 还使了个进制结构的

数组蒙板( )表覆盖率,这个覆盖率采样点具有更的分辨率,在光

栅化阶段,光栅化其先投影何图形到该蒙板以计算覆盖率,然后对采样点进

采样计算深度,模板及颜值,其中计算颜值的时候其覆盖率直接由该蒙板提供。

这样使得更少的采样点可以得到更精准的覆盖率,原本这需要更多的采样点来

存储这些数据,每个采样点存储深度,模板及颜值,所以在存储占及数据传

输带宽占都是很的。

关于覆盖率与深度,模板及颜值的分离,其思路来源于 的论

中的 技术,图形学中还存在量从分离覆盖率着的

解决案。本节仅对全屏反样技术做基本的介绍,更多的反样技术还涉及到与渲

染法(例如延迟着)结合起来作,所以我们需要在接触相关的概念之后才能进

深地学习,第 还会更深地讨论各种各样的反样技术。

基于物理的渲染

我们已经知道了光在空中传播及与表交互的些度量,并且我们知道最终摄像

机收集每个像素点的辐射亮度 L,以及怎样减轻由于屏幕分辨率的限制导致采样时

样的现象。虽然这切建在物体表为理想光滑平的基础之上,但是我们通过这

样简化的模型很好地讨论了计算机图像渲染的逻辑和过程。当物体表变得复杂时,

光照程的计算将发变化,但是这个逻辑框架是不会变化的。所以在理解了这些渲

染过程及逻辑之后,本节就开始讨论实际渲染中,光与表交互更复杂的情形,这也

是计算机图形学关于渲染部分最需要关的重要知识。

参见:

Page 64: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

本节我们将建这些光与表复杂交互过程的数学模型,各种渲染法的实现基

本上都是基于这些光照数学模型的。当然不同级别的引擎对这些数学模型有不同级别

的近似,在光传输过程中的各个环节也可能使不同的近似法处理(正如本书将介

绍的各种全局光照算法),但是本节介绍的基础知识乎是所有全局光照模型的基础。

由于光照程的复杂性,以及硬件性能的限制,早期的业运中(甚处于离

线渲染的电影业)都使些常近似的模型,这些模型能够产较理想的效

果,然这些图像结果却不是物理上正确的。所谓物理上正确的,主要指光在场景中

的传输保持能量守恒(本节后将会讲述更多关于基于物理渲染的特征)。基于物理

的渲染能够使渲染结果更能够接近物理世界的品质。

从 年 的论 之后,游戏业已经开始泛采基

于物理的渲染,并在之后年的各种技术会议上,业界各主流游戏引擎都纷纷展

了它们基于物理渲染的效果和品质。所以本书中多数解决案都是基于物理的。

当个表绝对光滑时,束射光将按照反射定律在相应的向上被反射,以

及按照折射定律在相应的向上被折射。对于除这两个向以外的向,将得不到任

何来这束射光的信息。

我们的世界显然不是这样的,每种物体表有着各种不同的粗糙度,这使得光线

照射到个表后,可以沿着不同的向看到这些反射或折射的光。这是由于在物理

世界中,每个光射到个特定的微观表上,这些微观表由于材质的粗糙度

朝向多个不同的向,在这个微观表上,光与物体的交互仍然遵循反射定律和折射

定律。

图 在数字图像的世界,每个像素点其实对应着具有不同粗糙度的表,这个表位于微观尺,它于个像素的尺但是,但是于光的波长,但这个尺我们很难通过何模型来模拟(图来

)。

Page 65: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

然数字图像的世界可不是这样,由于物理世界被像素化为个离散的数字图

像,对于于个像素的微观尺,我们通常法种真实的何模型表述

其微观结构 如图 所;另,即使对于宏观的尺,对于较远的场景,

较的区域将被投射到个单的像素点上,这较的区域拥有不同的粗糙度,

使得摄像机可以从各个不同的度看见它。

那么我们怎样表不同物体表的这种粗糙度性质呢?先我们从结果上来分

析,由于这种微观结构的存在,它使得来每个向的每束光在表的各个向上具

有个特定的分布函数(回想第 节中讲述材质时物体微观结构上的粗糙度使得

束光在个像素点上可以沿多个不同的向折射或反射),这个分布函数可能由多

种不同的因素决定,例如粗糙度,是否是属结构等等,但是只要找到这个分布函数,

并能有效地计算光与表的交互。

在数学上,个双向反射分布函数(

,简称 )来表物体表的反射。它表反射向

上的辐射亮度增量与射向辐射照度增量的率:

fr(ωi,ωr) =dLr(ωr)

dEi(ωi)=

dLr(ωr)

Li(ωi) θidωi

在式 中,ωi 是射光向,ωr 表观察向,θi 为射光向与表法线

的夹如图 所。由于在球坐标系中,个向可以个位

φ 和个顶点( )θ 表,因此整个 函数具有 个变量。

函数的单位为 sr−1,其中 sr 为体。直观上讲, 的值表射光

向单位体的能量在反射向上反射的率。

图 函数由个向组成,具有 个变量,它本质上指明了每个向的射光在各个向上的反射光分布。

n

ωωi

r

这使微分程的原因是,对于 dEi(ωi) 向的辐射照度,其与 fr(ωi,ωr)

关,但是仍然可能影响 Lr(ωr) 的值,然 dEi(ωi) 只影响 dLr(ωr) 的值。即整个

Lr(ωr) 是由各个射向的光照反射的结果。

所以,给定 函数,便可以求出该点处沿观察向的辐射亮度,其值为

射向的辐射亮度乘以 函数,再乘以个 因之后,沿该点法线向

半空间的积分,即:

Page 66: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

Lr(ωr) =

Ωfr(ωi,ωr)⊗ Li(ωi) θidωi

其中 ⊗ 标记表按 分量相乘,因为辐射照度 E 和辐射亮度 L 都是

量,所有 fr 仍然表为个由 三个分量构成的量。程 又称为反射

程( )。

在第 节讨论材质时讲过,对于属不透明 物体,当光进物体内部(

不仅仅是表)时,这些折射的光会由于物体内部结构的不连续导致光沿着不同的

向继续散射,最终部分光会被吸收,剩下的光会从表的另个不同的地散射

出来,如图 的右图所。这种现象称为 ,它使得物体的表

很浅的部分看起来具有定的透明度,例如肤,些塑料或纤维等。

图 是的特殊形式,即光进

物体内部经过定的散射或吸收,然后重新从物体表散射出来的位置,与射点位置之间的距离于个像素的尺。(图来

)。

BRDF BSSRDF

如果光进表的点和离开表的点之间的距离于个像素的尺,则这种交

互完全可以 来描述,然如果这个距离于个像素,则需要使个更

般的函数表。这个函数称为

,简称 。 在 基础上增

加个在表上的射点位置和个出射点位置,所以它是个 维的程,即:

fr( i,ωi, r,ωr)。

性质

物理定理赋予 两个特殊的性质(或者限制)。第个是

,即 的射向和出射向可以互相对换,其值保持不变,即:

透明物体由于物体内部材质连续,光折射后在物体内部的传播向不受改变,然后从物体表的相反向射出。

Page 67: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

fr(ωi,ωr) = fi(ωr,ωi)

第条性质是能量守恒( ),即所有反射的能量不能于所有

吸收的能量(不包括物体发光的情形),这可以表为

Ωfr(ωi,ωr) θidωi ≤ 1, ∀ωr

式 表对于个给定的射向 ωr,其所有出射向的 的积分的值

于 ,这相当于针对该射光照的出射度 B。我们可以另个更般的名字来代

替这个函数,即 ,R(ωr)

R(ωr) =dB

dE(ωr)=

Ωfr(ωi,ωr) θidωi

R(ωr) 是个维函数,它的变量表射向。R(ωr) 的值必须介于 和 之

间,当值为 时表射的光照全部被吸收,例如属材料;如果所有的光照都被反

射,其值为 。因为其值介于 和 之间,且包含 三个分量,所以 R(ωr) 也可

以表为个颜值。

当然在实时渲染中,这两种性质都不是绝对遵守的。因为通常绝对遵循物理规律

的 函数常复杂,实际渲染中都是采取某种近似的法,这些不同的近似

法形成不同的 模型,我们将在本章后详细讨论它们。

可视化

因为 遵循物理定律,所以使 模型来计算光与表交互的渲染技

术通常又称为基于物理的渲染( ),为了更好地设计和验证不

同的 模型,我们需要分便利的可视化式使得 更直观,如图 所

由于物体表微观结构上不是绝对光滑的,所以导致表上的每个点反射或折射

光 多个不同的向(每个向条光线)。所以给定个射向, 的值

分布在所有出射向上。在图 中,球的部分是漫反射部分,因为漫反射可能沿

所有出射向都有反射光;椭圆形部分则是光泽反射部分。

提供有个开源的 具 ,这个具可以导并

绘制给定的 模型,这些 模型可以由 着语编写,或

者来 数据库的对真实材质测量的 进制数据,以及 的

这的射光实际上是个物体表个像素尺的范围内接收的来某个向的所有光线,实际上是微观上的多条光线。

Page 68: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 种不同的 模型的可视化。 图来 的

各向异性的 数据格式。当参数发改变时,环境可以被实时地重新渲染,可

以常便地来分析和评估不同的 模型。

菲涅耳公式

在开始讨论 模型之前,还剩下个疑问没有解决,当光由种介质进

另种不同的介质,在光滑的表发反射和折射时,射光被反射和折射的率分

别应该是多少呢?

这个反射和折射率由菲涅公式( )描述,它由菲涅(

)于 年根据他的光的弹性理论提出。菲涅公式仅取决于射 θi

以及两种介质的折射系数,通常 RF 表反射率( ),它仅与

射 θi 有关;根据能量守恒定律,则折射的辐射能量率为 1−RF,然由于其折

射形成的体的有所改变,因此辐射亮度的折射率却不是 1 − RF,以下证明

过程来 。

考虑如图 ,射辐射亮度 L1 定义为辐射通量 d2Φ1(θ1,ϕ1) 从向 (θ1,ϕ1)

穿过限体 dω1 = θ1dθ1dϕ1,照射到积为 ds 的区域:

L1 =d2Φ1(θ1,ϕ1)

ds θ1 θ1dθ1dϕ1

Page 69: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

图 射光,反射光以及折射光在两种不同介质物体的辐射亮度 L,其中n2 > n1。

上式的分母表射“铅笔”的何范围,因为反射光 LR 具有与射光样

的反射,所以它同样具有样的何范围。因此反射辐射亮度 LR 可以表为:

LR = RF (θ1)L1

对于折射“铅笔”,由于折射和射之间满折射定律,通过对折射公式 求

微分得:

n1 θ1dθ1 = n2 θ2dθ2

因为在球坐标系统中,个向可以由位 ,ϕ 和

,θ 组成,虽然折射导致射和折射的 的变化范围不致,但

是位的变化范围为 π 是相同的,射的位的变化将会导致折射位

相同的变化,即 dϕ1 = dϕ2。所以折射定律的等式分别乘以式 ,再乘以 ds 得:

n21ds θ1 θ1dθ1dϕ1 = n2

2ds θ2 θ2dθ2dϕ2

dG1 和 dG2 分别表射铅笔盒折射铅笔的何范围,则上式可以简化为:

n21dG1 = n2

2dG2

公式 当射光由介质 i 进介质 j 时,其何范围被乘以个因 (nj/ni)2,

但是量 n2i dGi 保持不变。这种变化从何上也好理解,由于折射导致折射的变化范

围于 90o,所以其折射向的何范围变了。

由此可以推出折射后的辐射亮度为:

L2 = (1−RF (θ1))n22

n21

L1

Page 70: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

菲涅反射率对于属和属的函数曲线有较的不同,如图 所,菲涅

反射率对属的影响较为微妙,对于铝,反射率乎在 86 以上;对于绝缘体,菲

涅反射率的影响则常,它对于部分射向其反射率仅为 4 左右,当

乎平于表向时,它的反射率乎为 100 。这种菲涅效应( )也

可以通过图 看出。

属 属

图 菲涅反射率对属的影响很,对属的影响则很,图中的观察度从法线向开始 图来。

需要注意的是,图 的虚线部分表偏振效应,在电磁学中个量场可以分

解为平于射和垂直于射的两个分量。其中对于 ,即平于射的分量,

它射接近 57o 时,所有的反射光完全被偏振,此时反射光线和折射光线相互垂直,

这也叫做起偏或者布儒斯特( )。这就是为什么太阳镜可以减少接

近平向属的反射强光。在计算机图形学中,我们通常忽略偏振,取两个偏

振分量的平均值。

由图 可知,菲涅公式的曲线常复杂,在渲染领域我们通常不会使原始

的菲涅公式, 于 年提出了种较简单且相对较精

确的模型,他的近似程如下:

RF (θi) ≈ RF (0o) + (1−RF (0

o))(1− θi)5

其中 RF (0o) 表射光垂直于表时的菲涅反射率的值。当使 近

似时,只有 RF (0o) 个参数,我们可以在现实活中找到量物质的 RF (0o) 值。

此外,RF (0o) 的值也可以通过材质的折射率得出:

Page 71: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

属 属

图 活中的菲涅效应。

RF (0o) = (

n1 − n2

n1 + n2)2

由于介质参数是随着波普变化的,所以菲涅反射率是个光谱度量,即它包含

三个分量值。因为菲涅反射率在部分范围内趋近于 RF (0o),因此我们也常

其为材质的特征光泽反射率( ),同时因为它满

个颜值的条件 具有 分量并且每个分量的值位于 和 之间,所以我们通常

也称它为光泽颜( ),通常表为 spec,我们还将在后的材质模型

节中介绍它。

理论

本节将开始介绍 模型,虽然有很多常流且较理想的些经验

模型(例如 讨论了很

多较主流的 模型,特别是 讨论了不同 的

Page 72: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

分类),然当前主流的游戏引擎

都在采基于 理论的 模型,所以本书我

们将只讨论这种 模型。

在本章前介绍材质相关内容时(第 节),我们看到绝多数物质在低于

个像素的观察尺度上,都是不连续的,称这个尺度为 。在这个尺度下,

个像素接收到来某个向的光照并不是单束光,由于个像素的尺远于光

的尺,因此射光实际上是很多束光,这些光与微观上具有不同向法线的微元

发交互,从反射或折射不同的向,如图 所。

图 理论假设物质表由量微观结构的元组成,这些微观结构远于个像素的尺,光束与每个元进交互将光反射或折射不同的向。

由于这种微观结构不能通过分析的式精确模拟,因此只能通过统计的式来模

拟这种微观结构的分布。 理论正是基于这样的假设,它假设物质由量微

何结构( )的元( )组成,每个元是绝对光滑的,因

此光与这些元的交互遵循反射定律和折射定律;这些微观元法线(

)向的分布使个统计的分布函数(称为 ,

)给出,这个分布函数反应光从每个向反射的概率,例如多数表的

函数分布集中在表的宏观法线向上(即通过贴图或者顶点插值记录的每个像素的

法线 )。

因为每个元都是绝对光滑的,每束光仅在沿反射定律决定的向上才能反射,

即意味着只有那些满反射向刚好在观察向 的元才能被看到,如图 所

。这意味着这些可以被观察到的元的法线正好位于射向 和观察向 的中

间,这个量称为半量 = +| + |。

图 在所有微观元中,仅仅只有红的元,即那些法线刚好在半量向的元才能被观察到

(图来)。

并不是所有法线在半量 向的元都会被观察到,其中的些会在光源

向(如图 所)或观察向(如图 所)上被其它元阻挡。尽管实际

这些被阻挡的光线会继续与其他元进多次反射最终仍有可能进观察视线内(如

图 所),但是 理论般忽略这种复杂的情况,即不考虑所有被阻

Page 73: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

挡的光线,本书介绍的 都是只考虑光的次反射,对于在微元

之间多次反射之间的情形,感兴趣的读者可以参考 。

图 微观元的交互现象 虚线部分表射光被阻挡处于阴影区 红虚线部分表该区域的元在观察向被近处的元阻挡 光线在微观元之间多次反射(图来

)。

由于不考虑微观元内部的相互反射,所以基于 理论的 模型

般只针对光泽部分,所以它通常还需要配合个漫反射的 分布。因为漫反

射主要是光线在微观结构内部经过多次反射的结果,它的光照相对于只考虑次反射

的光泽要弱得多。

综合以上这些假设和理论,基于 理论的 模型主要由两部分因

素决定,即:

个关于所有微观元的表法线分布函数 D,其中只有法线指向半量 向

的元才会被观察到。

同时,对法线向处于半量 的微观元,当且仅当它们在射向和观察

向没有被其他元阻挡才能被观察到,这需要个表何遮挡关系的函数 G。

根据以上结论,再结合菲涅公式,对于各向同性 材质的 模

型由以下式给出:

f( , ) = fd +RF (θh)G(θl, θv)D(θh)

4 θl θv

这个程包含漫反射和光泽部分,其中漫反射通常与向关,为个常数;

光泽部分包含三个组件:菲涅反射率 RF (θh),表何遮挡关系的 G(θl, θv),以

及微元法线发布函数 D(θh),其中 D(θh) 必须是归化的。θl 和 θv 分别表射

向 和观察向 与表法线 的夹,θh 是表法线 和半量 之间的夹

,θd 则是射向 和半量 之间的差值。由于假设材质是各项同性(我们将

在后讨论各向异性材质的法线分布函数)的,因此微元法线分布函数 D 仅有

个变量 θh。分母 4 θl θv 表个从微观元空间向宏观像素空间转变的转换

因,因为 f( , ) 是宏观空间的个度量。

Page 74: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

以下我们分别讨论 的各个部分,以及各个部分的选择,尤其我

们要讨论个主流游戏引擎各的选择,这些选择都基于或者源

的 模型。先对于菲涅反射率,业中较泛的解决案还是前

讲述的 近似,所以本节将集中讨论法线分布函数 D 以及何遮挡函数 G。

微观面元法线分布函数 D

最重要的部分就是微观元的法线分布函数 ,它是表

的微观何结构中,所有微观元的法线向不同向的概率,它决定了光泽部分的

宽度,形状及其它特征。业中较流的 包括

, 以及 等分布

函数。本节的重点不在于分析这些不同的模型,我们只需要了解不同模型的特征,以

及它怎样被使在 中。

根据概率的特征,D 函数通常在其作域(这的作域其实是 分布曲线

空间)归化为 ,即:

ΩD(θh) θhdω = 1

根据 理论的假设,这个法线分布函数是由表的粗糙度决定的,在后

的材质模型中我们 roughness 表这个粗糙度参数。 对 数

据的分析中分析中,关于光泽 球状分布,它具有个很长的拖尾,如图 所

,这个拖尾般的光泽模型都要长好倍,传统的 和 分

布都不能有效地表达这种拖尾效应。

数据库是对些实物的进测量,以进制数据的式存储

的 数据,每个 是张 90× 90× 180 的三维数组,分别表

函数的 θh,θd 及 φd 参数,其中 θh 和 φd 均以 1o 为增量记录 数据,

θd 则被压缩个更窄的光泽分布的形状空间。 每个件为 ,

它通常被来分析真实物质表的 性质,以及来验证各种 模型。

为了有效表达这种拖尾效应, 发现只有 分布

具有最长的拖尾,如图 所, 实际上具有和

样的表述,它们的分布函数如下:

DTR = c/(α2 2 θh + 2 θh)2

Page 75: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

图 种不同的光泽分布与 中铬材质的对。左边 光泽值随 θh 度的变化,其中线表 中的铬,红线表 分布 α ,绿线表 m 分布 蓝线表 n 分布。右边 点光源在 中的铬, 及 分布下的光泽效果(图来 )。

和 较了其它些分布函数,发现 DTR 和 的分

布函数具有相似的形式,但是后者的指数部分取值 ,这就建议个指数可变化的更

般的分布函数( ):

DGTR = c/(α2 2 θh + 2 θh)λ

其中 c 表个缩放常数,α 表表的粗糙度,它的值介于 0 和 1 之间,当

α = 0 时导致个绝对光滑的分布, α = 1 表表绝对粗糙,所有的反射光都是

漫反射光。 的分布曲线如图 所。

但是 仍然不以捕捉更多的光泽细节。些研究发现单的光泽垂

( )分布通常不能精确地描述真实物质的光泽性质,因此些研究建议对

同个表使多个 ,例如 等,但是多数不会超过 个,

般以 个 居多。所以 也采了两个 的组合来表述这

种更长的拖尾。其中第个 (称为 )取值 λ = 2,它表中的

亮度区域,并且它来表述属材质的各向异性;第个 (称为

)取值 λ = 1,它表拖尾部分,具有更低的亮度,同时它仅表各向同性的光

泽。

对于粗糙度, 选择使 α = roughness2 以产个更线性的变化,这使

得设计师更直观地调整效果。

对于各项异性( )的法线分布函数,粗糙度将随着位 φ 变化,根

据 , 1α2 可以被

2 φα2

x+

2 φα2

y替换,其中:

实际上通过如图 所,这种拖尾并不能通过调整个 的参数使它覆盖的范围更宽来实现更长的拖尾,它的中区域亮度常,在狭长的拖尾部分亮度常低,因此更适合两个 D分布函数来组合这种拖尾

Page 76: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 指数取不同值时的分布曲线(图来 )。

aspect =√

1− 0.9anisotropic

αx = roughness2/aspect

αy = roughness2aspect

这 anisotropic 和 roughness 均为材质参数,参见后材质模型节的内容。

微观面元几何遮挡函数 G

表微观元何关系的 G 称为 ,它

描述的是那些具有半量法线的微观元中,有多少例是同时被射向和反射

向看见的(或者说没有被阻挡的)。因此 G 的个特征是其值介于 和 之间:

0 ≤ G(θl, θv) ≤ 1

虽然 D 部分对整个 的影响是最的(如图 所,G1 在

部分向值接近于 ),但是 G 部分则是最复杂的,因为 G 的计算通常要依赖于法

线分布函数 D,所以在业中都是先从法线分布函数按

推导出真实的何遮挡函数,然后再取个近似函数,这个近似函数都能直接通过

roughness 参数来直接计算。更多关于何遮挡函数的资料可以参考 。

的形式为(推导参考 ):

G1( , ) =χ+( · )

1 + Λ( )

其中 11+Λ( ) 为般化的 函数,χ+(α) 在 α > 0 时为 ,

α ≤ 0 时为 。

请注意, 对 G 做了个近似,即假设射遮挡

( )和出射遮挡( )是不相关( )的,所以这两部分

Page 77: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

可以分别被分离出来,并且它们都是由 决定的,所以具有相同的计算公式

G1,即:

G( , , ) ≈ G1( , )G1( , ) =χ+( · )

1 + Λ( )

χ+( · )

1 + Λ( )

但是今年越来越多的引擎开始考虑射遮挡和出射遮挡的相关性,因此给出

更精确的何遮挡函数,例如在 中,它

们使:

G( , , ,α) =χ+( · )χ+( · )

1 + Λ( ) + Λ( )

其中:

Λ( ) =−1 +

√1 + α2tan2(θm)

2=−1 +

√1 + α2(1− 2(θm))

2(θm)

2

图G1,其中红曲

线基于 分布,绿曲线基于 分布,由此可见 G1 的值乎总是接近于 ,除了在接近垂直于表法线的向,同时

分布 具有更多的阴影遮挡,这是因为其更长的拖尾导致。

在 的 模型中,他们使个混合的法,其中对 使

对 给出的近似法:

G1( , ) = χ+(·· )

2

1 +√

1 + α2gtan

2θv

对于 的近似法, 将粗糙度参数 αg 从 [0, 1] 重映射到 [0.5, 1],即:

αg = (0.5 + roughness/2)2,以使 G 函数随着粗糙度变化更平滑;对于

,则直接使个固定的粗糙度参数 。

但是, 在 年对 模型进了次

修订,基于 的分析,他们去掉了这种重映射,采了 的

各项异性的形式(仅针对 ),即:

Page 78: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

Λ(ωo) =−1 +

√1 + 1

α2

2

这 α = 1αotanθo

, αo =√

2 φoα2x + 2 φoα2

y。与此同时,他们考虑了

射遮挡与出射遮挡之间的相关性,使了公式 不是 近似(公式 )来

计算何遮挡函数,以使在接近 90o 的度获得更准确的结果。

则选择使 近似模型,并

修改 k = α/2 以更接近 近似(因为 采和 类

似的 法线分布函数),同时他们仍然采样 对粗糙度的重映射,所以最终

结果为:

k =(roughness+ 1)2

8

G1( ) =·

( · )(1− k) + k

G( , , ) = G1( )G1( )

漫反射

对于漫反射部分,出于性能的考虑,业中较流的案是

模型,即光从各个向以相同的亮度反射,所以 函数是个常数:

fd( , ) = diff

π

这 diff 是个材质系数,参见后材质模型节的内容。

漫反射模型假设折射进表内部的光经历了够多的散射,因此失

去了向性,从在各个向的反射率为个常数。然现实中的材质却很少是这

样,物体微观结构导致的粗糙度不仅对光泽反射有影响,它还对对漫反射有影响,当

微观元的结构于 的结构时,将导致种回射反射 (

) 即光反射回到光源的向。这种回射反射效果是因为微观元间的遮挡

导致的,如图 所,当观察向不同于光源向,这种阻挡会减少被光照到

积,从减少漫反射的积。

回射反射对于光滑表和粗糙表呈现出不同的特征,先对于较光滑的表

(通常 f(0o) > 0.5),其光泽反射占主导,根据菲涅效应,其留给漫反射的光照更少,

所以回射反射明显呈个下降的趋势;对于较粗糙的表 f(0o) < 0.5 ,其漫反

射占据主导,所以回射反射则特别明显。

注意这虽然称为反射,但它本质上是漫反射,是因为平于光源的向导致看见的被光源直接照射的积增加,从微观上漫反射的积增加。

Page 79: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

图 由物体微观结构的粗糙度导致的回射反射效果,这显的两种表都是菲涅反射率很低,同时漫反射率很的表,所以来表下的漫反射部分很重要。在左图中,观察向接近光源向,部分被光照的部分同时能够被观察到,因此导致表更亮;在右图中,观察向区别于光源向,被光源直接照射的积部分被阻挡,导致表很暗(图来

)。

所以, 使了个新的漫反射经验模型,即:

fd =baseColor

π(1 + (FD90 − 1)(1− θl)

5)(1 + (FD90 − 1)(1− θv)5)

这 FD90 = 0.5+ 2(roughness) 2 θd。对于光滑的表,该公式可以使其漫反

射的反射率最为 ;对于粗糙的表,则可以最增加到 倍。注意右边的因

计算两次是因为对于漫反射,光先折射进表,经过定的散射之后重新反射

回原介质,所以计算两次。

材质模型

所有这些关于 的计算构成后即将讲述的光照程的基础,然后光照

程被写到着器中,在渲染的时候 执这些着器对物体表进着。也

就是说,我们明了光与表交互的计算( ),以及这种计算的表述(着器),

那么接下来的问题就是怎样表述个表。

不同的表具有不同的性质,这些性质都需要以不同的式作为参数传递给着

器,以对表进正确地着。在第 节我们讲过这些参数连同着器起都被

封装到个材质对象中,然后这些材质对象附加到不同的表就使该表具有对应的

性质,这是材质的作式及过程。那么在了解具体的关于表的交互式( )

之后,我们其实已经了解了材质需要包含的些参数,这些不同的参数组合构成不同

的材质模型( ),本节我们分析些材质模型当中相关的些参数。

本节我们将以 为例来讨论材质模型的些基本参数,

的材质模型包含量的参数可以设置,本节我们仅讨论跟前讲述的

计算相关的参数(称为 ),其它的些参数则会在后的

Page 80: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 的材质编辑器,开发者或者美术设计师可以通过 来对材质进编辑(图来)。

章节陆续讨论,或者你也能够从后相关内容中去理解其它些参数的含义及运。

在这, 的材质模型是 所运的材质模型

的个简化版本。 的材质可以通过 以可视化的式进编

辑,如图 所。

在 主要有 个和基于物理的渲染相关的材质参数(如图 中

的最右边的框中的参数代表 中材质的输参数),它们分别是

所有以上这些参数的值都是介于 和 之间,例如对于 ,它是

个具有 三个分量的颜值,则三个分量的取值范围都是介于 和 之间。基

于物理的材质参数般都可以通过对真实物质的测量得来。

表物体表的真实颜,如图 所,它是美术设计师在设计表

的时候对其绘制的实际颜,它通常使个纹理来记录个表各个位置的颜

值。 即是程 中的 diff,以及程 中的 baseColor 参数。

为什么 baseColor 或者 diff 表物体表的“真实颜”?这我们需要理

解着的概念到底是什么,任何物体在没有光照的时候都是看不见的,可以说

个物体本是不具备任何“颜”的(发光的光源除外),着的过程即是将光照射

Page 81: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

alumina-oxide light-red-paint gold-paint green-latexorange-paint yellow-matte-plastic

图 具有不同漫反射“颜”的材质,下图表在 数据库中 φo = 90o 的切(图来 )。

在物体表,从计算物体表呈现的颜的过程。光与物体表进交互分为

两种式:光泽反射和漫反射(这仅分析绝缘体,后会详细解释属),对于

光泽反射,它的反射率的 分量是样的,即它不会改变射光的颜,仅

改变其亮度,如表 所。因此光泽反映的是光源本,例如个点光源在

物体表光泽部分看到的仍然是个的(亮度被菲涅反射率缩放)圆点

形状,使环境贴图作为光源则会在物体表“印上”周围的环境。所以光泽乎

与物体表的真实颜关。

对于漫反射,它指的是光折射进物体内部,在物体内部经历定的散射后重

新从表散射回原介质中。由于这些散射回来的光丧失了向性,所以我们

个固定的反射常数来表这个 反射率,即是 baseColor。所以我们所说的

物体表的“真实颜”,其实是个反射率,它表当其他光照在表进漫反

射时,在每个向的反射率是多少,如果我们使光源照亮物体表,则物

体呈现 baseColor 的颜,使其他颜的光源则呈现其他不同颜(由光源颜

与 baseColor 的乘积决定),如图 所。

控制材质的粗糙度,越粗糙的表,射光越向更多的向反射(菲

涅反射率越低,更多光被吸收形成漫反射),物体的表越来越接近 的

颜;反之,光泽部分越来越窄,物体表越来越光滑,亮度的光泽使得物体表

越来越多地反射着周围的环境 或者光源的形状 ,如图 所。当 为

时表表绝对光滑,成镜反射,上图中的光源为点光源,镜反射使得物体表

能够清楚看到点光源的形状及颜,下图的光源为环境贴图,则光滑物体表能够清

晰地反映出周围环境;当 为 时,物体表完全漫反射,呈现

的颜。

Page 82: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 中材质模型中的 参数,其值从左到右由 到 变化。上图表属材质,下图表属材质(图来 )。

在前的内容中我们已经看到, 参数会同时影响 中的

函数和微观元何遮挡函数 G,其中在 的 模型中, 参

数还会影响到 ,所以现在我们明了怎样通过材质模型中个简单的参

数就能控制表的粗糙度的计算和渲染。在有些游戏引擎中,例如

,他们使 不是 来作为表的粗糙

度参数的名字,因为更意味着更光滑,这种理解式更然。

控制表的“属感”,属和属是个此即彼的概念,属的

值为 ,对于属表的 值为 。对于纯净的物质,例如纯净的

属,头,塑料凳,这些材质的 值要么为 ,要么为 。但是另些混合

物质,例如腐蚀的物体,或者布满灰尘或锈的属,这些材质的 可能需要

介于 和 之间,如图 所。对于这些 介于 和 之间的材质,

通过后会讲述的 技术来实现两种材质(Metallic = 0 和

Metallic = 1)之间的混合。

图 中材质模型中的 参数,其值从左到右由 到 变化,注意这时 参数是没有发变化的,所以光泽的形状不应该发变化,左边光泽形状看起来更,这是因为混合的原因,光泽周围亮度较弱的拖尾的部分被混合(图来 )。

那么 参数是如何与 函数发作的呢,在前关于 各部

分的公式中似乎看不到 相关的参数及其对 的影响。

这需要从前讲述的材质分类当中去寻找答案,前第 节在讲述材质的

时候说明,材质可以分为属和属(或者绝缘体),属对折射仅表内部的光

全部吸收,从使属材质将不会有光从表内部再散射回来,因此属材质没有漫

Page 83: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

反射部分。所以在 的 模型中,他们对属材质去掉漫反射部分,并使

的值作为光泽的射光进计算,不过他们仍然提供了个 specularT int

供美术员调整这种由射光向 baseColor 的过度。所有由于这种特殊的计算式,

属性没有个线性的计算公式,因此部分解决案都是使混合的式来

实现 和 之外的插值。

对于 ,前我们说过,它其实等于 RF (0o) 的值,它表射光被反射

的量,或者说反射率。需要注意的是,对于属,它们的反射率往往与波长

关,即它们 的分量相同,如表 所,因此它们对于光泽的反射,仅影响射

光的亮度,通常不会影响其颜。但是属的反射率通常和波长是有关的,它对

射光不同的颜分量通常具有不同的反射率,如表 所。但是传统的属渲染使

了种简便的式,它直接使 baseColor 来代替射光,并可能与漫反射部分进

混合(metallic 介于 和 之间时),因此 specular 通常也是个介于 到 之间

的浮点值,不是个颜值。

表 部分绝缘体的 RF (0o) 值,塑料的变化范围般在 到 之间,玻璃具有更的变化范围,在 到 之间,部分绝缘体的值都在 附近。注意这些值都是 specularcolor 值,例如对于红宝的红,它是由于吸收进物体内部的光照的漫反射导致的,与菲涅反射率关

(数据来 )。

塑料 RF (0o) 颜

, ,塑料 玻璃 较粗糙 , ,塑料(较光滑) , ,玻璃 较光滑 红宝 , ,钻 , ,

表 部分属的 RF (0o) 值(数据来 )。

属 RF (0o) 颜

, ,银 , ,铜 , ,铁 , ,铝 , ,

此外,到前为我们并没有看到关于介质折射率相关的参数,其实 RF (0o) 通

常是通过介质折射率计算出,或者通过参考真实数据,所以和折射率具有之间联系,

在光照计算中直接就可以通过 RF (0o) 来获得介质折射率。

Page 84: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

前讨论的 模型通过少数个参数就可以表述较泛的材质,并可以

渲染出逼真的图像品质,但是对于如折射, 还是需要使其他

些特别的 法来专门处理。然这些特别的法通常不能保证能量守恒,

因此当整个渲染器是基于光线追踪的技术来计算光照时,这种能量的不守恒将会被

放,以于使整个图像品质失真,因为光线追踪技术对这些特别的函数进采样,

并依此在场景中通过光的传播传递能量,如果这些采样函数本不能保证能量守恒,

它将会导致这些传递的能量完全是错误的。这就是 在 年开发新的基于

光线追踪技术的渲染器 时遇到的困难。我们需要个对反射,折射以及

更统并能保证能量守恒的模型。

这使我们将光转移到更般的 ,简

称 ,它其实是 和 的总和。 全称

,它和 的形式基本样,唯的区别是 的观察

向是在折射向范围内。这样 就表,给定某点的射向和出射向(在反

射范围或折射范围内),出射向上辐射亮度增量与射向辐射照度增量的率。

那么 包含了所有光与物体交互的计算吗?答案显然不是,由于 仅

考虑某点的反射和折射,因此所有涉及距离的现象都不会覆盖到,例如光从个点

折射进表内部,然后经历多次散射后从另个点重新散射回原介质的

;以及折射光在均匀介质中直线传播,经过段距离后从物体反的某点

折射出去的 现象。这些现象加起来可以看做是个超级的光

与物体(不是表某点)交互的公式,它计算光从个向进物体,在物体表

或内部经过多次折射和反射之后,从物体表的另个点沿直到的向散射出去。

虽然本节标题为 ,但是我们也会介绍后两种现象,这些内容都包含在了

新的光照模型当中,并且所有这些综合在起形成个统的光照模型,称作

集成次表散射的 模型 (

)。

我们之前讨论的 模型本质上是个属和属的混合模型,对

于 新的光照模型,他们仍然选择混合的式,基于已有的 模型来实现。

如图 所,个新的参数 specTrans 于控制 和 的混合。在整个

模型中,如果每个模块都是能量守恒的,那么混合后的模型也是能量守恒的。

除了新增的 模型, 还加了次表散射模型,以及针对

粗糙透明物体内折射光传播的计算,同时还包含针对超薄表的折射处理。以下我们

分别讨论这些技术。

关于 的 渲染技术,我们将在第 章详细讨论。

Page 85: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

图 的全新光照模型,它先将原有的 模型与新增的折射光泽 模型通过参数 specTrans 混合,然后与原来的属 模型通过参数 metallic 混合。

前业中较流的 模型是 等 于

年提出的 模型,本节我们先介绍该模型及其在 光照模型中的

使。

介绍的 模型同样基于前讨论的 理论,即宏观表由

多个微观元组成,每个元绝对光滑,光的折射遵循折射定律。假设射光沿射

向 从介质折射率为 ηi 的介质,折射进介质折射率为 ηo 的介质,经过折射后从

向 观察。根据折射定律,ηi θi = ηo θo。注意折射其实仅跟两种介质折射率

的率有关,所以我们定义个相对折射率( ):η = ηo/ηi。

与 样, 先定义了个在折射范围观察的半量 t,

这我们采 使相对折射率的式表述:

t = −+ η

| + η |

则 定义的 可以写为:

ft( , , ) =| · t|| · | · | · t|

| · | · η2

( · t + η · t)2· 1

η2· (1−RF ( , t))G( , , t)D( t)

折射定律不仅描述光在折射时的弯曲现象,它也间接地多束光在折射向发散的

范围,我们在前第 节讲述菲涅公式的时候已经讨论过这种现象,即射光的

光照亮度在折射向被缩放 η2(即公式 ),η2 同样也是光束发散范围的缩放因,

如图 所。

对于前讲述的 模型,其菲涅反射率使了 近似,即:

RFSchlick(θi) = RF (0o) + (1−RF (0o))(1− θi)5,然它却不适于折射,例如光

Page 86: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

图 根据折射定律,光束在折射后其发散范围被缩放 1

η2 ,其主要原因为折射

定律导致出射范围变窄了。

从光密介质进光疏介质时,当射于临界( ),θc =−1 η 时,

将发全反射所有的光照将会反射会光密介质。

所以在 模型中,他们放弃了 近似,使原始的菲涅公

式:

F (θi, η)

⎧⎪⎨

⎪⎩

12

[(θi−η θtθi+η θt

)2

+

(θt−η θiθt+ηcosθi

)2]2 θt > 0

1 其它

但是对于属 ,漫反射以及 ,这些计算仍然使

近似。

对于折射光在粗糙透明物体内部的传播,根据 定律,光穿过个

体积的透射 T 为

T = e−σαd

这 σα 为个吸收系数,d 为光折射传播的距离。但是吸收系数理解起来不太

直观,所以 使两个新的参数:个 transmittance 颜值,和个相应的

atDistance 值,并以此来推导吸收率:σα = −(logT )/d,如图 所。

次表面散射

年的 模型并不包括对次表散射的计算,即光从个点进

表内部,经过定散射之后从另个点散射回原介质。但是该模型也包含了般的

漫反射之外的些特性,这主要是前讨论的回射反射效果。为了保留原有的部分计

Page 87: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

图 在粗糙透明物体中的折射吸收,这 transmittance 颜值为 atDistance 从左到右分别为 。

算式, 并没有直接使完全的 模型替换旧的 模型,是将

原有的漫反射公式拆分成两部分:部分是与微观结构有关的具有向性的效果(主

要是回射反射),另部分是与向关的般的漫反射效果(例如 )。这

样当材质次表散射的射点和出射点的距离于个像素尺时,还是使原来的

模型,当其于个像素尺时,则使新的 模型替换与向关的部分

漫反射。

原有 模型按如下的式拆分:

fd = fLambert(1− 0.5FL)(1− 0.5FV ) + fretro−reflection

fLambert =baseColor

π

fretro−reflection =baseColor

πRR(FL + FV + FLFV (RR − 1))

其中

FL = (1− θl)5

FV = (1− θv)5

RR = 2roughness 2 θd

双向次表散射反射分布函数 通常可以表为:

S(xi,ωi;xo,ωo) = CFt(xi,ωi)R(|xo − xi|)Ft(xo,ωo)

其中 Ft 表菲涅折射率, R 表个反射配置 。对于

R(r),前有种基于物理的模型,如 等 的 散

射模型, ’ 和 的 散射模型,以及 等

的 散射模型等。这些模型都是使基于物理的公式推导

Page 88: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

出,相对较复杂。 从 对菲涅反射率的近似得到启发 ,通过对基

于 模拟 的 R(r) 的分布的观察(如图 所),提出使两个指数项

的和来近似 R(r),这样简化了计算,同时又达到前种基于物理的模型相似的

结果。

图 散射模型使单次散射来近似次表散射,单次散射通常仅与两点之间的距离有关。

在 的 散射模型,能量在两个点之间根据辐射度理论传递,光束在

次表的多次散射过程被使个简单的单次散射近似,如图 所。

对于这个单次散射与距离之间的关系 R(r),通过使 模拟,

发现其可以使两个指数项的和很好的近似,如图 所。所以 使以下

函数作为其散射模型的近似配置:

Rd(r) =e−r/d + e−r/(3d)

8πdr

为了计算每束射光对其它位置漫反射的贡献,需要针对整个限的平的每

个位置做个积分计算,当对整个限平做积分计算时,其 Rd(r) 散射函数是归

化的,即该射点向周围所以位置扩散的总量为 :

∫ 2π

0

∫ ∞

0Rd(r)rdrdφ = 1

因此该配置称为归化的 散射( ),因为其是归化的,所

以每个点的漫反射颜值可以通过对整个表做积分的结果乘以 baseColor 来计

算。他们通过个参数 scatterDistance 来表参数 d,当 scatterDistance = 0 时,

直接使原来的 漫反射模型。注意, 的 模型中可以分别对 ,

和 设置不同的 scatterDistance 时值,scatterDistance 时本质上控制 R(r) 曲

线的度和宽度,对于美术员来讲,它可以理解为次表的柔和度( )。如

图 表不同柔和度下的效果。

回想图 ,菲涅反射率是由相互垂直的两条偏振光线的菲涅反射率构成, 通过对曲线的观察使两条曲线的平均值来近似菲涅反射率函数。

法就是对每条进表内部的光随机选择向进散射,然后从另个点离开,通过计算经过这些路径后的结果来绘制 R(r) 函数曲线, 模拟将在第 章详细介绍。

通过后最 积分的学习,归化的分布函数可以简单地使 对其采样。

Page 89: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于物理的渲染

Monte Carlo reference0.031 exp(-0.41 r) + .02 exp(-1.7 r)MC excluding single-scatteringdipole

r

r Rd(

r)

图 散射模拟,基于指数近似的散射计算和 模型的对。

图 对个单位圆使不同的 scatterDistance 值进渲染,其值从左到右从 到 变化。这单位圆的上半部分被炉发出的光照射,下为认为设置的阴影以强调阴影周围的柔和效果;注意此处左边第个园当scatterDistance = 0 时使原来的 漫反射模型渲染,由此可以看出 和 之间能够平滑过渡。

的归化散射模型在电影《超能陆战队》( )中第次使,它

在了电影中除头发以外的所有次表反射中。

超薄表面的渲染

对于超薄表, 假设它散射的射点和出射点位于同点,和固体物体

样,仍然使 specTrans 参数在完全漫反射和完全光泽(包括反射和折射)之间混合。

图 超薄表的折射可以近似为没有弯曲发,这样就可以使 来计算 ,只不过需要反射到表的另边。

Page 90: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

他们观察到超薄表发折射时的弯曲现象可以近似地被移除,即对于折射光

可以近似看做没有弯曲发,如图 所。所以 部分可以通过

来计算,但是反射到表的另边。即:

specularreflection = FDG

speculartransmission = (1− F )DG

当然这样做有个缺陷,由于折射可以放或者缩粗糙度,因此两边的粗糙度

是不样的,个更好的法是基于相对介质折射率 η 来缩放粗糙度,但是这样调整

后的结果没有太的变化。

diffTrans = 0.0 diffTrans = 0.5 diffTrans = 1.0

图 diffTrans 参数将与向关的漫反射部分转移到表的反,红曲线表与向关的漫反射,蓝曲线表回射反射,浅绿表 效果。

对于漫反射,由于射点和出射点之间的距离为 ,因此不存在次表散射,整

个漫反射模型使原来的 模型。由于回射反射效果跟射光有关,所以表

的反仅有与向关的漫反射( 部分)出现,不包含回射反射及

部分。 使个 diffTrans 参数来将漫反射从反射光转移到折射光,

如图 所。

图 散射模拟,基于指数近似的散射计算和 模型的对。

Page 91: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

渲染程

在 年的动画电影《超能陆战队》中, 全使

这种超薄表渲染技术渲染。此外,该技术还泛运于纸,布料,服等超薄材料,

如图 所。

渲染方程

好了,我们终于具备切基础知识去理解和推导渲染程(

)了。全局光照算法的标就是计算光束在场景传播以及与物体的交互过程中的

能量传递,基于物理的全局光照技术要求整个场景在光照传播过程中保持能量守恒。

在前的内容中,我们 Li 和 Lo 来分别表射光和反射光的光照亮度,这

在描述单纯的光与表交互(反射和折射)那样简单的场景下很容易理解。然为了

推导光照公式,我们将另种式来表述光照亮度,我们 L(x→ Θ) 的式来表

光从位置 x 向向 Θ 发射,箭头来表光束的向。

前讲过,在光照计算中我们最终感兴趣的是光照亮度 L,我们假设 Le(x→ Θ)

表物体在点 x 处沿 Θ 向的光照亮度,Lr(x → Θ) 表物体在点 x 处沿 Θ 向

的反射或折射的光照亮度,则根据能量守恒定律:

L(x→ Θ) = Le(x→ Θ) + Lr(x→ Θ)

通过前的 定义 :

fr(x,Ψ→ Θ) =dLr(x→ Θ)

dE(x← Ψ),所以

Lr(x→ Θ) =

Ωx

fr(x,Ψ→ Θ)L(x← Ψ) (Nx,Ψ)dωΨ

其中 Ωx 表沿 x 点法线向的半空间,如果是折射光则是法线反向的半空

间。所以我们得到最终的光照程为:

L(x→ Θ) = Le(x→ Θ) +

Ωx

fr(x,Ψ→ Θ)L(x← Ψ) (Nx,Ψ)dωΨ

光照程可以称为弗雷德霍姆( )第类积分程,因为它的未知项,

光照亮度 L 同时出现在程的两边,这使得光照程的计算常复杂。然到这,

我们暂时只需要记住这个最简洁优雅的形式,在后的章节我们会对这个程从另外

的视转换成另种形式,例如为了推导光线追踪技术,我们将会把它转变成针对

注意,多数图形学直接使 来解释光照程,然真正的光照程还需要包含折射部分,所以以下我们在描述光照程的时候, 实际上是指 。

Page 92: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

计算机图形学基础

积进积分;为了使 技术,我们需要计算某个积的出射度 B 不是辐

射亮度 L;我们也会讨论各种法来计算或者近似光照程,等等。

关于离线与实时渲染

本章的最后,我想特别说明下关于离线渲染和实时渲染,以及它们在本书中各

的分量。

前很多计算机图形学教材或资料都有区分实时渲染和离线渲染,甚些书

直接以“实时”的字样来命名书籍,例如经典的图书《 》等,另

些书则完全偏重于离线渲染,例如《

》。本书聚焦于当前业中流的些游戏引擎的全局光照技术的讨

论,然也应该是偏重于实时渲染,然实际上却不是。我们说明两点原因。

先游戏引擎中量使离线渲染的技术,例如乎所有关于预处理(

)的部分都涉及到离线渲染,为什么需要预处理,就是它们的计算常耗时,既

然是预处理的不占实时渲染的时间,那么往往就容易选择使最好的离线渲染技术

来进预处理计算,例如很多环境贴图即其他间接光照贴图都是通过光线追踪技术来

计算的;在 中使的 技术也是基于辐射度理论 来与计

算环境之间的遮挡关系,这样的例我们在本书也会看到很多,如果不理解离线渲染

的些技术,将很难透彻地掌握和理解实时渲染。

其次,也是最重要的,从知识积累的度,我们完全不应该刻意让去选

择离线或者实时,我们应该追求的是掌握计算机图形学中各种理论知识。因为图像硬

件和图形学技术都在不断发展,今天的离线渲染技术很可能就是明天的实时渲染技

术,例如本章讨论的基于物理的渲染在 年之前都还只是在电影产业等离线

渲染领域,但是前业中些流的游戏引擎基本上都是基于物理渲染的了。

所以,本书基本上不考虑离线和实时的区别(如本章讲述的些 在电

影产业中使的技术,后的 积分,光线追踪等技术前都主要是离线

渲染的范畴),只考虑的是帮助读者构建更加完善和有的计算机图形学知识结构

体系。希望这样的种写作思路是种对读者更有价值的思路。

Page 93: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并行处理器架构

概述

应用程序执行模型

并行计算架构

并行计算架构

概述

要想真正理解图形接及渲染管线,对硬件架构的定了解是必不可少的,实际

上很多 作室都要求图形相关的职位需要对硬件架构有定了解。

然, 的硬件架构不是个独的概念,它是基于 并架构的发展

演变出来的,即是说理解 并架构是理解 并架构的重要基础;另

,本书同时包含离线渲染和实时渲染相关的知识,离线渲染的其中部分是通过

来计算的,例如部分光线追踪的实现,这就要求我们必须对 架构有定

的理解;最后,对 架构的了解还有助于我们编写性能的游戏逻辑(图形部

分)代码,所以本章的内容同时包含 和 的架构知识的讨论。

通过本章的知识,读者将能对处理器的架构有较系统的认识,并能够通过对

并架构与 并架构的区别,来更好地理解 的特性,以帮助我们更

好的学习渲染管线。

Page 94: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

应用程序执行模型

乎所有处理器都以冯·诺依曼提出的处理器结构 称为

或者 为作基础,冯·诺依曼被认为是计算机之之。

在该结构中,个具有处理单元的电数字计算机由以下部分组成:个于进

进制运算的算术逻辑单元( , ),个来速存储指令和

数据的寄存器组( ),个来控制指令读取的控制单元(

),个于存储所有指令和数据的内存,外加些容量存储设备及输输出设

备组成,如图 所。

图 冯·诺依曼架构,图来

在冯·诺依曼模型中,处理器从内存中将指令和数据(包括地址)读取到寄存器

并解码,然后执该指令。寄存器在物理设计上靠近处理器,它是计算机所有存储设

备中具有最快存取速度(通常 个 时钟周期)的存储设备,但是它通常只有有

限的容量 千 ,所以当寄存器中的指令或数据执完毕后,就需要向主存读取

数据。

在冯·诺依曼模型中,程序和数据存储在内存中,它们和处理器是分开的,因此

数据需要在内存和处理器之间进传输,消息传递的总时间可以个简单的模型来

描述:个固定的开销加上个依赖于消息长度的可变开销,即:

Tmessage−transfer = α+N

β

这个固定开销 α 称为延迟( ),实际上它是指在通信介质上发送条空消

息所花费的时间,即从发送函数被调到接收完成接收数据的时间。延迟包括软件

和络硬件开销,消息在通信介质中的传输时间。带宽β( )是通信介质容

量的度量,N 表消息的长度。

更进步地,近年来处理器的速度得到了常的发展,现代处理器的运速度

通常达 ;另,内存的发展则主要集中在密度(即更的空间存储更

Page 95: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

应程序执模型

多的数据)不是传输速度上。所以随着处理器运速度的提,其花费了更多的时

间于等待从内存获取数据,不管处理器的速度多快,它都受限于内存传输速度这个

瓶颈。这又称为冯·诺依曼瓶颈( )。

通常有以下以下法于克服冯·诺依曼瓶颈:

缓存 将些频繁使的数据存个特殊的更快的存储区,当处理器需要读取这

些数据时可以直接从这些存储区快速读取,不是需要从缓慢的主存读取数据。

预取 将些接下来可能会使的数据在处理器读取之前放到缓存区,以加速数

据读取的速度。

多线程 使多线程,当其中个线程在等待数据传输的时候切换到其它线程执,

通过是处理器保持繁忙来隐藏延迟。

缓存

乎所有现代处理器都设计有多个层级的缓存结构以减少从主存读取数据的时

间,缓存是种容量更,更快的内存,缓存的数据来于主存。当处理器需要向

主存获取指令或数据时,它先查询缓存,如果数据不在级缓存( )中,则处理器

向级或三级( 或 )缓存发出读取请求。如果缓存中没有此数据,则需要从主存

中读取。级缓存的作速度通常能达到或接近处理器的时钟速度,因此,假设写

和读取都是在缓存中完成,则指令的执很有可能接近处理器全速。级缓存的

通常只有 或 ,级缓存要慢些,但空间会些,通常约为 ,

三级缓存要得多,通常兆字节,但是级缓存要慢得多。如图 为

的缓存结构。

图 分别拥有的 缓存于存储

指令和数据, 缓存的读取速度约为 个时钟周期;

的 缓存,其读取速度约为 个时钟周期;从主存读取数据则需要约

个以上的时钟周期的延迟(数据来

)。

现代 乎都是多核的,例如 有 个 内

核。通常在缓存设计中, 和 级缓存都是每个核独享的, 级缓存是所有核

共享的。在实际程序中,数据集(尤其是循环程序)可能常,以于不能放在更

Page 96: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

速的 或 缓存,这个时候即使设置了缓存,处理器仍然会因为受到内存吞吐率或

带宽的限制,法发挥其所具有的处理能。在 中,

建议要保持性能部分的程序够,以使其能够存储在 级指令缓存( )中,

同时保持性能部分的数据够且相邻,使其能够存储在 级数据缓存

中。

缓存的设计实际上是利的局部性原理( ),包括时间局部性和空间局部

性。时间局部性是指之前访问的数据很可能还要再次被访问,例如对于个循环结构,

其循环指令被多个数据使;空间局部性是指刚刚被访问过的数据附近的数据,可能

马上就会被访问,同样是循环的例,循环的指令可能会持续访问个数组中所有的

元素。

当处理器从缓存不是主存中取来条指令或个数据时,称为缓存命中(

) 反之称为缓存失效( )。缓存失效可能是由于处理器第次访问段

新的指令或数据,这个时候它们还没有被读取到缓存中,这种情况的缓存失效可以通

过下节讲述的预取技术来解决。

第种缓存失效的来源是缓存的尺限制,为此,我们需要理解缓存系统是如何

从主存中读取数据的。主存载到缓存的单位是个缓存( ),缓存的

般是 ,相应地缓存系统会按照最近最少使算法( ,

)替换个旧的缓存,这就会导致对之前缓存过的数据的访问出现缓存失效。

针对缓存系统的特定,程序员在编写程序的时候就要充分利数据访问的局部

性,例如使顺序访问的数组。这种局部性的处理在 的并计算中甚更加重

要,正如后会讲述的关于 架构的内容。

缓存的设计是有代价的,例如英特尔 处理器具有 的三级缓存,但是

其占了约 30 左右的芯积。随着缓存容量的增加,于制造处理器的硅的

物理尺也逐渐变,芯越,制造成本约昂贵。这使们将注意转向另外两种

延迟隐藏技术:即预取和多线程。

预取

为了减缓存失效的率,预取( )技术就是通过在处理器读取数据

之前预测可能会读取的数据,从提前将其读取到缓存中,以进步实现延迟的隐藏。

预取技术是集成于处理器内部的,各级缓存都有的预取器( ),这

些预取器是些特定的指令来实现数据预取,些编译器如 还通过在编译阶

段修改源代码,在其中插些预取指令以实现软件预取。

级缓存的预取分为指令预取( )和数据预取( ),对于 和 级

缓存则是将数据和指令全部存储到起。对于数据的预取是常复杂的,因为程序对

数据的访问往往不是线性的,所以最常的数据预取是常数步幅( )模

Page 97: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

应程序执模型

式,即根据之前数据访问的模式(在个常数范围内的步幅)预先载当前数据邻近

对应长度范围的数据,例如数据预取器能够预取以下例中的数组 和 中的元素,

因为其步幅为个固定的常数:

但是数据预取器则不擅长对随机数据的预测,因此如果你的程序对数据的读取在

整个内存空间随机跳跃,则预取器将变得毫处,例如数据预取器将不能有效处理

下的程序:

对于指令的预取,由于部分情况下处理器按编译器编译好的顺序执,所以程

序指令数据在空间上的分布更加线性,相对数据较简单。然仍然有些因素使得

程序指令出现线性化,其中第个因素是函数指针的应,由于处理器只有在执

指令的时候才会知道其指令是追踪个指针,所以指令预取器对函数指针没有办法进

预处理。

另种情况是分预测( ),即当程序中出现条件语句的时候,

预取器应该怎样有效地预测分的向呢?和数据的随机读取样,处理器并不知道

分的向,这个决定只有在条件被计算出来的时候才能发,因此其不能解决延迟

的问题。所以分预测必须记录过去的历史数据,以此计算出定的模式并对后续的

分使该模式来预测分向,这就是各种不同分预测算法的基础。

例如对于以下条件分语句:

这 数组在 到 之间均匀分布,如果 数组按照升序的式被排

序过,则该循环的前半部分不会进 条件语句,后半部分会进 条件语句。这

个例是常容易预测的,因为分沿着相同的向重复很多次,使个简单的计

数器就可以正确的预测分向(除了少数次分发向变化的地):

然,如果 数组的数据是完全随机序的,则很难对其进分预测,因

为我们不可能预测随机数据:

Page 98: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

所以对于分条件语句,在编写程序的时候应该尽量考虑其指令的连续性,这些

对处理器特性的运会减少延迟,是处理器能够更有效地作。尤其对于像光线

追踪这种每帧数亿的光线计算,充分的对程序结构及数据进优化会带来巨的性能

提升,我们将在后的章节看到对这些知识的运。

并行计算架构

本节我们讨论 并计算的些概念,并计算架构的演变,由单处理器多

线程架构,到多处理器架构。通过对这些架构的演变及特点的讨论,我们能够很好地

了解并计算的概念,同时最重要的,现代 并计算架构正是基于这样些技

术发展来,并且我们能够很清晰地认识到 并计算与 并计算的特征

和区别,以使我们更好地学习后的渲染管线。

指令级并行

个简单的公式可以于度量个单处理器的计算性能:

指令数/秒 = 指令数/时钟周期×时钟周期数/秒

因此,对于个单处理器,每秒钟可执的指令数量对处理器性能的影响关重

要,本节要讨论的内容就是指令级的并计算( , ),

它是指个单处理器同时执多条指令的能。考虑以下串程序:

操作 依赖于操作 和 的结果,所以它必须等操作 和 完成之后才能执。

然后操作 和 之间并不存在依赖关系,所以它们可以被同时执。如果我们假设

以上 个操作都可以在个周期内完成,那么全部完成 个操作的时间内 个周期,

则个周期内的指令并数 值为 。

指令级并技术的标就是要尽可能地提升 值。通常程序员编写的程序都

是串的,其编译的指令按照定顺序个接着个地执, 技术允许编译器和

Page 99: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

硬件重叠地执多个指令,或者甚按不同的顺序执指令。 对程序员是透明的

(然我们将看到明指令级并的些技术对于编写性能程序仍有定的指导作

),这与下节即将讲述的单处理器多线程技术相反,后者需要程序员显式地区分

可以被并执的线程。

由 的定义可知,对于相同的处理器,其 值是随着程序的不同不同的,

因为它跟特定程序的可并能有关,指令之间的依赖越少,其可并能越强,

值越,反之则越低。硬件对串程序执指令级并处理的技术有很多,本节讨论

些较流的 技术。

指令管线化

第种也是各种 最重要的基础是指令管线化( ),它

是指将条指令完整的执流程分成多个阶段(例如获取指令,解码指令,获取操作

码等),每个阶段允许条单独的指令执。这样的划分有些重要的原因,处理器

内部针对这些特定的阶段都有专门的计算功能,如果次只处理条指令,那么当其

中任何个阶段发延迟或者缓存失效等,都会导致其它功能处于等待空闲状态,不

能充分利处理器的资源。

根据实现的不同,处理器对指令处理的阶段划分也不相同,有些处理器将指令管

线阶段划分为多达 ,甚 多个阶段。我们以最经典的 步划分法 为例,这

个阶段包括:

获取指令( )阶段,处理器从级指令缓存 获取个

位 的指令,该操作通常具有 个时钟周期的延迟。在这个阶段,个称作程序计

数器( , )的寄存器来保存当前被执指令在缓存中的地址,

它被于提供给 预测器( ), 预测期这个地址直接获取指令

缓冲区的个指令,并同时将程序计数器的地址增加 位(或者 位)。这种简

单的预测式通常会在当前指令处发分或跳转的时候出现错误,从导致下

次指令获取出现指令缓存失效,我们上节讲述的指令预取技术将在这个阶段进

计算。

解码指令以及从寄存器获取操作数( )。

执( )。

读取内存( )。

由于将指令计算过程管线化,每个管线阶段都允许执条指令(每个时钟周期

执该指令的个阶段),与产流线的原理类似,指令管线化通过充分利各

如果是 位机,则指令长度为 位。

Page 100: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

个产流线,不是需要等个单产品的个阶段完成才能开始下个阶段(导

致每次除作之外的其它流线空闲),提了整个管线的吞吐能。

指令管线化得作式如图 所:在第 个时钟周期,处理器读取指令 的

指令;在第 个时钟周期,处理器对指令 进解码并同时获取指令 的指令;在第

个时钟周期,处理器执指令 ,同时解码指令 以及获取指令 ;以此类推,理

想情况下,从第 个时钟周期开始,处理器每个时钟周期内将能同时处理 条指令。

图 指令处理的管线化,通过充分利处理器的各个功能,管线化能够使处理器同时处理多条指令,提了处理器的吞吐率(图来

)。

Instr. No.

1

2

3

4

5

IF ID MEM WB

Pipeline Stage

ClockCycle 1 2 3 4 5 6 7

EX

IF ID MEM WBEX

IF ID MEM WBEX

IF ID MEMEX

IF ID EX

然指令管线化并不能减少延迟,当这些指令对应阶段出现延迟时(例如缓存失

效,或者需要等待其他指令完成才能执),该指令将处于停等待状态。如果处理

器每个时钟周期都能获取新的指令,处理器的利率就能达到最,否则这些处于等

待状态的指令就会抑制对新指令的读取,降低了吞吐率。

和其它所有 技术样,指令管线化的作效率取决于应程序的可并性。

指令管线化假设所有指令都是可以并执的,当程序中的指令出现依赖时,称之为

个障碍( )。当然,在般情况下,程序员不需要理会程序指令级的可并

性,只管专注于程序逻辑编写串代码,编译器和硬件会帮助我们队指令进并

化以减少或避免障碍,但是编写性能的程序则需要程序员理解这些硬件处理的

式。

通常硬件使三种主要的法来处理串指令的并障碍:

管线泡( )

操作数前移( )

乱序执( )

管线气泡

管线泡是最简单的种处理式,当指令包含有障碍时,其将在解码阶段被识

别,同时处理器会创建个泡占据该指令的解码阶段,使当前管线的解码阶段处于

空闲等待状态,管线泡将导致后续个或多个指令被延迟。

Page 101: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

如图 所,在第 个时钟周期时,紫指令在解码阶段发现障碍同时创建

泡暂停该阶段,这紫指令可能需要依赖于绿指令的输出值,泡的出现导致后

续的蓝和红指令被延迟个时钟周期;在第 个时钟周期,绿的指令可以继续

前进,并产输出值,使得紫指令可以解码继续前进,然此时指令管线中并没有

指令进执阶段,以此类推,使得泡沿管线指令向前进,直被挤出指令管线。

在这种解决案中,每个泡表该时钟周期有个阶段处理空闲状态。

图 管线泡法在指令遇到障碍是创建个泡是阶段处于等待状态,知道其相应条件满指令才才继续前进,由于泡导致下个时钟周期的下个阶段没有指令可执,因此泡必须沿着指令管线向前进直被挤出指令管线(图来

)。

WaitingInstructions

Stage 1: Fetch

Stage 2: Decode

Stage 3: Execute

Stage 4: Write-back

PIPE

LIN

E

CompletedInstructions

0 1 2 3 4 5 6 7 8Clock Cycle

9

操作数前移

当出现指令间的依赖关系时,后的指令必须等待前的指令执完毕并将数据

输出寄存器,后的指令才能继续往下执,数据写以及从寄存器读取的过程可能

占据个时钟周期,所以上述的泡在指令管线中停留的时间可能于 个时钟周期

以上。考虑如下两条指令:

由于指令 中操作数 的值依赖于指令 的输出,如果指令管线每个阶段只占

据 个时钟周期,则这两条指令的执将导致指令 被延迟 个周期,如下表所

(也可以从图 看出这种关系):

观察表 ,指令 的 阶段和指令 的 阶段处于同个时钟周期,如果

能够在芯集成电路内部直接将指令 的值传递给指令 ,直接绕开寄存器,那么

Page 102: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

表 在经典的 步指令管线划分法中,前后相邻且在每个阶段占据 个时钟周期的假设下,指令将被延迟 个时钟周期。

指令

其将能够直接避免掉这种前后依赖关系导致的障碍。操作数前移正是基于此原理来

克服指令障碍的法法,在操作数前移法中,处理器需要对指令探测这种依赖性

的存在,然后根据探测结果判断是需要从寄存器中获取操作数,还是直接通过相关的

电路直接获取前指令的值。操作数前移的操作如表 所。由于程序中通常存在

量这种前后依赖关系,操作数前移技术不仅能够有效避免这种障碍,且节省了

数据在寄存器之间存储和读取导致的时间延迟。

表 在操作数前移技术中,如果处理器探测到依赖性的存在,则直接将前指令计算的结果传递给后的指令,避免了泡导致的延迟。

指令

乱序执行

乱序执( , )技术基于这样个事实,即如果后

的指令不依赖于前的指令,或者说它此时具备执指令需要的操作数数据,则它

可以先于前的指令被执。这种顺序的调整导致其程序指令被执的顺序(称为数

据顺序, )跟程序本被编写的串顺序(称为程序顺序, )

可能不样。

尽管指令被执的顺序发了改变,然乱序执必须保证指令执结果输出的

顺序与程序顺序保持致,以保证最终程序运的正确性。乱序执的指令执步骤

如下:

获取指令。

将指令分配到个指令队列。

指令在指令队列等待,直到其输操作数可,此时它可以早于前的指令被

执。

执指令。

Page 103: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

将指令输出结果保存在个队列中。

只有当个指令的之前所有指令被执完毕,并且其结果被写到寄存器之后,才

将该指令的结果输出到寄存器,以保证执结果的顺序致。

分支预测对指令管线的影响

除了指令间的依赖关系,前讲述的分预测也可能会对指令管线的性能有较

的影响,考虑如图 所的分语句,程序执时正确的分流向为 ,我们

来分析如果分预测器预测的结果为 会发什么情况。

图 分预测失败会导致处理器放弃并销毁之前所有未执完且判断错误的分指令(图来 )。

由于分的真实向必须等到 较指令执完毕,并且将结果写到寄存器

之后,处理器才会知道真正的分向。在这个例中,即是必须等到 指令执完

毕,在 指令的第 个时钟周期之前, 及 指令会依次被执,等到第 个时

钟周期 指令计算完毕之后,在第 个时钟周期开始,处理器将重新将正确的

指令载到执单元执指令计算,同时销毁之前所有关于 在寄存器中的数据

及其它相关状态。这种代价在指令管线的阶段划分越多时越严重,因为有更多不应该

被执的指令被执了部分,之后整个状态还需要被重置。

此外,如果 较函数是对两个浮点数进较,则代价更。浮点数整数

的较要花费更多的时钟周期,这会导致那些被错误执的指令被执更多的指令阶

段,从造成处理器资源的更浪费。

由于条件分导致处理器资源浪费,现代处理器都采种法来避免较和

跳转操作,从能够减轻分带来的性能开。这种法基于个第三个参数,来在

两个操作数之间进选择,不需要执较和跳转指令,这种法称为条件转移

( )或者分选择( )。

Page 104: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

条件转移类似于 中的三元操作符,在处理器中,个浮点数条件转移操作

符称作 ,它具有如下的指令形式:

编译器往往能够将三元操作符直接转换为 操作符:

−−

甚如:

也可以转换为:

通过上的例可以看出, 对两个输值都需要进计算,即相当于计算了

原来 条件语句的两个分语句。然即便如此, 带来的性能提升仍然分明显,

尤其是当程序中有量 条件语句并列,或者在个循环语句中穿插 条件语句等

情形,这些带来的处理器资源浪费极。在 中, 建议

对于性能部分,尽量使 指令,并且拆分循环内的条件语句,尽可能地使简

单的,少分的算法。

线程级并行

上节我们介绍了指令级的并技术,这些技术都通过硬件来实现,其中编译

器能够针对这些硬件实现进定的优化,但是它们对于程序员般是透明的。

此外,指令级的并技术还包括其他很多较流的技术实现,我们所讨论的乎都

是能够对编写代码具有定指导意义的技术,这能够帮助我们编写更性能的代码,

毕竟实时的游戏程序对性能有着贪婪的要求。

在计算机科学中,个最单元的,可以独被处理器调的指令的集合称为

个线程( ),在前讨论的指令级并技术中,在处理器中执的个单独的

程序即可以称为个单线程。在单个处理器内部,即使使前讲述的指令并技术,

Page 105: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

只同时执单个线程的处理器的利率通常仍然很低,其原因是某些操作需要很长时

间的延迟,例如数据密集型的程序需要加载量的数据,或者线程需要等待外部的输

事件或者其他系统事件。为了进步提单个处理器的计算性能,多线程技术应运

多线程技术( )是指在单个处理器或者个多核处理器的其中

个核内部,拥有同时执多个线程的能,它区别于后即将讲述的多处理器架构,

这些线程在内部共享该处理器的各种资源,包括计算单元,寄存器,缓存等。

在现代操作系统中,多线程技术是直接被操作系统持的。不同于指令级并是

对户透明的,为了充分利多线程技术,程序员需要将个程序中可以独并执

的部分拆分成单独的线程,然后操作系统根据定的规则控制和调度处理器执这

些线程。如图 所,每个应程序可以拥有个或多个线程,其中少个主线程

( ),以及零个或多个次级线程( ),每个线程被赋予

定的优先级,这些线程被放到个线程池,操作系统以线程为单位将这些程序指

令发送到处理器进执,其调度的式通常是基于时间。

图 多个线程可以在个单独的处理器上执,每个应程序可以创建个或多个线,这些线程并被操作系统按照定的优先级调处理器进处理。

如图 所,多线程处理器内部可以持多个线程并执,但是这些线程不是

真正地同时执,是通过处理器的控制交叉地执。当当前正在执的线程遇到缓

存失效或者其它事件(例如个线程需要等待另个线程的输出结果)时,处理器即

动切换到其它处于等待执状态( )的线程(即数据已经加载到缓存)

执指令,通过这样保持处理器的繁忙,避免处理器等待数据从主存读取的延迟,来

充分提单个处理器的计算性能。

Page 106: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

使硬件对多线程技术的持的个标是,允许在等待延迟的线程和已经准备

好被执的线程之间保持快速切换,为了达到这个标,每个线程都需要拥有的

指令和数据寄存器集合,还包括于存储指令管线调度相关的些处理单元和调度信

息,当发线程切换时,直接在速的寄存器之间就赋值和读取即可,不需要重

新从缓存读取数据。现代处理器的线程切换通常可以在个时钟周期内完成。

单处理器多线程技术的这些核思路,主要包括始终切换到处于“准备好”的状态

的线程,以及使更多专有的寄存器来实现线程之间的快速切换,被于后来的

架构中,当然 会有些独特的“思维”,但是其核架构都是随着 并

计算的发展演变出来的,再结合下节的多处理器技术,我们就可以推导出个可

以具有限扩展,并且能够效利每个 处理器计算单元的并计算模型。

同时多线程技术

多线程技术有多种实现案,利最简单的 ,这种案会

直执个线程,直线程遇到很的延迟(例如缓存失效,这种延迟可能需要上

百个时钟周期)时切换到另个处于“可执状态”的线程。

另种较聪明的案称为交叉多线程( ),这种技术

在每个时钟周期都使个不同于上个时钟周期的线程。由前的内容可知,当处

理器在执个线程时,指令级并会使得该线程内多条指令可以被同时执,这主

要通过指令管线来实现,然指令之间常常由数据依赖关系,使得后的指令在管

线中使泡填充,虽然有些指令级的技术于减少泡的占时间,交叉多线程

则试图通过线程级的技术来解决这个问题。因为线程之间是相对独的,所以交叉多

线程每次从不同的线程中取出条指令加到指令管线中,这样理想的情况下指令管

线中每个阶段执的是不同线程中的指令 ,从乎不会有数据依赖光线。然交叉

多线程的不是每个指令阶段都需要额外的计算和存储成本来追踪这些线程的 。

上述两种案都可以成为时分多线程技术( , ),在

中,给定的任何时间对于指令管线的每个阶段只有个线程的指令在执,如

图 左边的架构。本节我们主要要讲述的,也是现代处理器较级的多线程技术

案是同时多线程技术( , ),与 相对应,在

个给定时间内及指令阶段, 处理器可以同时有来多个线程的指令在执,如

图 右边的架构。 并不需要对普通的 架构做太改变,它只需要增加在

个时钟周期内从多个线程获取指令的能,以及更的寄存器件于存储多个线

程指令的相关数据。 并发线程的数量由芯设计者决定,通常的设计为每个处

理器 个并发线程,但是些处理器持 个并发线程。

这可能较费解,回想前讲述的指令管线知识,虽然每个时钟周期内每个管线阶段执的是不同的指令,但是每个时钟周期处理器只加条指令,所以如果每个时钟周期取来不同线程的指令,那么管线各个阶段执的将是来不同线程的指令。

Page 107: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

图 两种经典的多线程架构,左边为 ,右边为 , 在每个时钟周期的每个阶段内,可以同时执来多个线程的指令。从图中可以看出,理论上 执相同数量的指令只需要花费

半的时钟周期。

与诸如英特尔的双核处理器是不同的,虽然它们最终都是集成在个芯

上,但是双核处理器拥有独的执单元,指令调度,寄存器, 缓存等,它们只是

共享 及以上的缓存,我们可以称之为缓存级别的共享; 则是共享指令级

的些资源,接下来将讲述这些共享的资源,通过共享这些指令级的资源,我们看到

可以提升单个处理器的执效率。

我们将以英特尔的超线程技术来分析同时多线程技术,英特尔的超线程技术

( )是种 架构,在结构上,个超线程架构的

处理器由两个逻辑处理器( )组成,每个逻辑处理器拥有的如

架构状态等,但是两个逻辑处理器共享处理器的些执资源(

),如图 所。

每个逻辑处理器拥有的资源包括:

拥有独的架构状态( )

并发地执的指令

正在执的指令可以被独地打断和停

两个逻辑处理器共享:

处理器执引擎( )以及 缓存

共享系统数据总线( )

处理器架构状态包括数据寄,控制,调试等相关的寄存器以及些状态机相关的寄

存器,此外每个逻辑处理器还独的级可编程打断控制器(

, )来控制指令的停等操作。从个软件的视来看,

Page 108: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

图 在英特尔的超线程技术架构中,每个物理处理器包含两个逻辑处理器,每个逻辑处理器包含独的处理器架构状态,两个逻辑处理器共享除架构状态之外的所有处理器资源。注意图中的计算机是包含两个物理处理器的,或者为后讲述的双核处理器。

旦每个逻辑处理器拥有的处理器架构状态,它在功能上就相当于两个独的处理

器。相对于整个处理器来说,于存储处理器架构状态的晶体管只需要很的积,

它相对于双核处理器节省了芯积。

超线程技术复制的处理器架构状态来跟踪程序或线程执流相关的信息,其

共享的执资源则包含怎样控制这些执流的作展开。所有逻辑处理器共享个物

理处理器除架构状态之外的所有资源,包括执单元,分预测,控制逻辑及系统总

线等。

指出,通常应程序只利了单个处理器 的执资源,超线

程技术可以提处理器的利率以达到 的利率。

处理器级并行

前讲述的指令级并及线程级并都旨在提单个物理处理器的执效率,然

单个物理处理器的计算能总是有限的,只有进化到处理器级的并,即拥有能够

扩展物理处理器的能,规模,可扩展的并计算才有可能形成。

多处理器架构( )是指个计算机系统拥有多个物理

的处理器,或者拥有多个核( ),两者的主要区别为多核处理器每个核仅拥有的

缓存及寄存器,同芯内的核共享 及主内存,多个单独的物理处理器往往

仅共享主存并拥有的缓存系统。

关于多处理器架构,我们可以从两个度来了解其特点,其是所有处理器之间

的对称性,其处理器之间的通信机制。

Page 109: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

多处理器架构的对等性

对称性是指所有处理器的地位和功能是否对等,对等多处理器架构(

, )较典型的例是 处理器架构,它的思想是个

常规处理器作为监管处理器,该处理器与量的速协作处理器相连。在 处理器

中,常规的 处理器担任与流处理器和外部世界的接,称为 (

),协作处理器 ( ),则在

的管理下处理数据集,如图 所。

图 系统架构,它集成个 处理器和 个 处理单元在个统的系统架构中,其中 是个普通的 位的 架构的处理器于处理般并任务, 主要负责数据密集型的计算,所以处理器之间通过 相连进性能的数据通信,关于更多有关 处理器的信息,参见 。

要想为 处理器编程,你需要写个在 核处理器上运的程序,

该程序会个互不相同的进制码,在每个流处理器单元 上,调执个

程序。实际上每个 本是个核,它可以从的本地取出个独的程序来

执,这个程序与旁边的 执的程序是不同的。另外,通过个共享的互联

络 ( ), 之间, 与 核之间可以相互

通信。

Page 110: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

处理器的设计标之是克服由于内存访问的延迟对处理器性能的制约,在

那个时代的分析显,即使速的处理器也浪费约 的时间于等待数据从内存

读取。因此,即使处理器的计算速度再快,内存访问仍然是个重要的制约因素。所

以, 处理器的独特之处在于它摒弃了传统的内存缓存结构,是直接将数据和指

令直接发送到每个 处理器的个本地私有内存空间 ( ), 直

接从 存取数据,每个 拥有个直接内存存取( , )

引擎,于将 的数据速同步到其它 或者 的内存。

我们对 架构感兴趣是因为它很像现代图形处理器的架构,这有助于我们对

和理解下节的图形处理器。先 主要聚焦于数据密集型计算,例如图像处

理以及很多数学物理的计算(例如傅叶变换),这些计算的并性特征很强,所

以每个 是完全基于 的数据结构,它简化了寄存器设计,没有像常规处理

器样于如整数,浮点数指令的各种寄存器类型(整型,单 双精度浮点型,布尔

类型,以及地址),它只有个 为的 寄存器,并来存储各种数据类型,

这些数据类型完全没有针对硬件的特征 ,这和现代 的设计是致的。这简化

了处理器的设计,使得编译器对寄存器的分配也简化了很多,同时节省了芯

积,使同样的芯积可以扩展更多的 处理器。

另个和 很像的特征是,它并且了常规处理器的多级缓存系统,是直接

将数据从主存通过 速读取到 ,为了更有效的作,你需要将个计算的

量数据提前搬到 ,让它次性尽可能做更多的计算,不是像缓存系统那样每

次从缓存系统读取少量的数据。在处理器中,缓存系统占据了很多的芯积,并且

导致能耗的增加。这种设计架构也能减少芯积及能耗。

处理器最早被在 中 ,然由于它相对于传统串编程

具有定的开发成本,并且它不持乱序执等特征,以及价格相对较昂贵,

重新又回到了传统的 架构。然 处理器仍被于性能计算,以及其它数

学,物理,医学等科学计算中。

对于对等多处理器( , )架构则较简单,更多的

处理器主要是增加了并的能,应程序的线程还是通过操作系统来分配,对开发

者来讲,我们仅仅需要掌握针对多线程编程的知识即可。

多处理架构的通信方式

由于处理器的计算是以线程为单位的,线程之间是会共享数据的,因此每个处

理器之间需要进通信,根据这种通信机制的不同,多处理器架构可以分为共享内存

以及基于络的消息传递式。

例如数据类型在不同处理器上的长度不致将导致处理器的指令解码等操作需要做些额外的作。

Page 111: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

在内存共享式中,每个处理器拥有的缓存系统,但是它们共享整个计算系

统的主内存,如图 所。基于内存共享的架构式实现较简单,然由于缓存

是主内存内部分数据的复制,如果同应程序的多个线程分布在多个缓存系统内,

则需要通过某种同步机制保证各个处理器内的缓存致性( ),即

个内存的写操作需要通知所有核的各个级别的缓存,因此,论何时,所有处理器核

看到的内存试图是完全样的。随着处理器中核数量的增多,这个通知的开销迅速增

,使得缓存致性成为限制个处理器中核数不能太多的个重要因素。缓存致

系统中最坏的情况是,个写内存操作会迫使每个核的缓存都进更新,进每个核

都要对相邻的内存单元进写操作 。

SMP - Symmetric Multiprocessor System

System Bus

Cache Cache Cache

Processor1

Processor2

Processorn

MainMemory

By Ferruccio Zulian - Milan.Italy

BusArbiter

I/O

图 个共享内存的多处理器架构,每个处理器拥有独的缓存系统,并通过系统总线共享主内存(图来 )。

另种多处理器的架构称为集群,即通过将些独的通常是廉价的计算机系

统,通过络等式联通起来,组成个多处理器系统。集群的架构具备很的扩展

性,然由于络传输的速度很慢,所以处理器之间的通讯具有很的延迟,它更适

合于线程之间的耦合相对较弱的计算,例如对张图的处理,可以把它分成多个

部分,如果每个部分的处理是相对独的,则可以把不同部分发送到不同的计算机上

进计算。

由于缓存致的的代价,使得共享内存的架构并不太适合性能的并计算,所

以我们将会看到后的 架构以及前的 处理器架构都是在试图避免使

回想缓存中的数据更新是以缓存为单位的。

Page 112: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

缓存,来避免缓存致性的需求。对于那些数据密集型以及度并发性的程序,将

量数据直接发送到处理器附近的内存,以及使容量寄存器来达到速存储,并且

仅对本地数据进读写操作以减少数据同步的问题,这种简化的架构使得并计算的

性能更。

弗林分类法

在此之前的所有对处理器架构知识的描述中,我们主要聚焦于处理器的物理结

构,对于程序或者编程员,我们提出使另种式来描述处理器架构,即弗

林分类法( ),它根据指令流数和数据流数对所有的计算机进

分类。其中,流是计算机操作的指令序列和数据序列。利弗林分类法有 种类型:

以及 ,如图 所。

Dat

a Po

ol

Instruction Pool

PU

SISD

Dat

a Po

ol

Instruction Pool

PU

PU

PU

PU

SIMD

Dat

a Po

ol

Instruction Pool

PU PU

MISD

Dat

a Po

ol

Instruction Pool

PU

PU

PU

PU

PU

PU

PU

PU

MIMD

图 弗林分类法的四种处理器,弗林分类法来描述处理器架构中数据流和指令流之间的关系,架构类型图来)。

绝多数标准串程序设计遵循的都是单指令单数据(

, )模型,即在任何时间点上只有个指令流在处理个数据

项,这相当于个单核处理器在个时刻只能执个任务。当然,它可以所谓的分

时机制,即在多个物间迅速切换,达到“同时”执多个任务的效果。

在单指令多数据( , )模

型中,个指令流被并发地播到多个处理器上,每个处理器拥有各的数据流,如

图 所。这样,在处理器内部就只需要套逻辑来对这个指令流进解码和

执,需多个指令解码通道。由于从芯内部移除了部分硅实体,因此 相

对于其它系统可以做得更,更便宜,能耗更低,并能够在更的时钟频率下作。

使 ,实际上就是从“对个数据点进个操作”变为“对组数据进

个操作”,由于这组数据中的每个元素的操作是不变的,所以指令读取和解码只需要

Page 113: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

进次。此外,由于数据区间是有界且连续的,所以数据可以全部从内存中次性

取出,不是次只取个数据项 。

注意此处的 架构和 指令并不是个概念,虽然它们在意义上

是类似的。 指令是指在传统的处理器中,其不仅持整型,浮点型等常见

数据类型进计算,般现代 还拥有另外的 寄存器来持向量操作,

例如在 中的向量操作,编译器会转化为 指令,并将个向量内的

个数据次性读取到寄存器中,不是每次只读取个。

并没有较知名的系统属于多指令单数据(

, )模型,提出它仅属于完整性的缘故。

在多指令多数据( , )

模型中,每个处理单元拥有的指令流,并且这些指令流操作的数据流,如

图 所,绝多数现代并系统都属于此类型。

并行计算架构

对于习惯于针对 进串编程的程序员来讲,图形处理器(

, )总是透着层神秘的纱,甚对于很多程序员,他们会认为针

对 编程学习的难度要远远于 。这种印象或者体验源于 编程的些

特征,例如针对 的串编程符合类的逻辑思维特征,针对 的编程更

多的是以并编程为主;同时串编程模型已经常成熟,处理器将很多特征隐藏在

硬件级别,使编译器能够对并编程进度抽象,所以程序员不需要去了解处理器

架构的些知识,然针对 的并编程仍然依赖于程序员对硬件知识有定的

了解(例如 使受程序员托管的内存模型,不是完全基于硬件托管的内存模

型,还有数据的对齐以及内存合并等概念),才能够充分提并计算的效率;另外,

并没有独的编程模型,它通常是和 起形成个对等的多处理器架

构,开发者需要通过 来调度和管理 设备,内存,以及管理这些设备内的

各种状态,等等。

虽然本书的内容主要只是涉及 图形渲染管线的运,并不是更义上的

并编程,然理解图形处理器架构对于真正的图形程序开发者仍然是必不可

少的知识,它有助于我们更深刻地理解图形接以及更好地运它们。所以本节将会

详细讨论 架构相关的各种知识,带着这些知识,我们将会在下章更好地理解

对连续数据进次性读取也是图形处理器的重要特征,我们即将看到在 中对个块的数据进次性读取,并结合使量的线程块来来隐藏处于读取状态的线程块。

Page 114: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

图形渲染管线。需要注意的是,本章的内容主要围绕 的 处理器产品进

介绍,然多数现代图形处理器的架构是类似的。

为什么需要另外一个并行计算架构

为了更好地理解 架构,本节不会直接给出 的架构,然后讲述其对应

的功能,是选择先讲述它的来由,通过对这些客观条件的理解,能够帮助我们更

好地理解 架构。

通过前的内容可知,多处理器架构完全能够持并计算,例如我们将相同的

程序发送多个处理器或线程执,并分别赋予相应的处理数据,为了持更的并

性,我们可以使更多的处理器。那么这样做存在的问题是什么?

使般的多处理器架构来执规模并计算的限制正来源于针对串计算

优化的缓存系统,由于处理器时钟和主内存读取速度之间的巨差异导致数据读取的

巨延迟,缓存系统通过充分利局部性原理预取指令或数据,减少了对数据读

取导致延迟的不必要的等待,以保证串程序的效执。然,速缓存系统的成

本常,并且占据芯很的空间,操作数从主内存到 之间的传输需要耗费

量的电能,这些因素使得基于缓存的处理器系统很难扩张以应付规模的并计

算。相反,从设计处理器过程的成本来讲,计算单元 则是很便宜的,它们能够

以很的速度运,消耗很的电能并占据很少的物理硅空间。

所以,很明显的问题是,为了满规模并计算,我们需要些新的思路来取

代缓存系统的功能及作,理解这个新系统的特点及机制是理解 架构的关键。

内存结构

架构和 的最不同在内存系统上, 为了最限度地减少程序员

对内存的关,使种称为硬件托管的内存模型,在这种模型中,缓存系统动根

据局部性特征获取当前正在执指令附近的指令以及当前正在处理数据附近的数据,

并在指令将计算结果写到寄存器之后动将其写到缓存系统,以及更新多处理器

架构中其它处理器的缓存。所有这些操作都是硬件动完成的,程序员完全不需要关

其中的过程。

然我们已经知道缓存系统的成本常,以于不适于规模的并计算,

在规模并计算中,程序要处理的数据集的通常要数倍于般的串程序,我

们根本不可能通过扩展缓存系统来满规模计算的需求,那样将导致巨的成本。

并且并程序通常有数千个线程同时运,多数线程之间都是独的,如果每个线

程的中间计算结果都需要写回缓存甚主内存,这也将是笔巨的浪费。

Page 115: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

图 系列 的内存结构,它包含寄存器,共享内存,常量 纹理内存以及全局内存。与 的基于硬件的缓存模型不同的是, 使的是基于程序托管的内存模型,即数据的存放位置可以由程序来控制。

所以, 使的是种称为程序托管的内存模型,即数据的存放地点由程序

员决定,因此它要求程序员需要对 内存结构有定的了解。然,由于

硬件不包含动完成数据替换的逻辑,因此它也可以减少部分芯的积以及能耗

以容纳更多的计算单元。

图 表的是个 内的内存结构,其中流处理器族(

, )相当于个 核,每个 内部有多个流处理器( ,

),每个 于执并计算中的个独的线程,我们将在后详细讲述这些

概念。 中的内存分为 种:寄存器,共享内存,常量 纹理内存以及全局内存,

每种存储类型的带宽和延迟是不同的,如表 所。

Page 116: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

表 中不同存储类型的带宽和延迟时间。

存储类型 寄存器 共享内存 纹理 常量内存 全局内存

带宽 约 约 约 约延迟 个周期 个周期 个周期 个周期

全局内存

图形处理器又称为加速卡,它是计算机系统的种附属设备,它不能独运,

必须借助于 才能发挥作。所以通常个 应程序包含个 宿主

程序,以及些 内核函数,当程序运时,宿主程序将这些 内核函数指

令及相关的数据分发到 设备上计算,然后从 内存中取回计算结果。

图 在般的处理器架构中, 通过 总线与 联通。

拥有独的内存,所以宿主程序需要将数据从 传输到 以进

计算。通常 设备都是通过 (

)总线与处理器相连,如图 所,前 的传输速率为 。

是全双总线,这意味着数据的传和传出可以同时进并享有同样的速率,

也就是说我们在以 的速度向 卡传送数据的同时,还能够以 的速

度从 卡接受数据 。然,这并不意味着如果不接受数据,我们就可以以

的速度向 卡传送数据。

中的主内存称为全局内存,这是因为 和 都可以对其进写操

作。宿主程序要想在 上执计算,先将 中的数据和指令通过 总

线传输 的全局内存中,然后 中的各个内核线程从全局内存中读取数据

并执计算,然后将计算结果写回到全局内存,宿主程序再从 全局内存中读取

数据回 中。例如图形渲染管线中的顶点数组,纹理数据等,即是通过

等图形接将 中的顶点数据传输到 全局内存中,只不过在图形接中通

常还会做些数据的格式转换(例如归化)。

然实际上数据在 和 内存之间的传输还会经历些低速的前端总线,所以实际上并不能达到 这么的速率。不过 在其最新的 处理器架构 中使了种新的直连技术 ,它可以使 之间通过 不是 连接,其可以提之间达 的传输速度。如果处理器本持 技术(例如 的 处理器),其还可以提供相同的 之间的传输速度。

Page 117: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

由于并计算涉及到巨的数据集,这些数据从 到 全局内存之间的

传输,以及全局内存到 内核函数的的寄存器之间的传输都会产量的延迟,

所以在 中可以使种较级的流传输的模型来使传输数据和内核函数的执

重叠进,参见本章后的内容。

全局内存是 中内核函数访问最慢的内存,由于 架构使程序托管的

内存模型,所以内核函数可以选择不需要将每个变量的中间结果都写回到全局内存,

这些中间数据可以保存在内核函数所在的执单元本地,等到内核函数执完毕时

才将本地的数据写回到全局内存,这节省了数据在全局内存和内核函数之间的不

必要的传输时间;此外,个线程束的线程对全局内存连续地址的访问还会涉及到合

并,这些内容将在本章后描述。

常量 纹理内存

对于并计算,每个线程使的数据都是相互独的,例如对个数组进操

作,每个线程分别读取数组中的个元素进相关的计算,线程 i 通常不需要数组中

除 i 之外的元素数据。这样的数据可以直接存放在全局内存中,线程执时内核函数

直接(不经过缓存系统)向全局内存请求,如果相邻线程请求的数据地址是连续的,

它们可以被合并使其只有次内存请求,再结合后的延迟隐藏技术,可以提供较

的计算效率。

然,对于另外少量可以被多个线程随机访问的数据,并且多个线程可以访问同

个数据,这样的数据使全局内存存储,然后直接被内核函数访问则效率不。所

以 提供另外种内存结构来存储这类可以被随机访问的数据。

常量以及纹理内存其实只是全局内存的中虚拟地址形式, 并没有特殊保

留的常量 纹理内存,但是常量 纹理内存能够提供速缓存。此外常量内存和纹理内

存都是只读内存。

如图 所,常量内存可以被缓存到常量内存缓存存储器,纹理内存可以被

缓存到纹理内存缓存存储器,这些缓存存储器通常是 级缓存,可以提供较全局内

存更快的访问速度。然由于所有缓存系统都是利数据的局部性原理,所以它要求

所有线程对数据的访问可以局部化到个缓存的。例如个 的常量以

及个 的常量缓存,这意味着可缓存的内存为 ,如果能够将访问

的数据包含或局部化到常量内存中个 的块中,那么程序将获得很的性

能。否则,对于均匀的常量内存访问,如果缓存没有命中所需的数据,将导致 次

对全局内存的访问,不但是从常量缓存上获取数据。因此,对于那些数据不太集中

或数据利率不的内存访问,尽量不要使常量内存。

此外,对于纹理内存,它好提供基于硬件的线性插值功能。对于第章讲述的纹

理的放和缩操作,硬件会基于给定的纹理坐标值获取该纹素( )附近的多个

纹素值,然后基于这些纹素值进插值计算。对于维数组来讲,它使简单的线性

Page 118: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

插值,对于维数组和三维数组,分别可以持硬件级双线性插值和三线性插值。这

样就使得渲染管线中的贴图可以速处理。

纹理的另个较实的特性是其可以根据数组索引动处理边界条件,我们可

以在数组边界按照环绕式或夹取式来对纹理数组进处理。这点常有,因

为通常情况下它不需要通过嵌特殊的边缘处理代码就可以对所有元素进处理。

特殊情况下的代码处理通常会导致线程分的产,参见本章后线程分处理相关

的内容。

共享缓存

由后图形学处理器架构节的内容可知,内核函数的多个线程会分配到多个

上执,据此我们可以对并计算处理的数据进定的划分成多个处理块,

在每个块内部的多个线程可以共享些局部数据。如图 所,这些单个 内

部的局部数据不需要通过缓慢的全局内存进存储和读取,它们可以被存储在个

内部的共享内存当中。共享内存实际上是个位于 附近的 速缓存,它

的延迟极低,约有 的带宽,远远于全局内存,但是它的速度约只有寄

存器的 。

为了提供更的带宽,共享内存使的是基于存储器切换的架构(

),它将共享内存平均分成多个相同尺的内存模块,称为存储体( ),

这些存储体内的内存可以被同时使。任何对共享内存读或者写的操作可以均分到 n

个不同的存储体地址的都可以同时进,使其可以提供相对于单个内存模块 n 倍的

带宽。

例如费架构的设备上有 个存储体,论有多少个线程发起操作,每个存储

体每个周期只执次操作,因此如果个线程束(参见后的内容)中的每个线程

访问个存储体,那么所有线程的操作都可以在个周期内同时执。此时须顺序

地访问,因为每个线程访问的存储体在共享内存中都是独的,互不影响。如图 中

上的顺序访问,或者随机但是每个线程访问不同的存储体,这两种情况都可以同时

执。

此外,当线程束中所有线程同时访问相同地址的存储体时,会触发个播机制

到线程束的每个线程。然,其他情况则将导致存储体冲突( ),例如

个线程束中只有部分多个线程访问同个存储体则需要排队,此时当个线程访

问共享内存时,线程束中的其它线程将被阻塞闲置,并且此时并不会导致后会讲述

的延迟隐藏机制使处理器切换到其它线程执。所有使共享内存需要处理存储

体冲突。

Page 119: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构!"##

!"#$

!"#%

!"#&

!"#'

!"#(

!"#)

!"#*

!"#+

!",#

!",,

!",$

!",%

!",&

!",'

!",(

!",)

!",*

!",+

!"$#

!"$,

!"$$

!"$%

!"$&

!"$'

!"$(

!"$)

!"$*

!"$+

!"%#

!"%,

!"#,

-./,)

-./,*

-./,+

-./$#

-./$,

-./$$

-./$%

-./$&

-./$'

-./$(

-./$)

-./$*

-./$+

-./%#

-./%,

-./##

-./#&

-./#*

-./#)

-./#'

-./,,

-./,$

-./,%

-./,&

-./#,

-./#$

-./#%

-./,#

-./#+

-./#(

-./,'

-./,(

!"##

!"#$

!"#%

!"#&

!"#'

!"#(

!"#)

!"#*

!"#+

!",#

!",,

!",$

!",%

!",&

!",'

!",(

!",)

!",*

!",+

!"$#

!"$,

!"$$

!"$%

!"$&

!"$'

!"$(

!"$)

!"$*

!"$+

!"%#

!"%,

!"#,

-./,)

-./,*

-./,+

-./$#

-./$,

-./$$

-./$%

-./$&

-./$'

-./$(

-./$)

-./$*

-./$+

-./%#

-./%,

-./##

-./#&

-./#*

-./#)

-./#'

-./,,

-./,$

-./,%

-./,&

-./#,

-./#$

-./#%

-./,#

-./#+

-./#(

-./,'

-./,(

图 共享内存被平均分配到 个存储体上,每个存储体在同个周期内可以独同时被访问。上的顺序访问(或者随机独访问)可以被同时执,然下多个线程读取同个存储体将导致存储体冲突。

寄存器

与 架构不同的是, 的每个 拥有个巨的寄存器件,它通常

包含上千个寄存器,例如在费架构的设备上,每个 拥有 的寄存器空间,

这些寄存器平均分配到每个 ,根据线程的数量,每个线程可以使个到个

寄存器。寄存器的读取速度是最快的,约相当于 个 时钟周期。

之所以使数量巨的寄存器,其是因为即将在下节讨论的延迟隐藏的需

求,其是因为 寄存器的特征。 中的寄存器与 中的寄存器是不同

的,在 中,指令执完后写寄存器中的数据会被动写到缓存中去,然后

缓存系统会播更新多处理器架构中其它处理器的缓存,以及将数据写到主内存。

然 并不会这么做,写到寄存器中的数据会直停留在该寄存器中,直到有

新的数据写或者当前线程执完毕动退出,寄存器数据被重置。这就是称为程序

托管的内存模型的原因,程序员指定个变量的内存类型,即是指定了其数据的存放

位置,处理器不会动变更这个位置。

这样做的原因是什么呢?由于 可能同时处理上千个相同指令的线程,每个

线程在执过程中某些中间计算结果只供所在的线程使,所以它完全没有必要

写到全局内存中去。在个 内核函数中,每个本地变量都会动存储到寄存

器,这些变量不会被动更新到全局内存,只有当该线程计算结束,或者某些中间过

程需要将数据写到全局的时候,才将寄存器中的数据赋值给全局内存变量,这样将

Page 120: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

节省不必要的数据在内存中的流通,例如在个 的着器程序中,通

常只有最后才会将结果写回到全局内存,这些值可能是顶点着器中执过变换的坐

标值,或者像素着器中计算出的颜值。但同时这也需要每个线程拥有量的寄存

器,因为每个本地变量都需要占个寄存器。

此外,每个 线程都拥有独的寄存器还可以避免线程切换时导致的寄存

器数据的换进换出。在 中,当个线程处于延迟等待状态时,处理器会切换到

其它准备好的线程进执以隐藏延迟, 同样使了延迟隐藏技术,如下节

所述,并且它更是将延迟隐藏技术发挥到极致,量的寄存器导致 线程切换

的成本乎为 。

图形处理器架构

本节我们以 当前的旗舰消费级开普勒( , )架构为例讨论

图形处理器的架构,如图 所( 下代图形处理器架构为

)。

通常是和 组成个对等的计算环境,其中 充当宿主程序,并

负责计算般的串程序,另些计算密集,具有度并性特征的程序则被发送

到 执。这些仅在 上执的并计算程序称为内核函数( ),

负责在 上分配内存,并将内核函数以及相关数据发送到 内存, 的计

算单元从这些内存获取数据并进规模的并计算,最后 从 内存中取

回计算结果。

实际上是个 阵列,这就是 具有可扩展性的关键因素,如果向

设备中增加更多的 , 就可以在同时刻处理更多的任务,例如使开普勒架

构的 系列处理器拥有 个 (注意,由于开普勒较上代处理器有

很改进 ,所以 称其新的流处理器族为 不是 )。

每个 中包含若个流处理器 以及其他些关键部件,如寄存器,共享

内存,硬件持的特别计算单元( , )等。在每个 内执

的是相同的指令,因此它们只需要次指令获取,然后播到 内的各个 ,

所以 使的是 架构模型,但是 更趋向于称之为 ,即单程

序多数据( )。

开普勒架构的 均提供每个 内部 个 ,所有理想情况下每

个 每个时钟周期可以同时执 个线程,这使得 均可以提供的每

秒浮点数计算次数( , 或 )达

( 1012)。

其中较重要的调整是将之前费架构中每个线程每个时钟周期内执 条指令,改为每个时钟周期执条命令。这虽然减少了半的吞吐量,但是开普勒架构拥有更多的内核,以及减少“时钟频率”带来的能量消耗等问题,开普勒架构较前代仍有幅性能的提升。

Page 121: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

图 开普勒架构的 系列处理器。

当然,图形处理器的硬件架构还包括很多知识,然本书并不是本描述并

计算的书籍,我们讨论处理器架构的的是来帮助我们理解并程序的执以及

它的些特性,然我们并不需要理解它内部到底怎么执,感兴趣的读者可以阅

读 等以了解更多关于并计算的知识。

延迟隐藏

由于处理器时钟频率和主内存读取速度以及带宽的差异,导致数据从主内存传输

到处理器计算单元的过程存在很的延迟,例如全局内存的访问达 个时钟

周期。

为了克服这种延迟,些技术通过些辅助段来“隐藏”这种延迟,这种技术称

为延迟隐藏( )。在 中主要使缓存来隐藏延迟,缓存系统次

Page 122: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

性读取个缓存的数据,如果指令之间处理的数据是连续的,那么同缓存内的

后续的数据的延迟将被隐藏;另,如果数据来于下个缓存,则可以使

预取技术来提前缓存相邻的缓存来达到延迟隐藏。

然,这种基于硬件托管的缓存系统并不适于规模的并计算,由于硬件托管

的缓存系统会动将所有写寄存器的值更新到缓存系统以及主内存中,并计算

线程之间独性较,部分中间计算结果都不需要写回缓存中去,所以 使

的是程序托管的内存模型。并且, 中虽然仍然会使缓存,然 的缓存

系统主要向些共享数据(部分线程之间或全部线程之间共享),对于部分独

的线程数据, 使另种式来隐藏延迟。

回想前讲述单个处理器的多线程技术,当个线程处于延迟状态时,处理器

动切换到其它处于等待执状态的线程进执,这样通过使多于处理器能够处理

个数的线程数,内存读取的延迟也能够在定程度上被隐藏。

正是将这种延迟隐藏技术发挥到了极致,要放这种技术的隐藏作,有

两个可以改进,其是使能够容纳更多的等待线程。在 架构中,虽

然每个 只有 个 ,但是每个 可以分配最多达 个线程,即是

说当每个时钟周期有 个线程在执计算的时候,还可以有将近 个线程正在

从内存中获取数据,这样通过量的线程就使得部分线程的内存获取的延迟被隐藏

了。

多线程技术的另个瓶颈来源于少量的寄存器,虽然每个时钟周期可以容

纳多个线程处于延迟状态,但是由于寄存器数量的不,这些线程的数据被放在缓

存系统当中,使得每次切换线程时都需要寄存器数据的换进换出,因此执多线程就

需要量的延迟。 同样到上下切换的概念,但是它拥有数量众多的寄存器,

它致于为每个线程都分配真实的寄存器,哪怕是处于等待状态的线程,这正是

它隐藏延迟的秘密所在,因此,次上下调换只需要重新执另个寄存器组。在

架构中,每个 有 个 为的寄存器, 更是达 个

位寄存器。使得每个线程可以拥有多达 ( )个以上寄存器可。

CPU!" #$%& '()*+ #$%, -()./

CPU!" #$%& '()*+ #$%, -()./

CPU!" #$%& '()*+ #$%, -()./

CPU!" #$%& '()*+ #$%, -()./

01

图 内核执与内核传输重叠进。

此外,利这种延迟隐藏技术,还可以实现内核的执与从 到 内存

的传输重叠进。如图 所,如果内核函数直接从 不是从 的全局

Page 123: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

内存获取数据,就可以不需要等待所有数据都传输 之后再开始执内核函数

的计算。由于并计算提成涉及量的数据集,这种重叠技术可以使得 的利

率更(不需要在 向 传输量数据集的时候空闲等待)。

全局内存访问的合并

并计算的性能,还可以得益于其程序和数据的致性,这种致性越,能够

实现的吞吐率就越,反之数据的存储越发散,则将导致更低的吞吐率。所以,除了

需要管理内核函数变量的内存位置,并计算的另个难点还在于程序员需要去精

设计全局内存数据的布局。

使种称为内存合并( )的技术来充分利并程序

的数据连续性。当连续的线程向全局内存发起数据请求,并且请求的内存块是连续对

齐时,这些线程的多个内存请求会被合并成次请求,然后次性返回所有数据。

般可以返回整个线程束所需要的数据,如图 所。 中的线程每 个会被组

成个线程束( ),每个线程束内的线程会被保证同步执。由于个

存储事务是需要定开的,内存合并使得多个线程的内存请求只需要个存储事务

即可解决问题。

!"##

!"#$

!"#%

!"#&

!"#'

!"#(

!"#)

!"#*

!"#+

!",#

!",,

!",$

!",%

!",&

!",'

!",(

!",)

!",*

!",+

!"$#

!"$,

!"$$

!"$%

!"$&

!"$'

!"$(

!"$)

!"$*

!"$+

!"%#

!"%,

!"#,

-.,$%

-.,$'

-.,$(

-.,$)

-.,$*

-.,$+

-.,%#

-.,%,

-.,%$

-.,%%

-.,%&

-.,%'

-.,%(

-.,%)

-.,%*

-.,%+

-.,&#

-.,&,

-.,&$

-.,&%

-.,&&

-.,&'

-.,&(

-.,&)

-.,&*

-.,&+

-.,'#

-.,',

-.,'$

-.,'%

-.,'&

-.,$&

图 个线程束内相邻线程对相邻连续对齐的内存的读取将会被合并成次读取,减少存储相关事务的开。

内存会基于线程束的式进合并,内存合并事务持 , 以及

,分别表线程束中每个线程以 , 以及 个 为单位读取数据。全局

内存持单个指令读或写的请求的内存为 或者 ,要想获得内

存合并,每个线程访问的数据必须基于这些基础数据对齐的,否则将不能获得内存合

并的好处。所谓对齐( ),即是指每次指令获取的数据所占内存是和内存系

统持的存取单位致的,例如个数据所占内存为 ,将导致返回个

的数据,这个数据类型就是没有对齐的。

Page 124: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并处理器架构

所有内置类型如 以及双精度的 和

都是动对齐的,对于户定义的数据类型,其可以使对齐标识符

进强制对齐(但这样将导致些为定义的数据浪费内存,所以通常我们应

该精设计定义类型以充分利内存合并以及内存的占),如:

或者:

分支

最后我们要讨论的是条件分指令,传统的 的标是执串代码,它们

包含了些特殊硬件,例如分预测单元,多级缓存等,所有这些都是针对串代码

的执;但 并不是为执串代码设计的,为了效执量的并计算,

并没有像 那么复杂的硬件实现的分预测功能,同前的变量内存位置

分配,数据的连续对齐样,条件分同样需要程序员地处理。

对于分指令, 在执完分结构的个分后会接着执另个分,对

不满条件的分, 在执这段代码的时候会将它们设置成为激活状态,当这

块代码执完毕之后, 继续执另分。这种机制是由于每个 内的每

个线程束每次只获取条指令,它不能同时获取条件为真和条件为假两条指令。

这样导致的结果就是,当程序中包含分指令时,如果在个线程束内的分分

布是不连续的,例如图 所,则将导致在处理分的时候部分线程处于空闲

状态,不能充分利 的计算资源。更糟糕的是,这种由于分导致的线程并不

会导致处理器将计算资源切换到其它线程束执,即是说,由于分导致的部分线程

的闲置并不能算作线程阻塞,只有内存读取的延迟才能促使线程切换。

不过在指令的层,硬件的调度是基于半个线程束,只要我们能够将半个线程束

中连续的 个线程束划分到同分中,那么硬件就能同时执分结构的两个不

同条件的分块。然这种条件常苛刻,对于分指令,最有效的法是尽量保证

分的连续性,对于所有线程组成的条件数组排序,或者以某种式的处理,使得分

能够连续排列。例如如果条件是于某个数 n,则可以让数组中的原始以 n 分割进

排列,左边的数全部于 n,右边的数全部于或等于 n,这将导致分分布

Page 125: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

并计算架构

if(...)

//!"#$

//!"#%

else

&'

条件分指令

...

...

...

...

...

0 1 2 303 31

分分布不连续

...

...

...

...

...

...!"#$ !"#%

0 1 2 303 31 32 33 34 35 62 63

连续的分分布

图 并没有复杂的分预测单元,这是由于其 架构特性决定的, 在定的数据内只获取指令次,所以不连续的分将导致资源闲置,但是连续的分分布则可以避免这种闲置。

较连续,仅在分割的位置或者两端可能出现分布不连续。由于个型的并计算常

常有上万的线程,因此这种的优化也可以带来定的性能提升,分分布连续的

指令执如图 所。

Page 126: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 127: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

图形处理器接口

Page 128: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 129: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着色管线

着色技术概述

延迟着色

光源分配

着色器管理

延迟着色中的反走样技术

着色技术概述

上章讲述的图形处理器接是图形应程序所接触的最底层的基础设施,虽然

我们可以直接使基于光栅化的经典渲染管线来对场景进渲染着,但是同其它软

件开发作样,我们通常还需要建套与上层应关的抽象层,或者基础架构。

在计算机图形学中,我们称这抽象架构层为着管线 ),对这

层的了解仍然是我们掌握游戏引擎以及各种全局光照算法的重要基础,因此本章专门

讨论了种着管线法,并且着管线的概念可以是和具体全局光照技术关的,

所以我们可以在进各种复杂的渲染技术之前以更简洁的思路来理解它们。

在开始讨论着管线之前,我们需要明确三个概念,这对理解本章的内容常重

要,它们分别是:渲染( ),着( )以及光照计算( )。

渲染通常是指将整个 数字场景转换为张 图像的整个过程,它通常包含多种

常复杂多样的全局光照技术和过程;着是指计算物体表每个像素点的(我们

Page 130: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

所看到的)最终颜值,即在着器或者光照程中它是计算辐射亮度( )的

过程;光照计算是计算所有光源对个像素点的“辐射照度 ”( )的过程。

着色技术基础

在第 章讲述渲染程(第 节)的时候,我们说明了渲染程是个费雷德霍

姆第类程,为了便,我们重写个简化的渲染程如下:

Lo( , ) = Le( , ) +

Ωf( , )⊗ Li( , ) θidωi

这 Lo( , ) 表点 处沿 向的辐射亮度,Le( , ) 表点 处沿 向

发光的辐射亮度,Li( , ) 表沿 向射向 点的辐射照度,f( , ) 表 点

处的 函数。

对于程 ,完整的解通常需要使些迭代的法来计算,本书后会讨论多

种解这个程的法。但是很显然,这样个程并不是对 友好的,我们不能

直接将它放着器中求解,着器中要处理的公式,它必须是能够直接根据材质参

数计算出最终结果的,也就是说着器中不能包含未知的参数。

因此,正如将在后的些章节中看到的那样,实时渲染法中通常将渲染程

分解为多个部分,并使每个部分能够以各种式形成着器中的个参数,最终着

程可以直接根据这些参数(它们通常都是某种程度上的近似值)计算出个像素点

的最终颜。这些参数可能是个包含间接光照的球谐函数,个包含远距离环境反

射的环境贴图,或者是个光源的阴影贴图等等。它们可能以预处理的式提前在编

译阶段计算出来,也可能实时地使光栅化技术来计算某个量,不管怎样,这些参数

使得最终在着器中我们可以使个公式计算出最终的颜值。

有了这些材质参数,着程可以被写成个只包含最基本的个变量的形式,

渲染程的各个部分被可以根据这些最基本的变量以及材质参数计算出来(例如通过

观察向和物体表的法线向就可以确定射光的向从对环境贴图进采样),

这个包含基本变量的着程如下:

Lo( ) =n∑

k=1

fshade(ELk , k, , , diff , spec,m)

这的∑

加数形式表辐射亮度 Lo( ) 是每个光源的累积贡献,ELk 表第 k

个光源的辐射照度, k 表射光向量, 表观察向量, 表表法线

当然实际上辐射照度和辐射亮度通过 来联系, 需要知道射光向,所以我们并不能单纯地将所有光源的辐射亮度加在起,那样的值将是没有任何意义的,所以本章讨论的“光照计算”是个特殊的术语,它是光照程中除了反射率(如漫反射率 cdiff 和光反射率 cspec)材质参数之外的所有项,即它将 算在了“辐射亮度”之中,因此本章讨论的“光照计算”的概念仅适于理解本章相关的概念,般意义上着和光照计算的概念是致的。

Page 131: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着技术概述

量, diff 和 spec 分别表表的漫反射折射率和光反射折射率,m 表某个

光模型(例如 模型)中的光扩散系数( )。

这有两个变量是随着光源的变化变化的:即射光向量 k 和光源辐射

照度 ELk,对于辐射照度 ELk,它般可以通过光源参数中的辐射强度 I 和距离递减

函数求得,即:E = I θfdist(r),参见第 节的内容。需要注意的是,公式 仅

考虑点光源和直线光线,它们可以很直接地计算出辐射照度 ELk 的值,对于其他光

源如环境贴图,在渲染中通常使单独的渲染通道来处理,此时,利式 中的变量

仍然能够满计算辐射照度的条件(例如环境贴图需要的射光向)。

有了如式 这样直接的着程表述,对个物体表进着也就是在着

器中执该式计算的过程。最简单的式就是在 渲染管线中对场景中的所

有何体的顶点进光栅化,然后在元着器中执式 的计算,不过不幸的是,

这种法虽然简单却有很的缺陷导致其性能很低,因此程师们针对渲染管线建

些不同的基础架构,如延迟着,它们来改善直接光栅化技术的性能问题,这些

架构法正是本章要讨论的内容,要深理解这些架构我们先需要了解光栅化技术

存在的些问题。

光栅化技术

将需要迭代计算的渲染程改为能够使些材质参数次性计算的着程

(式 )之后,利第 章讲述的图形处理器接,场景的渲染过程就变得分简单,

整个渲染过程可以简述如下(如图 所):

图 利图形处理器接提供的渲染管线渲染场景的过程,先将顶点光栅化为元,然后根据相关材质参数在元着器中计算颜,帧缓存中的深度缓存被来剔除被遮挡的元。

!

"#

$

%

&

'())*+$,

-

.

+

$

/0123456278

放置个虚拟摄像机在 场景中的某个位置,并设置个视锥体来表 世界

中的可视区域,这区域被映射到屏幕上块 的具有定分辨率的窗。

场景中每个物体所包含的顶点数据以及绘制该物体所需要的所有环境贴图,阴影等

被提交到 开始绘制该物体,这些顶点所构成的图元被视锥体裁剪 ,处于

物体在被绘制之前通常也会在 端执个基于物体包围盒的 空间的裁剪。

Page 132: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

视锥体外部的图元将被丢弃,与视锥体相交的图元将被裁剪,剩下的图元被光栅化

到与窗分辨率对应的像素位置,每个像素块称为个元。

元着器对每个元使式 进着计算,它遍历场景中的每个光源分别计

算其对该元辐射照度的贡献,并将最终结果与帧缓存上对应像素位置上的深度值

进较,如果通过深度测试则将该颜值与帧缓存上的颜值进混合。

当所有物体被遍历完后帧缓存上的颜缓存被送到显设备进显,或者其结果

被读回到宿主程序。

这个传统的渲染过程常简单,它基本上就是直接利图形处理器接提供的经

典渲染管线,因此它具有所有图形处理器接提供的便利或优点:

结合图形接深度测试和颜混合的机制,传统的渲染管线可以很容易地实现对半

透明物体的绘制。

被集成到渲染管线,它可以对每个元的深度进多次采样,使次

着计算以实现反锯齿。

每个物体可以根据其图形特征使独的着器或着器组合

当场景的结构较简单(拥有较少的物体数量以及光源数量)时,上述的渲染

法常简单且效,然随着场景结构复杂度的增加,该法会变得常低效。

在传统的渲染管线中,所有跟影响性能的因素乎都跟个称为过度绘制(

)的概念有关。般来说,要求得个摄像机所能看到的场景中的每个像素点,

必须沿从摄像机穿过每个 屏幕上像素点的向上,与整个场景数据做次相交

计算,该向与场景所有交点的最近点即为屏幕上该点的可视点,然这样的相交计

算常复杂,所以光栅化技术的核要点正是简化了这个相交计算:它对整个场景只

遍历次,并记录下屏幕上每个像素点向上的表点的深度值,然后让后续的同样

落于该像素点的表点的深度值与该值进个简单的深度较,并保留深度值更

的表点,这样当整个场景被遍历遍之后,帧缓存上留下的就是整个场景中所有可

视的表点,这个过程常效。然它的缺陷就是,对于每个表点,我们必须计

算出完整颜值,即是对其执式 的计算,这样就导致了过度绘制,因为量的被

遮挡的表点将被深度测试丢弃,从导致计算资源的浪费,尤其当场景中有量光

源的时候,式 中需要分别计算每个光源的贡献,这种资源浪费随着光源数量的增

加,例如本书后讲述的即时辐射度法(参见第 章)可能有上万个虚拟的点光源

( ),它也随着场景复杂度的增加增加,因为更多的表点可能被遮挡。这种渲

染性能和场景复杂度的耦合导致的结果是灾难性的,它使得应程序可能具有极不稳

定的帧率。

其次,即使是针对有效元(那些最终没有被深度测试丢弃的元)的着计

算,由于场景中可能分布成千上万的光源,因此为了提渲染性能,光源剔除(

)分关键,它要求我们在绘制个物体之前,应该排除那些对其完全没有影

响的光源。这考虑场景中像直线光源这样对整个场景都有影响的光源还是少数(例

Page 133: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着技术概述

如个场景可能只有个太阳光源),部分光源都是点或者其它积光源,这些光

源的辐射强度都受个距离递减函数的影响,如图 所,因此光源剔除基本上

可以排除量的效光源(光照影响为 ),从提渲染性能。光源剔除的

标是使每个元计算的光源的数量达到最少,有时候我们也称其为光源分配(

),这是本质乃着管线基础架构的重要内容。

图 当以物体的何尺进光源剔除时 物体光源的场景会使得每个元可能计算量效的光源影响, 物体光源的场景会使得量物体重复进光源剔除计算。

!"#$%&'() *"#'%&$()

(+,-./

(+,-.0

1234 (+56

在前的这种法中,进光照剔除的唯法是在绘制之前进物体与光源进

包围盒较,然后只将那些影响该物体的光源信息上传 以进最节省的

元着计算。因此为了最限度降低每个物体受其影响的光源数量,我们应该减少

次绘制的顶点的数量,或者说尽可能每次绘制更少数量的物体,然这却和每次尽可

能绘制更多顶点以降低 状态切换的昂性能代价相盾,这个盾使得我们很

难权衡每次绘制应该选择的批绘制的。

当我们以物体的尺为依据来选择批绘制块的时 ,如果场景中包含少量

物体和量光源时,虽然每个光源可能仅影响物体的部分,但是我们不得不对

该次绘制使全部光源,因为以物体的何尺为依据法剔除这些光源,如图

所;同样,当场景中包含量物体以及少量范围的光源时,每个物体都要单

独分别对每个光源进剔除计算,尽管我们知道多个物体同时都处于该光源的影响

范围之内,如图 所。更糟糕的是,场景中可能同时存在这两种情况,因此不

管我们怎样权衡,都不可能使每元计算光源数量达到最低。

最后,由于传统的渲染管线的着计算必须在个元着器中完成,因此这些

不同的光源组合将导致常复杂的着器管理。这些着器的组合数量是物体类型数

量和每种类型不同光源数量( )的个排列组合。如果我们只使个

巨的着器,在着器内部使根据条件进各种分切换,这种臃肿包含众多分

的着器称为型着器( ), 中的量分计算将导致常低

的性能,参见第 章的内容。

同时,也因为所有着法被混在起,所以所有的输数据不得不随时在内存

中处于可状态,这包括所有的光照图,反射图等等。

所以本章后讲述的着架构的重要改进就是不以何物体尺(是以屏幕空间的 分块( ))为依据进光源剔除。

Page 134: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

由于以上传统渲染管线的各种问题,现代实时渲染法通常采改进的法进

物体表着计算,这其中最著名的是本章将要讨论的针对过度绘制改进的延迟着

技术,以及在延迟着技术基础上,针对光源剔除改进的基于 分块和 分簇的

延迟渲染技术。

延迟着色

传统的渲染管线使个着器进整个渲染作,这个渲染过程其实包括两部

分的内容:通过深度测试找出场景中的所有可视点,以及对每个表点进着。利

光栅化技术进渲染的过程中深度测试是不可避免的(它是图形处理器存在的最重

要理由之),过度绘制的计算发于表着计算过程,如果我们能够将着过

程和深度测试过程分开,将着计算延迟到深度测试之后,我们就能避免因被深度测

试丢弃元产的不必要的着计算,这就是延迟着( )技术的

原理,与之相对应,我们将传统于深度测试以确定可视区域的渲染管线称为前向着

( )。

分析式 ,要想实现着计算和深度测试的分离,我们唯需要做的是对每个深

度测试通过的像素使额外的式记录下所有这些着参数,然后使个单独的渲

染通道来仅对这些可视的像素点进着计算。这些包含着参数的缓存对象称为

何缓存( , ),这些着参数可以使现代图形处理器接

提供的 (参见第 节的内容)特性进存储。

!

"

#$%&'&()*+,

-

.

/

*

01234'56378

!

"

-

.

/

*

)

*

9

:

;<)* =>/*?

图 延迟着的过程,它在传统的渲染管线基础上,将着过程和深度测试过程分离,在前向着阶段仅将着参数写到 中,然后使个额外的延迟着阶段来对像素进着计算。

延迟着的过程如图 所,它可以简述如下:

绘制场景中所有的不透明何体,并将每个元对应的法线量,漫反射折射率,

以及光扩散系数等存储到 中,如图 所。此过程涉及到在元着

前向着的概念其实并不准确,因为第阶段只是进深度测试以确定场景中的可视区域,并不涉及表着的计算,这仅仅是为了区分延迟着中的不同阶段。

Page 135: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着

器中输出多个颜值,因此需要到图形处理器接中的 特性。此过程称为

前向着阶段。

分别计算每个光源对可见表点的影响。这通过分别绘制包围每个光源影响范围

的何体来实现,此时我们应该关闭深度测试,因为我们只需要找出该光源影响的

屏幕上的区域,同时每个光源包围何体有两个,我们应该根据情况绘制光源包

围何体的其中,例如当摄像机位于光源包围何体内部时,我们应该绘制该

何体的背,否则只需要绘制正。对于些没有体积的光源如直线光源,以及

光源影响范围同时包括视锥体近平和远平时,我们直接绘制个 的包括

全屏的平。在着器中,前向着阶段输出的 将作为纹理数据被读,

中的深度值来计算像素的 位置,以此来计算光源的距离递减函数

以及查询阴影贴图。最后该光源对每个像素点的颜计算结果被写到个累积缓

存( )。此过程称为延迟着阶段。

按传统的渲染管线绘制所有半透明的物体。

深度 模板 光扩展系数 漫反射率 表法线

图 个基本的何缓存包含深度,漫反射率,表法线量,以及光扩展系数个基本的式 中的着参数,这些着参数可以被延迟着(或其它后处理)阶段于着计算(图来 )。

延迟着技术解决了传统渲染管线中的过度绘制的问题,这是通过牺牲内存占

来实现的,它个巨的何缓存对象将那些着参数暂存起来,以便能够在稍后

待所有不可见的像素被深度测试剔除之后再进必要的光照计算,能这样做的原因是

深度测试本和着计算乎是完全独的,所以延迟着计算的结构乎和传统渲

染管线是致的,并且延迟着使渲染性能不再与场景的复杂度像耦合(尤其延迟着

持数量巨的光源),能够保证稳定的帧率,稳定的帧率是实时渲染领域中技术

的个重要的衡量指标。

虽然有上述这些优点,并且从渲染结果上看延迟渲染和传统渲染管线的结果是

致的(因为它并没有对式 作任何修改),但是延迟渲染还是带来了些新的问题,

其中些主要的问题包括:

不持半透明物体。个包含半透明表的像素点的颜值是两个(或多个)表

点颜值混合的结果,由于 只保存每个像素点的个表点的值,所以

它不能持半透明物体,在延迟渲染中我们必须对半透明物体单独采样传统的渲染

管线来处理。

Page 136: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

巨的帧缓存存储占。通常个 中每个像素可以占多达 甚

及上的内存占,当使多重采样时更是会占巨的内存(我们将在第 节讨

论延迟着中多重采样的问题);此外,为了保证多个光源累加结果的精确性,颜

累积缓存还必须使更精度的缓存对象。

对屏幕区域的像素点(不是根据每个物体的类型)进着计算,这使得我

们很难针对每中物体使定义的着器,因为各种类型的物体被混在个屏幕

区域,我们必须使同的着器,这使得定义着器变得常困难,我们将在

第 节中讨论延迟着中的着器管理。

最后个问题是内存访问的带宽占,这将在本节及接下来的内容中重点介绍。

带宽问题是延迟渲染法带来的新的问题,它带来了种新的形式的过度绘制,

以下是个传统延迟着中的着计算阶段,它对每个光源包围盒形成的何体绘制

次,然后在其覆盖的屏幕 区域内对每个像素执着计算:

从以上的伪代码中我们看到,对于每个光源覆盖的每个像素点,着器都要分别

对帧缓存执:读取 计算 写的操作,如果个像素点被多个光源所覆盖,这

在整个着计算过程中这个像素点对于的着数据会被重复读写多次,这就导致种

新的过度绘制。

2003 2006 2008 2011 2014

GPU!"#$

0

1

2

3

4

5

6

7

GPU%&'(

2

2

2

2

2

2

2

2GPU)'*+

图 性能发展趋势,其计算能的提升速度会于带宽的提升速度,这其实对 也是样的,所以应程序应该充分优化以更紧密地对数据进利,不是频繁重复地读写。

Page 137: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着

通过第 章的内容可知,处理器对任何寄存器以外的内存读取都会导致延迟,这

些延迟包括存储器本处理数据输输出的延迟,以及数据由存储器向处理器传输过

程中带宽的限制。图 是近年 性能发展的趋势,我们可以看出 计算

能提升的速度会于其传输带宽的提升,虽然缓存可以在定减少带宽导致的

延迟,但是它仍然寄存器要慢得多;同时在 中,缓存是基于内核内多个线程

共享的,它还必须处理同步的问题。所以在 编程中,我们要充分优化内存读写

的算法,尽可能低将数据读取到寄存器 ,对其进更多计算使,然后再写到全

局内存中。

针对带宽的问题,我们有两种解决案:较好的解决案是将循环结构中光源

的循环放到双重循环结构的内部,这样针对所有覆盖该表点的光源只需要对

中的数据读写次,但是这需要额外的作来找出每个表点被哪些光源覆盖,

即所谓的光源分配( ),这种结局案正是本章后第 和 节

的内容,这些法的重点内容就是结局光源分配。

另种解决案,则是减少光源循环中读取数据的数量,即进步将着计算中

的光照计算分离出来,例如后的延迟光照法中, 中只需要 位存储

个法线量即可,减少了带宽的占,本节剩下的内容就将讨论这种减少光源循

环中对 数据读取的数量的案。

延迟光照计算

虽然延迟着将着计算与深度测试分离开来,使得着计算仅针对屏幕空间中

的像素点进,从节省计算资源,但我们仍然临光源循环导致的帧缓存数据

重复读取的计算资源浪费,于是我们想要进步从着计算中抽离出仅与光源相关的

部分,这样就可以节省出光源循环中对帧缓存数据的重复读取。

渲染程通常可以写成漫反射和光反射部分,所以式 可以写成如下的形式:

Lo( ) =n∑

k=1

( diff ⊗ fdiff (BLk , k, ) + spec ⊗ fspec(BLk , k, , ,m))

考虑到物体表的反射率是由材质提供的常数,所以上式可以进步写成:

Lo( ) = diff ⊗n∑

k=1

fdiff (BLk , k, ) + spec ⊗n∑

k=1

fspec(BLk , k, , ,m)

回想第 章的内容, 拥有数量众多的寄存器,将数据读取到本地寄存器,并在单线程内进够的计算,然后将最终计算结果写全局内部是 并计算的基本策略。

Page 138: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

分析上式,我们可以将漫反射率和光反射率从着程中抽离出来,使得与光

源相关的计算部分只剩下法线和光扩展系数,光源射向是可以从法线向计

算出来的。因此,按照这样的拆分,我们可以只需要在 中存储法线和光扩

展系数,法线是个 颜值,光扩散系数通常是个很的整数,因此整个

只需要个 位的颜缓存(即是光照计算的延迟着器中只需要读写

个 位不是 位甚更多的数据)即可,这种情况下甚不需要硬件持多

标渲染( )。

不过此时我们需要两个累积缓存来分别保存漫反射和光反射部分“辐射照度”的

值,它们分别是:

gdiff =n∑

k=1

fdiff (BLk , k, )

gspec =n∑

k=1

fspec(BLk , k, , ,m)

当光照计算阶段完成之后,我们再对场景使渲染管线执第次渲染,但是此

时的着计算仅需要从上述两个累积存储中取出辐射照度的数据,然后依照下式进

计算即是最终的着颜值:

Lo = diff ⊗ gdiff + spec ⊗ gspec

如果硬件持 ,我们同样可以直接将法线以外的材质数据保存在

中,所以第次何通道不需要重新渲染整个场景,仅对屏幕空间执次渲染即

可。延迟光照计算的渲染过程如图 所。

!"#$

!"#$%#&'()*+

%&'

,-./012'345 '36789

()*+

,:./012

'345;</0;< =>45;<

图 延迟光照计算中的各个阶段,先光照计算需要的表属性被写到个法线缓存中,然后光照计算读取法线缓存中的数据将计算出的辐射“辐射照度”信息写到光照累积缓存中,最后在对场景执次光栅化,并直接读取光照累积缓存中的数据对像素点进最终着计算。

由上述内容可知,延迟光照计算的过程可以简述如下:

渲染场景中所有不透明的何体,并将法线量 和光扩展系数 m 写到帧缓

存中,由于法线量占据三个分量,光扩展系数是个很的整数,所以它们

可以被合进个“ 缓存”,这只需要个 分量的颜缓存即可,所以可以不需

要 的持。此过程称为第个何通道。

Page 139: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着

和延迟着样,从阶段逐个渲染每个光源包围盒所在的何体,并对该光源覆盖

的每个屏幕像素点进光照计算;和延迟着不样的是,它只计算“辐射照度”

不是辐射亮度,并且最终输出的漫反射和光反射的辐射照度被写到两个累积缓

存中。此阶段为延迟光照计算阶段。

重新渲染所有不透明何体,但是此时并不需要对表进光照计算,它仅仅需要

从前阶段的两个颜累积缓存中读取值执式 的计算即可。并将最终的着

结果写到帧缓存中。此阶段为第次何通道。

绘制所有半透明的物体。

延迟光照计算法被量使于游戏引擎中,其中对其进优化的地主要

集中于延迟光照计算阶段输出的两个辐射照度量的存储表述。每个颜值分别包

含 三个通道,所以需要两个各具有 通道的颜缓存对象来存储,在

的 引擎中,他们使个 通道的颜缓存

( 或 )来同时记录漫反射和光反射的辐射照度,其中前

个通道表漫反射值 ,第 个通道表光的强度 ,所以光的颜

值可以由 计算得出,它的效果如图 所。

原始 通道 通道

图 在 中使个 通道的颜缓存来同时记录漫反射和光反射(图来 )。

并没有说明他们使何种法来编码光反射的值,但是从图 可以看

出,茶壶同时被个红光源和个绿光源照亮图 的原始 通道的颜缓存

能够准确反应反射物体的颜,它的边沿上呈现红绿两种光, 通道的案失去

了反射环境的颜,所以它仅仅保留了光的亮度( ),丢弃了光的

度( )。因为眼对于光的亮度感应较度更为明显,所以般情况

下没有太问题。 等 提出了种

帧缓存的压缩法可以个 分量的颜缓存更精确地存储两个颜值,它的效果

如 图所。

Page 140: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

原始 通道 通道 压缩帧缓存

图 使 压缩帧缓存个 通道的颜缓存可以准确存储光的度和亮度, 中的案直接丢弃度仅保留亮度,所以在光部分看不出光源的颜。

光源分配

针对延迟着法的带宽占,我们在上节中介绍了第种法,即通过减

少光源循环内每个像素读写 中缓存数据量的来减少带宽的占,这主

要是通过式 来实现。

降低带宽占的另(也是最重要的)个法是改变传统延迟着中的循环结构,

使像素的遍历处于外循环,光源的遍历处于内循环,这样将使得 中的材质

参数只被读写次,调整后的伪代码如下所:

然这样的循环结构调整带来了渲染流程的巨变化,先,我们不能再以个

个光源的包围盒何体为绘制单元进绘制,只能使个覆盖全屏区域的四边形

进绘制,这意味着所有光源类型都必须使同个着器,特殊光源不能再使独

的着器,所以着器的管理变得更加复杂,这部分的内容参见第 节。

其次,在处理每个像素的时候,必须知道每个像素受哪些光源影响。我们不能使

个全局的包含全部光源的个列表,因为这个列表可能包含上千个光源,这将会

导致巨的计算资源的浪费。考虑到通常场景中的局部区域只受少量的光源的照射 ,

所以针对每个像素点的光源分配( )变得常重要 ,接下来我们将

会讨论两种重要的光源分配案。

有些游戏引擎还会限制每个物体或者某些区域受影响的最光源数量。

光源分配可以说是实时渲染常重要的个话题,现代很多具有复杂场景的游戏往往都有量的各种类型的光源,即使场景中没有那么多真实的光源,有些渲染技术也可能包含量虚拟的光源(例如本书后将会讲述的即时辐射度法就可能包含上千个虚拟点光源),因此光源分配乎是现代游戏引擎必然会涉及到的内容。

Page 141: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

分块着色

使全局的光源列表是常低效的,我们也不可能针对每个可视的表点都执

光源分配计算,那样光源分配计算本的开都是很的,并且光源分别的结果需要

更的缓存对象来存储。相反,我们找到种折中的法,即让个区域内相邻的表

点共享个光源列表,这样做的原因是相邻的表点般拥有相同的光源列表。

分块着( )将屏幕区分划分为多个块( )的格( ),每个

块覆盖的像素区域为 32× 32 ,每个块拥有个独的光源列表,它表该区域内所

有像素点受影响的光源列表,块内的所有像素点共享整个光源列表,如图 所。

图 分块着块光源列表的数据结构,全局光源列表存储着所有光源的 ,块光源索引列表连续地存储这每个块对应的所有光源的索引值,这样每个块通过个偏移值和尺即可从块光源索引列表中取出该块的光源 列表。

L L L L L L

0 0 6 3 0 6 4 4

1 2 3 4 5 6L0 ...

...

0 1 4 7731 3

66 67 69 ...1 2 ...2...

!"

#$ ...

%&'()*+

,'(-.)*+

'(*/+

全屏块表格的数据结构如图 所,所有块存储为个 纹理(图 下的

正形表格),每个像素点可以通过在屏幕区域的像素位置来计算其块索引,每个块

存储两个数据:偏移和尺,所有块的光源列表存储在个的全局光源索引列表中,

该索引列表中的每个值执全局光源列表的个光源,每个块通过在全局光源索引列

表中偏移值和尺来选择该块对应的光源列表。

对于块表格结构数据的填充,最简单的法是将每个光源的包围盒矩形投射到屏

幕上,然后在每个块中分别插受其影响的光源索引到全局光源索引列表中,并修改

块数据中的偏移和索引值,如图 所,该场景包含两个光源,重叠部分的块的光

源列表将包含两个光源,未被光源包围盒投射的块则不包含任何光源 ,其它受单个

光源影响的区域包含个光源。

这种法虽然简单,但是它在些块中插了效的光源,例如个点光源的四

个的位置,或者表点在垂直于屏幕向上距离光源位置很远从其根本不会受到

当然也可以根据性能分析选择其它尺的块,本书以 32× 32 块为例讨论。

注意这些块虽然没有任何直接的光源照射,它仍然可能被环境光,天空盒等其他形式的光源照射。

Page 142: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 使将光源包围盒直接投射到屏幕区域来建块光源列表的数据,这的数字仅于演表光源的数量,它的真实数据结构如图 所。

该光源影响,但是它同样处于该光源投射的区域。些法使模板测试,类似阴影

体积( )的法来精确地关联光源与其影响的块,另些法给表

点设定个最近和最远受光源影响的距离,来排除些距离较远的光源的影响。我

们将在下节分簇着中讨论个更详细的例。

块数据的建可以发在 中,也可以在 中处理,例如 在

中就是将分块的数据从 读回到 ,然后在 中处

理块的数据。不但如此,他们还在 中执块的着计算,每次处理个完整块

内的所有像素,这样还可以减少个块内光源列表的重复读取。

光源分配的结果既可以适于传统的前向分块着 (

),也可以适于延迟分块着( )中。然不

管使什么样的着管线,光源分配乎都具有以下的三个阶段:

对场景(不透明的物体)执次光照的传统的渲染管线,以确定哪些像素是可

见的,这通常就是延迟着的前向着阶段。

利某种法对上述可视的表点执光源分配(例如基于分块的案或基于分簇

的案,见本节后的内容),它输出个针对每个可视表点的光源列表。

利光源列表执每个可视表点的光照计算。

因为我们不可能对场景中所有像素或区域都执光源分配,所以论使前向或

者延迟着法,都必须要有个前向的深度测试阶段来避免不必要的光源分配计

Page 143: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

算。因此如果你使的是前向着法(例如 中的 ),

则少需要包含两个前向渲染阶段,这时第个阶段往往称为 。

对于延迟分块着,它仅仅是增加了个光源剔除的阶段,所有它拥有和延迟着

乎样的优点和缺点。针对光源剔除来讲,分块着还存在很的优化空间,由

于分块着将 空间投射到 的屏幕区域,因此它的每个块占据了深度向上

常的范围,如图 所,在分块 中,两个物体之间存在深度不连续(

),我们法减法的分块范围(个最最深度范围值)来剔除包

含在中间的光源,所以这导致效的光源被计算在分块光源列表中;对于分块 ,它

的深度是连续的,但是同样由于深度范围太多,使得该分块必须包含该深度范围内的

所有光源。

图 分块着仅仅将空间投射到个 的

屏幕区域,所有每个分块包含了过度的光源信息,影响了着计算时的计算性能,数字 , , , 表分块索引,分块 对应的图表段深度连续的路,这种情况在游戏中很常见。

0

1

2

3

使 分块的另个问题是这些分块信息是与视点相关的( ),

即旦摄像机位置和向发移动,或者场景中的某些物体位置发改变 ,则整个

分块表格的数据需要重新计算。分块着的这些问题使得我们将光转向了 的分

簇着。

分簇着色

为了进步剔除光照计算阶段每个像素点受影响的光源数量,分簇着

( )在分块着的基础上,将像素分组的划分从 的

屏幕空间( )延伸到 的观察空间( ),与之相应,每个

的块称为个簇( ),从使每个光源真正做到仅影响其局部区域。

分簇着的基本步骤如下:

将何场景渲染到 以获取有效可视表点及其相关材质属性。

计算每个簇的索引键值( ),也称为簇分配。

也包括光源位置改变,但此处仅改变光源颜不影响光源分配

Page 144: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

找出唯的簇集合。

分配光源到每个簇。

利每个簇的光源列表对像素点进着计算。

其中第步和传统的延迟着或分块着没有什么区别;第步对每个像素点执

次计算,它根据像素点的位置(也可以加法线的限制)计算出每个像素点的的

簇索引键值;然后第三步将这些簇索引键值合并,以形成个包含唯键值的簇列表;

第四步则将光源分配到每个簇;最后第五步根据每个像素所在簇的光源列表对像素点

进着。

簇分配

对 空间进某种空间结构的划分,都可能导致量的空域,如场景中会有

量空间位置不包含最终屏幕上呈现的像素点。传统的何空间的划分可以使如

这样的树状结构来忽略部分空域,但是分簇着使的是种特殊的空间

结构(见下的内容),并不能简单地树状结构进管理。所以分簇着使

种特殊的式来构建簇集合:它对每个可视像素点都做个簇索引键值的计算,这样

遍历完所有像素点后的簇索引键值就是有效的簇,然后去掉重复的(即个簇内的像

素点计算出相同的索引值)簇索引键值,就形成个有效的簇列表。

簇分配的第个问题涉及怎样表述每个簇的空间结构,因为这关系到簇索引键

值怎样计算,般的按个固定尺的正体( )的划分会导致离摄像

机较远的区域拥有常密集的簇,所以其簇的密度乎接近于像素的,这显然

增加了后光源分配的计算量;考虑到我们仅仅对视锥体内的点感兴趣,即观察空间

( )观察空间,所以分簇着技术对视锥体进划分,它以分块着中

屏幕上块的划分为基础,然后在深度向上添加个细分的维度,如图 所,这

样划分的每个空间称为个簇( ),或者称为个视椎体( ),

或者称为个视锥体素( , )。

由于经过摄像机的透视投影,同样的物体在更远的在屏幕上所占的空间更

,所以分簇着没有在深度向上使平均长度划分,是以指数的形式划分深度

向,即更远的地簇的尺更,更近的地簇的尺更,如图 所,这样

每个簇的尺更接近于个体。

那么,怎样通过个屏幕坐标系的像素点位置计算出该像素点所在的簇的索引键

值呢?假设在屏幕空间 向细分空间(在屏幕空间每个块的为 32×32 像素)

的数量为 Sy,则深度向上第 k 个视锥体 的近平 neark 在 向的长度为:

neark = neark−1 + hk1

这是个来 中的概念。

注意这指的是包含第 k 层上所有的簇椎体,如图 左图顶部的虚线所指的部分。

Page 145: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

Y

Z

!"#$

%#$

!"#$ %#$k k

&k

'k &k(

图 分簇着使的是种针对视锥体空间进划分的法,它以分块着的块在基础,在深度向上按指数形式进划分,每个空间称为个簇,左图仅列出屏幕空间 向。

对于第个视锥体,near0 = near(near 表整个摄像机视锥体的近平

向上的长度),对于个 2θ 的张,有以下关系:

h0 =2near θ

Sy

其中 hk 表第 k 级视锥体上每个簇在 向的长度,由此可以得出:

neark = near(1 +2 θ

Sy)k

由于每个簇在深度向上的长度:dk = hk,如图 所,我们可以解出 k 的值

为:

k =

⌊(−zvs/near)(1 + 2 θ

Sy)

这 floor(x) = ⌊x⌋ 称为个下取整函数( ),它表取于或等

于 x 的最整数,对于的上取整函数( )为 ceiling(x)⌈x⌉ 表取于

或等于 x 的最整数。

利上式我们便可以计算出个三元组 (i, j, k) 表的簇索引键值,假设

(xss, yss) 表像素点在屏幕空间( )的坐标,(tx, ty) 分别表屏幕空

间每个块的尺,则 (i, j) = (⌊xss/tx⌋, ⌊yss/ty⌋);zvs 表观察空间( )的

深度值。

所以,给定个像素点的坐标,我们并可以计算出该像素点所在簇的索引键值,

这个索引键值由 (i, j, k) 三元组表。在 的实现中,他们为 i, j

Page 146: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

分量分别分配 位, k 分量分配 位,所以总共需要 位的长度来表个簇

索引键值。

分簇着中簇的索引值键值并没限定只能使空间坐标来表,它还可以使更

的维度来使光源分配的数量更接近实际有效的光源数量。在 中

还可以为个簇指定该簇内像素点的法线分布,从可以有效地进背剔除(

)。为此,它们为索引键值增加了 位来表法线分布,这样簇的索引

键值就变成 位,可以使个 位的颜值表(包含 (i, j, k, normal) 四个分

量)。

为了使有限的数据长度表法线的空间分布,他们使个假象的体来表

空间分布, 位数据长度可以来表 个位的组合,所以体可以被细分为

3 × 3 个的体,每个的每个体分别表个锥型( ) 的空间范围,

这样共需要 3× 3× 6 = 54 个位组合,如图 左图所。

图 每个簇内像素的法线分布个 3× 3 的体表,体每个的每个细分表个锥形的法线分布范围, 个位的组合可以由每个像素点分别计算出来。

δ

ωaα

dl

当法线分别被提供之后,表背的光源可以进步被剔除 。如果射光向

(从光源到簇中位置的向)与法线锥形的中轴之间的夹 ω 于 π/2 + α + δ,

则该光源应该被剔除。这 α 是法线锥形的半( ),δ 是从光源发出的包

围簇的 包围盒的锥形的半,如图 右图所。

找出唯一的簇集合

当每个像素点所在的簇索引键值被计算出来以后,形成个包含重复键值的簇索

引键值列表,这时我们需要压缩该列表,去除重复的部分(同个簇内的所有像素点

拥有相同的簇索引键值),以形成个包含唯簇索引键值的簇列表,如图 所。

为了计算简便,这不会表述严格的法线空间分布,仅仅是每个体代表个锥形范围,如果包含多个体向,则将它们合并为更范围的锥形,这样实际是夸了法线分布的范围,但是这对于光源密集的区域,存在背剔除的光源的数量还是很的,部分表的法线分布都在个很的范围内。

利法线分布来剔除背的光源,这在 中又称为法线剔除( )。

Page 147: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

由于 屏幕空间相邻的像素点所在的簇在 的观察空间上并不定是连续

的 ,所以这些由像素点计算出的簇索引键值也并不定是连续的,如图 上图。因

此要想去除重复键值,最简单的法就是先对索引键值列表进排序(如图 中

图),然后去除掉每段重复的索引键值即可(如图 下图)。

图 每个簇内像素的法线分布个 3× 3 的体表,体每个的每个细分表个锥形的法线分布范围, 个位的组合可以由每个像素点分别计算出来。

!"#$%&'()*+

,-./0*+1

2345'6()*+

78'9:()*+;<

然在 中进排序是件常影响性能的事情, 的做

法是先以 屏幕空间的块为单位进本地排序,由于每个块内的像素点是连续的,

并且它是 32× 32 的像素块,所以可以充分利 的并计算性能,并且每

个块内的数据可以写到本地共享缓存,不是全局内存进计算。

另种法是使虚拟纹理 ( ),虚拟纹理来存

储需要巨内存的稀疏数据,它可以将个地址映射到紧密的内存区,这样来

降低内存的占,虚拟内存使页表( )来映射索引到紧密的物理内存区。

然由于簇索引键值的可能值的范围常巨,所以他们使 中

的动态分配页表的法来节省更多的空间,感兴趣的读者可以进步参考这些论信

息。

分配光源到簇

传统的簇光源分配法是遍历每个簇,然后对每个簇遍历每个光源,进每光

源 簇直接的 的包围盒相交测试。 在这个基础上先对所

有光源构建个包围体层次结构( , ),以此来加速

每个簇内光源的遍历。 进步提供了些加速点光源和聚光灯光源与

簇的相交计算(它通过进步挖掘光源的真实包围何体不是个简单的体包

围体来减少簇的计算量)。

本节我们要介绍的是来 中针对 的基于保守光栅化技

术的光源分配法,这是种利图形处理器的光栅化技术能够产常精确的簇光

源分配的法,当然这种法仅适于凸光源( )形状,考虑到多数

光源如点光源和聚光灯光源的包围体都是凸的,因此这种法常实。

例如由于表不连续导致两个像素点在深度向上的距离很远,此时虽然它们在 的屏幕空间相邻,但是所在的簇并不相邻。

Page 148: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

保守光栅化化( )的概念常简单,传统光栅化(如

图 左图所)技术在选择每个图元所覆盖的元时,是以该图元所占的积是

否覆盖该元的中位置来决定该图元是否覆盖到该元,显然这样的法运到

光源剔除中就会漏掉部分光源对簇的影响。与之相对应,保守光栅化(如图 右

图所)则考虑任何部分被图元积占的元均为有效元。在 中,

通过在创建个管线状态对象的时候设置 的标识为

来开启保守光栅化化 。

图 传统光栅化与保守光栅化的区别,保守光栅化会包含所有图元积覆盖到任何部分积的元。 !"#$%&'( !)#*+&'(

保守光栅化簇光源分配法的基本过程可以分为两步,这两步均针对每个光源类

型为单位进:

壳通道( ) 此通道先将每个光源的包围何体利光栅化技术渲染到

屏幕上以块( )为基本单位的分辨率上,并记下每个光源在每个块上的最

和最深度值。之所以称为壳通道,是因为它找出了每个光源在每个块所在的视

锥体上所占的外形;

填充通道( ):利壳通道产的最最深度值来填充簇的光源列表。

图 在保守光栅化光源分配技术中,每个类型的光源使个单位格表述,它们可以在每个实例中使不同的变换矩阵改变尺和位置。 个顶点球光源 个顶点圆锥形光源

由于使光栅化技术,所以每个光源必须要有个格的何表述,并且该何

表述必须是凸的,这种何表述也使得我们可以使些不规则的光源类型。需要

也可以通过些扩展如 和等来持保守光栅化。

Page 149: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

注意的是,由于场景中的光源数量较,所以分别对每个特定的光源实例存储对应

的何数据并不是个好法,所以这仅对每个类型的光源存储个何格数

据,并且每个顶点数据在 x−, y− 和 z− 向上分布被限制到 到 的单位尺,如

图 所,这样就可以使图形接中的实例化渲染,每个渲染实例在顶点着

器中被变换到其光源的真实尺及位置。所以在保守光栅化光源分配法中,每个通

道都是以个光源类型(不是每个光源实例)为单位的。

壳通道

壳通道的主要任务是找出每个光源在 屏幕上每个块( )内包围簇的范围的

最最深度,例如图 所,由于光源始终是凸的,只要找出这两个值,则在

后的填充通道则很容易正确地分配每个光源到每个簇内。由于深度向上簇的数量

有限,所有个 的渲染标以存储两个簇的深度值。

图 壳通道的主要任务是找出每个光源在每个块内覆盖簇的范围,由于光源是凸的,所有找出最最深度向上的簇之后,该光源就会被分配到该块内最和最深度范围以内的所有簇。

!"#

$%&' $(&'

要存储每个光源在每个块上的最最深度值,就需要为每个光源设置个独

的渲染标,前我们以及说明每个通道是以光源类型为单位的,每个光源类型包

含多个光源的实例,所以这就要求渲染标是个 类型的数组纹理,

其数组的数量为每个类型光源对应的光源实例实例,数组中每个图像的分辨率等于

屏幕上块的分辨率,如图 所。

每个光源类型的所有光源实例通过 实例化渲染命令开始

壳通道的绘制,实例的实例则等于场景中该光源类型光源实例的数量,每个光源实

例拥有的变换矩阵于将单位格顶点数据变换到视图空间,顶点着器根据

来分别对每个光源实例的顶点执变换。

在保守光栅化光源分配法中,何着器必须被使以设置每个实例的光源被

渲染到不同渲染标中,这通过在何着器中设置

到数组纹理中不同的切来实现。此外,为了后元着器的正确处理,每个元

需要与个三形图形进较,所以我们需要将三形的三个顶点输到元着

器,同时标识这些顶点变量为 ,以保证元着器中对簇深度的所有

Page 150: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 保守光栅化光源分配法以光源类型为绘制单位,图中左右两列分别表聚光灯和点光源两个不同的类型;每个类型的每个光源实例都对应个渲染标,所以下边的渲染标是个数组纹理,数组纹理的尺对应该类型光源实例的数量,每个纹理的分辨率为

屏幕上块的分辨率;每个光源实例对应的纹理切的渲染标在何着器中选择。

计算都是在观察空间的,这是因为有些光源处于视锥体之外的仍要被考虑(例如部分

与视锥体相交),如果使屏幕空间则这部分光源不能够被正确表述。

元着器的每个实例对应于屏幕区域个块,每个块实际上是个以摄像机为

原点,四个分布穿过块四边的锥形。旦个元着器实例被执,说明三形

的少部分和该块相交,所以在元着器中每个三形必须与该块对应的锥形进

相交计算。块与三形进相交计算时,最最深度可能的值的情况如图 所

,圆圈表最最深度值出现的地,这算法较简单,读者可以参考

中的算法实现,这仅讨论思路。

图 块与三形相交的三种可能的情况,其中发于三形的边上,出现在块的四个,出现于三形的三个顶点。

(a)!"#$ (b)%&" (c)!"#'(

相交计算出的结果根据该三形的向以确定是最深度或最深度值,这些

深度值在根据簇在深度向上的指数分布或其他特征求出该簇的索引值 ,然后将这

两个值写到该光源实例对应的渲染标上。

注意这的簇索引值可能尽是深度向上的索引,不需要存储全局的索引值,这样能够使更少的数据进存储,否则 位的 渲染标根据存储不了全局那么多的簇索引值,后续的填充通道再将其转化为全局簇索引值。

Page 151: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光源分配

填充通道

有了每个光源在每个块内的最最深度值,填充通道直接使个计算着

器,它同样以每个光源类型为单位,以块为分辨率,分别根据每个块内每个光源所占

的最最甚值对其它介于最最深度之间的簇进填充,如图 所,每个

计算着器实例内遍历该实例对应块内所有的簇,只要簇索引值介于最最值值之

间则对其进光源分配,这需要注意的是最最值存储的是深度向的簇索引

值,所以需要进正确地转换。这计算出的结果将被直接写到全局的簇光源索引

值列表中去,这和分块着的思路差不多。

图 壳通道计算出每个光源在每个块内的最最深度值,填充通道就可以利两个值对每个簇进光源分配,基于保守光栅化的光源分配法常能够常精确地反应光源的实际何形状,减少了效的光源分配。 壳通道结果 填充通道结果

着色计算

分簇着和分块着法在着计算没有太多区别,它同样可以使与前向

或延迟渲染法中。但由于减少了每个簇内光源的数量,因此渲染性能较分块着

得到很提升,如图 所。

分簇着更进步地利光源的局部性,将每个光源对环境的影响降到最低,从

提更好的计算性能,从图 我们可以看到分簇着每个像素计算的光照数量

常低,从能够轻松应付巨的光源数量,因为不管光源数量多么巨,分配到每个

簇内的光源数量乎没有太多变化 ,这是只是存在光源分配阶段由于光源数量的增

多导致的计算量,因为在整个计算中,只有光源分配部分是和光源数量有较耦合的。

分簇着最重的意义在于,通过这种光源的局部性特征,将场景复杂度完全从

光源数量中解脱出来,从不管场景变得多么复杂,它能时钟提供个稳定的帧率,

通常场景中的光源都是致平均分配到整个场景中,现实中很少那种很多光源堆积到个局部空间的情况。

Page 152: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 图中的颜表光源数量,分块着(上图)和分簇着(下图)从屏幕的块看上去的光源数量呈现较的差别,分块着存在量的效光源。

这是实时渲染技术最重要的权衡指标,因为个不能保证稳定帧率的技术乎法

在实际的产品中。

着色器管理

在传统的渲染管线中,渲染是以何体为单位进的,相同类型的何体可以使

对应类型的着器。但是在延迟着中,每次渲染是以屏幕上的块区域为单位

进着计算的,这块区域内的像素点可能分别来不同类型的何体,它们可能分

别具有不同类型的材质参数,所以使延迟着,另个挑战是怎样管理好各种类型

物体的着计算。所幸的是,随着近年基于物理的渲染模型的泛使,如第 章

讲述的那些 模型,游戏场景中量的物体表都可以较统的

些材质参数来表述,剩下仅有些特殊的物体如发,肤等使其它特殊的材质模

型。

多种类型的何体混在起使相同的着器,这就避免不了分的处理,

中的分计算可能会对程序性能造成很严重的影响。本节要介绍的是顽狗

作室在神秘海域 中使的管理着器的案。

(a)Gbuffer 0 (b)Gbuffer 1

R r g

G b spec

B normalx normaly

A iblUseParent normalExtra roughness

R ambientTranslucency sunShadowHigh specOcclusion

G heightmapShadowing sunShadowLow metallic

B dominantDirectionX dominantDirectionY

A ao extraMaterialMask sheen thinWallTranslucency

图 顽狗神秘海域 中使的基本的两个 ,每个 中每个像素仅包含 位,它充分使 架构的位解码技术来尽量压缩每个参数的长度(图数据来顽狗神秘海域 )。

Page 153: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着器管理

先, 必须要持所有类型的材质参数,每种不同类型的材质需要使

不同的渲染法,所以这就可能导致巨的 (这其中些材质参数对另些

类型的物体并不适)。为了尽可能减少 的体积,它们进两个的优化,

先是对于特殊的材质,他们使相互独的材质参数,如图 所,两个基本的

来存储所有物体都需要的材质参数,例如法线,位置,粗糙度等等,第三

个可选的 来存储每种类型特殊的些材质参数,这些物体包括织物,头

发,肤以及丝绸等等,这个特殊的 对每个物体只使种类型,例如个

表不可能同时包含织物和肤的材质参数,这是由材质创作管线限制的。

其次,他们充分使 架构内置的的位解码法来充分压缩每个参数的长度,

使得图 中每个 中每个像素仅占 位的存储空间。传统的着器编程

语通常使固定的包含 到 个分量内部图像格式,某些参数在实际中可能占

个分量更少的位置,这就会导致定的浪费。 架构提供的解码法

可以对任何整数按位进解码,这使得我们可以在帧缓存中存储任何长度(甚

超过 个分量)的数据,并且这个操作可以在 个 时钟周期内完成,例如以

下代码从个整数中分别获取个 , 和 位的颜分量值:

在着器编程中有个术语叫型着器( ),这种着器往往是将

各种材质类型以及光照类型的功能全部写在个着器中,这样就导致着器中会包

含量的分计算,通过第 章中的内容可知, 中的分计算会严重影响其性

能,最坏的情况下,每个着器的每个分都要被执(尽管有量的着器实

例的计算是效的)。

然我们以及说过,由于延迟着将各种不同类型材质的物体混在起,这就很

难避免型着器,这就留给我们似乎也是唯的向:那就是我们能不能将这些混

在起的像素点,根据其材质类型将其分离出来,然后对每种类型使个独的渲

染通道?

这正是顽狗在神秘海域 中使的渲染技术,实际上这也是

中已经使过的技术,我们此处以神秘海域 中的内容为

准。

神秘海域 中的延迟着阶段是使计算着器以块为单位进渲染的,其中每

个块包含 16× 16 个像素点。在延迟着阶段,计算着器分两步处理块中像素的着

计算:

对每个块执材质类型定义( )。

对每个材质类型分别执次计算着器。

材质定义阶段的的是找出每个块使的计算着器类型。为此,他们对每个不

同材质类型的组合建个单独的计算着器通道,所有可能的材质类型组合存储在

Page 154: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

个查询表( )中,这样每个块通过其材质组合的索引值就能找到对应的

计算着器,如果在材质类型定义阶段像这样区分了所有的像素点,第阶段就可以

对每个材质类型组合使个独的计算着器,其仅包含少量 甚分计算。

那每个块怎样计算这个材质类型组合的索引值呢?他们称这个材质类型组合的值

为个块的材质 ( )的属性,它实际上是个位平,每个位代表

个着器特性( ),或者我们可以称为着器中计算功能的原理单位

(其内部不包含分的),神秘海域 中的材质 使 位来表,由于这些材质

类型之间是相互独的,所以其可以被压缩到 位进存储。

由于材质 是个位平,所以每个块内的材质 可以通过其内每个像素点

材质对应位的或操作得来,然后我们就可以通过这个材质 从查询表中查询到该块

计算着器的类型,将这个信息保存起来,就可以在后续的阶段被使相应的计算着

器正确执,材质类型定义阶段的代码如下:

这的 就是材质类型组合的查询表,它表的是所有可能的包含

各组材质组合的着器,它可以根据材质 返回个表个独的计算着器

的索引值 。 是每个块的坐标值,每个块会被添加到个全局的

管理所有块材质 的缓存对象 中,后续的着阶段就会分别根据每个

对被添加到给着器类型的所有块进着计算。

由于这使计算着器以块为单位进材质类型定义的作,所以

表个被申领的块,这是个原理计算器,它保证每个计算着器实例不

会处理同个块,这的思路是和 中相似的。

由下的内容可知,这个数量取决于该块内材质类型的数量,在个局部的块内,部分的材质类型都是相同的,即使具有不同类型的材质,其分的数量也个型着器的分要少得多。

注意,这材质 的概念是针对块的,不是针对个物体。由于块包含多个像素点,所以材质是个材质的组合,不是只单个材质。这可以理解为,每个物体本包含的材质是基本的原

的着类型(由于他们假设所有材质相互独),材质 是由于个块包含多个原功能之后总的看起来的着类型。

Page 155: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着器管理

由于个块包含 16× 16 个像素,所以块内每个像素仍然可能使不同的材质类

型或组合,这就导致每个计算着器内部还是会存在分处理,尽管它型着器

的分数量要得多。这进步的优化是将那些块内每个像素拥有完全样材质类

型组合的块使的着器的分计算去掉,所以这使了个额外的包含分排

列组合的查询表( )。我们可以使下的语句修改上

述第 代码为:

相对于传统的型着器,神秘海域 中使的着器管理技术可以带来

的性能提升,如图 所,场景中部分块内每个像素都拥有相同的材质类型

组合,即它们不包含分处理,将这些分去掉,以及以材质类型为单位减少型着

器的分处理,延迟着的性能得到提升。

图 图中每个颜代表不同的材质 ,它们分别使具有较少分甚分的着器(图来顽狗作室)

另外,所有这些着器的分配作都是有游戏引擎具动完成,例如完成不同

材质类型组合着器的编译,以及不同块之间按材质 进划分都是对美术师透明

的,这简化了对物体着的流程以及渲染的灵活性,并幅提升了渲染性能。同

时,添加新的材质类型并不会影响到着器管理的复杂度。

Page 156: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

延迟着色中的反走样技术

我们在第 章介绍了对数字信号采样的基础知识,以及样的概念,并在第 节

简要介绍了图形学渲染领域的两种基本全屏反样技术:超采样反样和多重采样反

样,本节我们将深介绍全屏反样的些流技术。

先我们回顾下样( )及反样( , )的基本概念。

个连续信号在被采样为离散信号时,只有在其对应的频率域( )上,

使能够覆盖 倍及以上的频率带宽( )的采样率( )

时,离散信号才能被完美重建( )为原始连续信号,否则重建后的原始

信号将会发样,由于些频信号被“削平”了,许多原本不同的信号看起来像相

同的信号(些信号像另些信号的别名)。由于在场景中,何物体的边缘周围的

颜频率域变化常,基本上般的屏幕分辨率根本法捕捉这些频率域的变化范

围,所以样乎不可避免。另些图形学中的样发于着器中对频(如光)

函数进采样,更多的信息详见第 章第 节的内容。

关于 ,国内有多种翻译:锯齿,混淆和样。 在英语中表“别

名”的意思,可以是正确(例如名)或错误(例如间谍冒充别)的别名,

是采样不导致的多个信号之间法区分(其中个像另个的别名)的现象,

只有在图形学中以单个值表个像素块的值时才表现为锯齿,锯齿对应的词通

常为 。 是可以减弱的, 是不可消除的, 之

后的图像放之后仍然有锯齿,但是这些信号之间的过度更平滑,所以笔者认为

“样”的翻译更精确些,混淆太语义化了,不利于理解概念。

在图形学中主要有两类样类型 其是由于对空间域的信号采样不导致的

样,这些称为空间样( ),它包括何样( ),

着样( )等,空间样对应的反样技术称为空间反样(

),相应使的过滤器称为空间过滤器( );另种样是由于

帧率的限制,导致对相邻时间内信号的采样不导致的样,称为时间样(

),对应的反样及过滤器称为时间反样( )和时间

过滤器( )。

对于空间样,图形学中的黄标准是全屏超采样( )技术,它

直接使更的分辨率对场景进渲染,然后对分辨率的渲染结果进过滤,“缩

放到”屏幕分辨率,使超采样进反样的计算称为超采样反样(

, )或全屏反样( , )。

由于渲染中使的着计算可能常复杂,考虑到屏幕中最主要的样类型为

何样,因此多重采样( )技术将何可见性和着计算分开,它对

何可见性函数的采样使类似超采样样更的分辨率进采样,但是每个像素点

Page 157: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

内只做次着计算,并使可见性的覆盖率作为率来混合当前的颜值,这样的

反样技术称为多重采样反样( )。 将每个像素点

的着计算结果分别复制到每个采样点,所以它使和 样的存储空

间,但是计算量降低,不过缺点是不能处理着样。

然 并不适于延迟着,因为它会动将元着器输出的结果拷贝

多次,这使得本就常的 更要使多倍的存储空间,这又增加了

延迟着计算中的带宽占,因为每个像素要读取多倍的数据。

另,即使 的存储和带宽都不是问题,由于 着重于解决

何样,它仍然法解决着器样。现代游戏引擎都使基于物理的渲染管线,

着器中对函数的采样不导致的光部分的样特别明显,这使得我们必须寻找新

的更有效的反样计算。

本节我们将讨论三种被泛在延迟着中的反样技术,这三种技术乎也是

前业中最流的反样技术,它们分别使乎完全不同的思路和原理进反

样处理。

形态反走样

和 都是在个像素正形区域内使多个采样点( ),

每个采样点形成的区域称为个像素( ),如图 所,最后再使某

种过滤器对像素中位置周围的像素进过滤,例如个盒过滤器( )

就是求这些像素颜的平均值。

图 传统的全屏反样技术对个像素使多个采样点,通过以某种过滤式计算这些像素点的权重

(例如积覆盖率,距离等)来实现全屏反样。

!"#

$%&'(

"#

)*+!"#,- ).+/!"#,-

如果每个像素具有不同的颜值,这称为具有像素特征( ),

则 能够较准确地反应这种像素特征,如图 所;然,如果不考

虑像素特征,即每个像素只有个颜值,那么像素的作仅是来计算该像素

的覆盖率,这正是 的思路,如图 的思路。

通常眼对于物体形状以及颜变化( )最敏感,在渲染结果中

这种变化通常来源于何体的轮廓( ),要么是深度不连续(

),或者是不同物体之间颜不连续( ),所以即使不具

备像素特征, 在游戏中运仍然常泛。由于 不适于延迟渲染,

Page 158: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

如果我们能够以种低成本的式计算出这些轮廓上像素的覆盖率,那么我们就可以

做到和 类似的品质。

形态反样 ( , )正是基于这样

的思路,它的核算法是找出物体的轮廓信息,并利这些轮廓信息(不是使更多

的采样点)计算出处于轮廓上像素的覆盖率,然后使个后期处理( )

阶段对轮廓上的像素与相邻像素的颜进混合。

基本算法的过程主要包括三个步骤,这先简要介绍这三个步骤,后

要讨论的 的些变体基本上也是按照这三个步骤来进的,只是每个步骤内

部可能使不同的法。这三个步骤分别是:

根据定的像素属性(如颜,深度,法线,何体 等)找出图像中不连续的像

素,并标记出这些像素中的哪些边处于轮廓边缘,这称为边缘检测( )

,如图 中的绿线段。

利这些边缘线段的何特征计算每个像素与周围邻近来进混合的像素的权

重值(即是积覆盖率),如图 所。

对周围邻近的像素按照混合权重进混合计算求出轮廓上像素的颜值,如

图 所。

由于 是通过后期处理的式来实现反样的,所以它的输就是光栅化

渲染的张屏幕分辨率的图像,如图 所,在这个图像中,何体边缘部

分的像素完全按照其像素中位置是否被个何体覆盖来对其进着计算的,它

是个样的图像( )。

拿到图像后第步需要做的事情是边缘检测,个图像中的边缘可以通

过多种类型的属性来判断,例如相邻像素深度,颜,法线或者材质等的不连续。通

常使颜变化来判断边缘,因为通常具有相似颜的像素更容易聚集在起,些

实现也使亮度来计算边缘。

dleft dright dleft dright

(a)!"#$%&'() (b)*+#$ (c),-. (d)/012

ca

old

copp

图 算法先根据定的标准标注出图像中不连续的边,并对其划分为 , 以及 三种类型,然后针对这三种类型的线段连接成分段线性( )的线段,这些线段将边缘部分的像素分割成两个梯形,其梯形的积分别代表周围邻近的像素颜进混合的权重。

Page 159: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

当我们选定了边缘检测的标准之后,边缘检测可以通过遍历图像中的每两个相邻

的列和的像素,并较相邻像素的值来判断它们的邻边是否处于边缘,如图

中的绿线段。因为条直线段可能包括多个像素的边,所以接下来我们需要找到每

条直线段的起点和终点,如图 所,由于这些终点的线段与该计算的直线段

是交叉垂直的,所以起点和终点线段又称为交叉边缘( )。

这些边缘线段被划分为三种类型: , 以及 型,如图 所,每种类型的

交叉边缘只包含个像素的长度,交叉边缘可以具有任意长度。当这些类型被划

分之后,直接连接每个类型的交叉边缘的中点就构成条轮廓线( ),如

图 中蓝的线段,它是个 形状交叉边缘的中点链接起来的线段。

图 中的边缘线段被划分为三种类型,每种类型的最短边只包含个像素的长度。 Z-!"

U-!"

L-!"

当轮廓线段被连接起来以后,它们将轮廓上的像素分割成两个梯形,其每个梯形

的积就代表了该像素与附近像素的颜来进混合计算的权重,我们可以根据边

缘线段的长度(如图 中 dleft + dright 的长度,以及宽度(个像素的)来

计算每个梯形的积)。如图 所,cold 轮廓上像素原来的颜,copp 代表邻

近像素的颜,a 代表轮廓上的像素的混合权重,则该轮廓上像素的新的颜值为:

cnew = (1− a) · cold + a · copp

以上内容讨论了形态反样法的基本思路,然我们并没有说明具体的算法内

容,这是因为原始的 算法是针对基于 的光线追踪渲染器实现的,现代实

时渲染程序主要是向 的,所以我们将在后的内容详细讨论个基于

的实现案,即 。

算法各个阶段的视觉效果如图 所,它是种常效的反样技

术,在不需要多重采样或超采样的基础下,乎可以达到 倍于 的效果。并

且 是种后处理算法,它可以被很灵活地加到任何渲染器不需要对应的

渲染管线做出修改。从 被提出之后,由于其效的性能引起了量的兴趣,

在随后的年量的 变体算法被提出,例如 ,

等,读者可以阅读 了解更多详细内容

然, 的主要缺点是不能处理像素级的特性,任何于个像素的何

体(例如超薄表,字等)将不能被有效地处理,由于采样的不,光和着

样也不容易处理;另外, 原始算法主要设计为处理贴近平或垂直的轮廓,它

乎忽略掉了对线轮廓,因为对线轮廓需要考虑更多的像素, 仅考虑

轮廓线上的像素的混合。下我们将介绍这些变体中由 等提出的 算

Page 160: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 左上为 算法原始输的样的图,右上先根据某种标准计算像素边缘线段,然后根据这些边缘线段连接成左下图对应的轮廓线段,这些轮廓线段将边缘的像素切割成两个梯形,每个梯形的积则来表周围相邻像素来进混合计算的权重,最终

计算的结构如右下图。

法, 是基于 实现的,它包含了针对 硬件的些优化,从功能和性

能上都具有较的提升。

子像素形态反走样

像素形态反样( , )

是基于 等于 年实现的 变体的增强

算法,本节将放在起讨论它们。此外, 还包括对于时间反样的优化,我们

将把这部分内容放到下节当中, 还被集成到了

当中,读者还可以获取全部 实现的源代码 。

和 算法使相似的步骤,但是每个步骤内部使的法是完全不

同的。 算法包含三个渲染通道( ):

第通道:先边缘被检测出来,这些边缘被存储到个边缘纹理( )

中,如图 所,纹理中的颜表每个边缘在像素中(即上,下,左和右)

的位置:绿像素的边缘在其像素顶部,红像素的边缘在左边,黄像素同时在

可从以下站获得:

Page 161: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

以上两个向拥有边缘 。此外,在此通道,边缘像素的模板值被记录,以便后续

的通道仅处理轮廓上的像素。

第通道:计算每个轮廓上像素的混合权重(即是图 下图中 的值),如图

所。为了计算该权重值,先找出每条经过该像素左边和顶部边缘线段的模式

(如图 所),然后计算出该像素距离这些模式线段交叉边缘的距离,然后

这两个距离值作为纹理坐标到个预计算的纹理中进采样,这个预计算的纹理是

根据线段模式计算出来的权重分布值(如图 所)。

第三通道:根据上步的权重值从周围的四个像素中取出颜值进混合计算,计

算结果如图 所。

图 概述: 输的样的图像,其中红线段表轮廓边缘,绿部分表覆盖积,并标注了 , 和 三种线段模式; 原始 算法中预定义的线段模式; 等 变体中预计算的积纹理; 检测出的边缘; 计算出的积覆盖率; 最终混合结果。

以下分别详述每个渲染通道内的些关键处理, 算法的较特点是充分

利了 纹理过滤的功能以减少了些迭代,循环的操作,这些技巧对于着

器编程有常的借鉴作。

边缘检测

为了进边缘检测,先要选择于相邻像素边缘较的量(例如 颜,

亮度,深度,法线,何体 等), 选择使亮度( , )值来进

边缘检测,每个像素的亮度值可以根据 标准计算得:

L = 0.2126 ·R+ 0.7152 ·G+ 0.0722 ·B

当边缘较参数选择之后,由于 是基于 中实现的,它在像素(或计

算)着器中,对每个像素较它与左边和上边的像素的亮度值,这个较基于个

阈值( ),即两个相邻像素之间的亮度差值的绝对值必须于该阈值,较

出于性能考虑,这仅存储顶部和左边的边缘,因为其它两边的边缘能够从旁边邻近的像素推导出来。

Page 162: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

的结构是个枚举值,这两个枚举值被存储在图 中的纹理中,该纹理是个

通道的 纹理,分别对应上边和左边是否处在边缘。

当直接以上述法独地进两个像素的较时,相邻多个( 个以上)线段的

渐进变化(个线段模式)很容易被拆分成多个独的线段模式,如图 上左图,

个跨多个线段的 型模式被拆分成多个模式,这导致图 上中那样的不正确的结

果,我们想要图 上右这样的结果。

图 仅对本地的像素边缘进测试可能导致过多的边缘线段使得结果不正确, 使种适应性双阈值的技术,通过较相邻像素的边缘来决定是否需要保存当前像素的边缘,这样使得较长的轮廓线上的颜过度更平滑。

采样种适应性双阈值( )的策略来克服这种

问题,这种策略的思路如图 下左所,其中灰的点表当前处理的像素点,黄

表当前像素点可能的左边边缘,蓝表相邻像素的边缘。先计算出所有蓝

边缘中亮度差值并取最值 cmax,然后根据 c2l > 0.5 · cmax 是否为 决定左边缘

cl 是否存在。同样的思路计算图 下中的上边缘。然实践中,由于计算所有边

缘涉及量的内存占和读取,实际的算法仅选择部分进较,如图 下右所

最终的算法如下:先计算出 l = |L−Ll| > T,这 l 表边缘是否应该激活

的枚举值,L 和 Ll 分别为当前和相邻左边像素的亮度值,T 为给定的阈值(通常在

到 之间),然后通过如下式决定边缘是否应该保留:

cmax = max(ct, cr, cb, cl, c2l)′

l = l ∧ cl > 0.5 · cmax

这 ct, cr, cb, cl, c2l 分别为如图 下右对应边的亮度差值,′

l 表当前像素的

左边缘是否应该激活,对应的上边缘为′

t。

计算权重值

当边缘被标记出来后,混合权重( )的计算包括三个步骤:先找

出每个像素中距离其所在形状两端的距离,如图 以及其中的 dleft 和 dright

距离;然后,需要找出该像素所在形状的交叉边缘,并连接两个交叉边缘中点构成

Page 163: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

条轮廓线,如图 ;最后,根据这条轮廓线计算该像素的混合权重,如图

所。

第个通道输出的是种包含边缘信息的纹理,其中纹理中每个像素的

值要么为 (处于边缘),要么为 (边缘像素),如图 所,因此求个边

缘像素到其所在边缘形状的两端交叉边缘的距离最简单的法,就是每次向两个向

遍历,直到遇到边缘纹理中像素的值为 。

为了加速距离的计算, 算法利硬件持的纹理过滤功能,每次遍历向前

步进 个像素单位,如图 所。图中带颜的圆点表边缘纹理上值为 的像

素,五星代表当前需要计算到交叉边缘距离的像素,菱形表对边缘纹理进采样

的位置,可以看出它的步进为 个像素单位。

图 算法利硬件双线性插值功能每次步进 个像素单位计算距离,它不但减少了计算量,也减少了内存读取操作以及相应的带宽占。

由于边缘纹理上每个像素只有 和 两个值,它们均表每个像素其中坐标位

置的值,因此从每两个相邻像素重叠的位置(菱形的地)对边缘纹理进采样,使

双线性插值的过滤式将得到三种结果:

表两个像素均不包含边缘。

表其中个像素包含边缘。

表两个像素均包含边缘。

因此,当某次采样的值为 时即停步进,它表下个像素不包含边缘信息,

如图 中的的菱形位置。使这种法直接对每个相邻像素进判定要节省

半以上的计算量,同时它也减少了内存读取,节省了带宽占。以下着器代码是

向左向搜索距离:

以上是 中采样的法,尽管上述法较有效,然却

不够精确,由于它每次迭代仅在相邻两个像素的左边缘进较,容易忽略掉轮廓形

状另边的左边缘,例如图 左下图所,当前迭代对 b1 和 b2 两个像素的左边缘

进较,但是它却忽略了 b2 上像素的左边缘,也就是蓝线段,该蓝线段本

来应该导致迭代停,因为蓝线段就已经是交叉边缘。

所以我们不仅需要对像素步进向的像素左边缘进较,还需要对边缘形状另

边的左边缘进判断。双线性插值本是可以对周围的 个值进插值的,但是

由于我们将 轴与其中两个像素处于同直线,导致 轴向其它两个值的贡献为

,读者可以回头参照图 中的双线性插值法。所以 将采样

Page 164: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 算法使双线性插值过滤法,次对 个像素进过滤,它能够常准确地找到交叉边缘。

点移到了 个边缘纹理中像素的中间部分,使得它可以取到各个点的插值,这样就

可以考虑到上边像素的边缘分布,如图 右下中黄的采样位置,它可以同时收集

b1, b2, b3, b4 的边缘信息,以下是向左向寻找交叉边缘位置的源代码:

− −

这它对纹理坐标使了个 的偏移 ,需要注意的是,

是个 类型的纹理,它的 来存储每个像素的左边缘, 来存储上边缘,

Page 165: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

这两个分量都会被执双线性插值采样,所以采样结果 是个量。这如果

为 表 b1, b2, b3, b4 四个像素都没有左边缘,即是没有交叉边缘,所以迭代可以继

续; 来保证 b1, b2 的上边缘始终存在的,否则定应该有交叉边缘的出

现。

当找到当前边缘形状两边的结束位置之后,我们还需要找到具体的交叉边缘的位

置,同样使和距离计算样的双线性插值可以避免多次纹理读取。但是这有个

技巧,这不光是需要知道哪条边是交叉边缘,为了避免条件语句的较,这直

接将它们的返回值编码为个特定的值,然这些值代表的顺序成后使的

积纹理,积纹理如图 所,我们在后将会介绍。

图 种可能的右交叉边缘,使个( , )偏移之后对边缘纹理进采样,得到图中对应的返回结果被于后的积纹理查询。

这对像素使个( , )的偏移后在对边缘纹理进双线性插值采样,

得到如图 中的 个返回值,这 个值乘以 之后变成 , , , 四个值作为后

续计算的个索引值,避免了着器中的条件判断。

现在我们有了每个像素到两个交叉边缘的距离,以及每个交叉边缘的类型,剩下

的就是利这些值来计算边缘像素的覆盖积。先我们需要将交叉边缘的中点连接

起来,然后计算每个像素内梯形的积,由于每个像素涉及到量的计算(例如还要

找个梯形与像素交叉的点,然后进积计算),所以 仍然将这些计算逻辑保

存在个积纹理中。

积纹理( )是由 个 9× 9 的纹理( )组成的纹理,

如图 所,每个纹理表个边缘形状类型,每个形状类型可以由 个 到

的索引值查询,这些索引值即是前交叉边缘求得的数值,其中索引值 是不存在

(思考交叉边缘的双线性插值采样的返回值不可能是 )。每个像素采样的纹理坐

标为每个像素距离两个交叉边缘的距离,这的最值 是个优化选项,它表前

的距离计算的迭代最次数为 ,当然也可以根据需要采样不同的值,但是必须和

这纹理的分辨率保持致。

的 算法是种常效的反样技术,它被于量的型游戏

及游戏引擎当中,其中的些着器编程法和思路尤其值得学习,这也是 编程

和 编程的不同的地,其也是本节花这么多篇幅介绍的原因。

Page 166: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 积纹理是个多个 9× 9 分辨率的纹理组成,每个纹理的坐标表像素离两个交叉边缘的距离,这样通过预计算的积查询,节省了着器中复杂积的实时计算。

还包括其它些进步的优化,以及与 的整合,限于篇幅,这

将这些有趣的内容留给读者去研究。

时间反走样

尽管 具有常效的性能(这得益于它没有直接渲染像素,以及优秀

的 硬件优化),以及媲美 甚以上的图像质量,但是也正是它基于单

个像素进反样的前提,使得它不能处理像素特征,像素采样对于着样

常重要(例如超薄表,较远的物体,光函数,以及其它频函数的采样),所以这

使得我们又将光转向反样的黄标准:超采样反样( )。

是种空间反样( )技术,它在个像素点的范围内,

使多个(不是单个)采样点对场景进渲染,然后使个空间过滤器(

)将这些像素混合成最终的单个像素。这种空间反样技术乎可以克服渲染

过程中所有样问题,然每帧渲染更多像素的代价却常。

的每个采样点通常是不重合的,因此如果我们能将这些采样点的空间

分布,分散地分布到各个时间帧中,就能实现和 乎样的效果,如图 所

,这正是分期超采样 ( )反样的基本

思路,由于这种反样技术由空间域变换到了时间域,所以分期超采样反样以及它

后来的很多变种技术,都简称为时间反样( , )。

Page 167: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

图 分期超采样反样技术的基本思路是将空间内个多个采样点分布到多个时间帧中,这使得它乎呈现和超采样样的效果。

P

i !iCi

+!1 +!2 +!3!0

frame0 frame1 frame2 frame3

准确来讲,分期超采样反样技术并不能称为时间反样。时间样通常是

指由于对时间域的采样不导致的样类型,真实的摄像机在捕捉光线的时候有

个快门时间,计算机渲染图像不管什么时候都是某个特定“静”时间的静

态图,因此时间采样不就会严重丢失某些信息,例如马车轮效应(

)。在计算机图形学中,对时间域的反样技术通常是使更多的时间采样

(更的帧率,或每帧渲染多个不同时刻的图像)来进混合,在这些样本点中,

变化的是时间参数。分期超采样虽然也是分布在多个时间内,但是它本质上仍

然是空间采样技术,因为它的采样参数是在空间域,它并没有对时间域进混合。

所以,本书中的 泛指以上这两种反样技术,读者需要根据不同的背景内

容来进区分。

静态场景

要使 技术,在不同的帧当中相同的像素应该被使个抖动( )

操作,以使当前帧的像素被移动到个超采样中采样点的位置。抖动的位移通常使

某种随机分布函数(第 章介绍)产,由于这些采样点全部会被混合起来,所以

为了达到更好的图像质量,该随机分布应该具有低差异性( ),采

样点的分布尽量铺满整个像素区域,在 和神秘海域 中他们均使

数列 ( )来产采样点的分布,如图 所。

参见:

Page 168: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

为了不影响渲染管线的结构及流程,这个像素的抖动操作通常发在顶点着器

中,通过直接修改投影矩阵,将原本正常的位于像素点中的采样点修正到偏移位置,

这可以通过如下的代码来对投影矩阵进修改:

通过抖动,产了和 样的空间域上的多个采样点。接下来,和

样,我们还需要个空间过滤器来对这些采样点进过滤,最简单的式是使

个盒过滤器,它对像素内所有的采样点求加权平均值,其形式如下:

st =1

n

n−1∑

k=0

xt−k

其中 st 表第 t 时间帧的最终混合结果,xt 第 t 时间帧单帧的绘制结果,它被

于显在屏幕上。这种混合式虽然简单,然它要求帧缓存存储 n 个时间帧的绘

制结果,这疑会耗费巨的内存, 使了

种递归指数过滤器( ),它直接使当前渲染的结果 xt

和之前所有帧混合的经过反样处理的历史结果 st−1 进混合,即:

st = αxt + (1− α)st−1

由于这种法常效,因此它被当前主流游戏引擎量使。这的混合系数

α 决定着图像由样到平滑过渡的快慢:较的 α 意味着每帧在总的最终图像中的

贡献越,最终图像则可以由更多采样点的混合决定,因此最终图像质量更,但

是它的逼近过程却很慢;反之 α 越,逼近过程越快,但是由于当前样的渲染结构

占据太的重,因此最终图像质量相对较低。神秘海域 中选择的混合

系数为 ,其 通道中的结果计算式如下 :

说明当 α 很时,指数逼近的结果和加权平均的结果是致的:

注意,对于静态场景直接使 函数,它不对纹理执任何过滤操作,由于静态场景中每个物体的坐标是完全不变的,因此这直接读取精确的结果,这不同于后动态场景使的 法,它需要对历史结果进过滤因此带来模糊,所以静态场景理论上可以对每个像素使穷多个不同偏移的采样点带来更精确的结果。

Page 169: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

st = αxt + (1− α)st−1 = α∞∑

k=0

(1− α)kxx−t

xt = xt−n ⇒ st =α

1− (1− α)n

n−1∑

k=0

(1− α)kxt−k

α→0

α

1− (1− α)n

n−1∑

k=0

(1− α)kxt−k =1

n

n−1∑

k=0

xt−k

那么 的混合计算应该在延迟渲染中的哪个阶段执呢?在神秘海域 中他

们在延迟着计算之后,对动态范围( , )的图像进时

间反样处理,然后将时间反样之后的 图像传给渲染管线的后续阶段,例如

调映射( )及其它后处理阶段。

动态场景

当场景是动态的时:例如物体移动,摄像机移动,光源移动或变化导致遮挡关系

发变化,还有量(在着器中)通过程序控制的何体(如海,头发等),这时

的处理开始变得复杂。对于 ,理想状态下,我们需要的是除了采样点位置

外完全致的两个像素点,然当像素被移动时,这切都可能发变化。

我们先来概述下动态场景带来三个最重要的问题,让读者先有个思路,然

后再分述每个问题的解决案。基本来讲,动态场景带来以下三个新的问题:

先,需要个额外的屏幕区域的缓存来存储每个历史颜的位置,这通过在

延迟着的 阶段通过将当前像素位置重投影到上帧中摄像机的变换矩

阵来计算,计算结果存储在 中供 使。

由于重投影的操作,我们需要在上帧图像的离散的屏幕分辨率中找出个位置来

对历史颜缓存进采样,这涉及到重采样( )的问题,因此可能使结

果变得模糊。

由于场景发变化,同位置的像素除了采样点位置外可能发了其它变化:例如

光源遮挡关系,像素颜值发变化,甚像素本是由着器中程序产的何

体,它直都在变化,这样的变化将可能导致重影的瑕疵。

以下我们详述每个问题的原因,解决思路以及解决法的细节,其中有些问题可

能有多种解决案。

Page 170: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

重投影

需要获取历史颜值,因此当场景发移动时,我们需要找出当前帧中每

个像素在上帧当中的位置,如图 所,这通过称为重投影( )的

技术的实现。

重投影的概念较早出现于 中,但

是他们不是被于反样计算,相反,他们发现这样个事实:即场景中相邻两

帧中部分像素的颜值都是连贯的( ),因此如果能够持续跟踪这些

没有发太多变化的像素,并将它们缓存起来,则下帧可以不再重新计算该

像素的颜,因此他们要实现的实际上是个缓存系统。

但是这两则的思路是致的,即都是通过找出当前帧像素在历史颜缓存中

的位置,然后对历史颜缓存进采样,只是采样后的值的途不致。所以,

这两者可以实现相同的技术,也因此它们拥有相应的由于重采样导致的模糊问题,

但是被作缓存的并不会有后讨论的重影现象。关于像素的连贯性还会被本

书后的其它些全局光照算法使。

图 需要知道当前帧每个像素在历史颜缓存中的位置,这需要对每个像素计算个移动量,然后在 中来对历史颜采样,注意由于发移动,场景中同位置的像素颜,深度,遮挡关系等可能发变化,例如第 帧的

点对应第 帧的 点由不可见变为可见。

q p

tt-1

为了计算当前像素在历史颜缓存中的位置,通常在延迟着的何通道中同时

计算出每个像素在上帧相对于当前帧的偏移位置,这称为个移动量(

),然后使个额外的颜缓存将偏移量直接输出到 中,为了保

证精度,通常使 格式。这需要在何通道中输以下数据:上帧的摄像机

信息以及上帧每个物体的本地到世界坐标的变化矩阵 mato2w,然后在顶点着器

中同时输出相邻两帧的顶点坐标到元着器中,即:

posproj posobj matwvp

posLastproj posLastobj matLastwvp

这些顶点坐标被光栅化处理后,就可以在元着器中计算每个像素的移动

量,并输出到 中供 使:

Page 171: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

posndc −posLastndc −

posLastndc−posndc −

需要注意的是,这需要使去除抖动的坐标(上帧的抖动值包含在摄像机信

息中),因为对于历史颜缓存,它存储的是每个像素中点位置的颜值,哪些

抖动的像素位置仅是来进不同的采样,然后这些采样点被按照像素中点的

位置进过滤,如果我们直接使抖动过的位置,则计算出的结果可能是两个完全不

同的像素位置;另点需要注意的是,由于在后的 阶段需要通过纹理坐标(即

的范围)来对历史颜缓存(个 纹理)进采样,所以我们需要在

空间计算移动量。

有了移动量缓存,在 中就可以直接对当前对历史颜缓存进采样:

然,与静态图像不样的是,由于光栅化计算出的像素坐标仅仅是个像素的

中点,所以当摄像机或物体发移动时,同样的点光栅化之后的坐标并不是完全样

的,它可能存在于个像素内的偏移,有时候甚被定位到了不相关的位置

。所以,对于历史颜缓存的采样不能直接使 函数,需要对其使

函数进过滤,这种过滤导致了最终颜变得模糊,尤其当历史颜缓存

累积的越多,它越被使了更范围的像素进过滤。因此模糊处理成为 的

个需要处理的重要问题。

模糊处理

中的模糊来源于在每次迭代中,对历史颜纹理的采样使了双线性过滤

器,这样历史颜的采样值来源于该像素周围 个像素颜值按定的权重例的加

权和( ),这些周围参与加权的像素的颜来源于更早历史周围的加

权和,以此类推,随着时间的增加,参与加权的像素的范围就越来越。

为了理解 中的模糊的原因,以及寻找解决案, 公式

表出了这种重投影的差:

σ2v = σ2

G +1− α

α

vx(1− vx) + vy(1− vy)

2

式中 σ2G 是个常数项,它表产抖动的随机数的差,v 表像素中距离

每个采样点的差值(如图 所)。由该式可以看出,影响重投影模糊的由两个因

素,它分别对应两种消除模糊的案。第是减少每个采样点到像素中点的距离

v,如图 所,v 越,则总的过滤过程向外扩散的范围越。针对此,较有效

的解决法是提分辨率,例如 就提供了种法,它对每个像

Page 172: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

素划分为 个像素,但是不需要每帧渲染 次,是将在四个像素独存储为

个缓存对象,每帧只更新个像素,然后将它们合并。

图 对历史颜缓存进双线性过滤采样时,周围每个像素距离像素中点的距离越,在多次迭代中参与贡献的像素的范围就越,图像就越模糊。

v=(0.5,0.5)

frame t-3 frame t-2 frame t-1 frame t

另个影响因素是混合因 α,如图 所,α 越,则历史颜的权重越低,

所有历史像素对模糊的贡献就越,所以算法应该选择较合适的混合因。

图 对历史颜缓存进双线性过滤采样时,混合因 α 越,则历史每个颜对总的图像的恭喜越,因此图像越清晰。

(1-a)3 (1-a)2 (1-a)

frame t-3 frame t-2 frame t-1 frame t

在 中,它们使了两种法来控制 α 以减少模糊。先是当像

素附近的颜对度较低时增加混合因,对度时(例如薄,边缘等频率

变化较的区域)减少混合因。在 中,混合因 α 并不要求总是个常数,

它可以针对不同的像素以及不同的时间帧使不同的混合因。

其次,为了进步减模糊,可以使个单独的通道以后处理的式对颜缓

存进锐化处理,这通过对颜缓存使个锐化过滤器( )来实现,例

如神秘海域 使以下过滤器来对周围 3× 3 的像素区域进混合:

⎢⎢⎣

0 −1 0

−1 4 −10 −1 0

⎥⎥⎦

它将对每个像素执类似如下的计算:

− − − −

这 是个限制函数,它将执过滤的结果限制在 的范围,因

为锐化过滤器的加权和并不为 。

Page 173: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

重影

最著名的问题是关于重影( )的问题,它使得历史颜值出现在了

物体运动的路径中,如图 所。

像素级别的颜变化 像素级别的颜变化

图 像素颜的变化导致历史上不在“合法”的颜值被混合进当前颜值,呈现出重影的效果,由于随着时间推移,历史颜值的权重逐渐降低,因此这种重影表现为种拖尾效果。(图 来 ,图 来顽狗作室)。

根据公式 ,我们可以推断出现重影的原因主要是由于像素的颜值发了改

变,但是历史不再“合法”的颜还是被混合进了当前帧的输出图像中,随着时间的推

移,历史颜值的权重不断下降,历史颜值逐渐变淡直乎眼法察觉,这就

形成个拖尾的效应。

这种改变的原因概可以分为两类:第类是整个像素的值发了变化,例如由

原来的可见变为不可见,这个时候历史上可见的颜值就会被混合进不可见的区域,

形成较强烈的重影,如图 所;第类是个像素内的局部颜发了改

变,即某些采样点的颜发了变化,这通常发于像素特性中,些地在

个像素尺内的频率域变化很(例如些超薄表,草地等),使得某些像素特

性法被渲染被历史颜所混合,这种重影即使在第类重影被适当处理的情况下

任然会发,例如图 就是第类重影被处理,但是崎岖不平的路中具有频

率变化范围较的法线的范围,仍然被物头像部分的历史颜所混合。

重影是由于历史颜缓存不在合法导致的混合结果,例如像素的可见性,颜,

何体 等发变化都会导致历史颜缓存中的颜失效,对于这类失效的历史颜

,它们不应该再被混合进当前颜中。所以,为了排除失效的历史颜, 需要

在混合时前判断历史颜是否失效,这同 中的边缘检测类似,可以使多种

像素的属性来进较,但是 中般选择 颜值进较。

Page 174: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

前业中 较流的是称

为邻域裁剪( )的案,这种案基于这样个假设:即图像

中的颜是连续的,历史颜缓存中的颜应该位于当前时间帧内邻域像素颜的范

围内。为此,业中这些案中最普遍的法是使个 包围盒在颜空间

内将当前像素的周围 3 × 3 个像素的颜包围住,这个 包围盒形成了个颜

范围,然后判断对历史颜缓存的采样是否落在了这个颜范围内,如图 所。

图 颜空间是个的平区域,它通常由

个三形构成,三形的每个边表每种颜空间的

三种原选择,在每个颜空间内,每个颜到三个顶点的原的例之和为 ,不同的颜空间能够表的颜数量不样,它们之间可以相互转化,但可能存在损失(图来

)。

460

480

500

520

540

560

580

600

620

x0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

y

0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9ProPhoto RGB

Adobe RGB 1998

sRGBColormatch RGB

SWOP CMYK

D65 white point

ProPhoto RGB

Adobe RGB 1998

sRGBColormatch RGB

SWOP CMYK

D65 white point

ProPhoto RGB

Adobe RGB 1998

sRGBColormatch RGB

SWOP CMYK

D65 white point

为了进步理解邻域裁剪,我们先需要了解颜空间的概念。颜空间 (

)是个度学( )中的概念,在度学中,个颜只有 三

个原混合成的,这三个原的混合例的和为 ,由于这个限制,所以 空间

的颜可以表述为 空间的颜范围,这个范围在 的颜空间上表现为个三

形,在每个颜空间内,每个颜值到三形每个顶点的例之后为 ,如图 所

,不同的 三原选择导致了不同的颜空间,从在整个颜域也具有不同

的颜范围。

不同颜区间可以相互转化,但可能存在定的颜损失。例如通常显器所能

表达的 颜空间就只能表个较的颜范围,因此为了保证亮度颜范

围能够被保留,通常颜之间的转换不是线性的,例如伽马矫正 ( )

就是种线性的颜空间转换,它能够保留更多亮度的颜区域。

这样,要表当前像素周围 3× 3 个像素的颜范围,我们只需要在颜空间上

使个 的多边形包围住这 个像素的颜值,如图 所,这为了简

单起见,仅使个三形,在实际中,这个多边形的顶点数量最多可以和所包围的

参见:

Page 175: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

像素的数量相同(这是 个,即个边形),显然,当前像素的颜应该处于该

多边形颜范围内。出于性能考虑, 使的是更

简单的 包围盒的形状,如图 所。

!"#$%

!"#&%

'(!)

*1

*2

*h

!"#$%

!"#&%

'(!)

*1

*2

*?

#+%,-(!./ #0%123456 #7%8899:3456

图 和 分别表以不同的何形状包围当前像素周围 3 × 3 个像素的颜范围, 表历史颜缓存,历史颜缓存的颜将被使双线性过滤获得个颜值,这个颜值如果落在了 或 的颜范围内,则表当前像素的颜没有发太的变化,历史颜可以被混合仅当前像素的颜中。

当我们计算出当前像素 xt 周围 3 × 3 个像素的颜范围之后,就可以对历史颜

的采样值(如图 )与该范围进较,如果该历史颜落在多边形包围盒之

内,则认为像素的颜没有发太变化,可以将 xt 与历史颜 st−1 进混合,如

图 中的 C1 点就是个合法的值。

当历史颜值 st−1 落在了多边形包围盒区间之外时,则表该像素位置的颜

发了很的变化,它们基本上可以认为是两个完全不同的像素,所以则不应该将其

进混合进当前颜中,如图 中的 C2 点。

然直接抛弃效的历史颜 C2 就会使得当前帧的最终颜仅包含个采样

点,它没有进过任何反样处理,从视觉上出现瑕疵。考虑到历史颜由有效变为

效的过程可以认为也是个线性的过程,因此我们可以找出在这个变化过程中,最

接近当前多边形包围盒范围的颜,如图 中的 Ch 点,我们可以认为正是从

Ch 点,颜开始变为效,因此 Ch 的颜可以混合进当前像素的颜中,由于

Ch 包含了很多历史信息,混合的结果将使得当前帧的图像输出更平滑。

在这个颜匹配的过程中,多边形包围盒 显然 包围盒 能

够包含更接近当前像素的颜,由于 包围盒仍然包含了很多效的历史颜,

因此它仍然具有些重影效果,这些重影多发在像素级别,如图 所。然

在 中执多边形判断的代价较,因此们寻找些折中的更有效的

法, 就是种改进的 包围盒颜范围。

其中, 使的是 颜模型, 是个压缩的颜模型,能够与之间进损的转换,但是 模型的其中个维度是亮度,所以它能够直接在亮度向

Page 176: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

图 差包围盒通过使邻域颜的期望和差来建个更接近邻域像素颜范围的矩形包围盒,提供计算性能的同时也增加了对历史颜的有效剔除。

!"#$%

!"#&%

'(!)

*1

*2

*h

!"#$%

!"#&%

*2

#+%,-./01 #2%334456/01

这种新的裁剪技术称为差裁剪( ),它先求出所有 3× 3 个

邻域像素颜的差,然后使差围绕期望值的变化范围建个 差包

围盒,如图 所。

要计算 差裁剪和,先针对周围 3 × 3 邻域的像素颜求出其差 σ

和期望 µ:

µ

σ – µ µ

然后 差包围盒的颜范围由以下式计算:

CAABB = µ± γσ

γ 值的决定了 差包围盒的,γ 越,重影效果就会越明显,实

践上通常取 γ 值为 。由图 可以看出差包围盒普通的 包围盒能够剔

除部分效的历史颜。

聚集几何缓存反走样

时间反样是当代主流基于延迟着的渲染引擎使的反样技术,它具有和

媲美的图像质量然只需要更少的存储占和计算量。尽管如此, 也临

着例如重影,模糊等较严重的问题,此外, 也不能有效地处理像素特征,例

如草地,动物的发等超薄超细的表,在这些表中,每个像素可能包括多七

上进裁剪,亮度度具有更的颜对度, 模型参见:

Page 177: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

个三形图元,例如图 所,像素特征是个不可或缺的指标,因此 往

往要结合 来处理像素特征。

图 像素特征是现代复杂游戏场景的重要特征,图中的树叶,桌布等红的区域包含常多的细节,每个像素可能包含多七个三形图元。

然,我们已经,能够有效处理像素特征的 技术对延迟着管线并不友

好,由于每个像素都需要存储对应的 数据,并且延迟着计算阶段要读取

所有 中的数据,因此,除了 本的着计算外,内存占以及读取

导致的带宽占严重制约了 在延迟着中的使。

为了减少延迟着计算阶段读取多个像素的何数据带来的带宽占,

等从纹理的前置过滤( )得到启发:如果多

个像素的何数据能够像多级纹理样使前置过滤的式提前将过滤的结果计

算出来,那么延迟着阶段就可以和 渲染样仅需要读取次何数据便

可以计算包含像素的特征,这样的思路将对何数据采样的采样率和着计算的频

率分离开来,不但减少了 带来着计算量,也减少了读取多个像素何

数据带来的带宽占。

等于第年 对该算法进了扩展,本节以该扩

展的版本为准,这种技术称为聚集何缓存反样( ,

)。在多级纹理中,低分辨率的纹理通过从级分辨率的纹理中提前过滤出

来,在 中,分辨率的采样点何数据被使前置过滤器提前过滤为个

称为何聚集( )的更分辨率何数据,每个何聚集对应

个像素内部分可见图元的覆盖率,深度,法线等相关表属性,经过前置过滤的

称为何聚集缓存( , )。

的处理过程包括 步,如图 所:

深度前向通道:在前向何通道使密度的采样率对每个像素的可见性进采

样,这步仅输出深度,法线何数据 中。

Page 178: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

!"

#$%&'()*

+,

-./0123456789:

!"

;<

=>?

@ABCDE

FGHCDEIJ

[8xKLMN]

OPQ%&R

OPQ%&S

'(TUV

[WIJ]

[2x'(]

IJ

XY!"Z[

-./01234 S\--

1 2

3 4

图 的整个渲染流程以及每个阶段的功能,输输出数据特征, 使前置过滤的式将采样率的采样点过滤为少量的聚集何数据,从降低延迟着技术的计算量以及带宽占。

聚集定义 按照采样点的深度和法线特征,将该像素内的所有采样点分成 c 个

聚集,每个聚集包含多个采样点。聚集定义仅表明每个采样点数据属于哪个聚

集,除此之外它不做任何其它处理。

成 使第个光栅化通道对何场景进渲染,但是此时开启早期

深度测试,并且设置深度较为等于,只要那些处于第步成深度值的像素才被

计算,在此阶段,每个像素的何数据被累积到根据聚集定义阶段定义的聚集当

中,此阶段输出 。

延迟着:在渲染管线的延迟着阶段,使 (不是 )进

着计算。

以下分别讨论 的每个阶段,以及相关的些技术细节。

高密度可见性采样

为了避免输出量的何数据占据量的内存, 在第个何通道阶段

并不输出所有数据到 ,仅仅是找出所有可见的像素,以及每个像素的

法线,这些信息将被于进后的聚集定义,如图 所。

此阶段使 持的多重采样技术(例如 8 ×MSAA),以保证够的何

细节被捕捉到,此阶段可以使最多每个像素 个采样点。每个采样点的法线

使相对于像素空间的 θ,φ 球坐标系统表,法线使个 的颜缓存存储。

Page 179: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

聚集定义

聚集定义( )阶段的标是使个簇分配算法分配每个像

素内的 n 可见的采样点到 c 个聚集当中,如图 所,这通过个计算着器

来实现,聚集定义阶段的输出是个采样点到聚集的映射关系,这个映射关系可以

使 d = n× 2(c) 位来存储,本节稍后会介绍。

图 的各个算法步骤,图中展了个像素的意图,其中第 步使个计算着器,它对每个像素使个实例,但是需要注意的是第 步处于分块着中,它的计算单位是个块( )不是个像素,同时在分块着中 的第 步和第步是合并的,聚集何数据成后即被分块着器使,这样节省不必要的数据输出和输,造成带宽浪费。

!"#$%

!"

&'(

&') &')

&'(

!"#$% !"#$%

(*+,-../--..+

0123456789

:*+;< =*+&'>?@AB

C;DEFGHI

!" !"

所有前置过滤技术都基于个假设,即所有被过滤的属性之间没有相关性(

),其中个属性是完全独于另个属性的,如果属性之间存在相关性,例

如个像素如果不可见了,则其它的属性都不应该参与过滤。在何数据中存在两

种相关性,个是和阴影(即可见性)有关,另个则是法线向。为了尽可能减少

这种相关性对聚集的影响, 使基于距离的分簇算法,因为我们可以假设在空

间局部范围内,像素之间的可见性和向倾向于致。

所以为了区分不同采样点之间的聚集所属关系,我们需要计算每两个像素之

间的距离,采样点 a 和 b 之间的距离 d 可以通过下式计算:

d(xyza, xyzb, na, nb) = |(xyza − xyzb)/k|2 +(1− nz · nb)

2

其中 k 是个常数来表最可以被标记为处于局部的距离,在原始论中他

们选择 k = 10cm。有了这个距离计算法,聚集定义的算法如下:

定 义 个 聚 集

深 度 缓 存 中 读 取 深 度 值, 并 将 它 转 化 为 位 置

计 算 所 有 采 样 点 的 平 均 位 置 和 平 均 法 线

定 义 第 个 聚 集 为 采 样 点s0, 它 是 个 距 离 平 均 距 离 最 的 采 样 点。

定 义 第 个 聚 集 为 采 样 点s1, 该 采 样 点 距 离s0有 最 的 距 离。

Page 180: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

着管线

通 过 找 出 距 离 已 知 距 离 的 最 距 离 的 采 样 点 来 定 义 其 它 聚 集

分 配 剩 下 的 采 样 点 到 这 些 聚 集

分 配 每 个 采 样 点 距 离 它 最 近 的 聚 集

为 每 个 聚 集 存 储 个 采 样 点 位 掩 码

每个聚集存储个与所有采样点的映射关系,如图 所,每个采样点对

于每个聚集拥有个为掩码。

图 每像素中每个聚集元数据的内存布局,这使 8 × MSAA 个采样点以及 个聚集,CS0 − CS7 表每个采样点,以及每个采样点在每个聚集分别拥有位来存储是否与该聚集映射。

A A0 1 A A0 1 A A0 1 A A0 1 A A0 1 A A0 1 A A0 1 A A0 1

CS CS CS CS CS CS CS CS0 1 2 3 4 765

Byte 0 Byte 1

生成几何聚集缓存

成聚集何缓存数据是 中最重要的步,也是该算法最核的部分。

基于多级纹理的前置过滤技术,所有前置过滤技术都基于个假设,即这些

量和个求和程的其它项是线性关的,使得它们可以被分离从来,以单独求其平

均值。多级纹理的过滤技术就是提前将多个纹素按照个的权重加权成个纹素,然

后直接供低分辨率的着程使。在着程中,多个像素输的何数据也

能够被分解成线性的组合,所以我们可以在着计算之前,将这些何数据进过滤,

按定的权重求其加权平均值,然后直接供着器使。

为了求每个聚集中对应采样点何数据的平均值, 使第个光栅化

何通道,它对整个场景的何数据以 n ×MSAA 的分辨率执次渲染,但是开

启早期(在元着器之前)深度测试,并设置深度测试为 ,这样就有那些

在前通道可见的像素才会参与元着器的处理。

聚集何缓存数据成阶段的主要的是将 n 个采样点的数据过滤到 c 个

(c < n)聚集中,这需要到标关光栅化( )技

术,这是 的 扩展 提供的

个功能,它可以对深度测试使更的采样率,对输出颜标使更低的分辨

率,在每个元着器仅输出到 c 个颜标中的个,这通过个标覆盖的位掩

码设置: 。

聚集何数据成阶段的伪代码如下:

设 置 渲 染 相 关 状 态

关 闭 深 度 写 , 并 且 设 置 深 度 测 试 为

开 启 早 期 深 度 测 试

Page 181: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

延迟着中的反样技术

开 启 模 板 测 试, 并 仅 使 第 个 通 过 深 度 测 试 的 采 样 点 通 过

对 渲 染 标 − 设 置

渲 染 场 景, 对 于 每 个 元 着 器, 找 出 它 对 应 的 聚 集 以 及 该 聚 集 对 应 的 所

有 采 样 点

读 取 元 的 覆 盖 率

从 聚 集 元 数 据 中 读 取 每 个 像 素 的 元 数 据

查 找

−计 算 与 传 统 延 迟 着 致 的 何 数 据

使 覆 盖 率 对 何 数 据 进 加 权 计 算

将 加 权 的 何 数 据 输 出 到 对 应 的 颜 标

对于般的光照模型, 中的部分何参数的聚集都是直接计算其平均

值来进过滤,只有对法线会使个特殊的式 进处理,这是因

为直接加权的法线并不定是归化的,强制归化会损失些信息,所以法线的

加权需要考虑其变化的期望和差来计算出个更好的归化加权结果。

延迟着色计算

中的聚集何缓存数据成阶段,以及延迟着阶段通常是合并在起

的,这样聚集何数据直接可以供着计算使,避免不同通道缓存数据的输出和输

。在 中这两个阶段被放在分块着中

按个分块的单位进处理。

尽管 的核思想常优秀,但是前该技术还处于较早期使阶段,

仅针对少数较简单的光照模型有验证,该技术还需要业中量的实践和改进。

中些较常见的问题可以通过提聚集数量来改善,但是由于所有前

置过滤的何参数依赖于个相同的光照模型,所以 仅适于较统的光

照模型,如果个像素中的多个采样点分别拥有不同的光照模型,则结果可能法

被正确呈现,这是该技术标最的弱点以及需要改进的地。

Page 182: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 183: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

蒙特卡洛方法

Page 184: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 185: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

路径追踪技术

Page 186: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 187: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光子映射

Page 188: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 189: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

梅特波利斯光照传输

Page 190: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 191: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

辐射度理论

Page 192: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 193: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

即时辐射度

Page 194: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 195: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

预计算辐射传递技术

Page 196: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 197: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

辐射照度缓存

Page 198: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 199: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

光照传播体

Page 200: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 201: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于体素的全局光照

Page 202: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 203: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

基于距离场的全局光照

Page 204: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 205: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

虚幻引擎的渲染系统分析

Page 206: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 207: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

参考文献

Page 208: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

参考献

Page 209: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

参考献

Page 210: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

参考献

Page 211: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

参考献

Page 212: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 213: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

专有名词索引

中文索引

Page 214: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

中索引

Page 215: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

中索引

上取整函数

下取整函数

乱序执

交叉多线程

交叉边缘

亮度

低差异性

保守光栅化化

光源分配

光源剔除

光照计算

全屏反样

内存合并

内核函数

冯·诺依曼架构

冯·诺依曼瓶颈

何缓存 ,

何聚集

何聚集缓存

何样

何样

凸光源

分块着

分预测

分期超采样

分段线性

分簇着

前向分块着

前向着

前置过滤

加权和

包围体层次结构 ,

协作处理器

单指令单数据

单指令多数据

单程序多数据

反样

同时多线程技术

后期处理

填充通道

壳通道

多处理器架构

多指令单数据

多指令多数据

多重采样

多重采样反样 ,

多重采样反样

型着器

像素

像素

像素形态反样

像素特征

纹理

视椎体

存储体冲突

寄存器组

对等多处理器

屏幕空间

带宽

常数步幅

延迟

延迟分块着

延迟着

延迟隐藏

Page 216: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

中索引

弗林分类法

形态反样

执引擎

抖动

指令管线化

指令级并计算

控制单元

操作数前移

数字信号处理

差裁剪

分组合查询表

分选择

时分多线程技术

时间反样

时间样

时间过滤器

最近最少使算法

本地存储

材质

条件转移

架构状态

每秒浮点数计算次数

法线剔除

流处理器

流处理器族

深度不连续

混合权重

渲染

渲染程

特别计算单元

标关光栅化

直接内存存取

相关性

着管线

着样

移动量

空间反样

空间样

空间过滤器

等待执状态

算术逻辑单元

管线泡

系统数据总线

索引键值

累积缓存

线程束

缓存致性

缓存命中

缓存失效

缓存

聚集何缓存反样

聚集定义

度学

调映射

虚拟纹理

观察空间

视点相关的

视锥体素 ,

样的图像

超线程技术

超采样

超采样反样

距离递减函数

轮廓

边沿检测

Page 217: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

边缘检测

过度绘制

过滤

连贯的

适应性双阈值

逻辑处理器

采样

重建

重影

重投影

重采样

锐化过滤器

锥型

阈值

障碍

对等多处理器架构

积纹理

页表

预取

预取器

频率域

频率带宽

颜不连续

颜变化

颜空间

马车轮效应

光扩散系数

动态范围

级可编程打断控制器

英文索引

累积缓存

适应性双阈值

级可编程打断控制器

聚集定义

聚集何缓存反

样的图像

分期超采样

反样

架构状态

积纹理

算术逻辑单元

对等多处理器架

带宽

存储体冲突

混合权重

, 包围体层次结

分预测

分组合查询表

分选择

缓存致性

缓存命中

缓存

缓存失效

上取整函数

Page 218: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

英索引

索引键值

分簇着

连贯的

颜不连续

颜空间

颜变化

度学

条件转移

锥型

保守光栅化化

常数步幅

控制单元

凸光源

相关性

交叉边缘

延迟着

深度不连续

数字信号处理

直接内存存取

距离递减函数

边沿检测

边缘检测

执引擎

填充通道

过滤

每秒浮点

数计算次数

下取整函数

弗林分类法

前向着

频率带宽

频率域

, 视锥体素

全屏反样

何样

何聚集缓存

何聚集

何样

, 何缓存

重影

数列

障碍

动态范围

超线程技术

指令管线化

指令级并计算

交叉多线程

抖动

内核函数

延迟隐藏

延迟

最近最少使

光源分配

光源分配

光源剔除

光照计算

本地存储

逻辑处理器

低差异性

亮度

材质

内存合并

形态反样

移动量

多指令多数据

多指令单数据

多处理器架构

Page 219: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

英索引

, 多重采样反

多重采样

法线剔除

操作数前移

乱序执

过度绘制

页表

分段线性

管线泡

后期处理

前置过滤

预取器

预取

寄存器组

等待执状态

重建

渲染

重投影

重采样

采样

屏幕空间

着样

着管线

锐化过滤器

壳通道

轮廓

同时多线程技术

单指令多数据

指令单数据

单程序多数据

空间样

空间反样

空间过滤器

特别计算单元

光扩散系数

流处理器族

流处理器

视椎体

像素

像素特征

像素形态

反样

像素

纹理

超采样反样

超采样

对等多处理器

协作处理器

系统数据总线

标关光栅

时间样

时间反样

时间过滤器

时分多线程技术

线程束

阈值

延迟分块着

分块着

调映射

型着器

差裁剪

视点相关的

观察空间

虚拟纹理

Page 220: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

英索引

冯·诺依曼架构

冯·诺依曼瓶颈

马车轮效应

加权和

Page 221: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬

数学概念索引

Page 222: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬
Page 223: 全局光照技术:从离线到实时渲染 - theGIbookthegibook.com/wp-content/uploads/theGIbook.pdf · 2017. 10. 23. · *QTv`B;?iÜkyRd秦春林 本电⼦资料为《全局光照技术:从离线到实时渲染》(暂定名)⼀书部分试读稿件,作者出于与读者交流⽬