GAMES101第八课笔记 - Blinn-Phong 反射模型(下)、着色频率、渲染管线

这是本系列的第六篇笔记,涉及原课程第八课的内容(课程视频课件)。这节课主要讲解了 Blinn-Phong 反射模型的高光、环境光部分,以及着色频率、实时渲染管线等。

Blinn-Phong 反射模型(剩余部分)

  • 高光部分 Specular highlights
    • 观察角度接近入射光的镜面反射方向时,高光较明显
      • Blinn 对此进行了改进,使用了半程向量
        • 半程向量 \(\vec h=\text{bisector}(\vec v, \vec l)=\frac{\vec v+\vec l}{|\vec v+\vec l|}\)
        • 当半程向量与法线 \(\vec n\) 相接近时,高光较明显
      • \(L_s=k_s(\frac{I}{r^2})\max(0, \vec n \cdot \vec h)^p\)
        • 由于是模拟高光效果,\(k_s\) 一般设置为白色
        • 幂次 \(p\) 越高,则容忍度越低(高光越集中)
          • 一般取值在 \([100, 200]\) 之中
  • 环境光照部分 Ambient lighting
    • 用常数来简单地模拟环境光照
    • \(L_a=k_a\,I_a\)
      • \(k_a\) 材质的环境光系数,可供调节
      • \(I_a\) 全局的环境光强度
      • 更佳的效果:应当使用全局光照
  • 最终的 Blinn-Phong 反射模型计算公式:
    • \(\begin{aligned}L&=&L_s+L_d+L_a\\&=&k_s\frac{I}{r^2}\max(0, \vec n\cdot\vec h)^p\\&=+&k_d\frac{I}{r^2}\max(0, \vec n\cdot\vec l)\\&=+&k_a\,I_a\end{aligned}\)

着色频率 Shading Frequencies

  • Flat shading
    • 整个三角形共用该面的法线与颜色(shading 一次)
  • Gouraud shading
    • 先计算出三个顶点的法线与颜色(shading 三次),其他像素以插值形式计算得到颜色
  • Phong shading
    • 先计算出三个顶点的法线,其他像素以插值形式计算得到法线,并计算颜色(为每个像素做 shading)
  • 如何求顶点的法线
    • 取相邻面的法线求(加权)平均
  • 如何求像素的法线
    • 重心坐标插值 Barycentric interpolation

实时渲染管线 Real-time Rendering Pipeline

原始的顶点数据
Vextex Processing
- MVP, texture mapping -
⬇️
⬇️屏幕空间上的顶点
Triangle Processing⬇️
⬇️屏幕空间上的三角形
Rasterization
- sampling -
⬇️
⬇️片元 ( ≈像素)
Fragment Processing
- z-buffer, shading, texture application -
⬇️
⬇️已着色的片元
Framebuffer Operations⬇️
图像(像素的组合)

着色器 Shader

  • 编程顶点、片元的处理流程
  • 每个顶点/片元执行一次(无需自行编写循环)

纹理映射 Texture Mapping

  • 纹理坐标:无论纹理大小,一般映射到 \(uv \in [0, 1]^2\)
  • 三角形的每个顶点都对应着一个 uv 坐标
  • 四方连续 tilable 概念:在重复铺设的情况下,上下左右可以无缝衔接

GAMES101第八课笔记 - Blinn-Phong 反射模型(下)、着色频率、渲染管线》有一个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据