Unity 5 全局光照GI與新的烘焙系統初探
GI是啥
Realtime GI,實時全局光照,聽上去就是一個非常高大上的詞,但是越高大上就越令人心生敬畏,因為世上沒有免費的午餐,越好的效果意味著越多的消耗,對于移動平臺來說,這樣的消耗受不受的起呢?首先來說說GI是干啥的,非常粗略的來描述下,如果說我們以前的光照系統就是由光源 - 物體 - 視點組成的話,那么全局光照系統就是由光源 - n多環境反射光 - 物體 - 視點。就是說GI額外包括了環境反射光的計算,它可以使得渲染出來的場景物體間的光影交互更為真實。
如果是離線烘焙的話,n多的環境反射光就是通過輻射度算法或者是光線追蹤算法一點點計算出來的,但是實時渲染沒有這么多的時間。為了實現實時的GI,簡單的說來,Unity(Enlighten GI)需要預計算一些信息,這些信息大概包括場景間物體之間的位置、反射關系,以及一個環境反射樹(這些都是我瞎猜的),在實時渲染時,利用這些信息Unity會動態生成一張間接光照貼圖,像原先的Lightmap一樣只不過上面記錄的是物體表面受到間接光的信息,這樣在實時渲染時就會看到物體受到反射光的影響了。
因此Unity GI有了如下特點:
而GI產生的開銷主要包括:
GI與Lightmap
看的出來GI的額外性能消耗是可以接受的,我在手機上進行測試,即使是很大很復雜的場景跑起來也完全沒有問題(當然也是因為我是在iPhone6上測的)。不過多數情況下如果說你的場景中不存在光線變化或是動態的自發光材質,還是固定鏡頭的話(沒錯,我說的就是RPG),GI對于游戲來說仍然是沒有用處的,所有GI能做到的事情用簡單的Lightmap就能達到同樣的效果?,F在問題來了,Unity配合GI又搞了一個新的烘焙系統,這個系統要怎么玩兒呢。
首先,現在當你說烘焙時一定要弄明白你想烘焙的是Realtime GI所使用的間接光照圖和場景樹信息還是Static Lightmap,然后以此決定使用光源的類型是Realtime/Mixed/還是Baked。首先來說烘焙的方式,在Lighting面板中Precomputed Realtime GI 與Baked GI分別對應Realtime GI與Static Lightmap的烘焙。
組合起來就是三種(跟我說你啥都不烘的可以走了):
只烘焙RealtimeGI
關閉Baked GI或者場景中的全部光源類型設置為Realtime。這意味著沒有任何光照顏色會被預先烘焙計算,引擎在烘焙時只是存儲場景內靜態物體間的關系,當烘焙完成后你可以自由的調整光源或物體材質,并實時地看到效果。
此時在Scene中觀察Baked結果可以看到沒有任何靜態顏色被烘焙出來。
在僅使用RealtimeGI時,光源應該選擇Realtime類型。烘焙選項Realtime Resolution對應前文所說的間接光照圖,值越高間接光的效果就越明顯(其實應該是越準確,當分辨率太低時間接光會因像素過濾而變弱)
Realtime Resolution = 10
Realtime Resolution = 1
只烘焙Static Lightmap
取消Precomputed Realtime GI的勾選即為同原來一樣的純靜態光照圖烘焙。光源的選擇則同原來一樣,Realtime的燈光不參與烘焙,但同時作用于動態與靜態物體上;Mixed光源參與烘焙,實時運行時僅作用于非靜態物體;Baked光源僅作用于光照烘焙,不參與實時光照計算。
再次觀察SceneView可以看到烘焙出來的顏色。
在Lighting面板中的Lightmaps頁簽中也可以看到烘焙出來的光照圖。咦?怎么有兩張,稍后解釋
如果使用純Static Lightmap烘焙時會有一個Indirection Resolution的設置,這個設置就對應于Precomputed Realtime GI中的Realtime Resolution,同樣是控制間接光的影響,產生的效果是一樣的。
同時烘焙Static Lightmap與RealtimeGI
如果同時烘焙Static Lightmap與RealtimeGI會發生什么事情呢?首先光源產生的光照以及物體間的二次反射光線都會被直接烘焙在靜態光照貼圖上,因此前文所提使用GI可以自由實時調整光源或是物體材質的效果在這種烘焙模式下都是沒有用的,但是自發光材質以及天空光產生的輻射光線在這種模式下仍然是可以實時變化并疊加作用于已烘焙的顏色上。
光照烘焙顏色信息
輻射度信息
最終合成顏色
輻射度信息圖中除了自發光的紅色外還有一點點靛青色,這是天空盒產生的顏色,在Environment Lighting中調整Ambient Intensity可以控制天空盒對場景整體明暗的影響。總的來說主體顏色還是靜態烘焙出來的Lightmap控制,但是增加了GI中的動態天空光和自發光??偟膩碚f不建議使用這種方式進行場景渲染,又消耗了靜態Lightmap和GI所需的內存,又消耗了GI的計算資源,效果還沒單個使用的好。
在我看來GI最大的好處是可以讓美術實時的看到使用Lightmap烘焙后的場景效果,也就是說首先關閉Baked GI僅烘焙一些Precomputed Realtime GI,隨后美術就可以隨意的調整光源、物體材質、天空盒等數值并實時觀察到場景的最終效果,最后當一切都滿意后關閉Precomputed Realtime GI使用Baked GI進行光照貼圖的烘焙即可。
轉載自:http://www.bkjia.com/Androidjc/999048.html