Real-Time Rendering 翻译 1.引言

欢迎大家围观评论,我每天抽出一个小时以上翻译,绝不太监。当然有翻译不好或者理解不到位的地方,欢迎大家拍砖!!!

第一章 引言

实时渲染主要关注如何快速的在计算机上渲染出图像。是计算机图形学中最热门的领域。图像渲染到屏幕后,会影响到观察者的行为,而观察者的行为又会影响到接下来的渲染。这个反馈和渲染速度非常快,观察者不会看到单独的图像,而是沉浸到这一动态过程中。

使用每秒帧数(fps)或者(Hz)来衡量图像的渲染频率。一秒一帧的频率下,毫无交互性可言,用户感觉自己的操作需要很长时间。在6fps的频率下,有一点交互性。当一个应用达到15fps就可以称之为实时了,用户会聚集到操作和反馈。由于用户的限制,超过72fps之后,用户就很感知更高的频率。

当用户观看超过60fps的图像渲染时不会有任何延迟感,更高的帧率只不过减少用户操作的反馈时间而已。在某些强操作交互中,即使15ms的延迟也会影响到用户体验。当然我们这里主要讨论的是实时渲染而不是交互性。如果反应速度是关键因素,能快速响应用户操作并在屏幕上呈现结果的应用就是合格的。实时渲染一般指的是三维物体的渲染。

交互性和三维空间不是实时渲染的关键条件,而是一种第三方部件–图像加速硬件(显卡)。在工作站上的专用的三维图像渲染硬件已经出现了很多年,不过这种硬件在消费级领域出现时间不长。公认的第一次出现在消费级领域的硬件是1996年出现的3Dfx Voodo 1。随着市场的快速增长,这种三维图像渲染硬件已经成为PC的标配了。不仅仅是用在实时渲染领域,它也用于很多的实时应用。

过去几年,图形硬件引发了交互图形学的爆发式增长。我们主要研究加速渲染速度和提高图像质量,并且描述加速算法和图像API的特性和优缺点。我们不会深入每个主题,而是介绍概念和术语,介绍每种方法的使用场景,提供更深沉次信息的入口。我们希望我们的尝试可以让你理解这一领域,让你觉得值得花费时间在本书上。

1.1 内容预览

下面是每个章节的简介。
第二章,渲染管线,本章描述实时渲染的核心 - 渲染管线,一种机制接受场景描述并转换为我们所见图像。
第三章,渲染单元,现代GPU实现实的时渲染的固定管线功能和可编程功能。
第四章,变换,变换是操作位移、旋转、缩放和相机的变化的工具。
第五章,外观,本章开始讨论材质、光照和它们之间的结合应用以实现具有真实感的外观。还会覆盖到外观相关的反走样和伽马校正。
第六章,纹理贴图,实时渲染中最重要的工具,用来实现在表面上显示图像。本章主要讨论这种技术的机制,和各种各样的应用方式。
第七章,高级着色,本章讨论高级着色的理论和实践,主要是如何表示材质和使用光源。
第八章,区域和环境光,讨论更多的光源类型和算法。
第九章,全局光照,阴影、反射、折射、光线跟踪、预计算光源和环境光遮罩等技术。
第十章,图像效果,使用多边形并不是最快的方式来表现光晕、火等效果。 本章主要讨论基于图像的效果。各种后处理特效,比如动态高光、运动模糊、景深。
第十一章,非真实渲染,本章讨论卡通渲染。
第十二章,多边形技术,几何数据来源范围很广,有时为了渲染速度回修改几何数据。本章讨论多边形数据的清理和简化操作。还会介绍一些压缩表示方式,例如三角形带,fans和网格。
第十三章,曲线曲面,硬件最终处理的还是点、线和多边形。一些复杂的表面会在质量和渲染速度上取得一些平衡,以及更好的压缩表示和光滑曲面的生成。
第十四章,加速算法,主要包含空间裁剪和LOD。
第十五章,管线优化,加速算法可以让应用更加流畅。本章主要研究如何找到瓶颈并处理瓶颈。还会介绍多遍渲染。
第十六章,相交测试,相交测速对渲染、用户交互和碰撞检测来说十分重要。本章主要介绍一系列有效的算法来判别几何体之间是否相交。
第十七章,碰撞检测,对某些实时应用来说,找出两种对象是否相交十分关键。本章会介绍一些这个领域中的有效算法。
第十八章,图形硬件,之前的章节讨论过GPU加速算法,本章讨论其他部分,例如颜色、深度、帧缓存等基础结构类型。研究一些图形加速例子。
第十九章,未来

附录中有一些线性代数和三角函数相关知识。

1.2 符号和定义

先讨论本书所使用的数学符号,附录A详细的解释了本章的一些术语。

1.2.1 数学符号

表1.1总结了我们所使用的数学符号。这里会详细的讨论某些概念。

表1.1

类型 符号 示例
角度 小写希腊字母 αi,ϕ,ρ,η,γ242,θ
标量 小写斜体 a,b,t,uk,v,wij
向量或者点 小写黑体 a,u,vs,h(ρ),hz
矩阵 大写字母 T(t),X,Rx(ρ)
平面 π :向量+标量 π:nx+d=0,   π1:n1x+d1=0
三角形 Δ3 Δv0v1v2,Δcba
线段 两点 uv,aibj
几何实体 大写斜体 A0BB,T,BAABB

角度和标量都是使用实数R来表示,向量和点使用加黑的小写字母来表示,如 v=vxvyvz 。这一列向量形式,计算机图形学中最常用的方式。不过有时候本书使用 (vx,vy,vz) 来表示正确的向量 (vx,vy,vz)T ,因为前者容易阅读。

齐次坐标系中使用 v=(vx,vy,vz,vw)T 来表示点或者向量, v=(vx,vy,vz,0)T 表示向量, v=(vx,vy,vz,1)T 表示点。有时候我们使用三元素的向量或者点,但是我们尽量少的避免使用这种三元素方式,以免带来混淆。对矩阵操作来说,使用齐次坐标会非常方便,因为齐次坐标统一了向量和点的表示方式。在某些算法中,使用数字下标比x,y,z来的方便一些,比如 v=(v0,v1,v2,)T 。这些规则对二元素的向量也适用,只不过忽略了最后一个元素而已。

矩阵要稍微复杂一点。常见的为2x2,3x3和4x4矩阵。我们主要介绍一下3x3矩阵M的访问方式,可以轻易的推广到其他尺寸。矩阵M的元素表示为 mij,  0(i,j)2 ,i 表示行,j 表示列。如公式1.2所示:

M=m00m10m20m01m11m21m02m12m22(1.2)

如公式1.3的3x3矩阵所示的符号是用来矩阵中的向量, m,j 表示矩阵的第j列, mi 表示矩阵的第i行。和向量与点的访问方法一样,也可以使用下表x,y,z,w来访问。

M=(m,0m=,1m,2)=(mxmymz)pmatrix=mT0m1TmT2(1.3)

使用 π:nx+d=0 来表示平面,这是点法式,使用法线向量n和标量d表示。法线是一个向量,表示平面的朝向。一般来说(曲面),法线描述的是平面上某一点的方向。对平面来说,所有点的法线都相同。 π 是表示平面的常用符号。平面 π 将空间分为两部分,分别是正半空间,当 π:nx+d>0 ,和负半空间 π:nx+d<0 。其他点都位于平面上。

使用三点 v0,v1,v2 来表示三角形,使用符号 Δv0v1v2 来表示。

表1.2列举常见的数学操作及其符号表示。附录A还包含了点乘、叉乘、行列式和取模。转置操作将列向量变换为行向量,反之亦然。故此列向量可以表示为 v=(vx,vy,vz)T 。第4个操作表示 uv 表示向量 v=(uxvx,uyvy,uzvz)T ,结果为u的每个一分量和v对应的分量相乘。这种操作主要用于颜色向量。第5个操作由Graphics Gems IV引入,是一个二维向量的一元操作符。表示向量 v=(vx,vy)T 的垂直向量 v=(vy,vx)T 。我们使用|a|表示标量a的绝对值,而|A|表示矩阵A的行列式。有时候也会使用 |A|=|a b c|=det(a,b,c) ,a,b,c是矩阵A的列向量。第9个操作是阶乘,定义如下, 0!=1

n!=n(n1)(n2)321(1.4)

第十个操作符,二项式因子,定义如下1.5:
(nr)=n!k!(nk)!(1.5)

更进一步来说,我们称 x=0,y=0,z=0 为坐标系平面。轴 ex=(1 0 0)T,ey=(0 1 0)T,ez=(0 0 1)T 称之为主轴,也称之为x轴,y轴,z轴。这些轴也称之为标准系。除非特别标注,我们使用正交坐标系(主轴是相互垂直的单元向量)。

符号[a,b]用来表示包含a和b的区间。如果不包含a和b,使用符号(a,b)表示。也可以任意组合这两种表示,如[a,b)表示a和b之间的区间,包含a但是不包含b。

本书经常使用C函数atan2(y,x)。这是标准函数arctan(x)的扩展。两者之间的区别在于, π2<arctan(x)<π2 0<arctan(x)<2π ,后面的函数需要一个额外的参数。这个额外的参数不能为0。(atan2(y,x)表示向量(x,y)和x轴之间的角度)

表1.2

n 操作符 描述
1 点积
2 × 叉乘
3 vT 转置
4
5
6 || 矩阵的行列式
7 || 绝对值
8 ||||
9 n! 阶乘
10 (nr)=n!k!(nk)! 二项式
11 atan2(y,x) 点(x,y)到原点的向量和X轴之间的夹角(幅度)
12 cos(θ)¯¯¯¯¯¯¯¯¯ max(0,cos(θ))
13 log(n)

.

Clamped-cosine, cos(θ)¯¯¯¯¯¯¯¯¯ 是为了介绍着色公式的时候简化公式。如果 cos(θ) 小于0, cos(θ)¯¯¯¯¯¯¯¯¯ 就为0。

log(n) 表示自然对数,等价于 loge(n) ,不是以10为地的对数 log10(n)

我们使用右手坐标系,因为这是计算机图形中三维几何的标准坐标系。

使用三元素(red, green, blue)来表示颜色,每个元素在范围[0,1]内。

1.2.2 几何定义

图形硬件使用的最基本图元为点,线和三角形。

贯穿本书,我们称基本图元的集合为模型或者对象。场景是模型的集合,包含场景中所有需要渲染的对象。场景还包含材质,灯光和观察者。

例如对象可以为车、建筑、甚至于直线。实际中,一个对象包含大量的渲染图元,但也不是总是这样。一些对象有更高抽象层次的集合表示,比如所贝塞尔曲线和曲面,细分表面等等。对象也可以包含其他对象,我们称车门为车的子集。

进一步阅读

我们能给到你最重要的资源为本书的网站,http://www.realtimerendering.com。网站包含每章所对应的最新的信息和网址。实时渲染领域的变换日新月异。本书我们尝试关注于基础和看起来不太会过时的实际。网站经常会为开发者呈现最新的信息,尽量保持更新。

你可能感兴趣的:(Real-Time,Rendering)