02 - 复习课
在课上看GAMES202,回来写笔记,感觉效率还行。。
复习渲染管线
- 3D空间的顶点通过顶点处理,对其进行MVP变换,最终得到在屏幕空间的坐标。并且保留Z-Buffer,超出屏幕空间的对象会被裁剪掉。
- 这些顶点会根据原来的几何信息,经三角形处理后变成一个个的三角形面。
- 三角形面经过光栅化操作后,会产生将要显示在屏幕上的片段。
- 片段还会经过片段处理这一过程,在这一步会进行片段的着色与纹理映射,在此之前需要深度测试、模板测试。
- 着色好的片段经过帧缓冲处理后,会变成一张“图片”输出给显示设备显示。
学OpenGL
在CPU端执行,调度GPU管线的API,特点是跨平台。它的替代品有DirectX
(只能Win平台)和Vulkan
(跨平台、较新)等。
详细内容详见我的OpenGL分类。
Pass
一般来说,一次DrawCall就可以看成一次渲染Pass。一次Pass通常要完成如下步骤:
- 更新物体、摄像机的MVP矩阵等信息
- 设定要输入/输出到的FBO与纹理对象
- 编写顶点&片段着色器,并应用
- 提供给GPU的信息全部设定好后,开始渲染。
一个Pass的结果可看成是一个纹理,多个Pass的结果可以结合成一个纹理。例如形成阴影的ShadowMap,可能由多光源的DepthMap结合而成。
学GLSL
详见我的OpenGL分类。
调试着色器
以前用的是NVIDIA Nsight
和VS
,但他俩不怎么方便:
- 调试 GLSL 时要多GPU才能调试;
- 调试 HLSL 时要在模拟软件里才能调试;
十分不方便。
现在可以用 Nsight Graphics
和 RenderDoc
进行调试 ,前者跨平台,但要英伟达家的GPU;后者则没有GPU限制。
当然也能进行古法调试,把每阶段Pass得到的结果渲染出来(将值映射为颜色值),然后用传说中的颜色拾取器去查看。
复习渲染方程
我们之前见到的渲染方程如下,用于描述光的传播:
实时渲染领域中的渲染方程则和上面的略有不同:
- 可见性(Visibility)通常被显式考虑
- BRDF项通常与cos项结合
于是RTR中的渲染方程如下:
复习环境映射
通常使用立方体贴图或球体贴图来表示间接光(环境光),在本系列课后面会学到新东西,弹幕说是IBL。
参考资料
- GAMES202: 高质量实时渲染 (ucsb.edu)