实时渲染关注于快速的在电脑上生成一系列的画面,是图形学中交互性最强的一个领域。当一个画面出现的屏幕上,用户做出操作或者反应,并且这个操作会影响接下来生成什么样的画面。用户反馈和计算机渲染组成的循环维持在一个足够快的频率里进行,就使得用户不会感觉自己看到的是单独的一张张画面,更确切的说,会使用户沉浸在这样的一个动态过程中。
画面显示的频率是通过每秒钟渲染多少帧(FPS)来表示或者赫兹(Hertz)。在频率为每秒钟一帧的时候,几乎没有交互性可言,用户会痛苦的等待每一帧新画面的生成。当达到6FPS的时候,交互性的感觉开始出现。电子游戏致力于达到30,60,72或者更高的FPS,因为在这样的渲染速度下,用户可以聚焦于自己的游戏操作和反应上。
电影投影仪的画面频率是24FPS,但是通过一个快门系统(shutter system)把每一帧显示2或4次来避免画面闪烁。刷新率(refresh rate)和显示频率(display rate)是两个不同的概念,刷新率用Hertz(Hz)表示。一个能够把每帧照亮(illuminates)3次的快门(shutter)就拥有72Hz的刷新率。LCD显示器同样也区分刷新率和显示频率两个概念。
观看屏幕上以24FPS播放的画面是可以接受的一个状态,但是更高的频率有助于最小化响应时间(response time)。低至15毫秒的时间延迟可以减缓和干扰(slow and interfere)互动性。举例而言,虚拟现实类产品使用的头戴式显示器一般需要90FPS来降低延迟感。
对于实时渲染来说不止要考虑交互性。如果渲染速度作为唯一的评判标准,任何能快速响应玩家指令并且在屏幕上画点什么的程序都可以满足。实时的渲染一般意味着产生三维的图片。
交互性和三维空间感这两点对于实时渲染这个定义来说是充分的,但是出现了第三个元素成为了其定义中的一部分:图形加速的硬件。很多人认为1996年出现的3Dfx Voodoo 1 card是消费级三维图形显卡的开端。随着这个市场快速的进步,每个台式机,笔记本,和移动设备都拥有了内置的显卡。图1.1和1.2是一些经过硬件加速的渲染结果。
图形硬件的进步助力了在交互计算机图形学领域的研究成果大爆炸。我们将会聚焦于提供方法来加快渲染速度和提高图像质量,于此同时描述加速算法和图形APIs的特性和限制。我们将无法深度的覆盖每一个主题,所以我们的目标是展现关键的概念和术语,解释相关领域里最鲁棒和具有可行性的算法,并且提供链接通往最佳的进一步获取信息的地方。希望我们做的这些努力,提供给你理解这些领域的工具,会值得你花时间和精力来阅读此书。
1.1 内容概览
下面是对书中章节的简要介绍。
Chapter 2, 图形渲染管线(The Graphics Rendering Pipeline)。实时渲染的核心就是设置一系列的渲染步骤来描述一个场景(scene)并转化为可视的东西。
Chapter 3,图形处理单元(The Graphics Processing Unit)。现代GPU对渲染管线的各阶段实现,是使用一堆固定功能的可编程的单元的组合。
Chapter 4,空间变换(Transform)。空间变换是最基本的工具,用来操作物体的顶点(position),朝向(orientation),大小(size),和形状(shape)以及相机的坐标和视角。
Chapter 5,着色基础(Shading Basic)。开始讨论关于材质(materials)和光(lights)的定义,以及如何使用来取得想要的表面效果,是真实感(realistic)还是风格化的(stylized)。其他于表现相关的主题也会涉及,比如通过使用抗锯齿(antialiasing),透明效果(transparency)和伽马矫正(gamma correction)来提供更高的图像质量。
Chapter 6,纹理技术(Texturing)。作为最强大的工具之一用于在实时渲染中能够快速的访问和在表面显示图片。这个过程叫做纹理化,并且有非常多的不同办法来实现。
Chapter 7,阴影(Shadows)。为场景增加阴影可以增强真实感和理解。最流行的阴影计算算法会被介绍。
Chapter 8,光和颜色(Light and Color)。在我们使用基于物理的渲染(physically based rendering)之前,我们首先需要理解如何量化光照和颜色。并且在我们的基于物理渲染的流程处理完毕后,我们需要把结果转化为用于屏幕显示的值,这个过程中需要考虑到屏幕的属性和观看的环境。这两个主题都会在这一章里被涵盖。
Chapter 9,基于物理的着色(Physically Based Shading)。我们从头建立一个对于物理着色模型的理解。这一章会开始于以物理现象为基础(underlying physical phenomena),包含许多渲染材质的模型,并且结束于混合材质并滤波,以避免锯齿和保留表现效果。
Chapter 10,局部光照(Local Illumination)。探讨描述更精致的光照的算法。考虑表面着色,即光照由物体表面自发,那些拥有各种特色形状的物理物体(physical objects)。
Chapter 11,全局光照(Global Illumination)。模拟光和场景之间多次交互增强画面真实感的算法。我们讨论环境和方向遮蔽,以及全局光照的漫反射和高光的渲染方法,也有一些有希望的(promising)统一的(unified)方法。
Chapter 12,图像空间的效果(Image-Space Effects)。图形硬件非常擅长高速处理图像。首先会讨论图像滤波和二次投影(reprojection),然后我们后调研几个流行的后处理效果:镜头光圈(lens flares),动态模糊(motion flur),和景深(depth of field)。
Chapter 13,超越多边形(Beyond Polygon)。三角形不总是最快的或者最真实的描述物体的方式。其他的表示方式基于使用图片,顶点云(point clouds),voxels(体素),和其他各具优点的采样组合形式(sets of samples)。
Chapter 14,体积的和半透明的渲染(Volumetric and Translucency Rendering)。这里的关注点在于体积化的材质表现的理论和实现,以及和光源的交互。物理效果的模拟范围从大规模的气体效果(large-scale atmospheric)到头发纤维(hair fibers)间的光线散射(scattering)。
Chapter 15,非照相写实主义的渲染(Non-Photorealistic Rendering)。尝试把场景变得很真实并非唯一的渲染方式。其他的风格,比如卡通着色(cartoon shading)和水彩效果(watercolor effect),将会调研。线条和文本的生成技术也会讨论。
Chapter 16,多边形技术(Polygonal Techniques)。各种来源的几何数据(Geometric data)有时需要进行调整,以获得更快的速度和更好的效果。这里会介绍关于多边形数据的表示和压缩的各方面内容。
Chapter 17,曲线和曲面(curves and curved surfaces)。更复杂的表面表示方式可以提供一些优势,比如能够在质量和渲染速度之间做出权衡(trade off),更紧凑(compact)的表示,和平滑(smooth)的表面生成。
Chapter 18,管线优化(Pipeline Optimization)。当一个应用运行并使用高效的算法时,各种优化技术可以使得程序运行的更快。寻找性能瓶颈(bottleneck)并决定如何处理是这章的主题。多线程也会被讨论。
Chapter 19,加速算法(Acceleration Algorithm)。在程序运行起来之后,需要做的是提升运行速度。各种形式的裁剪(culling)和细节分层渲染(level of detail rendering)会涉及。
Chapter 20,高效的着色(Effect Shading)。场景里出现大量的光时会显著的降低性能。在判断一个像素是否会显示之前就完全的执行着色操作是一种浪费。我们会探索大量的方法阻止这种浪费的发生,以及其他的低效的着色行为。
Chapter 21, 虚拟现实和增强现实(Virtual and Augmented Reality)。这些领域在以快速且稳定的频率生成真实的图片时,会遇到一些特有的挑战,和相应的技术。
Chapter 22,交叉检测方法(Intersection Test Methods)。交叉检测对于渲染,用户交互,碰撞检测都非常重要。这里会深入探讨大量的关于几何交叉检测的高效算法。
Chapter 23,图形硬件(Graphics Hardware)。这里会聚焦于一些部分如颜色深度(color depth),帧缓冲(framebuffer)和基础算数类型(basic architecture types)。提供一个有代表性的GPU学习例子。
Chapter 24,The Future. Take a guess (we do). 这里不翻译了。
由于篇幅限制,我们提供了关于碰撞检测(Collision Detection)章节的下载,在realtimerendering.com这个网站上,并且还有一些关于线性代数和三角形几何的扩展内容。
1.2 符号(Notation)和定义(Definitions)
首先,我们应该解释一些本书里用到的术语。想获得关于本章节和本书中许多术语的详尽解释,可以访问realtimerendering.com上面的线性代数扩展内容。
(这部分内容暂时不看)