02 - 复习课

在课上看GAMES202,回来写笔记,感觉效率还行。。

复习渲染管线

  1. 3D空间的顶点通过顶点处理,对其进行MVP变换,最终得到在屏幕空间的坐标。并且保留Z-Buffer,超出屏幕空间的对象会被裁剪掉。
  2. 这些顶点会根据原来的几何信息,经三角形处理后变成一个个的三角形面。
  3. 三角形面经过光栅化操作后,会产生将要显示在屏幕上的片段。
  4. 片段还会经过片段处理这一过程,在这一步会进行片段的着色与纹理映射,在此之前需要深度测试、模板测试。
  5. 着色好的片段经过帧缓冲处理后,会变成一张“图片”输出给显示设备显示。

学OpenGL

在CPU端执行,调度GPU管线的API,特点是跨平台。它的替代品有DirectX(只能Win平台)和Vulkan(跨平台、较新)等。

详细内容详见我的OpenGL分类。

Pass

一般来说,一次DrawCall就可以看成一次渲染Pass。一次Pass通常要完成如下步骤:

  1. 更新物体、摄像机的MVP矩阵等信息
  2. 设定要输入/输出到的FBO与纹理对象
  3. 编写顶点&片段着色器,并应用
  4. 提供给GPU的信息全部设定好后,开始渲染。

一个Pass的结果可看成是一个纹理,多个Pass的结果可以结合成一个纹理。例如形成阴影的ShadowMap,可能由多光源的DepthMap结合而成。

学GLSL

详见我的OpenGL分类。

调试着色器

以前用的是NVIDIA NsightVS,但他俩不怎么方便:

  • 调试 GLSL 时要多GPU才能调试;
  • 调试 HLSL 时要在模拟软件里才能调试;

十分不方便。

现在可以用 Nsight GraphicsRenderDoc 进行调试 ,前者跨平台,但要英伟达家的GPU;后者则没有GPU限制。

当然也能进行古法调试,把每阶段Pass得到的结果渲染出来(将值映射为颜色值),然后用传说中的颜色拾取器去查看。

复习渲染方程

我们之前见到的渲染方程如下,用于描述光的传播:

实时渲染领域中的渲染方程则和上面的略有不同:

  • 可见性(Visibility)通常被显式考虑
  • BRDF项通常与cos项结合

于是RTR中的渲染方程如下:

复习环境映射

通常使用立方体贴图或球体贴图来表示间接光(环境光),在本系列课后面会学到新东西,弹幕说是IBL。

参考资料

  • GAMES202: 高质量实时渲染 (ucsb.edu)