1. 程式人生 > >Unity渲染路徑 Rendering Paths_2_Forward Rendering 正向渲染

Unity渲染路徑 Rendering Paths_2_Forward Rendering 正向渲染

Forward Rendering 正向渲染
       正向渲染一個基於著色器的渲染路徑。它支援逐畫素計算光照(包括法線貼圖和燈光Cookies)和來自一個平行光的實時陰影。在預設設定中,少數最亮的燈光在逐畫素計算光照模式下渲染。其餘的燈光計算物件頂點的光照。
       根據影響物體的光源的不同,正向渲染路徑用單個或多個通道來渲染物體。在正向渲染中,光源本身也會根據他們的設定和強度受到不同的對待。

實現細節
       在正向渲染中,影響物體的最亮的幾個光源使用逐畫素光照模式。接下來,最多有4個點光源會以逐頂點渲染的方式被計算。其他光源將以球面調和(Spherical Harmonics)
的方式進行計算,球面調和技術計算很快但只能得到近似值。根據以下的規則判斷一個光源是否為逐畫素光源:
  • 渲染模式被設定為不重要(Not Important)的光源以逐頂點或球面調和的方式進行計算
  • 最亮的方向光源為畫素光源
  • 渲染模式被設定重要(Important)的光源為畫素光源
  • 如根據以上規則得到的畫素光源數量小於質量設定中的畫素光源數量(Pixel Light Count),為了減少亮度,會有更多的光源以逐畫素的方式進行渲染
用以下的方法渲染每個物體:
  • 基礎通道渲染一個逐畫素方向光和所有的逐頂點/球面調和光。
  • 其他逐畫素光在附加的通道中進行渲染,每個光源都需要一個通道
       假設光源A到H都有相同的顏色和強度,且它們的渲染模式都為自動的(Auto),那麼它們嚴格的按照其名字排序
。最亮的光源以逐畫素光照模式的方式進行渲染(A到D),然後最多有4個光源以逐頂點光照模式進行渲染(D到G),其他光源以球面調和的方式進行渲染(G到H)。
     注意不同的光照組間有重疊,如,最後一個逐畫素光源也以逐頂點光照模式的方式渲染,這樣能減少當物體和燈光移動時可能出現的"光照跳躍"現象。
Base Pass 基本通道
       基礎通道用一個逐畫素方向光和所有球面調和光渲染物體。此通道還負責渲染著色器中的光照貼圖,環境光和自發光。在此通道中渲染的方向光可以產生陰影。需要注意的是,使用了光照貼圖的物體不會得到球面調和光的光照。
Additional Passes 附加通道
       附加通道用於渲染影響物體的其他逐畫素光源。這些通道中渲染的光源無法產生陰影(因此,前向渲染支援一個能產生陰影的方向光)。
Performance Considerations 效能注意事項

       渲染球面調和光很快。它們只花費很少的CPU計算時間,並且實際上無需花費任何GPU計算時間(換言之,基礎通道會計算球面調和光照,但由於球面調和光的計算方式,無論有多少球面調和光源,計算它們所花費的時間都是相同的)。
球面調和光源的缺點有:
  • 它們計算的是物體的頂點而不是畫素。這意味著它們不支援投影遮罩和發現貼圖。
  • 球面調和光只有很低的頻率。球面調和光不能產生鋒利的照明過渡。它們也只會影響散射光照(對高光來說,球面調和光的頻率太低了)。
  • 球面調和不是區域性的,靠近曲面的球面調和點光和聚光可能會"看起來不正確"。
總的來說,球面調和光的效果對小的動態物體來說已經足夠好了。