Unity HDRP Lighting (下)

What is Light probe, Realtime GI, Baked GI ?

在Unity的光照世界裡面,Real time GI 以及 Bake GI等光照系統都扮演著重要角色,尤其是GI帶有全域光照能夠讓場景更加真實。以下會為各位一一的介紹Unity的光照世界觀。

1. Light probe

     ・Shine non-static object

     These non- static objects better be small enough

2. Real time GI

     ・Shine static object

     These static objects show gradient colors

3. Bake GI

     ・Shine static object

     These static objects show gradient colors

     Generates extra light maps

     ・You’ll need extra bake time

Light Probe

這個技術是讓non-static從場景接收間接光的有效方法。儘管使用該技術的non-static會產生反射光,但通常這沒有什麼明顯的影響。因為探測照明的物體往往是較小的物體,能反射的光很少,對周圍環境的影響很有限,通常會需要發光體或是光源較亂的區域製作。

放置Light Probe

非靜態物體根據距離最近的探頭來接收光照。光照探頭會將整個空間劃分成一個個四面體,一個物體最終從哪個探頭讀取光照數據這個物體最終落在哪一個四面體中確定的。為了能夠形成這些四面體,探頭在擺放時必須形成三維的立體形狀或者籠子的形狀(不能只在一個平面上擺放)。

設置Light Probe的步驟如下:

・首先從GameObject菜單(GameObject > Light > Light Probe Group創建一個Light Probe Group

・現在我們將開始放置探頭。在Hierarchy中選擇新創建的Light Probe Group

・在Inspector中,在Light Probe Group組件中選擇“Edit Light Probes ”

・選中一個探頭,按Ctrl + DMac上的Cmd + D可以復制一個出來,然後使用Move ToolW移動探頭。

・一般來說,放置探頭在Y軸至少要放置兩層,接近地面的區域可以多放置一些,空中可以少放置一些

光照“敏感”的區域有哪些呢?

一個場景中可以建立多個Light Probe Group,比如一個光影複雜的城市中使用一個較密集的Light Probe Group,城市周邊使用一個較稀疏的Light Probe Group。場景中有多個Light Probe Group時,Unity在執行時會將這些Group自動合併,並且會移除位置重複的Probe。

小結

・Light Probe能給動態物體提供高質量光照

・放置Light Probe時儘量放到光影變化多的地方

當為多個場景配置產生GI光照時,Unity所提供的工作流程會讓使用者載入所有需要的子場景,然後為全部的場景階層(hierarchy)產生照明。這將會輸出一個LightingData.asset檔案,它會保存光照貼圖、預計算即時GI和probe數據。這些與第一個載入的場景有關。

Global Illumination

在執行期間,加載/卸載的場景會從與主場景相關聯的LightingData.asset中導出它們的照明數據。 這可能導致場景帶有不相容的照明設置和不符合的照明數據。例如: skybox可能會不太相同,光照貼圖解析度可能會變化,混合光照模式可能也會改變。

如何開啟Realtime GI

快速地開啟Real time GI

  1. 打開右邊視窗的Lighting
  2. 狗選Realtime Lighting >Realtime Global Illumination

Bake light Map

Baked:燈光的直接和間接照明被烘焙成光照貼圖。設置為該模式後,該燈光在程序運行時將不佔用性能成本,同時,將生成的lightmap應用到場景中的成本也較低。

當烘焙一張Lightmap時,場景內的靜態物件會基於光的影響算出一張貼圖成果,並疊在場景物件之上建立照明效果

這些Lightmaps可以包含場景內投射到物體表面的直接光源,以及在不同物體間反射的”間接光源”,這樣的光照貼圖可以透過物體材質上的 Shader描述像是顏色的Albedo和Normals資訊

Lightmap

Lightmap有三種模式:

Non-directional :模式開銷最小,得到一個普通的漫反射效果。

Directional: 模式會計算法線,所以Lightmap帶有漫反射和法線的效果。

Directional Specular: 模式還會保留高光效果。

選擇合適的Lightmap Resolution很重要,它是一個控制場景的光照圖占用總像素的全局值。官方推薦的Lightmap Resolution值,場景比例與世界單位一致(1unit=1米)的情況下,室外場景0.5~1,室內2~3,地形0.1~0.5。我們以1米為一個單位,對於一個豐富的室內小場景,有很多不同的燈光和反彈照明,那麼光照圖的解析度可以設置2~3像素/單位,可以容納更多的燈光細節。

如果是一個很大的室外場景,遊戲世界的比例會更大一些,也許一個物體的表面可以達到上百甚至上千米,單個表面同時受到燈光的種類比較少,這種情況下,對物件可設置光照圖的解析度在0.5~1像素/單位,對地形可以設置為0.1~0.5像素/單位。在舊版本的烘焙技術中,因為烘焙陰影需要較高的精度,Realtime Resolution可能設置到10~30。

而Mixed Lighting烘焙模式推薦使用間接光照與實時陰影,對烘焙陰影的要求降低了很多。因此,需要根據實際場景的規模、使用的烘焙模式、烘焙效果的要求等綜合考慮,選擇一個合適的值。



Scale In Lightmap

在全局Lightmap Resolution的基礎上,預設的Scale In Lightmap為1,為需要特別設置精度的物件按照分類制定規範,設置不同的精度比例。

比如建築物的牆面結構簡單,受光主要是低頻光,參數可調低到0.5;城市街道需要更高的陰影精度,參數可調高到3;野外大面積的地形和大量的植物,參數可調低到0.5;細節較多的主體物件,參數可調高到2。

Reflection probe

Reflection Probe實際上就是環境映射,可以說是進階版的環境映射,只不過是環境映射的擴展,包含環境映射的全部屬性。傳統意義的環境映射,更多的時候是對應材質上的一個屬性,但是實際上,用環境映射表示反射,表示的是當前的環境屬性,屬於當前場景的信息,而不再是屬於某個材質,這才更對得起環境映射這個名字。Unity已經為我們設置好了相關的屬性信息,我們在shader中可以直接使用,當Reflection Probe設置好位置時也是要到Lighting裡面進行Bake才會產生。

Reflection Probe 通常分為Box 以及Shape兩種,其中以Box在場景中最常使用。

使用Reflection Probe 最好是將範圍包圍整個場景,但也有不同房間連結,或是你有想要反射出不同環境的場景,這時候就要製作多個Reflection Probe讓每個獨立的場景反射出個場景的環境。

在製作Reflection Probe的時候記住要將範圍與你想要反射的場景盡量拉齊

若是你沒有設定Reflection Probe要反射什麼環境的話,預設為反射天空

Light Layer

我們在Unity進行打光的同時常常會在預設的情況下,所打燈的物件以及其他周圍物件都會接受到光照,這時候Light Layer就發揮了他的作用,可以選擇不同的Layer讓不同的物件接收到指定的光源。

How to use Light Layer in HDRP?

Step1.  找到HDRP檔案並勾選Lighting中的Light layers

Step2.  選取Light並勾選more option

Step3.  設定光源的Layer,這邊可以依照自己喜好設定Layer

Step4.  選取所接受物件,找到Rendering Layer 並指定為光照所屬Layer即可完成

總結:在Unity的世界光照算是比較複雜的功能,依照不同的場景以及不同的需求配合的光照即有所不同,如果運用在遊戲裡面的話更需要好好的規劃Lighting。

HDRP Light

REALTIME LIGHTING in Unity

REALISTIC LIGHTING in Unity! (Tutorial)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *