《游戏引擎架构2》 10 渲染引擎

 

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:归一化屏幕坐标、相对坐标、文本和字体
  • 伽马校正
  • 后处理:动态模糊、景深、晕影、着色