10.1 光栅化基础
渲染步骤:一个场景、一个摄像机、一个光源,物体表面的视觉特性、求解渲染方程
10.1.1 场景
面片、样条、三角形、镶嵌、三角化 LOD、动态镶嵌、渐进网格 三角形 法线:任意两条棱的叉积,归一化之后的向量 缠绕顺序、背面剔除 三角形表、索引化三角形表、顶点缓冲/顶点数组、索引缓冲/索引数组 三角形带/三角形扇:一种顶点数组 空间 模型空间、世界空间 世界矩阵M = [(i,0), (j, 0), (k,0), (t,1)],其中ijk是以世界空间表示的模型空间基向量,t是模型空间轴在世界空间的平移 或者 M = [(RS, 0), (t, 1)] 变换法线时需要乘以M的逆转矩阵
10.1.2 表面的视觉性质
光和颜色:吸收、反射、传播/折射、衍射、干涉、极化 漫反射 diffuse、镜面反射 specular、次表面散射 SSS 颜色空间和颜色模型:RGB、LUV、alpha 通道 顶点属性:模型空间位置、法线、切线、漫反射颜色、镜面反射颜色、uv、蒙皮权重 属性插值:逐顶点/逐像素 纹理贴图、纹素、像素、纹理坐标、寻址模式 纹素密度、多级渐远纹理mipmap、世界空间纹素密度、纹理过滤 材质
10.1.3 光照
着色:皮毛外壳、高次曲面 Phong:I = ka * ambient + Σ[(kd(nL) + ks(rv)^m)c] Blinn-phong:ka * ambient + Σ[(kd(nL) + ks(nh)^m)c] BRDF 光源模型:静态光照、环境光、平行光、电光、聚光、面积光、自发光
10.1.4 摄像机
观察矩阵V:摄像机局部坐标的逆矩阵 观察体:六个平面的平截头体,注意远平面的作用 平面可以用两种方法表示:
- 四维向量 (n,d),其中n为法线,d为平面和原点的垂直距离
- 或者六维向量(Q, n)——平面上任一点和法线 齐次裁剪空间:观察体是一个长方体 透视投影、透视校正的顶点属性插值 正射投影 屏幕映射 帧缓冲、深度缓冲、模板缓冲 光栅化、深度缓冲、z缓冲、w缓冲
10.2 渲染管道
管道:一连串的阶段。吞吐量、潜伏期
10.2.1 ~ 10.2.5 管道
工具阶段、资产调节阶段、应用程序阶段、几何处理阶段、光栅化阶段 VS→GS→流输出→裁剪→屏幕映射→三角形建立→三角形遍历→early Z→PS→合并|ROP→帧缓冲
阶段 | 子阶段 | 说明 |
---|---|---|
工具阶段 | 离线。美术人员创作模型和材质 | |
资产调节阶段 | 离线。资产的后处理:压缩、处理、检查、导出、等等等等 | |
应用程序阶段 | CPU。可见性判断、提交图元、控制着色器参数和渲染状态。 | |
几何处理阶段 | VS | 可编程。输入单个顶点,输出裁剪空间下的顶点 |
GS | 可编程。删除或添加新的图元 | |
流输出 | 可编程。有些 GPU 可以将图元写回内存,并从VS开始重新处理 | |
裁剪 | 可配置。截断平截头体以外的图元。 和屏幕映射合称 图元装配阶段,原书此处可能有误 |
|
屏幕映射 | 固定。裁剪空间→屏幕空间 | |
光栅化阶段 | 三角形建立 | 固定。这里主要计算三角形遍历以及PS插值时需要用到的一些数据,如三角形微分,边方程等 |
三角形遍历 | 固定。把三角形拆分为片段。插值计算片段属性,如坐标、深度、法线等。出于抗锯齿或其他需要,一个像素有可能对应多个片段。 | |
Early Z | 可配置。提前深度测试,避免不必要的PS | |
PS | 可编程。输入片段,输出颜色,或者丢弃片段。 | |
合并/ROP | 可配置。负责执行各种测试并混合颜色。 |
10.2.6 可编程着色器
语言:Cg、HLSL、GLSL。Shader Model VS:输入顶点,输出齐次裁剪空间下的顶点。 GS:输入图元和控制点。输出图元。 PS:输入片段属性,输出颜色或丢弃片段。
着色器访问/读写内存的两种方法:寄存器和纹理。
- 寄存器: 128位SIMD格式,有4种: 输入寄存器:VS 和 PS 的顶点/片段属性。 常数寄存器:输入投影矩阵、光照参数等和顶点/片段无关的常数。 临时寄存器:着色器的局部变量。 输出寄存器:VS输出顶点属性,PS输出颜色。
- 纹理:输入:纹理坐标、过滤、MIPMAP。输出:RenderTexture。
材质/效果文件:渲染步骤(pass);多个technique(对应 SubShader) 和回退(fallback);
10.2.7 抗锯齿
FSAA、MSAA、CSAA、MLAA、FXAA、TAA
10.2.8 应用程序阶段
可见性:视锥剔除、遮挡剔除(潜在可见集) 提交图元:命令表、overdraw、z prepass 场景图:四叉树、八叉树、BSP树、kd树、空间散列
10.3 高级光照及全局光照
IBL:法线贴图、高度贴图、镜面/光泽度贴图、环境贴图、3D纹理 HDR:允许大于一的强度。32bit、LUV格式。 色调映射:把HDR格式调整成适合输出设备的值。BLOOM。
全局光照GI:
- 阴影渲染:阴影体积、阴影贴图
- 环境遮挡AO
- 镜像
- 焦散
- SSS:BSSRDF
- PRT:球谐函数
延迟渲染、PBS
10.4 视觉效果和覆盖层
- 粒子系统
- 贴花
- 环境:天空盒、体积云、地形、水体
- HUD:归一化屏幕坐标、相对坐标、文本和字体
- 伽马校正
- 后处理:动态模糊、景深、晕影、着色