球諧函數Spherical Harmonics與全局光照Global Illumination

圖學玩家
Jul 28, 2024

--

<圖學玩家 第045篇 原創文>

GI + Direct Lighting + PBR

本文介紹球諧函數SH (Spherical Harmonics)於全局光照GI (Global Illumination)中的應用。

Spherical Harmonics

首先得複習一下傅立葉轉換,也就是把一維f(x)的連續函數,在頻域上轉為許多基函數的和,如下圖右方可以用多個基波組成方波的形狀。

任意三維球座標上的f(r, θ, φ)連續函數在拆解為R(r) * Y (θ, φ)後,其中
Y(θ, φ)可視為一二維的角度函數。

而Spherical Harmonics (以下簡稱SH)讀者可以理解為Y(θ, φ)在頻域上的一組基函數。下圖中的l指的是,也就是l越大,基函數的頻率越高,這部Youtube影片圖示化的滿清楚的。

關於SH的一些基本性質,例如正交性等等,可以參考這篇

因此任意複雜的Y(θ, φ),都可以視為SH的組合,也是其訊號低頻的組合。下圖越往右,代表所用的SH階(l)越高。

至於求得各SH的係數,可以直接透過以下公式。其中f(ω)為目標二維函數,也就是上述的Y(θ, φ); B(ω)為SH基函數; i為階。

From GAMES202

Global Illumination

Rendering Equation

首先先介紹Rendering Equation,也就是人眼如何看出任一位置的顏色(如下圖)。

其公式如下,雖然看似複雜,但其實也就是透過材質與來自半球面光源(Li)做球面積分加上該點自己的點光源(Le)。

From CMU Computer Grphics Course

積分過程會使用如蒙地卡羅積分,或進階一點搭配Importance Sampling。詳細可以參考CMU課程,不在本文探討範圍。

傳統光照模型

為避免每個要Rendering的位置,都需要經過上述複雜的積分,傳統光照模型定義以下三種光源

  1. Main Light: 點光源或方向光源。
  2. Ambient Light: 低頻環境光,簡單用一個平均數值表示,省去球面的複雜積分。
  3. Environment Map: 高頻球面光貼圖,可以利用要Rendering位置的法向量與該貼圖做捲積,強化高頻的效果。
Environment Light Map

全局光照模型 (GI)

那甚麼是GI (Global Illumination)? GI可以想像成是把Indirect Lighting(下圖左方)也全部參考進來的光照模型。

如果我們只用Ambient Light,那麼畫面會很扁平,沒辦法做到如下圖右方這種效果。

SH Lightmap

接著就要進入SH於GI的應用了。首先我們去計算場景中每個點的半球光罩(下圖左),並將其簡化為SH的組合(下圖右)。如此也就代表Rendering Equation中的半球積分,只需與SH組合做簡單向量運算即可。

如此對場景中每個點都進行SH的計算,產生Lightmap的過程稱為Baking。過程中我們也會將3D立體場景拍到一張2D的Lightmap (Atlas)上:

3D scene and its corresponding Lightmap UV Atlas

此時我們會希望每個幾何面對應到的Texel Resolution相同,下圖是個很好的例子:

Lightmap UV Atlas

以下是Baking完的Lightmap結果(也就是僅有Indirect Lighting):

From GAMES104

搭配上主光源後如下:

From GAMES104

最後再搭配上材質:

From GAMES104

如果喜歡筆者的文章分享,可以幫忙追蹤圖學玩家,你們的閱讀與追蹤是筆者繼續為大家分享的動力~

Ref

  1. GAMES104-現代遊戲引擎
  2. 球諧函數的概念與應用
  3. 球諧函數介紹
  4. Spherical Harmonics
  5. GAMES202-高質量實時渲染

--

--