2016年12月29日 星期四

Unity預計算即時GI - 7.了解叢集

原文
翻譯:Kelvin Lo

版本:5.5 難度:中等

到目前為止我們已經圍繞在預計算即時GI的光照圖討論了很多像是縫合或打包技巧等等關於優化簡化光照圖的流程,這對減少預計算所產生的資料大小以及執行效能有很大的幫助。

接下來我們要討論的是叢集,透過修改叢集(Clusters)也是一個降低Unity預計算流程所需要執行的工作數量的好方法。降低叢集數量也能提高執行時的效能。

當採用PRGI來計算場景光照時,Unity會簡化產生一個立體像素化結構的計算,這些立體像素(Voxel)叫做叢集。叢集實際上是反映到場景靜態幾何表面用於照明的表面,叢集用一種層級關聯的結構來儲存,用來預計算Unity的全域光照漫反射所需要的複雜運算。雖然叢集和光照圖很像,但兩者用途是各自獨立的。

Clustering繪製模式可以查看預計算GI所計算出的叢集大小

叢集會對靜態物件表面除去光照資料的材質(Albedo)進行取樣,然後在Light Transport運算階段計算這些叢集間的關聯,好讓光在整個叢集網之間傳遞。
Unity產生這種低解析度靜態環境,以便簡化在Runtime時需要更新的光照資料的量,在不同FPS的情況下透過硬體提供全域光照結果。

圖示叢集X的值如何和附近的叢集值關聯(本圖由Geomerics提供)

一旦預計算完成後,你可以修改Skybox或光線的位置、強度和顏色,不需要再重新預計算,光線就會透過這些叢集網,連同場景材質和發光材質一併考慮計算光照反射。

第一次反彈之後的光照結果會被存回叢集裡,在每次的迭代後叢集會被採樣到相對應的光照貼圖裡,最後被場景Shader呼叫使用。

由於這個過程在CPU上非同步進行,每次的更新時間反映在用了多少工作執行緒,如果需要的話,可以從Lighting視窗找到CPU Usage來設定工作執行緒的多寡。

Lit Clustering場景繪製模式下顯示出當光線透過叢集網反映到叢集的樣子

你可以用Clustering或Lit Clustering場景繪製模式來觀察叢集的分佈,在Clustering模式下,場景會由許多彩色方塊疊成一個診斷圖,每個正方形大小代表投射到靜態幾何的叢集大小,每一種顏色代表不同的叢集。Lit Clustering模式也是一樣,它顯示當光線透過叢集網並反映到叢集時的樣子。

降低叢集的數量在很大程度上決定了更新的速度,和在你目標平台的最終結果。更重要的是,這個教學的用意在說明當你減少叢集數量的設定將會加速預計算光照的時間,就結果來看,照明的迭代速度也會提升,下一章節會說明如何操作。


---------------------------------------------------------------------------------

Unity預計算即時GI全文超連結
Unity預計算即時GI - 9.總結
Unity預計算即時GI - 8.微調光照參數
Unity預計算即時GI - 7.了解叢集
Unity預計算即時GI - 6.拆解與減少光照圖
Unity預計算即時GI - 5.光照探測
Unity預計算即時GI - 4.開始預計算
Unity預計算即時GI - 3.了解光照圖
Unity預計算即時GI - 2.即時解析度
Unity預計算即時GI - 1.介紹


沒有留言:

張貼留言

著作人

網誌存檔