Real Time Rendering(3rd)
第一章 介绍
第二章 图形渲染管线
2.1 架构
实时渲染管线分为三个阶段:Application、Geometry、Rasterizer。
管线的最慢阶段决定了渲染速度和图像的更新率。
2.2 应用程序阶段
该阶段主要在CPU上执行,基于软件实现的,程序员可对其进行完全控制。如碰撞检测、加速处理(基于视口的裁剪)等,它可以在多核机子上进行并行处理。
在该阶段的最后,几何体会被编程几何图元-点、线、三角型。
2.3 几何处理阶段
该阶段主要负责逐多边形和定点的操作。它主要分为以下几个功能阶段:
2.3.1 模型和视口变换
2.3.2 顶点的明暗处理(Shading)
该过程主要决定了光照是如何影响几何体的材质。通过明暗方程(光照方程)可以计算最终的顶点颜色。通常这些计算是发生在世界坐标系中,但是为了方便一可以变换到其他坐标系中计算,如模型空间、相机空间
3.3.3 投影
3.3.4 裁剪
3.3.5 屏幕映射(Screen Mapping)
2.4 光栅化阶段
该阶段主要是计算和设置屏幕像素的颜色。主要分为以下几个阶段:
2.4.1 创建三角形
2.4.2 三角形遍历
决定哪些像素在三角形内。
注:以上两部分操作都被固化到硬件上。
2.4.3 像素明暗
该阶段在GPU内核中处理,其中包括纹理化处理。
2.4.4 归并
Fram Buffer:Color Buffer,Z Buffer,Stencil Buffer
Alpha Channel是在Color buffer里。
Alpha Test是发生在Depth Test之前。
2.5 Through the Pipeline
第三章 图形处理单元
3.1 GPU管线概述
3.2 可编程着色器阶段
Shader4.0支持统一着色器模型:vertex shader、geometry shadre、pixel shader。
The Common Core Virtual Machine:
Shader程序可以在应用程序加载之前编译。
3.3 可编程shading的演变
3.4 顶点shader
顶点shader把顶点从模型空间变换到齐次屏幕空间。在该阶段中,每一个顶点时独立处理的,GPU中的多个shader 处理器可以对输入数据流进行并行处理。
3.5 几何shader
Shader model4.0以上版本支持,是一个可选阶段。
3.6 像素Shader
3.7 归并阶段
DX10支持像素shader中的两个像素进行混合—dual-color blending。
3.8 特效(Effects)
一个Effect文件中,可以有多个Techniques,这些Techniques对同一特效进行了不同的实现,如SM2.0或
SM3.0。从而适应不同的平台。
第四章 变换
线性变换:旋转、缩放
平移变换:
放射变换(Offine Transform):结合了线性变换+平移变换,采用4x4矩阵表示。包括:transform、rotation、scaling、reflection、shearing。
3
4
4.1 基本变换
4.1.1 平移
4.1.2 旋转
4.1.3 缩放
4.1.4 裁剪
4.1.5 合并变换
4.1.6 刚体变换(The Rigid-Body Transform)
4.1.7 法线变换(Normal Transform)
http://hi.baidu.com/%D0%A1%C6%BD339/blog/item/2a88d3a728ef8498d04358f2.html
4.1.8 计算逆
1. 如果一个简单或一些列简单变换:
2. 如果是个正交矩阵,如一个旋转或一些列旋转矩阵
3. 普通矩阵,可以采用伴随矩阵
4.2 特殊矩阵变换和操作
4.2.1 欧拉变换
E是一系列旋转变换的组合,是正交的因此:
欧拉变换的缺陷:万向节死锁(gimbal lock);不方便进行插值。
4.2.2 欧拉变换参数说明
4.2.3 矩阵分解
4.2.4 绕任意轴旋转
4.3 四元组
前三个值代表旋转轴,第四个代表旋转角度
4.3.1 数学背景
单位四元组:
4.3.2 四元组变换
旋转变换
其中, , 为单位四元组
组合旋转变换: , 也是单位四元组。
矩阵转换
球面线性插值
该操作描述:两个单位四元组 ,以及一个参数 ,计算一个插值后的四元组,它可以用作操作物体的动画。
等价于:
其中:
从一个向量到另一个向量的旋转变换
操作描述:使用最短的方法变换一个向量S到另一个向量T。
A:四元组形式:
其中:
B:矩阵形式
其中:
4.4 顶点混合
4.5 变形(Morphing)
4.6 投影
第五章 颜色表现
5.1 视觉现象
该部分主要介绍了一下三个问题:
l 光源
l 光照和场景中的物体作用产生,吸收、散射、向新方向传播
l 光照被传感器(眼睛)吸收
5.2 光源
方向光
辐射度(Irradiance):每秒钟穿过平面的光子量。可使用RGB来表示。
5.3 材质
光的行为:散射(Scattering)和吸收(Absorption)。
散射:发生在两个不同介质的物体间,不改变光的强度,只改变光的方向。
散射会造成两种现象:反射(reflection)和折射(refraction)。
由上图所示,从而使得明暗方程shading equation由两部分组成:Specular部分:代表光照在物体表面被反射。
Diffuse部分:光照经过传播、吸收、散射后的。
吸收:发生在同种物质内部,会造成光能转化为其他能量或消失。只改变光的强度而不改变光的方向。
入射光可以通过物体表面的辐射度(irradiance)来测量,而出射光可以通过出射度(exitance)来衡量。
在明暗处理中,Specular处理受物体表面的粗糙程度影响。
5.4 传感器(Sensor)
5.5 明暗处理(shading)
Shading处理主要是基于材质属性和光源,使用一个方程结合视线(view Ray) 来计算出辐射度(outgoing radiance) 。
明暗方程包括:散射部分(diffuse terms)、高光部分(specular terms)。
整个明暗方程是有这两部分组成。
5.5.1 明暗方程的实现
分类:
l 逐模型计算(per-model):所有模型使用一个颜色,只计算一次。
l 逐图元计算(per-primitive):在几何着色器里处理,每一个图元中的所有顶点的最终像素使用同一颜色。又叫:flat shading。
l 逐定点计算(per-vertex):在顶点着色器中处理计算图元的每个顶点颜色,最后在像素着色器中插值计算图元内部的顶点颜色。又叫:Gourand Shading。
l 逐像素计算(per-pixel):所有的计算都发生像素着色器中。又叫:Phong Shading。
5.6 锯齿和反锯齿(Aliasing and Antialiasing)
5.6.1 采样和过滤理论(Sampling and filtering theeory)
“采样”处理的目的是获取数字信号,这样处理会减少信息量;但是最后采样信号会被复原,这就是“过滤”采样信号。
当使用低频采样时,就会产生锯齿现象。
奈奎斯定理(Nyquist rate):采样率必须大于信号的最大频率的两倍。
复原(Reconstruction)
Box filter
Tent filter
Lowpass filter
Gaussian filter
重采样(Resampling)
它是一种增大或减小采样信号的操作。
5.6.2 基于屏幕的反锯齿
纹理走样(锯齿)、线性走样(锯齿)。
基于屏幕反锯齿模型:
超级采样抗锯齿(SSAA)-SuperSampling Anti-Aliasing
全屏反锯齿(FSAA)-FullSceneSampling Anti-Aliasing
多重采样反锯齿(MSAA)- MultiSampling Anti-Anliasing
覆盖采样抗锯齿(CSAA)-ConverageSampling Anti-Aliasing
5.7 透明、Alpha 、Compositing
有多种方法可以使光线穿过半透明物体。其中有View-base Effect和light-based Effect。
Z-Buffer只允许每一个像素存储一个对象。
Screen-door Transparent。
Alpha Blend:
Cs代表透明物体颜色。
绘制透明物体,通常需要排序。首先绘制非透明物体,再从后向前绘制透明物体。
5.8 Gamma Correction
第六章 纹理化
6.1 纹理管线(The Texuring Pipeline)
纹理化的工作原理是通过修改明暗方程中的相关值来实现的。修改这些值的方法通常是通过面上的位置。纹理图上的像素叫“texels”。所以高光贴图(gloss texture)修改高光值、凹凸纹理(bump texture)修改法向量,从而实现修改明暗方程中的结果。
可以通过一个纹理管线(texture pipeline)序列来描述纹理化过程。
1.坐标
(1)本地空间(local-space)是纹理处理的起点,可以是世界空间坐标系,但通常在模型中,因此纹理可以随着模型进行移动。
(2)参数空间(parameter-space)可以用来访问纹理,该过程称为“映射”(mapping)。
(3)纹理空间(texture-space)该坐标可以用来获取纹理中的像素值。
2.处理
(1)投射(projection):对本地空间中的3维模型(x,y,z)进行投影从而得到2维坐标(u,v)。
(2)匹配(corresponder):根据纹理的分辨率来,对2维坐标进行归一化处理。
(3)变换(transform):对获得的纹理颜色进行,加亮处理。
“最终的颜色通过直接代替物体表面的漫反射颜色来改变物体表面的属性,其中原始的漫反射颜色用于光照方程”。
6.1.1 投影处理(The Projector Function)
该过程主要是使用投影处理把本地空间转换为一个参数化的空间,通常是二维的(U,V)。投影处理的工作是把一个三维点转换到纹理坐标系中。通常它可以被用在进行模型处理,如圆形、圆柱形、平面投影。甚至同一模型可以使用多种投影方式。美术在处理模型的时候可以指定想要的方式。
通常投影处理时发生在模型处理阶段,从而使得结果存储在顶点信息中。但,投影处理也可以发生在顶点或像素着色器中。如,纹理动画(顶点着色器)、环境光贴图(Environment Mapping)(像素着色器)。
参数化空间也可以是三维的(u,v,w),此时,w代表在投影方向上的深度。参数化空间甚至可以使四维的(u,v,w,q),q代表一个齐次坐标(聚光灯效果)。另一种重要的参数空间类型是方向性的,其中参数空间中的每一点代表一个方向,可以想象成单位圆中的一点。如cube map就是用这种方向性的参数化空间。某些情况下使用一维纹理坐标,线同样可以被贴上纹理,如绘制雨水时。
在面中对参数空间坐标进行插值从而获得纹理值。
6.1.2 匹配处理(The Corresponder Function)
该过程主要是从参数化空间(parameter-space)转换到纹理空间(texture-space)。主要处理纹理坐标超过u、v时采取的措施,在OPENGL是“wrapping mode”在DX里即“texture addressing mode”。另一类匹配处理是矩阵变换(可以在VS或PS中)如,可以对对象表面上的贴图进行平移、旋转、缩放、裁剪、投影等操作。
6.1.3 纹理值(texture value)
该过程是使用纹理坐标来获取纹理的像素信息.
6.2 图像纹理化(Image Texturing)
图像纹理化,是2维的纹理粘贴到多边形的过程。
图像的采样和过滤(sampling and filtering),决定了读取纹理中的颜色值的方式。
6.2.1 放大处理(Magnification)
常用的放大过滤技术:最近零点插值(nearest neighbor即box filter)、双线性插值(bilinear interpolation)、立方卷积(cubic convolution)。
6.2.2 缩小处理(Minification)
方法一:使用最近邻域的方法(nearst neighbor,与放大处理相似),选择与像素最近的纹理单元(texel)
方法二:双线性插值(与放大处理类似)
MipMap
Mip Chain:一组使用Mip技术的纹理。
搞质量mip map:
l Good Filtering(采样):使用box filtering会产生颜色模糊
l Gamma Correction(伽马校正):所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。
6.2.3 体积纹理(Volume Texture)-三维纹理
三维纹理,即体纹理,是传统2D纹理在逻辑上的扩展。二维纹理是一张简单的位图图片,用于为三维模型提供表面点的颜色值;而一个三维纹理,可以被认为由很多张2D纹理组成的,用于描述三维空间数据的图片。三维纹理通过三维纹理坐标进行访问.
6.2.4 立方环境题图(Cube map)
6.3 纹理化过程( Procedural Texturin)
6.4 纹理动画(Texture Animation)
6.5 材质纹理(Material Mapping)
6.6 Alpha纹理(Alpha Mapping)
6.7 凹凸纹理(Bump Mapping)
第七章 高级明暗处理
第八章 区域和环境光照
第九章 全局光照
第十章 基于图像的特效
第十一章 特殊&艺术渲染
第十二章 多边形技术
第十三章 曲面和曲线
第十四章 加速算法
第十五章 管线优化
第十六章 相交检测方法
第十七章 碰撞检测
第十八章 图像硬件
第十九章 未来