以下为个人学习笔记整理,课程官网传送门,作业传送门,会议系统传送门。
# Recap of CG Basics
- Basic GPU hardware pipline
- OpenGL
- OpenGL Shading Language(GLSL)
- The Rendering Equation
- Calculus
# Graphics(Hardware) Pipeline
下图为渲染管线的渲染流程:
【Input】输入的数据是一堆「模型上」的「顶点」。
【Vertex Processing】经过一系列顶点的处理 ——MVP(Model、View、Projection),得到「屏幕上」的「顶点」
- Model Transformation:模型上的顶点 -> 世界坐标上的顶点。
- View Transformation:世界坐标 -> 摄像机坐标。可以理解为把摄像机作为原点,摄像机的观察方向作为 -z 方向,对空间坐标内的全部物体进行平移和旋转。平移和旋转的值就是从摄像机移动和旋转到原点 -z 方向的取反。
- Projection:投影分为「正交投影」和「透视投影」。变换矩阵推导见:[Game101 的 Transformation Cont](https://hakuya.me/learning/games/Game101 / 三、Transformation Cont/)
- 透视投影:近大远小。
- 正交投影:远近大小相同。
【Triangle Processing】输入顶点连线,组成一个个的三角形。
【Rasterization】得到三角形覆盖的屏幕上的像素点(计算深度值 z-buffer,抗拒锯齿处理等...)。
【Fragment Processing】计算每个像素点对应的颜色。(Blinn-Phong 模型)光照计算公式推导见:Game101 的 Shading 部分
- 高光(Specular)+ 漫反射(Diffuse)+ 环境光(Ambient)
【Framebuffer Operations】经过其他的处理(拼接,组装)最终输出成图片。
# OpenGL
OpenGL 是一个在 CPU 端调度 GPU 的 APIs。
# OpenGL 的一些基本概念
- Vertex Buffer Object(VBO):GPU 中的一块区域,用于存储模型的一些数据,例如:
- Model specification:用于描述模型的数据(顶点、顶点间的连线、法线,贴图,纹理坐标等....)
- Model transformation:模型的摆放位置。
- Model texture coords:模型的纹理坐标。
- Model normals:模型的法线。
- OpenGL functions:提供了各种矩阵的推导结果,例如 MVP。
- Set up an easel:设置一个画架,其本质是定义一个观察视角(View transformation),或者说定义摄像机位置和朝向。
- Attach a canvas to the easel:给画架一块画布(framebuffer),用于存放绘制结果。
- Paint to the canvas:绘制图像,通过「顶点着色器」和「像素着色器」。
- 在「顶点着色器」中对每个顶点的操作进行定义:
- MVP 映射,各种插值结果
- OpenGL 负责把顶点处理成像素(OpenGL 自己的光栅化)
- 在「像素着色器」中对每个像素的操作进行定义:
- 计算像素的颜色和光线
- OpenGL 自己根据 z-buffer 进行覆盖。
- 在「顶点着色器」中对每个顶点的操作进行定义:
# 需要我做些什么?🤔
- 定义模型,摄像机,MVP。
- 选择 framebuffer 和输入输出的纹理
- 定义「顶点着色器」和「像素着色器」
# OpenGL Shading Language(GLSL)
LearnOpenGL 传送门
# Debug Shader
Nsight Graphics(NVIDIA GPUS only)
RenderDoc
# The Rendering Equation
光线追踪渲染方程推导见:[Game101——Ray Tracing](https://hakuya.me/learning/games/Game101 / 十六、Ray Tracing——Basic radiometry/)
# In real-time rendering(RTR)
实时渲染下的光线追踪方程:把「物体自身发出的光」+「照射到物体的间接光」计算转化为计算「所有光源能否经过反射或折射照射到物体」
- visibility:用于描述物体是否能够看见四面八方的光源所引入的一个值。
- 通过 visibility 的判定来实现光线追踪(有限的反射或者折射次数下,能否照射到物体)
# 求解环境光变得简单
针对每个像素点,可以计算出所有光源的光线照射到该点的强度,并记录在贴图上缓存起来。
# Calculus
...