01 / 导读
导读
引用
Marschner, S., & Shirley, P. (2021). Fundamentals of Computer Graphics (5th ed.). A K Peters/CRC Press.
章节概要
第5版共716页,含514幅彩色插图,分为二十三章。第1–14章由两位主要作者撰写,构成核心课程内容;第15–23章由各领域专家撰稿,每章讨论一个主题。出版社把本书的方法描述为注重几何直觉,通过光线追踪和光栅化这两种互补的方法来解释图像如何呈现在屏幕上。据介绍,这一版对着色、光线追踪、基于物理的渲染、数学和采样等章节作了重大修订,并对若干章节进行了合并和改写,使全书的脉络更加自然。
第1–3章:Introduction(引言);Miscellaneous Math(数学杂项);Raster Images(光栅图像)
全书以领域概述开篇,接着是汇集全书所用数学知识的一章(线性代数另有专章),然后是光栅图像一章——光栅图像即像素网格,书中的每一种方法最终都要生成它。
第4–5章:Ray Tracing(光线追踪);Surface Shading(表面着色)
光线追踪出现得很早,早于线性代数和变换:生成图像的第一个完整方法,是从视点向场景追踪光线。第5章讨论表面着色,即如何根据光照和材质计算可见表面的颜色。
第6–8章:Linear Algebra(线性代数);Transformation Matrices(变换矩阵);Viewing(观察)
这是第二种方法的数学核心:向量与矩阵、用于移动和放置物体的变换矩阵,以及把三维场景映射为二维图像的观察变换。
第9章:The Graphics Pipeline(图形管线)
两种主要方法中的第二种——光栅化——以图形管线的形式呈现,即图形硬件把几何图元转化为像素所经过的一系列阶段。
第10–11章:Signal Processing(信号处理);Texture Mapping(纹理映射)
第10章提供图像采样与滤波所需的信号处理背景;第11章将其应用于纹理映射,即把图像和其他图案附着到表面上。
第12–14章:Data Structures for Graphics(图形学中的数据结构);Sampling(采样);Physics-Based Rendering(基于物理的渲染)
这几章支撑更高级的渲染:提高渲染效率的空间数据结构及其他数据结构、采样(本版大幅修订的章节之一),以及把着色与光的物理联系起来的基于物理的渲染。
第15–17章:Curves(曲线);Computer Animation(计算机动画);Using Graphics Hardware(使用图形硬件)
撰稿章节从曲线开始,即出版社介绍中提到的样条(Michael Gleicher),接着是计算机动画(Michael Ashikhmin)和图形硬件的实际编程(Peter Willemsen)。
第18–20章:Color(颜色);Visual Perception(视觉感知);Tone Reproduction(色调再现)
三章讨论图像中与人有关的一面:颜色(Erik Reinhard 和 Garrett Johnson)、视觉感知(William B. Thompson),以及色调再现,即把现实世界中范围极广的亮度映射到显示器有限的范围内(Erik Reinhard)。
第21–23章:Implicit Modeling(隐式建模);Computer Graphics in Games(游戏中的计算机图形学);Visualization(可视化)
最后几章撰稿章节讨论隐式建模(Brian Wyvill)、游戏中的图形学(Naty Hoffman)和可视化(Tamara Munzner)。
核心概念
第1–5章:图像与光线追踪
- 光栅图像:以像素值网格形式存储的图像。
- 光线追踪:从观察者出发向场景追踪光线、找出可见表面,从而计算图像。
- 表面着色:根据光源和材质属性计算表面上某点的颜色。
第6–9章:变换与管线
- 变换矩阵:对物体进行旋转、缩放和平移的矩阵,可合成为单一变换。
- 观察:把三维场景映射到屏幕坐标的一系列变换。
- 图形管线:基于光栅化的系统把图元转化为像素所经历的各个阶段。
第10–14章:采样、纹理与高级渲染
- 采样与滤波:借助信号处理的思想,用样本表示连续信号并控制走样。
- 纹理映射:通过在图像或函数中查找数值来改变表面属性。
- 空间数据结构:加速光线与物体求交等查询的结构。
- 基于物理的渲染:以光传输物理为基础的渲染。
第15–23章:撰稿主题
- 样条与曲线:由控制点定义的光滑曲线。
- 色调再现:把场景亮度映射到显示器的有限范围。
- 隐式建模:把形状定义为函数的等值面。
- 可视化:以图形方式表示数据以帮助理解。
评析
优点
- 两种方法并列呈现。 把光线追踪(第4章)放在管线(第9章)之前,使学生能及早用一个简单而完整的算法生成图像,然后再把光栅化看作对同一问题的另一种解答。出版社强调本书对几何直觉的重视。
- 数学自成体系。 本书有专门讲数学杂项、线性代数和信号处理的章节。出版社引用格拉纳达大学的 Fernando Berzal 的评价,他因此称本书异常地自成体系。
- 专家撰稿章节。 颜色、感知、色调再现、动画、游戏和可视化等章节由专家撰写,Berzal 认为这在标准教材中并不多见。这些章节使课程可以从渲染扩展到相邻领域。
- 核心内容经过修订。 第5版称对大多数课程所依赖的着色、光线追踪、基于物理的渲染、数学和采样等章节作了重大更新。
局限
- 核心部分不涉及编程接口。 目录中没有围绕特定图形 API 的章节;Using Graphics Hardware(第17章)是唯一一章讲硬件编程的内容,而且位于撰稿章节之中。需要编写 OpenGL、WebGL 或 Vulkan 代码的学生,需要另找材料。
- 撰稿章节参差不齐。 第15–23章是不同作者撰写的单一主题章节,每章只是入门而非完整论述,彼此之间也不构成连贯的顺序。
- 重广度而非深度。 全书七百多页、二十三章,远超一门课程所能涵盖的范围;数学背景被压缩在少数几章(第2、6、10章)中,线性代数薄弱的学生应准备在这些章节上多花时间。
在课程中的定位
在本课程的图形学书目中,本书是以原理为先的主教材。Gambetta 的 Computer Graphics from Scratch 是一本篇幅短得多的入门书,读者从基本原理出发,用伪代码写出一个光线追踪器和一个光栅化器,可以作为本书第4章和第9章的平缓铺垫。Angel 和 Shreiner 的 Interactive Computer Graphics 以相反的顺序讲授相近的基础:先用着色器编写交互式 WebGL 应用程序,之后才揭示管线内部的算法。如果课程希望学生从第一周起就针对真实的 API 编程,可以把 Angel 和 Shreiner 作为主教材,把本书作为数学和理论的参考书。
若要进一步学习,Akenine-Möller 等人的 Real-Time Rendering 是面向游戏和交互应用的 GPU 渲染的综合参考书,可延伸第9章和第17章;Pharr、Jakob 和 Humphreys 的 Physically Based Rendering 以文学编程的形式呈现一个完整的照片级真实感渲染器,可延伸第4、13、14章。Rogers、Sharp 和 Preece 的 Interaction Design 属于本课程的人机交互部分,与本书内容并不重叠。
如何使用本书
本书适合会编程、学过微积分和一些线性代数的本科生;书中的数学章节适合作为复习,而不是第一次学习。
- 核心顺序(一个学期): 按顺序读第1–9章,需要时查阅第2章和第6章。阅读第4–5章时实现一个基本的光线追踪器,阅读第7–9章时编写一个简单的光栅化器或管线程序。
- 第二部分: 第10–11章讲采样、滤波和纹理;随后第12–14章讲加速结构和基于物理的渲染,适合更高级的课程或第二门课。
- 撰稿章节: 根据兴趣选读:建模与动画读第15–16章,颜色与成像读第18–20章,实时图形读第17章和第22章,可视化读第23章。学完核心部分后,每一章都可以单独阅读。
编程必不可少:本书讲的是原理,因此应配合一个使用课程所选语言和图形 API 的项目,把从着色到纹理滤波的每个概念都动手实现一遍加以检验。
