二 CG基础概述¶
本课程为闫令琪老师的 GAMES202-高质量实时渲染
此为个人的课堂笔记,如有疏漏,请多指正
1 渲染管线 Graphics Pipeline¶

2 OpenGL¶
OpenGL 是一系列从 CPU 调用 GPU 管线的 API 集合,其是跨平台的
等位替代:DirectX, Vulkan, etc.
OpenGL 的工作流:
1)Place objects/models 放置模型
定义 Vertex buffer object (VBO),其中包括物体的顶点、法线、纹理等信息,然后交给 GPU。在 OpenGL 中已经定义好了一些可以直接调用的特定的矩阵,不需要再自己额外定义
2)Set up an easel 放置画架
视图变换: 放置相机,并直接调用视图变换的相关函数和矩阵即可 (e.g. gluPerspective)
创建并使用 framebuffer 帧缓存
3)Attach a canvas to the easel 放置画布
OpenGL 中一个 Rendering Pass 的工作:对于一次场景渲染,可以利用一个 framebuffer 一次性输出多个不同的纹理(着色 shading,深度 depth 等),然后由片元着色器决定每一张纹理具体的使用
4)Paint to the canvas 画至画布上
使用顶点着色器和片元着色器实现:
- OpenGL 调用用户定义的顶点着色器进行各种顶点变换(模型变换、观察变换等)以及其他相关操作
- OpenGL 内部将每一个三角形打成一个个片元(像素)
- OpenGL 调用用户定义的片元着色器进行光照计算和着色等操作。并且 OpenGL 会自动处理深度测试 z-buffer depth,除非用户进行覆写
总结:在每一个 Pass 中:
- Specify objects, camera, MVP, etc.
- Specify framebuffer and input/output textures
- Specify vertex/fragment shaders
- (When you have everything specified on the GPU) Render!
在以上的基础上,可以用多次 Pass 进行多次渲染完成一些特殊的操作
3 OpenGL Shading Language (GLSL)¶
Shading Language:定义顶点着色器和片元着色器的着色语言。而着色语言最终还是要编译为汇编语言才能交给 GPU 进行处理
GLSL (OpenGL), HLSL (DirectX), CG (NVIDIA) 都是着色语言
4 渲染方程 The Rendering Equation¶
渲染方程是渲染中最重要的方程,用于描述光线的传播:

而在实时渲染 Real-Time Rendering (RTR) 中,可见性Visibility 经常需要加入显式考虑因素中,并且 BRDF 往往和 cosine 一起考虑:

在实时渲染中,对于全局光照 = 直接光照 + 间接光照中的间接光照只处理 One-bounce 一次间接反射
2023年7月 ziao德