說好的放棄呢佛纫,還是搞了幾天搞了一個大概囤官。為啥會繼續(xù)這部分呢癣亚?思考哈:燈光-->燈光渲染-->燈光優(yōu)化-->Draw Call & FPS & Shadow casters & Batches & Verts --> 游戲優(yōu)化寺鸥;按照這條路線思考下來猪钮;Unity的優(yōu)化也是一個值得學(xué)習(xí)和研究的地方。所以還是打算把Unity(基于Unity 2018.2.5f1)的GI(Global Illumination)部分學(xué)習(xí)一個大概胆建,不求特別了解烤低,但是得掌握個7788哈。GI = 直接光照+間接光照+環(huán)境光+反射光眼坏。按照慣例來一個~~
“官方吐槽”
概述:照明窗口(菜單: Window > Lighting > Settings)是Unity Global Illumination(GI)功能的主要控制面板拂玻。雖然Unity中的GI在默認設(shè)置下效果很好,但是光照窗口的屬性允許你調(diào)整GI進程的很多方面來定制你的場景或者根據(jù)你的需要優(yōu)化質(zhì)量宰译、速度和存儲空間。
照明窗口的控件分為三個選項卡:
- Scene:設(shè)置適用于整個場景魄懂,而不是單個的游戲?qū)ο笱爻蕖_@些設(shè)置控制燈光效果和優(yōu)化選項。
- Global Maps:顯示GI lighting過程生成的所有l(wèi)ightmap資產(chǎn)文件市栗。
- Object Maps:顯示了當(dāng)前選中游戲?qū)ο蟮腉I lightmap紋理(包括陰影遮罩)預(yù)覽缀拭。
注意:在窗口顯示最下面有一個Auto Generate(自動渲染)的框,如果勾選填帽,Unity將在編輯場景時更新lightmap數(shù)據(jù)蛛淋。如果您想在不清除GI緩存的情況下清除場景中烤好的數(shù)據(jù),請使用Generate Lighting按鈕篡腌。
“Scene區(qū)域”
“Environment”
1.Skybox Material:天空盒材質(zhì)褐荷;Skybox是一種材質(zhì),在場景中出現(xiàn)在一切事物背后的用來模擬天空或遙遠天邊的背景嘹悼。
2.Sun Source:太陽源叛甫;在使用Skybox的過程中层宫,使用一個帶有directional Light組件的Gameobject來指定“太陽”的方向(或在場景中大型而遠距離的光源)。如果設(shè)置為None(默認值)其监,則假定場景中最亮的directional light代表太陽萌腿。
3.Environment Lighting(這些設(shè)置會影響來自遠處環(huán)境的光線,可以理解為漫反射)
- Source:漫射環(huán)境光(也稱為環(huán)境光)是存在于場景周圍的光并且不來自于特定的光源(也就是說沒有特定的發(fā)光源)抖苦。使用這個參數(shù)定義漫反射光顏色毁菱,默認是Skybox(也就是反射Skybox的顏色)。
Color:為場景中的所有環(huán)境光使用平面顏色锌历。
Gradient:漸變贮庞;為來自天空、地平線和地面的環(huán)境光選擇單獨的顏色辩涝,并在它們之間平滑地混合贸伐。
Skybox :此選項使用skybox的顏色(如果skybox材質(zhì)指定的話)來確定來自不同角度的環(huán)境光。 - Intensity Multiplier:增強強度怔揩;設(shè)置場景中漫反射環(huán)境光的亮度捉邢,定義為0到8之間的值。默認值是1商膊。
- Ambient Mode:設(shè)置應(yīng)用于場景中環(huán)境光的全局照明模式伏伐。只有當(dāng)現(xiàn)場的實時照明和烘烤照明都啟用時,這個屬性才可用晕拆。
Realtime:實時計算和更新場景中的環(huán)境光藐翎。
Baked:預(yù)先計算和設(shè)置場景中的環(huán)境光,然后在運行实幕。
4.Environment Reflections(環(huán)境反射:這些設(shè)置控制涉及到反射探針烘烤的全局設(shè)置吝镣,以及影響全局反射的設(shè)置。)
- Source :指定使用skybox或cube map(立方體映射)進行反射效果昆庇。默認值是Skybox末贾。
Skybox:選擇此選項以使用skybox進行反射。如果選擇Skybox整吆,則會出現(xiàn)一個名為Resolution的附加選項拱撵。設(shè)置skybox的分辨率以進行反射。
Custom:選擇cube map來進行反射表蝙。選擇此選項可使用多維數(shù)據(jù)集映射進行反射拴测。如果選擇Custom,則會出現(xiàn)一個名為Cube map的附加選項府蛇。設(shè)置skybox的cube map以進行反射集索。 - Compression:用這個定義反射紋理是否被壓縮。默認設(shè)置是Auto。
Auto:如果壓縮格式合適抄谐,則對反射紋理進行壓縮渺鹦。
Uncompressed:反射紋理存儲在未壓縮的內(nèi)存中。
Compressed:紋理壓縮蛹含。 - Intensity Multiplier:反射源(在反射源屬性中指定的天空盒或立方體圖)在反射物中可見的程度毅厚。
- Bounces:當(dāng)一個對象的反射被另一個對象反射時,反射“反彈”發(fā)生浦箱。反射是通過反射探頭在場景中捕捉到的吸耿。使用此屬性設(shè)置反射探測在對象之間來回反射的次數(shù)。如果設(shè)置為1酷窥,那么Unity只考慮初始反射(來自反射源屬性中指定的skybox或多維數(shù)據(jù)集映射)咽安。
“Realtime Lighting”
1.Realtime Global Illumination:實時渲染模式;一旦勾選蓬推,Unity會實時計算和更新光照妆棒。
“Mixed Lighting”
1.Baked Global Illumination:烘焙渲染模式;一旦勾選沸伏,Unity會預(yù)先計算燈光糕珊,在運行時烘焙場景中的燈光。
2.Lighting Mode:燈光模式?jīng)Q定了在場景中混合燈光和陰影與游戲?qū)ο蟮墓ぷ鞣绞健?br> 注意:當(dāng)你改變燈光模式時毅糟,你也需要重新烘焙場景红选。
3.Realtime Shadow Color:定義用于實時渲染陰影的顏色。設(shè)置僅在燈光模式設(shè)置為Subtractive時可用姆另。
“Lightmapping Settings”
Lightmapping設(shè)置特定于Lightmapper后端喇肋。與其他設(shè)置不同,它們不共享迹辐,并且有自己的參數(shù)蝶防。
1.Lightmapper:烘焙燈光的解決方案(烘焙主要依賴CPU)。
2.Indirect Resolution:間接光烘焙精度明吩;
3.Lightmap Resolution:烘焙的精度慧脱;烘焙多少像素點到燈光貼圖上。
4.Lightmap padding:UV間距(當(dāng)烘焙后感覺光照效果不對贺喝,可以對此進行調(diào)節(jié)來確保烘焙的結(jié)果更加真實)
5.Lightmap Size:光照貼圖的大小
6.Compress Lightmaps:是否壓縮光照貼圖
7.Ambient Occlusion:環(huán)境光遮蔽
- Max Distance:設(shè)置值的大小來確定陰影的范圍
- Indirect Contribution:
- Direct Contribution:
8.Final Gather:最終聚集的信息(為了模擬一些物體的顏色反射到其他物體上,使得場景更加真實宗兼,細節(jié)更加細膩)(比較消耗性能)
勾選后兩個相應(yīng)的參數(shù):
- Ray Count:數(shù)值越大場景越細膩躏鱼。
9.Directional Mode:燈光方向貼圖;如果不選擇殷绍,Global Maps這不會產(chǎn)生相關(guān)貼圖
如圖上的幾個貼圖分別是:
- Intensity:存儲燈光顏色信息(RGBA)
- Directionality:燈光方向貼圖信息
一個燈光顏色貼圖不足以渲染顯示場景中各個物體應(yīng)該顯示的情況(凹凸情況等)染苛;還需要方向信息,但是將全部的信息放入到一個貼圖,實在是太大了茶行;所以選擇使用兩張貼圖存放不同的信息躯概。 -
Shadowmask:當(dāng)選擇Distance Shadowmask模式時,會產(chǎn)生這樣一張貼圖畔师;主要記錄相關(guān)陰影信息娶靡。
10.Indirect Intensity:間接光的強度
11.Albedo Boost:提高反射率(防止曝光過高)
“Other Settings”
關(guān)于fog, Halos,F(xiàn)lares和Cookies的設(shè)置
1.Fog:霧看锉;啟用或禁用場景中的霧姿锭。注意Deferred rendering path下Fog不可用。對于延遲渲染伯铣,后期處理霧效應(yīng)效果可能比較合適呻此。
當(dāng)勾選了Fog,則會出現(xiàn)三個參數(shù):
- Color:給場景中的霧 選擇顏色腔寡。
- Mode:定義霧化密度隨相機距離的不同變化方式焚鲜。
- Linear:霧密度隨距離線性增加。
-- Start:設(shè)置距離相機的距離放前,在那里霧開始忿磅。
-- End:設(shè)置與攝像機的距離,使霧 完全遮蔽場景游戲?qū)ο蟆?br> Exponential:霧密度隨距離成指數(shù)增長
-- Density:用這個來控制霧的密度犀斋。隨著密度的增加贝乎,霧 顯得更濃。
Exponential Squared:霧密度隨距離(指數(shù)和平方)增加得更快叽粹。
-- Density:用這個來控制霧的密度览效。隨著密度的增加,霧 顯得更濃虫几。
2.Halo Texture:光暈紋理锤灿;設(shè)置你想要使用的紋理來圍繞燈光繪制光圈。
3.Halo Strength:光暈強度辆脸;定義燈光周圍光環(huán)的可見性醇王,范圍從0到1前翎。
4.Flare Fade Speed:“耀斑退卻速度;定義鏡頭閃光的時間(以秒為單位),在最初出現(xiàn)后從視圖中淡出仁连。默認設(shè)置為3”。
5.Flare Strength:耀斑強度黄虱;從0到1的值定義從燈光發(fā)出的透鏡閃光的可見性旷坦。
6.Spot Cookie:設(shè)置你想用于聚光燈的Cookie texture。
“Debug settings”
幫助你調(diào)試場景的設(shè)置
1.Light Probe Visualization:可視化光探針搀崭;使用這個過濾器來過濾場景視圖中顯示的光線探頭叨粘。默認值僅供選擇使用。
選項如下:
- Only Probes Used By Selection:選擇只使用探測;只有影響當(dāng)前選擇的光探針才能在場景視圖中顯示出來升敲。
All Probes No Cells:所有的光探測都在場景視圖中顯示出來答倡。
All Probes With Cells:在場景視圖中顯示所有的光探針,并顯示用于插值光探針數(shù)據(jù)的四面體驴党。
None:在場景視圖中不顯示光探測瘪撇。 - Display Weights:顯示重量;當(dāng)勾選時鼻弧,Unity從用于主動選擇的光探針到用于插值的四面體上的位置畫一條線设江。這是一種調(diào)試探測插值和位置問題的方法。
- Display Occlusion :當(dāng)被勾選時攘轩,如果混合模式是距離陰影遮罩或陰影遮罩叉存,Unity會顯示光探測的遮擋數(shù)據(jù)。
“Global maps tab區(qū)域”
使用Global maps選項卡查看照明系統(tǒng)使用的實際紋理度帮。這些包括強度光地圖歼捏,陰影遮罩和方向性地圖。這只適用于烘焙照明或混合照明使用;預(yù)覽是空白的實時照明笨篷。
“Object maps tab區(qū)域”
使用Object maps選項卡查看當(dāng)前選中的* *GameObject的烘焙紋理預(yù)覽瞳秽,包括陰影遮罩。
屬性大概就是這些率翅,可能中間有些錯誤(到時候發(fā)現(xiàn)再改)练俐;痛苦并快樂的過程~~~~~~
“個人吐槽”
針對GI的各方面的東東,做了一個Demo測試哈C岢簟O倭馈!有8個Scene辜贵,每個場景講述不同的知識點悯蝉。
1.Scene 01-Skybox
常用的兩種創(chuàng)建Skybox的方式(后面兩個不知道是啥,實在是沒精力去看了):
- 使用6 Sided渲染方式托慨,分別添加6張不同方向的Texture鼻由。
- 使用Cubemap渲染方式,僅僅只需要一張cubemap的Texture厚棵。
注意:skybox的切換實際上就更換skybox的材質(zhì)(Lighting-Skybox Material)蕉世;在前面的Environment中看到過。
注意:GameObject的Material上的兩個屬性與Skybox的反射聯(lián)系
- Metallic:金屬性婆硬,當(dāng)調(diào)節(jié)到1時讨彼,gameobject表面具有金屬感。
-
Smoothness:光滑度柿祈,當(dāng)調(diào)節(jié)到1時,gameobject表面比較光滑。
這里為什么突然說到關(guān)于material的兩個屬性呢躏嚎?因為當(dāng)Lighting Setting設(shè)置好以后蜜自,如果相關(guān)gameobject的這兩個屬性設(shè)置為1,則該gameobject就會反射周圍的場景卢佣。
2.Scene 02-Light Split
場景中的燈光分解重荠;對于新建場景的光照效果并不是某一種燈光造成的,實際上是由多個光照效果互相影響形成的虚茶。
仔細看AB兩塊區(qū)域的光照效果戈鲁;按理說,都是接受了Directional Light嘹叫,為啥顯示的效果不同呢婆殿?
依次去掉這三個參數(shù),將其設(shè)置為None或者Other罩扇;就會發(fā)現(xiàn)場景中AB區(qū)域慢慢變成一樣的了婆芦。
說明:場景中的燈光實際上由上面標(biāo)記的三個參數(shù)以及場景中的Directional Light組合造成的燈光效果。
GI = 直接光照+間接光照+環(huán)境光+反射光
3.Scene 03-Light Type
主要講解下燈光的幾種基本的類型(這個在2.Light里面有記錄介紹)
Directional Light:平行光喂饥,類似于太陽光(光照強度不會隨著距離衰弱)
Spot:點光源(區(qū)域直射)
Point:點光源
Area:區(qū)域光
除開平行光的其他三種光源在場景中的渲染
關(guān)于在PlayerSettings下面光照渲染的兩種模式Gamma和 Linear
一般情況下都選擇Linear消约,因為其渲染比Gamma好(前提:顯卡支持;)员帮。Area Light只對勾選Static的GameObject起作用或粮;
注意:在烘焙過程中報錯或烘焙完以后明顯感覺到燈光有差異;查看相關(guān)模型的Generate Lightmap UVs 屬性捞高,對其進行勾選氯材。(這樣才能保證Unity將烘焙后的貼圖信息正確的貼到相關(guān)模型上面)。
Unity官方關(guān)于二者的對比(Linear相比Gamma還是渲染的更加貼近于現(xiàn)實棠枉。)
知識點說明:當(dāng)一個燈光照射一個游戲模型時浓体,沒有產(chǎn)生陰影,可以從幾方面入手查看
-
燈光是否支持陰影:
-
Quality設(shè)置下陰影是否開啟
-
模型是否執(zhí)行陰影
- 材質(zhì)問題:有些shader具有透明效果辈讶,不會產(chǎn)生陰影
4.Scene 04-Light Mixed
兩個光照技術(shù):實時光照&烘焙光照
上面兩個效果一般只會開啟一個命浴,節(jié)約性能。
烘焙光照:為了節(jié)省性能開銷提前將場景的燈光信息烘焙成一張貼圖贱除,在運行時只需要將貼圖貼到場景中static物體上即可生闲。
全局光照:直接光照+間接光照(一次以上的照射,兩次以上的反射)
混合模式光照下的三種模式
Subtractive模式:將靜態(tài)物體烘焙成貼圖月幌,相關(guān)光照貼圖信息存儲在Global maps里面(可以查看)碍讯;場景中動態(tài)gameobject只能受到一個主光源的影響。(如果有其他Realtime光源扯躺,動態(tài)gameobject并不會產(chǎn)生實時陰影)該模式效率高捉兴,但是效果相當(dāng)差蝎困,并且沒有高光效果。
如圖:添加的Point光源并沒有使得右邊的Cube產(chǎn)生新的陰影
Shadowmask模式:相比如Subtractive模式倍啥,可以存儲多種光源禾乘,可以讓動態(tài)gameobject接受多個光源,產(chǎn)生多個影子虽缕。
場景例子:如果在烘焙好的場景中始藕,某一個物體A需要從一個靜態(tài)gameobject B的影子下面通過,正常情況下氮趋,A的表面光照效果應(yīng)該會受到B的影子的影響變黑伍派,但是在Shadowmask模式下卻不變;一般處理的方式有兩種:
- 燈光探照燈技術(shù)
- 選擇Shadowmask的另外一個模式
在Quality中切換當(dāng)前Shadowmask的另外一個模式:
Distance Shadowmask(相比Shadowmask更加消耗性能剩胁,效率更低)
Shadow distance:表示距離攝像機40的范圍內(nèi)(場景中)诉植,燈光將是實時渲染的;超出這個范圍摧冀,將使用烘焙好的貼圖效果倍踪。
在這種模式下,可以實現(xiàn)上述案例效果索昂。
對比切換模式前后 Shadow casters的值可以看到:當(dāng)切換Distance Shadowmask模式建车,動態(tài)A闖過靜態(tài)B的影子時相當(dāng)于進行了實時燈光渲染。
一般情況會做一個觸發(fā)檢測椒惨,在一定范圍內(nèi)選擇Distance Shadowmask模式缤至,出這個范圍切換到Shadowmask模式:
Baked Indirect模式
只烘焙間接光,其他都是實時渲染康谆;更加真實领斥,也更加消耗性能。
Scene 05-Light Probe Group
燈光探針是將周圍的燈光信息記錄下來后沃暗,在運行時實時的將信息渲染到周圍的物體上月洛。
Light Probe Group:燈光探針組
創(chuàng)建Light Probe Group會看到在Scene中有8個小球;每個小球就是一個燈光探針孽锥;實時監(jiān)測小球所在點的燈光顏色信息嚼黔。
可以對小球進行復(fù)制 ,在一個場景中設(shè)置多個小球惜辑,進行豐富的燈光陰影設(shè)置唬涧。
Scene 06-Reflection Probe
Reflection Probe:反射探針
可以理解為將一定范圍的static物體反射到gameobject上
如下圖:當(dāng)Gameobject的屬性Reflection Probes設(shè)置為Off時則不受反射探針的影響。
Scene 07-Light Material Self
自發(fā)光材質(zhì)是將材質(zhì)的Emission屬性勾選盛撑,然后調(diào)節(jié)光照顏色和強度碎节,賦予給相關(guān)的gameobject即可。
Scene 08-Post-Processing Profile
Post Processing Stack 屏幕后期處理
主要介紹一些屬性:
- Fog:霧
- Antialiasing:抗鋸齒抵卫;為了消除遠處物體具有鋸齒邊的情況對其進行模糊效果狮荔。
- Ambient Occlusion:環(huán)境光遮蔽胎撇;(這里是實時的;在lightmapping里面是烘焙好的)
- Screen Space Reflection:屏幕的空間反射轴合;需要反射材質(zhì)创坞,會實時反射場景中的一些東西。
- Depth Of Field:景深(類似于相機調(diào)焦)
- Motion Blur:運動模糊效果
- Eye Adaptation:眼部適應(yīng)
- Bloom:游戲環(huán)境高光的地方會更加亮受葛,產(chǎn)生泛光的效果(理解為增強版本光暈效果)。
- Color Grading:顏色修正(校準(zhǔn))偎谁;游戲環(huán)境整體顏色改變总滩。
- User Lut:(Look Up Texture)使用貼圖
- Chromatic Aberration:色差變換;一般配合Vignette使用
- Grain:噪點
- Vignette:鏡頭光暈效果
這個場景主要是介紹Post-Processing插件的一些效果巡雨;以前這是Unity的一個特效包闰渔;每一個特效一個腳本,現(xiàn)在內(nèi)嵌到Unity里面去了铐望,這個后處理對于游戲的畫風(fēng)比較重要冈涧。
這里還記錄兩個東西:
1.Camera下的幾種渲染路徑
Legacy Vertex Lit:頂點光照;模型細節(jié)無法渲染出來正蛙;不支持實時陰影督弓。效率高,效果差愚隧,適合舊機器。
Forward:正向渲染狂塘,支持像素級別的渲染鳄厌;只支持一個平行光的實時陰影;游戲物體受到的燈光渲染越多了嚎,渲染速度越慢泪漂。支持MSAA(抗鋸齒)
Deferred:延遲渲染;效果最好新思;同時支持多個燈光的實時陰影窖梁。
2.批處理Batches
Draw Call是繪制圖形的命令;由CPU傳給GPU夹囚;
針對游戲的優(yōu)化實際上是優(yōu)化Draw Call的次數(shù)(減少其次數(shù))纵刘;
而Batches就是對Draw Call的一種優(yōu)化方式
從上面批處理的概念引申出關(guān)于游戲優(yōu)化的幾個基本參數(shù)
4個重要的參數(shù):
FPS:游戲幀率(游戲運行穩(wěn)定在60以上)
Batches:批處理
Verts:Camera能夠渲染到的頂點數(shù)(數(shù)量越少越好,這個值是實時渲染得到的)
Shadow casters:實時渲染的陰影數(shù)(數(shù)量越少越好荸哟,這個值是實時渲染得到的)