Skip to main content

前 言

我猜大部分读者第一次翻开一本新书的时候,会首先定位到目录部分,寻找自己感兴趣的内容,如果发现一些或者甚至部分章节的内容是自己不太熟悉而又正渴望学习的,这个对口的内容基本上决定了购买兴趣;接下来的动作则是定位到书中对应这些章节的地方,感受作者的写作风格,知识点讲解的精准性与难易度等,这两个动作决定了这本书在他心目中的份量。

而我却习惯于通过前言部分来获得对一本书的期待程度,其原因是因为知识的逻辑性比知识本身更重要。那么什么是知识的逻辑性?实际上这是我自己的一种思考,并未在什么地方看到过这样的概念。在我自己的体会中,学习知识分为两个方面,其一是一个个具体的知识点,例如C++语言的多态性;第二则是关于这些知识点之间的联系,我把它称为知识的逻辑性,知识逻辑性获取的难度要远远大于知识本身。科技的进步是知识的累积的结果,这意味着我们这一代人需要比上一代人学习更多的知识,随着这种量的增加,我们越来越多地需要去梳理这些庞杂知识点之间的联系,才能真正地理解和掌握一门技术。而通常,我们需要大量的阅读量才能总结出这些知识点之间的逻辑联系。

那么我到底想说明什么呢?首先在一本书中,各个章节通常还是偏重于讲述知识点(在局部知识点范围内通常很难清晰地描述全局知识逻辑性),所以在我看来,一本书最适合描述知识逻辑性的地方就是一本书的前言部分。有时候我通过一本书的前言部分,就能对我过去一些零散知识点形成一个更好的认识和归纳;其次,由于每个人的知识逻辑性是不一样的,因此针对同样知识点的两本书,作者可能分别从完全不同的角度来讲述和理解,这其中反应的正是作者建立他的知识逻辑性的过程,这也可以间接用作这本书质量的一个权衡量。通常知识逻辑性更强的作者更倾向于在前言部分描述他建立自己知识逻辑性的过程,这甚至有时候比他书写某个章节的内容更痛快。

客观地说,这个世界上已经不乏优秀的计算机图形学书籍,例如实时渲染的经典书籍《Real-Time Rendering》1,离线渲染中聚焦于光线追踪算法的《Physically Based Rendering: From the Theory to Implementation》[^b:pbrt],讲述高级全局光照的《Advanced Global Illumination》[^b:AdvancedGlobalIllumination],还有大量讲述关于OpenGL,Direct3D等业界主流底层图形接口的,以及各种针对高校学生偏重理论基础的计算机图形学教材。那么我们为什么需要另外一本计算机图形学的书籍?

本书的逻辑

我在大学本科的专业不是计算机科学技术,那个时候只是出于对计算机的兴趣,以及在那个年代计算机互联网蓬勃发展的背景下,我选择了要在毕业以后从事软件开发相关的工作,并且在大学阶段后两年的时间,我几乎将所有时间和精力用于学习计算机相关的知识。然而这仅限于传统的软件编程,直到工作两年之后,我才真正开始计算机图形学相关知识的学习。

在这期间,我阅读了大量关于计算机图形学的书籍和论文,从各个高校的一些经典教材,到各类以OpenGL等图形接口为核心的实践性比较强的书籍,以及这些图形接口的官方API文档等。我发现计算机图形学学习起来非常困难(尤其对于一个非计算机科学专业背景的人),不仅因为其知识点繁多,也跟当前市面上相关书籍的总体情况有关。

目前关于计算机图形学的书大概可以分为三类:第一类(也是数量最多的一类)以各个分散的理论为基础,按类别逐个介绍各个知识点或者渲染过程中的某个阶段,各种大学的计算机图形学教材大都是这一类,前面提到的《Real-Time Rendering》也是属于这一类。这一类书籍是开始学习计算机图形学最好的入门资料,可以逐个了解计算机图形学相关的各种概念。然而这类书籍的缺点是缺乏系统性,读者很难对渲染过程有个整体上的认识,这种知识逻辑性的缺乏反过来会制约对某些概念的理解。

第二类书籍以图形接口如OpenGL等为基础,围绕传统的渲染管线来介绍计算机图形学的各个概念,这类书籍通常具有一些完整的示例,读者能够对经典的渲染管线有一个总体认识,并对各个理论知识点在渲染流程中的运用有一些理解,反过来会促进知识的逻辑性。然而实际工业中使用的渲染方法会比经典的渲染管线要复杂得多,例如它可能需要分多次渲染,每次生成最终结果的部分内容,最后进行合成,例如对动态和静态物体的分开处理,对阴影的处理,对间接光照的处理,以及最后对全屏环境遮挡的处理等;另外,很多工业中使用的渲染方法都需要许多特定的数据支持,这可能需要渲染管线读取GPU中特定格式的数据并使用特定的算法来实现渲染的某个阶段或过程,这些方法的理论一般是这类书籍不会涉及的。

第三类书籍则综合计算机图形学理论以及图形硬件环境,图形硬件API等,详细阐述一个完整,系统的渲染解决方案。我认为此类书籍最有利于构建知识逻辑,因为其不光告诉我们怎样使用图形API来实现光照计算,它更能清楚地告诉我们,各种计算机图形学概念怎样被运用在实践中,读者就能够轻易地理解每个理论的作用和机制,针对同一个问题,读者甚至也许能够提出自己的思路,使用不同的理论方法来解决这个问题。只有在这样的条件下,构建起属于读者自己的知识逻辑,才能真正系统性地理解计算机图形学,从而更有效地进一步学习以及解决工作中的实际问题。本书正是试图属于这类书籍。

由于渲染过程的复杂性(例如一个渲染器要实现场景表述,坐标变换,表面着色,对函数的采样,各种全局光照模型,光源等等,其中全局光照模型部分尤其复杂),尤其是在实时渲染领域,全局光照不能通过像光线追踪一样单一的解决方案实现,而需要融合多种方法,其中每种方法可能只实现一种单一的全局光照效果(如软阴影,环境遮挡,反射,次表面散射等等),这些细节通常不是一本书能够覆盖的,这几乎相当于是从渲染的角度讲述一个完整的游戏引擎的实现。这类书籍又可以分为两个小类,其中第一类以光照模型相对比较单一的离线光线追踪(见本书第chp:path-tracing章)为基础,它通常附有比较完整的源代码实现,这类书籍的经典代表是《Physically Based Rendering: From the Theory to Implementation》,本书则是属于第二小类书籍。

为了帮助读者系统性地建立知识逻辑,同时讲述除光线追踪以外更多更复杂的光照模型,第二小类书籍大多以理论为基础,而忽略可能非常繁琐的细节(这些细节可能远远超过一本书的篇幅)。这类书籍的经典代表作之一是《Advanced Global Illumination》,它着重于讲述光线追踪和辐射度两大基本的渲染方案,并且简要介绍了结合这两种理论各自优点的一些混合方法,例如双向路径追踪,辐射照度缓存等等;另一本聚焦于光子映射算法的书籍《Realistic Image Synthesis Using Photon Mapping》[^b:RealisticImageSynthesisUsingPhotonMapping]也值得一阅。

我们看到这两个小类的书籍各自拥有自己的优缺点:第一类具有比较完整的示例帮助读者构建更具体的知识逻辑,但是其内容限于比较单一的光线追踪模型;第二类能够覆盖更广泛的光照模型,但是其很难在一本书的篇幅内详细讲述其实现细节。那么有没有可能综合它们各自的优势呢?

随着计算机硬件性能的不断提升,计算机图形学正经历着飞速的发展。每年的SIGGRAPH图形学专业会议都会产出几百篇计算机图形学论文,这些论文大都由一些高校,从事基础图形学理论研究的机构,或者计算机产业中从事图形硬件及接口相关的公司(例如AMD,Intel,Nvidia等)发表,每篇论文大都是一些计算机图形学基础理论的工作。这些基础理论然后被一些从事游戏开发,电影动画及特效,游戏引擎厂商等融入进图形渲染工具中,与其他方法一起形成各种完整的光照解决方案。这些高层的解决方案的结果通常在GDC及其类似的专业会议上,以非正式的演讲的方式释出。

所以光照模型最前沿的解决方案,来自于那些工业级的顶级游戏公司(如顽皮狗),游戏引擎厂商(如CryEngine,Frostbite,Unreal Engine等)以及动画电影公司(如Pixar,Disney等)。围绕这些工具及产品来讲述计算机图形学,不仅能够兼顾到各种各样前沿的实现方案,读者还能够通过使用这些产品去了解该实现的最终效果和功能。

本书正是基于这样的理念来编排整本书的内容:我们以当前业界最前沿的一个个完整的全局光照解决方案为核心内容,通过结合讲述使用这些解决方案的工具及其产品的特性及功能,来达到更系统性地学习计算机图形学的目的,帮助读者更好地构建自己的知识逻辑。

全局光照

全局光照几乎代表了计算机图形学渲染相关的全部内容,它是一个渲染器力求模拟真实物理世界关于物体表面交互的全部自然现象的全部内容(当然目前计算机图形学研究领域主要限于几何光学,它并不包括更微观的如干涉,衍射等光学现象,参见第1章的介绍):即光从光源出发,以无限的速度在环境中直线前进,经过与表面发生多次反射和折射,最后进入人的眼睛形成图像。

然而由于渲染方程是一个沿全空间方向的积分,这使得渲染过程非常耗时,在现有的硬件条件下几乎不可能按照原始的渲染方程进行图形渲染。不过研究发现,我们并不需要完全按照原始的渲染方程进行计算,即可以生成令人信服的图像,在这个级别我们通常称为Realistic Rendering。于是人们寻求简化的光照模型以求能达到这种渲染品质,在原始渲染方程的基础之上,人们提出两种简化模型**。**

  • 基于有限元分解的辐射度理论 有限元分解是一种常见的积分计算方法,它将一个沿连续空间的积分分解为一个有限纬度(称为一个有限元)的积分,在每个纬度,我们只需要求出该有限元的均值,并可以很容易地计算出光照积分方程。在辐射度理论中,通常我们通过Monte Carlo等方法预计算出每个有限元的均值,供渲染时渲染方程的实时计算。
  • 基于蒙特卡洛方法的光线追踪技术 蒙特卡洛方法通过随机采样,使用有限个采样点的值,来计算积分方程的值。

这两种方法均能达到非常高的图像品质,但其计算仍然十分耗时,因此主要用于电影等离线渲染领域(例如Pixar的RenderMan就是基于光线追踪的渲染器)。在游戏等实时渲染领域,人们寻求更简化的渲染模型,与辐射度和光线追踪技术通过简化积分方程的思路不同,实时渲染领域的主要思路是根据光学现象或者其他理论拆分渲染方程,使得光照效果最终由多种效果叠加而成,例如直接光照(光从光源出发经过物体表面反射或者折射一次后进入人眼),(软)阴影,漫反射,光泽反射,间接光照,环境遮挡,次表面散射,环境贴图,反射等等。

这些效果可能分别使用不同的方法来计算,例如阴影可以使用GPU的光栅化特性来计算,环境遮挡可以在后处理阶段基于屏幕空间进行计算,环境光照则可以使用简单的贴图实现;另一些算法则使用一些特定的数据格式来加速其中的一些计算,例如Unreal Engine 4对整个场景构建一个距离场的数据结构,通过它来加速遮挡关系的计算从而实现软阴影以及环境遮挡等效果,其他一些方法则通过使用球谐函数来存储一些点的近似的“环境函数”,从而能够快速地计算各种间接反射的效果。

计算机图形学可能是计算机领域最活跃的领域之一,研究人员(尤其是实时领域)和工程师一直在致力于开发新的技术来加速光照的计算,这使得图形学的内容和分支越来越庞杂,初学者想要掌握这些知识必需要花费大量的时间和精力,才能理解这些技术之间的关系,优缺点等,从而更好地改进产品的渲染性能及品质。这就需要非常具有知识逻辑性的书籍来加速工程师对计算机图形学的掌握和运用。

反过来,一本以全局光照为核心内容的书籍,必须要覆盖到以上这些提到的各种各样的图形学理论。所以通过本书,读者能够更系统地综合学习和理解各种计算机图形学的基础理论知识。

本书特点

尽管从以上的说明读者可能已经基本了解本书的写作风格及内容,为了便于读者更简单快捷地了解本书的特点,并通过这些特点来决定是否需要进一步阅读这本书,这里还是将本书的特点更清晰地总结如下。

  • 知识逻辑性强,覆盖面广 一个完整的全局光照解决方案,要充分考虑渲染的各个方面,从游戏场景元素的几何表述,用于光照计算的(CPU和GPU)数据内存结构,到各个渲染通道,每个通道的每个阶段,各种光学现象的实现等,它几乎囊括了大部分图形学的知识。因此读者能够通过对完整的全局光照模型的学习,建立起极强的计算机图形学知识的逻辑和系统性认识。
  • 覆盖业界最前沿的图形学知识 计算机图形学领域近些年虽然发展非常快,但是其基础理论几乎没有太大变化,这些变化大多体现于工业中(例如对现有算法的改进,使用一些额外的数据结构来加速实时计算等),所以这些变化通常不会反应在以计算机图形学理论为基础的书籍中,但本书讲述当前工业中使用的游戏引擎及中间件等产品的全局光照实现,所以它能够覆盖最前沿的图形学知识。
  • 详细分析各大渲染器,实用性强 本书从第chp:path-tracing章起,几乎每章都是围绕一个或多个游戏引擎工具,或者某些中间件产品的全局光照方案进行介绍,在学习这些全局光照方案的同时,读者也能够学习这些工具的特性及原理,从而更好地理解和使用这些工具。本书覆盖了Pixar的RenderMan,Disney的Hyperion等离线渲染工具,Unreal Engine 4,CryEngine 5,Unity 5等业界主流商业游戏引擎,此外本书还介绍了Enlighten,PowerVR公司图形处理器的Ray Tracing等中间件的实现和使用,同时覆盖这么多工业级的产品,对于积累读者的专业经验以及扩大知识面都是极为有益的。
  • 循序渐进的方式学习不同的全局光照模型 这些各种不同的全局光照解决方案彼此之间并不是完全独立的,它们有着极强的关联,读者能够从一种解决方案中看到另一种方案的不足,一种解决方案可能是另一种解决方案的改进和优化。例如路径追踪是与摄像机视角相关的,因此改变视角则需要重新计算,而辐射度方法则与摄像机视角无关,因此它可以将数据预处理,并且能够实现渐进式计算(即将复杂的计算分布于多帧中,每帧计算一个增量并累加至一个精度更高的结果);为了加速光线追踪计算,与路径追踪直接从物体复杂的几何表述中获取光照信息不同,光子映射方法则将光照信息存储为一个独立的数据结构(称为光子图),通过路径重用来大大加速了光线追踪的计算。我们可以看到,这些不同的全局光照模型之间的联系本身也能促进我们更透彻地理解这些概念。
  • 实时和离线渲染相结合 大多数关于计算机图形学的书籍,都是专门针对实时或者离线渲染领域,例如《Real-Time Rendering》针对实时渲染,而《Physically Based Rendering: From the Theory to Implementation》聚焦于离线渲染。而客观的事实是,实时和离线渲染同属于计算机图形学领域,它们只是在当前硬件水平下针对实时性需求的划分,因此,不仅作为渲染工程师我们需要同时掌握实时和离线渲染,另一个事实是,实现渲染中的静态光照贴图,其他一些预处理数据等都是需要借助于离线渲染来实现;此外,很多实时的全局光照模型都是从离线渲染模型优化,改进而来,学习离线渲染对实时渲染中相关概念的理解有极大的帮助。因此本书不特别区分实时和离线渲染,当然我们会特别说明每个光照模型的实时性。
  • 符合按需学习知识的过程 很多书籍都是按照知识模块的分类进行章节划分,一个知识点接着一个知识点,先讲解理论知识,最后再把这些理论用于实践当中。而人类的学习特点通常是首先遇到问题,然后再去寻找和学习解决该问题相关的知识。在本书中,我们并不在前面的章节首先按模块介绍后面的章节会使用到的基础理论,而是围绕一个全局光照模型为核心,然后在需要的地方学习对应的基础理论知识。例如当需要学习光子映射的时候,我们才会介绍核密度估计;当需要学习辐射度方法的时候,我们才会介绍小波变换(当然本书还是在前两章首先讲述本书会涉及的最重要和基础的知识)。这也是我平时的学习方法和习惯。

此外,本书还列出百多篇本书写作期间参考的论文及书籍资料,并在书中每个地方指出具体的参考论文供读者进一步阅读,相信这些资料能够大大丰富和完善读者的知识量。

写作范围

本书定位于计算机图形学领域的中,高阶书籍,虽然全局光照技术涉及计算机图形学的各种基础理论,但是本书并不会对这些基础理论做深入的介绍,相反,本书假设读者对这些基础理论有一定的了解,例如读者要能够明白贴图的原理及实现方法,顶点及像素着色器的作用,光栅化等等基本概念。

本书聚焦于各种全局光照解决方案的实现思路,例如它需要的内存数据结构,它涉及的渲染通道以及每个通道的作用,光照模型工作的流程,它的核心算法使用的基本公式及原理;此外,本书还特别讲解每种全局光照模型对特定的光学现象的实现及不足。总之,本书更偏向于讲解每种全局光照模型的实现原理及过程,而非每种图形学相关的概念本身。

章节概要

第1章:光与表面的交互 介绍计算机图形学最基本也是本书的基础知识,包括全局光照中的各种现象,渲染方程中的各种度量,光与表面的交互,渲染方程,BRDF以及基于物理的渲染相关的理论。这些计算机图形学基础知识是与具体的全局光照模型以及所使用的图形接口及图形硬件的特性无关的。

第2章:并行处理器架构 本章介绍图形处理器硬件相关的知识,例如GPU的并发处理,内存模型,数据在GPU的存储等。

第3章:着色管线 本章从单纯着色管线的角度,抛开图形接口与其他全局光照算法,讨论一般的着色管线,光照管理与着色渲染的流程等。

第4章:蒙特卡洛方法 蒙特卡洛积分是路径追踪的核心基础,它也是计算机图形学中广泛用于各种预处理数据计算的工具。蒙特卡洛方法通过使用随机模拟对积分函数进行采样,利用有限的采样点来近似无限元积分方程的值。本章将介绍概率论基础,随机变量的定义,期望,估计,蒙特卡洛积分的推导,对随机变量的采样方法,以及减少随机采样方差的方法。

第5章:路径追踪技术 光线追踪几乎是现代整个图形学的基础及未来,不仅当前电影产业的主要图形学技术大都使用光线追踪技术实现,在实时的游戏引擎内也大量涉及光线追踪技术的使用。本章还会特别介绍Disney于2014年开发的全新渲染器Hyperion。

第6章:光子映射 光线追踪技术是完全与场景的几何关系绑定的,对于每一帧都需要重新计算。光子映射的思路就是要解除这种耦合关系,它将场景中所有的光照能量存储到一个称为光子图的数据结构中,然后每个点可以根据周围光子的密度进行估计,当然光子只存储在漫反射表面上,因此它通常还需要结合光线追踪等其他技术一起工作。

第7章:梅特波利斯光照传输 梅特波利斯算法是近代科学与工业中非常重要的一种实践方法,在光线追踪技术中它被用于寻找非常难以被捕捉的路径,也应对非常复杂的场景。

第8章:辐射度方法 对于静态场景,如果我们能够预先计算出一些区块的光照的平均值,则可以大大加速光照计算。然而较大面积区块的平均值降低了光照的频率,因此辐射度理论假设场景中的表面都是漫反射表面,并且仅适用于频率比较低的间接光照等,但好处是其丧失了方向性,与摄像机位置无关而可以被预处理。虽然辐射度方法适用于静态场景,但是本章也介绍一些技术能够动态更新这些“预处理”计算。此外,Unity等游戏引擎使用的中间件Enlighten也是完全基于辐射度理论来实现的。

第9章:即时辐射度方法 IR的简单实现就是先对所有光源执行一次粗粒度渲染,将这个渲染的结果看成看成多个虚拟点光源(Virtual point light),然后用所有这些粗粒度的点光源对场景进行绘制,以获得间接光照。IR的前提仍然是漫反射表面,因为只有低频的漫反射表面才能使用这种粗粒度的表述。然而和采样类似的问题,IR受限于VPL的数量,本章介绍了一些优化思路,例如在场景变化比较复杂的部分增加VPL的数量,或者从观察的角度来改变采样的重要性等。

第10章:基于预计算的全局光照技术 当前工业中主流的实时渲染全局光照技术大都是基于某种预计算的,本章总结了常用的预计算技术,例如光照贴图,体积光照贴图,光照场探针等等技术,并且详细介绍了相关的数学基础概念,即球谐函数以及函数的投影和近似。

第11章:基于体素的全局光照技术 基于体素的全局光照技术是一种完全实时的渲染技术,它通过将场景体素化为一个多分辨率的体素结构,然后过滤以及体积渲染相关的概念来简化场景的表述和光照计算,使得实时计算的性能要求得到满足,这种技术已经被CryEngine 5和Unreal Engine 4等游戏引擎支持。

第12章:基于距离场的全局光照技术 距离场是一种隐式表面表述,它能够用于加速光线与表面的相交计算,因此在Unreal Engine 4中被用于快速执行可见性相关的计算,例如软阴影和环境遮挡。除此之外,距离场作为一种一般的场景表面表述方法,它还被用于其他很多不同的应用中,本章还介绍了移位映射等相关应用。

读者群体

本书针对的读者群体主要为与计算机图形学相关的学生,教师,研究者,研究机构,游戏开发工程师,正在或者希望使用RenderMan等离线渲染器,或者Unreal Engine 4,CryEngine 5, Unity 5等游戏引擎开发各种产品的开发者,以及其他行业与图形学有关的从业人员,例如影视动画行业等。

阅读本书,读者需要具备本科或大专及其以上学历,或者对线性代数,微积分等大学基础课程具有一定理解的同等基础的人员;本书定位为计算机图形学领域的中,高阶书籍,因此读者最好对计算机图形学基础理论有一定的了解,熟悉一般3D渲染的概念。

本书可以作为学习计算机基础理论的资料,更可以用来巩固自己已有图形学知识,系统性地理解这些基础理论在工业中怎样被实际运用。

关于专业词汇

按照中文出版惯例,中文书籍当中的英文专业词汇应该全部翻译为中文。然而出于以下原因,本书采取保留所有英文专业词汇。

  • 有大量的计算机图形学专业词汇并没有完美的中文翻译,例如Post Processing翻译为后处理并不能准确表述其意,这在某种程度上不仅使得文句意思晦涩,更容易使读者对其知识点没有更精准的理解。
  • 在计算机图形学领域,大部分的书籍,文献和专著都是以英文书写的,在读者的后续学习,以及甚至在本书的学习过程中,常常会需要查阅更多的英文资料,因此保留英文专业词汇更利于后续学习。

当然,本书中保留的英文词汇仅限专业术语,即名词。对于一个术语用作动词的情况,本书仍然会选择使用更精准中文文句来描述其意义及过程;同时,对于部分具有完美翻译的专业词汇,按照本书的思路仍然将保留英文形式;另外,对于某些英文书籍或文献,其可能已被翻译为中文资料,为了便于查阅,本书仍将提供英文名称,读者需要自己查询是否具有相关中译本;最后,对于所有这些专业词汇,本书的索引部分会有全书的引用位置供读者查阅。

勘误及更多资源

在本书的写作期间,虽然我尽最大努力保证本书逻辑的严密性,内容的准确性以及表述的清晰性,然而由于近几年计算机图形学技术的更新速度非常快,以及我个人知识及经验的局限性等,本书不可避免会存在一些错误。在此,我向各位读者首先表示真诚的歉意!

当您在阅读期间发现任何错误,我恳请您能够稍微花一点时间将这些错误反馈给我,因为我希望这本书会作为一本相对优秀的教材被精心的更新下去,所以您的每一个反馈一定会被认真对待以使后续的内容能够更加准确,从而造福更多的读者。为此,我提供了一个与本书配套的勘误网站用来提供勘误以及其他信息,您也可以订阅该网站的邮件列表以得到最及时的勘误通知:

https://github.com/thegibook/revision

除此之外,为了方便读者之间就本书的内容进行讨论,本书特别设立了一个本书的读者交流中心,大家可以在这个论坛就书里的内容进行更有针对性的交流,学习甚至延伸扩展:

http://readers.thegibook.org

最后,您总是可以从本书的官方网站获得本书的最新动态,作者的最新博客文章,以及作者推荐的一些相关学习资源等资讯:

http://www.thegibook.com

致谢

没有一件伟大的事情是一个人完成的,即便一个人完成了其中大部分的实施工作,但是没有其他人的一些鼓励或者认同,这件事情也将是毫无意义的。

这本书耗费了三年多的心血,这期间我没有参加任何工作,如果没有家人的鼓励和支持,这件工作是永远无法完成的,我要感谢爸爸,妈妈和妹妹一直以来对我的包容,理解,鼓励和支持,我一直都在为拥有你们而骄傲。

这本书在写作的初期阶段就有幸得到很多同行朋友的支持和认同,其中我们在2017年中发起了本书的试读众筹,470多名同行参与了此次众筹活动,这不仅是对图书内容的认可,对我也是一个巨大的鼓励和鼓舞,在此对你们的支持表示感谢,所有这些支持者名单可以从官方网站看到。

还要感谢罗丁力,大钊,王祢,幽玄,杨哥,罗登导演,Liaoer,杨世玲等对本书写作的支持,宣传以及一些交流反馈,还有很多朋友的名字没法一一列出。感谢“全局光照技术”QQ群里各位群友陪伴我的整个写作过程,你们不厌其烦地围观着我不停地关于图书写作的唠叨,缓解了我很多的压力,没有你们的陪伴,这段旅程就会更加枯燥,感谢你们。

感谢摩点网,本书前后在摩点网发起了三次众筹活动,这对本书的宣传和传播起到了重要的作用,也提供了读者和作者之间在创作阶段的一个交流的方式和平台,摩点网是一家支持优秀创作的众筹平台,对你们的工作以及对图书的支持表示感谢。

另外还要感谢引擎世界社区,他们从最早的试读众筹到现在的整个创作过程中,一直都无私地将这本书介绍给引擎世界的朋友,在此表示特别感谢。

最后要感谢Epic Games授权本书使用由Unreal Engine 4开发的实时动画短片《A Boy and His Kite》中的画面作为本书的封面图片。

2018.4

Footnotes

  1. Hello