[閱讀筆記] Unity shader 入門精要 #1

《Unity shader 入門精要》的讀書筆記,一到四章。

第一章為書本簡介,二到四章為螢幕渲染的基本知識、數學原理。

第二章:Rendering Pipeline 介紹

  • 三階段
    • 應用階段 Application stage - 剔除不可見的物件 (out of view frustum)、設定材質等,CPU的運算工作。
    • 幾何階段 Geometry stage - 頂點運算、轉換至螢幕座標,GPU的運算工作。
    • 光柵化階段 Rasterizer stage - 將三角面轉換成像素點,並處理,GPU的運算工作。
  • 四種 shader
    • Vertex shader - 幾何階段,可編程,處理頂點
    • Tessellation shader - 幾何階段,可選擇
    • Geometry shader - 幾何階段,可選擇
    • Fragment shader - 光柵化階段,可編程,處理像素點
  • 兩項 Per-Fragment Operation 測試可以開關
    • Stencil Test
    • Depth Test
  • 螢幕座標差異
    • OpenGL 左下為原點,DirectX左上為原點

第三章:Unity shader 基礎

  • 材質 material = shader + texture + 各種參數
  • 物件表現 = mesh + material
  • 四種 unity shader 模板
    • Standard surface shader - 包含標準光照
    • Unlit shader - 不含光照
    • Image effect shader - 螢幕後處理特效
    • Compute shader - 調用 GPU 資源做運算
  • 一個 shader 的架構
1
2
3
4
5
6
7
8
9
10
11
12
13
Shader "名稱" { 
Properties { }
SubShader {
[Tags][RenderSetup]
// 如:Tags {"Name1" = "value1" "Name2" = "value2"}
// 項目之間用空格區分
Pass {
[Name][Tags][RenderSetup]
// Name 是給予 UsePass 引用,使用時會自動轉為全大寫
}
}
FallBack "名稱"
}
  • 宣告 shader property
    • 變數名稱(“顯示名稱”, 型態) = 預設值
    • 如:_Int("Interger", Int) = 5
  • UnityLab 提供的一個特殊 shader 類型:Surface shader
    • 有著大量封裝,編寫的程式碼較短,但效能較差
    • 適合處理光照,方便但對行動裝置不友善

第四章:Shader 相關的數學基礎

  • 座標系、座標、向量
  • 矩陣、座標轉換、齊次座標系
    • 齊次座標 (x, y, z, w),三維座標 (x/w, y/w, z/w)
    • 習慣上的轉換次序:縮放、旋轉、平移