GAMES202 1&2 Overview & Recap of CG Basis
Lecture 1&2 Overview & Recap of CG Basis
Contents
- Shadows
- Global Illum
- Physically-based Shading
- Real-time Ray Tracing
Graphics Pipeline 渲染管线 复习
OpenGL:
- 一系列通过CPU调用GPU的API
- 语言不重要
- 跨平台
- 替代品:DirectX,Vulkan
- 缺点:
- 版本比较碎片化
- C style, 使用不是很简单
- (之前)不好Debug
- 如何理解:
- 和101里面的光栅化一一对应
- 放置/摆放物体,视图变换啥的,GL有矩阵相乘的API
- VBO 存储模型的向量、坐标、纹理坐标
- 之前的obj文件
- 使用一个画架easel(GL里面的framebuffer)可以渲染多张图
- 还有一种是直接渲染到屏幕(垂直同步),但是容易造成画面撕裂。使用双/三重缓冲避免
- 目前只需要用到vertex shader和fragment shader
大致渲染过程,每一次pass
- 指定物体、相机、MVP等等
- 指定framebuffer、输入输出texture
- 指定vertex/fragment shader
- 开始Render
OpenGL实质上使用状态机模型实现
着色语言历史
- 最开始:GPU汇编
- Cg in Nvidia
- HLSL in DirectX
- GLSL in OpenGL
Shader使用:
- Initializing
- Create shader
- Compile shader
- Attach shader to program
- Link Program
- Use program
Phong shader in Assignment 0 作业0中的代码解释
- Vertex Shader
- attribute 关键字,标注定义顶点属性
- uniform 关键字,标注定义全局量,CPUGPU公用
- varying 关键字,标注定义需要插值的量
- fragment shader
- texture2D()用来查纹理颜色
Debugging Shader
- 之前有一个Nvidia出的Nsight
- 现在
- Nsight Graphics,一个跨平台,但是只支持NVIDIA
- RenderDoc,跨平台,无限制
- 一些建议
- GPU不会cout printf到终端
- 把需要追踪的值转换为颜色,“Print”出来
Gamma校正:相对于光的强度,人眼对光线的感知是非线性的。一般而言将人眼对光的感受作为一个指数为2.2的幂函数
Rendering Equation 渲染方程
渲染中最重要的方程: $L_o(p,\omega_o)=L_e(p,\omega_o)+\int_{H^2}f_r(p,\omega_i\rightarrow\omega_o)L_i(p,\omega_i)cos\theta_id\omega_i $
在实时渲染中(RTR)写Visibility项,而且考虑一次间接光照就可以了(变化没之前那么大)实时渲染中的渲染方程:
$ L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i\rightarrow\omega_o)cos\theta_i V(p,\omega_i)d\omega_i $
Calculus 微积分
需要用到微积分。没讲,并且也没必要写
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chuan 川 Charles!
评论