Unity 光照

一、光照

       然後出現了所謂的高級渲染器,用計算機的計算來代替我們的手工勞動來進行這個「模擬」的工作。在漫長的發展過程中,出現過很多很多計算方案,總體上分爲這樣幾類:

  1. 直接模擬光線從被光源發出到最終被物體完全吸收的正向過程,也就是常說的GI(Global Illumination);
  1. 不直接模擬光線,而是反向蒐集物體表面特定點的受光照強度來模擬現實照明效果,也就是常說的FG(Final Gathering);
  1. 完全不考慮光線的行爲,單純基於「物體上與其他物體越接近的區域,受到反射光線的照明越弱」這一現象來模擬模擬現實照明(的一部分)效果,也就是常說的AO(Ambient Occlusion);
  1. 將場景光照結果完全烘焙到模型貼圖上,從而完完全全的假冒現實光照效果,也就是我們所說的Lightmap。
  1. 對於靜態物體來說,大多使用光照貼圖來模擬間接光的照明效果,然後加上直接光源的動態照明效果;
  1. 對於運動物體來說,則僅用直接光源的動態照明效果,或者使用光照探針來模擬間接光的照明效果。

不論是GI還是FG,計算量都是非常大的,一幀圖片需要幾十分鐘甚至幾十小時來渲染,所以很難被應用在遊戲設計領域。

因此在遊戲設計領域,光照貼圖技術依然是目前的主流方式。

由於光照貼圖需要事先烘焙(baking)出來,且僅支持靜態物體(Static Object),而我們的遊戲場景中幾乎不可能全都是靜態物體,所以通常遊戲場景中的燈光照明是多種照明方式的混合作用。

     unity3D光照系統Lighting菜單中,一共有6個選項,分別爲Directional Light(平行光),Point Light(點光源),Spotlight(聚光燈),Area Light(區域光),Reflection Probe(反射探頭),Light Probe Group(光照探頭組) 其中前四個爲unity中的燈光,如圖:


 1.Directional Light(平行光) 

平行光通常是用來做陽光的,unity的默認在場景裏放置平行光。平行光不會衰減。


  • Type:燈光類型,所有類型的燈光都其實共用一個組件,本質上是一樣的。
  • Directional(方向光):燈光放在無窮遠處,它影響着場景裏所有物體。
  • Color:燈光顏色。
  • Mode:燈光照明模式,每種模式對應Lighting面板中一組設定。
    • Realtime:對應Realtime Lighting。
    • Mixed:對應Mixed Lighting。
    • Baked:對應Lightmapping Setting。
Realtime Lighting是新 出現的一種烘焙光照技術,它並不像傳統的烘焙技術一樣直接烘焙間接光照顏色和亮度信息到光照貼圖上,而是烘焙物體和物體之間的關係信息,比如A面對B面有漫反射效果,B面對C面有漫反射效果等等。這樣一來,只要物體之間的關係不變(也就是所有的靜態物體都不移動位置),就不需要重新烘焙,從而使得我們可以在場景中隨意運用動態光源(dynamic lights)。而傳統的Lightmapping光照貼圖方式則不支持動態光源效果(改變光源不會改變場景光照)。Realtime Lighting比Lightmapping要更耗費系統資源,所以手游上就不要考慮了。
  • Intensity:燈光強度
  • Indirect Multiplier:在計算該燈光所產生的間接光照時的強度倍乘
  • Shadow Type:陰影貼圖的類型
    • No Shadows:無陰影貼圖
    • Hard Shadows:硬陰影貼圖
    • Soft Shadows:光滑陰影邊緣(也就是陰影模糊效果)
Hard Shadow和No Shadow對性能消耗的比較小。選擇伊寧之後,會出現新的小菜單。Strength代表陰影的強度,數值在0~1之間,1時陰影最明顯,0時無陰影。Resolution代表陰影的分辨率,Use Quality Setting表示在遊戲開始時根據玩家的選擇來設置陰影質量,其他四個依次代表從低分辨率到高分辨率。
  • Baked Shadow Angle:烘焙陰影的角度
  • Realtime Shadows Strength:實時陰影強度
  • Resolution:陰影貼圖分辨率
  • Bias:陰影偏移,通常適當增加這個值來修正一些陰影的artifact
  • Normal Bias:法線偏移,通常適當減少這個值來修正一些陰影的artifact(不同於Bias的使用場合)
  • Near Plane:陰影剪切平面,對於與攝影機距離小於這個距離的場景物體不產生陰影
  • Cookie:Cookie相當於在燈光上貼黑白圖,用來模擬一些陰影效果,比如貼上網格圖模擬窗戶柵格效果
  • Cookie Size:調整Cookie貼圖大小
  • Draw Halo:燈光是否顯示輝光,不顯示輝光的燈本身是看不見的
  • Flare:Flare可以使用一張黑白貼圖來模擬燈光在鏡頭中的「星狀輝光」效果
  • Render Mode:渲染模式
  • Culling Mask這個用來照亮選擇性的部分場景。
2.Point Light(點光源)

          點光源模擬一個小燈泡向四周發出光線的效果,點光源在其照亮範圍內隨距離增加而亮度衰減

  • Range光線射出的範圍,超出這個範圍則不會照亮物體。

3.Spotlight(聚光燈)

聚光燈模擬一個點光源僅沿着一個圓錐體方向發出光線的效果,聚光燈在其照亮範圍內隨距離增加而亮度衰減


  • Spot Angle燈光射出的張角範圍。燈光的聚光角度。

4.Area Light(區域光)

        面積光模擬一個較大的發光表面對周圍環境的照明效果,通常面積光的燈光亮度衰減很快,陰影非常柔和。unity3D的區域光僅在烘焙光照貼圖時有效,並不像Maya的Area Lights一樣能動態照亮場景。它只能作用於靜態物體,通過烘焙來生成光照貼圖,從而減少了性能的開銷。

  • Width面積光寬度。
  • Height面積光的高度。

5.Reflection Probe(反射探頭)-Unity - Manual: Reflection Probe

Unity3D中並沒並真實的Raytrace反射,而是通過反射貼圖來模擬所有的反射效果。

如果我們在場景中放置一個非常強反射的小球,我們就能看到這個小球上實際反射的是我們的Skybox,完全不會反射場景物體。這樣一來不僅影響到場景中反光物體的反射正確性,同時也會嚴重影響整體場景的光照準確性。

我們可以爲場景添加Reflection Probe來矯正不正確的反射貼圖。

Reflection Probe可以看做是一個帶有6個攝影機的點,它會渲染該點的6個方向(前後左右上下),將渲染結果拼成一個Cubemap,並應用給一個特定方框範圍內的所有物體作爲反射貼圖。

對於比較複雜的環境,比如有多個區域的大房間,我們可以放置多個Reflection Probe並手動設置其影響範圍。

Reflection Probe默認不會計算動態物體,僅計算烘焙物體,我們可以修改屬性讓其將動態物體也包括在內,同時還可以修改屬性爲Every Frame 使其每幀更新以準確反射動態物體的運動過程,還可以增加Lighting Setting中的Reflection Bounces提高反射次數(這樣就不會出現強反射物體在另一個反射物體中是黑色的情況了)。但要注意,這些修改都會佔用更多的系統資源,尤其是每幀更新反射貼圖這樣的設置。

6.Light Probe Group(光照探頭組)-Unity - Manual:Light Probes

       光照烘焙對於動態物體(Dynamic Object),也就是沒有被設置成Lightmap Static的物體來說都是不起作用的,如果希望動態物體也能被正確的照明,則需要創建Light Probe Group。Light Probe可以被認爲是在場景中的一個小「光源」,而多個Light Probe組成的網絡,就是Light Probe Group。這些小光源通過烘焙得到場景中該點的亮度信息,然後整個網絡用這個信息來照明動態物體。同一時間內只會有最靠近動態物體的那些Probes會起作用,而且Light Probe離運動物體越近,其照明效果越強。我們可以根據場景光照環境特徵來設置合適的Light Probe Group。爲場景添加Light Probe Group可以很好的將動態物體與靜態場景融合,尤其是在光照環境複雜的室內場景中,尤其需要添加Light Probe Group。

二、全局光照(GI)-Unity - Manual: Lighting Window

點擊 Window > Lighting > Settings 會彈出Lighting窗口,這個就是設置全局光照的窗口。

這個Lighting窗口劃分了三個區域:

       1、Scene:設置適用於整個場景而不是單個GameObjects。這些設置控制燈光效果和優化選擇。

       2、Global maps:顯示所有lightmap資產文件生成的GI照明過程。

       3、Object maps:預覽當前選中的GameObject的GI lightmap紋理(包括陰影遮罩)。

下方有一個Auto Generate,勾上它,unity就會自動更新Lightmap 數據,但更新的過程非常耗時,

因此不建議勾選 Auto Generate。可以手動點擊Generate Lighting來烘焙。(注意,unity只會烘焙

勾選了Lightmap Static 的GameObject,so 烘焙之前,首先在Inspector 面板最上方的Static 選中Lightmap Static)


1.Environment(環境)

  • Skybox Material:天空盒材質
  • Sun Souce:設定一個定向光(directional Light作爲場景裏的太陽,如果設置爲None,unity則將最亮的定向光作爲太陽(太陽:不管你設置的多大遠多,光都會照到場景裏)
  • Environment Lighting:環境光設置
  • Source漫反射環境光(背景光),默認以天空盒作爲環境光。
    • Color以某種顏色作爲環境光。
    • Gradient (梯度)sky, horizon and ground分別選擇一種顏色,混合出一種環境光。
    •  Skybox天空盒作爲環境光。
  • Intensity Multiplier(光照強度)環境光的亮度,範圍是0-8,默認爲1。
  • Ambient Mode (微光模式)場景中GI的模式。
    • Realtime實時更新。
    • Baked烘焙(預先計算場景中的燈光)。
  • Environment Reflections全局設置反射參數。
  • Source:反射源。
    • Skybox天空盒作爲反射源。
    • Custom用一個cube map作爲反射源。
  • Compression(壓縮):反射貼圖是否被壓縮。
    • Auto:自動,如果適合壓縮,那就壓縮。
    • Uncompressed:不壓縮。
    • Compressed:壓縮。
  • Intensity Multiplier:強度倍數,反射光的強度。
  • Bounces(反彈):反彈度,一束光的被反射的次數。

2.Realtime Lighting(實時照明)
  • Realtime Global Illumination是否開啓實時全景光照,勾選此項,Unity會實時計算和更新和照明。

3.Mined Lighting(混合照明)

  • Bake Global Illumination是否採用烘焙的全局光照。unity預計算光照,在運行的時候設置到場景中。
  • Lighting Mode決定混合燈光和場景中物體(GameObject)的陰影的模式。注意:修改了Light Mode需要重新烘焙,如果光照窗口中的自動生成是開啓的,會自動烘焙,否則需要點擊按鈕進行烘焙。燈光模式:間接烘焙,陰影遮罩,刪減的
  • Realtime Shadow Color實時陰影的顏色。 只有light mode設置爲Subtractive的時候這個選項纔有用。

4.Lightmapping Settings(光照貼圖設置)

  • Lightmapper:這個屬性用來指定用哪個內部光照計算軟件來計算場景中的光照貼圖,選項是Enlighten和Progressive,前者是默認選項。光照貼圖:開啓,預覽。
  • Indirect Resolution:用來指定每個單元上間接光照計算所用的紋素個數。增大這個值會改善間接光照的視覺品質,但增大了烘焙lightmap的時間。間接分辨率(增加此值可提高間接光質量,同時也增加烘焙時間)
  • Lightmap Resolution:指定每個單元上用在光照貼圖上的紋素數。增大這個值會提高lightmap質量,增長烘焙時間,默認值是40。光照分辨率(增加此值可提高光照貼圖的質量,同時也增加烘焙時間)
  • Lightmap Padding:烘焙光照貼圖中分開的形狀之間的距離。默認值是2。光照圖內邊距(此值制定烘焙光照貼圖中不同形狀之間的間隔)
  • Lightmap Size:整個lightmap貼圖的大小,集成了單個對象貼圖的分開的區域,默認值是1024。光照圖大小(128*128,512*512)
  • Compress Lightmaps:壓縮lightmap需要更少的存儲空間,但壓縮處理會給貼圖帶來影響,默認勾選。壓縮光照圖
  • Ambient Occlusion:當勾選上時,開啓了許多 允許你控制環境遮擋的表面相對亮度的設置。值越大表面遮擋區域和全照明的區域之間的對比更大。這僅僅對用GI計算的間接光照有影響,默認是開啓的。環境光遮蔽(控制環境光遮擋中表面的亮度)
    • Max Distance:用來控制檢測一個物體是否被遮擋所用的射線投射的距離。值越大射線越長,light map中陰影更多。值越小,射線越短,只有物體之間距離較近的時候纔會有陰影。值爲0,會投射一個無限長的射線,沒有最大距離。默認值爲1。
    • Indirect Contribution:控制最終lightmap中間接光照的明暗度,範圍是0到10,默認爲1,小於1減小強度,大於1增強。
    • Direct Contribution:0-10控制直接光強度,默認是0,值越大,應用到直接光上的對比越強。
  • Fina Gather:當Final Gather選項被勾選上,GI計算中最後的光的反射將會和烘焙的lightmap一樣的分辨率進行計算。這會提高lightmap的視覺品質,但會在編輯器中花費額外的烘焙時間。最終渲染。
    • Ray Count:
    • Denoising:
  • Directional Mode:lightmap可被用來存儲對象表面的任意一個點的主導的入光信息。在Directional模式下,第二張lightmap會被生成,用來存儲占主導地位的入射光線的方向。這允許法線映射漫反射材質和GI合作。Directional Specular模式,更多的數據用來存儲全陰影和高光反射和法線映射。None-directional 模式將這兩種選擇關掉。Directional模式要求兩倍的存儲空間來存儲另外一張lightmap數據。Directional Specular要求4倍的存儲空間和兩倍的貼圖內存。定向模式:非定向,定向(生成第二個光照貼圖來存儲入射光的方向)
    • Directional:
    • Nondirectional:
  • Indirect Intensity:該值用來scale在最終的lightmap中間接光照的亮度。設置爲1,則用默認的倍數,小於1降低強度,大於1增強亮度。間接強度(控制實時存儲的間接光照貼圖的亮度)
  • Albedo Boost:一個scale值,增加從表面到其他表面的光的數量。默認值爲1,表示沒有增加。反照率提高(控制表面之間反彈的光量)
  • Lightmap Parameters:Unity用了一些其他的參數來表示lightmap,除了light窗口中的。一些默認的通過這個屬性的菜單就可以使用,但你也可以創建自己的light參數文件,用create new選項。光照圖參數:中等,高,低,非常低分辨率


5.Other Settings(其他設置)

  • Fog:
    • Color:全局霧效的顏色。
    • Model: 霧效計算的模式,霧根據與相機的距離進行積累的方式。有Linear,Exponential和Exponential Squared3中(這些是遞增的順序霧隨着距離的積累
      • Linear:
        • Start:(在Linear模式下才生效) 離攝像機的最近距離。
        • End:在Linear模式下才生效)  離攝像機的最遠距離
      • Exponential:
        • Density:
      • Exponential Squared:
        • Density:
  • Halo Texture:畫光暈的貼圖。光暈貼圖
  • Halo Strength:環繞着光的可視光暈。光暈強度
  • Flare Fade Speed:炫光出現後褪去的速度。耀斑褪色速度(鏡頭光暈從事也中小時的時間,以秒爲單位)
  • Flare Strength:炫光的長度。耀斑強度。
  • Spot Cookie:點光源的cookie貼圖。斑點紋理(設置聚光燈的Cookie紋理)


6.Debug Settings(調試設置)

  • Debug Settings:
  • Update Statistics:
  • Light Probe Visualization:光探針可視化。
    • Only Probes Used By Selection:只有選擇使用Probes(只有影響當前選擇Light Probes才能在場景視圖中可視化)。
    • All Probes No Cells(所有Probes沒有單元格):所有probes在場景中可視化。
    • All Probes With Cells(所有Probes有單元格):所有probes在場景中可視化,同時還顯示用於probes數據插值的四面體。
    • None(沒有):在場景視圖中不顯示probes。
  • Display Weights:顯示重量(用於選擇probes繪製一條直線到用於插值的四面體上)
  • Display Occlusion:顯示遮擋(顯示probes的遮擋數據)
  • Auto Generate:自動渲染。
  • Generate Lighting:渲染光照。