[譯]Unity – Forward Rendering Path Details

原文:Forward Rendering Path Details

這個頁面是關於 Forward rendering path 的詳細內容。

Forward Rendering path 會根據該物件被幾個 lights 影響,使用一個或多個 pass 去繪製。Lights本身也會根據他們的設定和影響強度,Forward Rendering 會有不同的處理方法。

Implementation Details

在 Forward Rendering 裡,某些亮度較強的 lights 會讓受影響的物件使用 fully per-pixel lit mode。然後,最多只有4個 point lights 會在 per-vertex 被計算。而其他 lights 會被當作 Spherical Harmonics (SH) 計算,雖然只是一個近似值,但會快速許多。一個 light 會根據以下條件判斷是否成為 per-pixel light:

  • Render Mode 設置為 Not Important 的 lights 總會是 per-vertex or SH。
  • 最亮的 directional light 總會是 per-pixel。
  • Render Mode 設置為 Important 的 lights 總會是 per-pixel。
  • 如果符合上述適用 pre-pixel 的 lights 數量少於目前的 Pixel Light Count Quality Setting,那麼會依照亮度讓更多 lights 加入 per-pixel。

每個物件繪製的狀況如下:

  • Base Pass 會 apply 一個 pre-pixel directional light 以及所有 per-vertex/SH lights。
  • 其他 per-pixel lights 會在 additional passes 裡繪製,每 light 各一個 pass。

舉例來說,如果那裏有一些受到數個 lights 影響的物件(如下圖由light A~H 組成的環狀陣列):

假設 lights A~H 都是相同的顏色和強度,Render Mode 皆設置為 Auto。那麼他們對於這個物件的優先順序就如同編號順序。最亮的幾個 light (A~D)會在 per-pixel lit mode 使用,然後最多會有4個 lights (D~G) 會在 per-vertex lit mode 使用,剩下的(G~H)就會在 SH 使用。

注意 lights groups 的重疊部分;這個範例裡面的最後一個 per-pixel light 也會混入 per-vertex lit mode,進而減少物體和燈光移動時造成的"light popping"。
※"light popping"不知道這啥意思,應該就類似一個緩衝區吧?XD

Base Pass

Base pass 會使用一個 per-pixel directional light 和所有的 SH lights繪製物件。這個 pass 也會加入任何來自 shadow 的 lightmaps, ambient 和 emissive lighting。在這個 pass 裡面 directional light 可以有 Shadows。Lightmapped 的物件要注意別被 SH lights 影響到。

Additional Passes

Additional Passes 會被影響這個物件的每個 lights 所使用。在這個 pass 裡面不能有 shadows (也就是 Forward Rendering 只會支援一個被 directional light 影響的 shadows)。

Performance Considerations

Spherical Harmonics lights 繪製得非常快速。他們在CPU上只會有一個極小的cost,在 GPU 基本無限制 (也就是說,bass pass 總是會計算 SH lighting;但是由於 SH lights 的運作方式,不管有多少 SH lights ,所造成的 cost 幾乎相差無異)。

SH lights 的一些缺點:

  • 他們是在物體的 vertices 上計算,而非 pixels。這表示他們不會支援 light Cookies 或 normal maps。
  • SH light 是很 low 的。你不能用 SH lights 去做銳利的 lighting transitions(這個不知道怎翻…)。另外他們也只單單影響 diffuse lighting(對於 specular highlights 來說太 low 而無法使用)。
  • SH lighting 並非在他設定的位置上;point 或 spot SH lights靠近某些 surface 會"看起來有些問題"。

總之,SH lights 對於一些較小的動態物件仍然是足夠的。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s