程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【Unity】第12章 光照貼圖和光影效果,unity第12章

【Unity】第12章 光照貼圖和光影效果,unity第12章

編輯:C#入門知識

【Unity】第12章 光照貼圖和光影效果,unity第12章


分類:Unity、C#、VS2015

創建日期:2016-05-19

一、簡介

在Unity 5中,Lighting是—種增強場景光照和陰影效果的技術,它可以通過較少的性能消耗使靜態場景看上去更真實、豐富,以及更具有立體感,又可以對動態對象進行處理。

早期版本的Unity 4只能對“靜態”對象和“動態”對象分別進行處理,稱為Lightmapping(光照貼圖),但是,Lightmapping不能被用來實時地處理“動態”光照;而在Unity 5中,與Lightmapping相關的功能被重新整合在Unity引擎中並通過【Window】->【Lighting】打開設置窗口,在Lighting窗口中,開發人員只需要簡單的操作,就可以制作出平滑、真實且不生硬的光影效果。

Light Probes是一種在運行時將“動態對象”融入“靜態場景”的技術,利用它可解決實時處理“動態”光照的問題。其基本原理是:先在場景空間中放置一些采樣點來收集其周圍的明暗信息,然後在運行時對動態對象鄰近的采樣點進行插值運算,並將插值結果作用於動態對象上。由於插值運算並不會耗費太多的性能,因此這種方式既能實現動態游戲對象和靜態場景的實時融合效果,又不會導致內存資源的極大消耗。

二、全局光照(GI)

使用Unity 5提供的功能實現光照貼圖和光影效果前,首先需要掌握兩個基本概念:一個是GI,另一個是Realtime GI。

GI(Global Illumination,全局光照)是指世界坐標系(Global)中模型A被光照射後反射到其他模型表面的光(間接光),而不是光源直接照射到模型A的直接光。例如,陽光照在紅色的沙發上會導致紅光反彈到它背後的牆上,從而使牆看上去也有淺淺的紅色光照效果。另一個例子是陽光照射在頂部只有一個小口的房間裡,這會導致該房間內的其他部分也被物體反彈(反射)的光照亮了。

下圖是一個應用了全局光照(GI)效果的場景,在這個圖中,由於反彈光(間接光)的作用,導致整個場景看起來明亮、華麗、更具有立體真實感。

傳統的電影技術一般只有直接光(如直射光、點光、……等光源)產生的效果,當實時地模擬間接光產生的效果時,由於模擬間接光需要進行大量的計算,會導致電影播放性能大大降低,因而在實際的電影制作時一般分兩步來做這件事:前期拍攝和後期制作。

在Unity中,這種類似於電影前期拍攝的工作稱為預處理。預處理是在Unity編輯器中進行的,主要針對靜態的對象進行處理,該技術稱為Baked GI(也叫Baked Lightmaps),即預先對間接光進行烘培(Bake)處理,烘培的目標是場景中事先被標記為Static的對象;而類似於電影後期制作的工作在Unity中稱為Light Probes,即先通過在場景中添加一些采光點(采樣點),再在運行時利用采光點的反彈(間接光)效果照亮其周圍,從而使整個場景看起來明亮華麗、賞心悅目。

在Unity 5.0之前的版本中,這種將Baked GI和Light Probes組合起來的技術就是全局光照(GI),也叫光照貼圖(lightmaps)。換言之,先在Unity編輯狀態下對場景中的靜態對象進行“預處理”,然後再在運行時利用Light Probes進行後期處理。這樣一來,游戲運行的場面看起來就會明亮、華麗、氣派。

三、實時GI(Realtime GI)

除了全局光照技術(GI)以外,Unity從5.0開始,又提供了一種新的稱為“Precomputed Realtime GI”的技術,其原理類似於5.0以前的早期版本提供的Baked GI技術。不過,雖然該技術針對的仍然是靜態的對象(即僅限於對被標識為static的對象進行處理),但是,它和Baked GI最主要的區別是:通過“Precomputed Realtime GI”預處理的結果還可以直接用於運行時(runtime)的動態對象照明。其實現原理是:Unity先把預先烘培(Bake)的信息(位置、方向、顏色、……等屬性)保存下來,這樣一來在運行時就可以直接通過這些預處理信息對動態對象進行照明處理了。換言之,在Unity 5中,只需要通過“Realtime GI”技術,就可以在運行時大大提高照明渲染處理的性能,而不需要再使用Baked GI+Light Probes進行組合處理了。

四、結論

總之,實現全局照明提供光陰效果時,要麼采用方式1(Unity 5之前的早期版本提供的“Baked GI”+“Light Probes”組合起來的技術),要麼采用方式2(從Unity 5.0開始提供的“Precomputed Realtime GI”技術)。但是,不能同時采用方式1和方式2,否則很快就會把內存吃光,從而導致非正常的自動關機(這應該是個新的bug,估計後續的版本會解決這個問題)。

再次提醒注意:“Baked GI”和“Precomputed Realtime GI”都是對“靜態”的對象而言的,即都需要先將被烘培的對象標識為“Static”才能對其進行照明烘培預處理。而對於動態的對象來說,如果烘培靜態對象時使用的是“Baked GI”技術而不是“Precomputed Realtime GI”技術,那麼還可以利用預先放置的采光點在運行時通過“Light Probes”實現對動態對象照明;如果烘培靜態對象時使用的是“Precomputed Realtime GI”技術,由於在運行時它可以直接對動態對象進行照明處理,因此這種情況下就不要再使用“Light Probes”了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved