GAMES101-8 20200306/20210708 Shading 2 (Shading, Pipeline and Texture Mapping)


8 20200306/20210708 Shading 2 (Shading, Pipeline and Texture Mapping)

A Simple Shading Model (Blinn-Phong Reflectance Model)

Diffuse Term (last time)

Specular Term (Blinn-Phong)

Specular Term (Blinn-Phong)
  • 高光项是因为观察方向和镜面反射方向足够接近($\bf{v,R}$ 足够接近)

  • 相当于法线方向 $\vec n$ 和半程向量 $\vec h$(即 $\bf{I,v}$ 向量加和后归一的方向)很接近

  • diffuse
    $L_d = k_d (I/r^2)\max(0,\bf{n · l})$

  • specular
    $L_s = k_s (I/r^2)\max(0,\cos \alpha)^p\
    = k_s (I/r^2)\max(0,\bf{n · h})^p$

    • 这里按理也要考虑能量吸收 $\max(0,\bf{n · l})$
      但因为 blinn-phong 是经验模型 所以简化掉了

    • $p$ 指数为高光修正 用于控制高光可见范围 为保证只有小范围能看到高光 可能值为 100-200

      Cosine Power Plots Specular Term (Blinn-Phong)

Ambient Term (Blinn-Phong)

Ambient Term (Blinn-Phong)
  • $L_a = k_a I_a$
    • 环境光不管从哪里进来 和 v 无关
    • 假设在哪里看都一样 和 w 无关
    • 环境光是常数 作用是保证没有地方是完全黑的
    • 精确计算需要环境光照

Sum: Blinn-Phong Reflection Model

Sum: Blinn-Phong Reflection Model
  • $L = L_a + L_d + L_s$

Shading Frequencies 着色频率

Shading Frequencies
  • 着色频率:(着色粒度)着色应用在哪些点

    • 分别表示着色在平面/顶点/像素上
  • 每个平面着色 (flat shading)

    flat shading
  • 每个顶点着色 (Gouraud shading)

    Gouraud shading
    • 内部插值
  • 每个像素着色 (Phong shading)

    Phong shading
    • not the blinn-phong reflectance model (model 是着色模型,phong shading 是着色频率)
  • 计算量开销不一定谁大

    计算量开销不一定谁大

Defining Per-Vertex Normal Vectors 算逐顶点法线

  • 做顶点所关联的面的法线做加权平均

    Defining Per-Vertex Normal Vectors

Defining Per-Pixel Normal Vectors 算逐像素法线

Defining Per-Pixel Normal Vectors
  • 需要用重心坐标

把以上内容合起来

Graphics (Real-time Rendering) Pipeline

Graphics (Real-time Rendering) Pipeline
  • Graphics Pipeline

    • vertex processing 输入一堆点

    • MVP 投影到屏幕上

      Graphics Pipeline - MVP
    • Triangle Processing 形成三角形

    • Rasterization 光栅化离散成 fragments (fragment 类比于像素)

      Graphics Pipeline - Rasterization
    • Fragment Processing 着色 shading

      Graphics Pipeline - Fragment Processing - Z-Buffer Graphics Pipeline - Fragment Processing - Shading
      • 需要看到底是顶点着色还是像素着色
      • 控制顶点/像素着色的着色器:shader
      • texture mapping 纹理映射
    • 显示 output

Shader Programs

Shader Programs
  • 每个顶点/fragment会执行一次 所以只考虑一个顶点/像素的操作

  • 写的是通用程序

    • 如果写的是顶点操作 - vertex shader
    • 如果写的是fragment - fragment shader

    Shadertoy BETA

    Snail Shader Program
  • Inigo Quilez


线代图形学发展

Goal: Highly Complex 3D Scenes in Realtime

Goal: Highly Complex 3D Scenes in Realtime

Graphics Pipeline Implementation: GPUs

Graphics Pipeline Implementation: GPUs
  • 实现

  • 三角形怎么光栅化

  • 如何投影

  • GPU
    • GPU:可以理解为高度并行化的处理器

以上为图形管线


Texture Mapping 纹理映射

  • Different Colors at different places

    Different Colors at different places
  • 引入纹理映射的原因:在物体不同位置引入不同属性

    • 如漫反射属性
  • 纹理和着色的区别:

    • 纹理:定义着色的时候各个不同点的属性 不希望每个点都以相同方式进行着色
  • Surfaces are 2D

    Surfaces are 2D
    • 每个三维物体的表面都是二维
    • 纹理:就是一张图 有一一对应关系
  • Texture Applied to Surface

    Texture Applied to Surface
  • 如何把空间中的三角形映射到纹理上?

    • 美工/程序人工映射
    • 自动映射 parameterazation 参数化 很难
  • Visualization of Texutre Coordinates

    Visualization of Texutre Coordinates
  • uv 纹理坐标系

    • 范围 0-1
  • 可重复使用

    Texture Applied to Surface
  • Textures can be used multiple times

    Textures can be used multiple times
    • 纹理设计得好就可以无缝衔接
    • tileable texture
    • Wang tiling

  • next:知道三角形三个顶点 uv
    如何知道三角形内部 uv - 插值


Author:
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source !
  TOC