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 微积分

需要用到微积分。没讲,并且也没必要写