簡(jiǎn)介
本文將會(huì)通過一個(gè)簡(jiǎn)單的場(chǎng)景搭建,介紹如何使用烘焙光照以及相關(guān)的注意事項(xiàng)。另外還介紹了Unity內(nèi)全局光照(GI)的知識(shí)和GI實(shí)際在游戲內(nèi)的表現(xiàn)效果。
Unity關(guān)于光照相關(guān)的參考文檔地址:https://docs.unity.cn/cn/current/Manual/LightingOverview.html
下面是一些基本的概念
直接光照和間接光照
直接光照指的是,光源照射到物體表面后僅經(jīng)過一次反射后進(jìn)入到相機(jī)中的光照信息。大多數(shù)情況下,相機(jī)內(nèi)接收到的光都是來自于直接光。
間接光照則是光源經(jīng)過多次的反射后進(jìn)入到相機(jī)中的光照信息,一般需要借助全局光照(GI)或者反射探針來實(shí)現(xiàn)。
三種光照模式
實(shí)時(shí)(Realtime)光照:默認(rèn)創(chuàng)建的光照類型都是該類型,實(shí)時(shí)光照會(huì)在運(yùn)行時(shí)的每一幀進(jìn)行光照計(jì)算。并且可以自由地修改物體和光源的位置和屬性。
烘焙(Baked)光照:烘焙光照,是Editor提前在場(chǎng)景中進(jìn)行光照計(jì)算,生成對(duì)應(yīng)的光照數(shù)據(jù),這個(gè)過程就叫烘焙,后續(xù)在游戲運(yùn)行時(shí),不會(huì)再對(duì)該類型的光照進(jìn)行計(jì)算,而是直接從光照貼圖中獲取數(shù)據(jù)。該光照適用于場(chǎng)景中靜態(tài)的光照和物體。
混合(Mixed)光照:可以在烘焙的過程中生成對(duì)應(yīng)的光照信息。在運(yùn)行時(shí)會(huì)將烘焙的光照信息和實(shí)時(shí)的光照信息疊加在一起。并且可以在運(yùn)行時(shí)修改光源信息,不過這些修改僅會(huì)影響實(shí)時(shí)光照部分計(jì)算的結(jié)果。不影響原先的烘焙結(jié)果。同時(shí)混合光照記錄的信息,會(huì)受到光照設(shè)置中Mixed Lighting的Lighting Mode選項(xiàng)影響
關(guān)于烘焙光照的實(shí)踐
1.測(cè)試場(chǎng)景搭建
首先創(chuàng)建一個(gè)測(cè)試場(chǎng)景,為了避免天空盒和背景對(duì)最終光照結(jié)果的影響,將相機(jī)的BackgroundType改成SolidColor,設(shè)置Background顏色設(shè)為純黑色
之后打開Window->Rendering->Lighting 設(shè)置界面
選擇Environment將Environment Lighting的Source設(shè)置為Color,Ambient Color設(shè)置為全黑色
Environment Reflections 的Intensity Multiplier設(shè)置為0
之后在場(chǎng)景內(nèi)放置一個(gè)平面和兩個(gè)膠囊體。其中StaicPlane和StaticCapsule(靜態(tài)膠囊體)均勾選右上角的Static選項(xiàng)
場(chǎng)景內(nèi)默認(rèn)的平行光命名為TestLight,然后復(fù)制一個(gè)TestLigth改名為RealTimeLight,并且將RealTimeLight的Active設(shè)置為False。這時(shí)可以看到以下的一個(gè)畫面
如果將TestLight的Active也設(shè)置為false可以看到整個(gè)畫面變成了全黑的。說明此時(shí)游戲內(nèi)的物體已經(jīng)不受環(huán)境光的影響
之后恢復(fù)TestLight的Active為true。這時(shí)候可以做一個(gè)小實(shí)驗(yàn),將TestLight的Mode由RealTime改為Baked和Mixed
修改完后可以嘗試運(yùn)行該場(chǎng)景??梢园l(fā)現(xiàn)一個(gè)神奇的現(xiàn)象,不同光照模式下Game視圖下看到的畫面均是相同的,畫面如下。原因是此時(shí)并沒有進(jìn)行光照的烘焙,在沒有任何烘焙信息的情況下,無論選什么模式,場(chǎng)景內(nèi)的光源都是實(shí)時(shí)光。
2.烘焙光照
將TestLight的Mode選擇為Baked。然后打開Lighting設(shè)置界面,在Scene選項(xiàng)下,點(diǎn)擊New Lighting Settings
創(chuàng)建一個(gè)光照配置,這里命名為L(zhǎng)ightSceneSetting
然后切換到BakedLightMaps選項(xiàng)下,此時(shí)LightingDataAsset為空,點(diǎn)擊底部的GenerateLighting
可以看到Editor底部出現(xiàn)一個(gè)藍(lán)色的進(jìn)度條,代表正在進(jìn)行光照的烘焙
等待藍(lán)色進(jìn)度條結(jié)束后,可以看到在Scenes目錄下,會(huì)自動(dòng)創(chuàng)建一個(gè)跟當(dāng)前進(jìn)行烘焙的場(chǎng)景同名的文件夾,并且文件夾內(nèi)生成了LightingData,兩個(gè)LightMap和一個(gè)ReflectionPro
之后查看Game界面,發(fā)現(xiàn)畫面中DynamicCapsule(動(dòng)態(tài)膠囊體)消失了
原因是烘焙光照只會(huì)烘焙設(shè)置為Static的物體。所以只有StaticPlane和StaticCapsule受到了BakedLight的光照影響。
之后進(jìn)行以下的幾個(gè)測(cè)試,查看畫面中的變化
- 將TestLight的Active設(shè)置為fasle,發(fā)現(xiàn)畫面沒有產(chǎn)生任何改變。原因是,經(jīng)過烘焙之后,受到烘焙影響的物體,會(huì)直接從LightMap中獲取自己的光照信息,并且不關(guān)心原來的光源TestLight的active是否是true
- 將原先RealTimeLight的Active設(shè)置為True,可以看到DynamicCapsule出現(xiàn)了,并且他的顏色明顯要比左邊的StaticCapsule要暗一些。因?yàn)镈ynamicCapsule僅受到了實(shí)時(shí)光的影響,而StaticCapsule則是疊加了烘焙光和實(shí)時(shí)光
- 將TestLight的Active重新設(shè)置為true之后,修改TestLight的Mode,將其改成RealTime或者M(jìn)ixed。畫面同樣沒有任何改變。原因是烘焙信息會(huì)記錄哪些光參與了烘焙,在之后的渲染中,該光照就不再參與實(shí)時(shí)光照的計(jì)算。
關(guān)閉RealTimeLight,將Static Capsule的位置為(0,1.5,0)修改為(-2,1.5,0),角度由(0,0,0)修改為(0,180,90)
可以看到一個(gè)有趣的現(xiàn)象,StaticCapsule顯示的位置改變了,但是原先的背光面旋轉(zhuǎn)到正面之后還是特別的暗,包括底部的陰影位置和大小都沒有產(chǎn)生改變,還是跟未移動(dòng)之前相同
之后在Lighting界面重新點(diǎn)擊GenerateLighting
等待藍(lán)色進(jìn)度條完成后可以看到光照和陰影全部都恢復(fù)正常了。所以如果靜態(tài)物體位置產(chǎn)生改變之后需要重新進(jìn)行烘焙,才會(huì)獲得正確的烘焙紋理
關(guān)于全局光照的實(shí)踐
1.測(cè)試場(chǎng)景搭建
在之前創(chuàng)建的測(cè)試場(chǎng)景上進(jìn)行修改,先新建一個(gè)URP/Lit材質(zhì),將顏色改成為紅色,金屬度改成0,光滑度改成1
為了效果更加明顯,將場(chǎng)景內(nèi)的光照的Intensity設(shè)置為2(Intensity代表光線的強(qiáng)度),Indirect Multiplier設(shè)置為3(Indirect Multiplier間接反射系數(shù)代表每次間接光反射之后的強(qiáng)度變化,該值小于1,則每次反射之后光照強(qiáng)度就會(huì)減小,大于1則是反射之后變強(qiáng))
然后創(chuàng)建一個(gè)立方體(LeftCube),將剛剛的紅色材質(zhì)賦值給立方體,然后將其設(shè)置為Static,再按照下圖進(jìn)行擺放。
畫面中的膠囊體,上面是靜態(tài)膠囊體,下面是動(dòng)態(tài)膠囊體。
2.烘焙全局光照
先確保Lighting設(shè)置Scene選項(xiàng)卡的Baked Global Illumination處于勾選狀態(tài)
場(chǎng)景只打開一個(gè)Baked光源TestLight。
之后點(diǎn)擊Lighting設(shè)置中Baked Lighitingmap的Generate Lighting按鈕。等待烘焙進(jìn)度條結(jié)束。結(jié)束之后可以看到上面的靜態(tài)膠囊體靠近墻面的部分有些許紅色。這個(gè)紅色就是由左側(cè)的立方體反射出來的間接光,下方的動(dòng)態(tài)膠囊體沒有參與烘焙的過程所以現(xiàn)在整個(gè)是黑色
之后打開另外一個(gè)實(shí)時(shí)光RealTimeLight
下方的動(dòng)態(tài)膠囊出現(xiàn)在畫面中,但是膠囊體左側(cè)依舊是黑色的。
3.實(shí)時(shí)全局光照
將Lighting設(shè)置Scene選項(xiàng)卡中的Realtime Global Illumination勾選框打開
關(guān)閉烘焙光源TestLight開打?qū)崟r(shí)光源RealTimeLight
之后點(diǎn)擊BakedLightmaps的Generate Lighting按鈕。由于此時(shí)沒有處于激活狀態(tài)的烘焙光源,所以BakedLightmap是一個(gè)全黑的圖片
靜態(tài)膠囊體左側(cè)也變成了黑色,沒有受到左側(cè)紅色立方體的影響
之后點(diǎn)擊Realtime Lightingmaps選項(xiàng)卡的Generate Lighting按鈕,等待進(jìn)度條結(jié)束??梢钥吹缴厦娴撵o態(tài)膠囊體左側(cè)出現(xiàn)了紅色,動(dòng)態(tài)膠囊體的左側(cè)依舊是黑色的。說明實(shí)時(shí)全局光照同樣是只對(duì)靜態(tài)物體有效。
這時(shí)候可以嘗試修改實(shí)時(shí)光照的角度,Intensity和Indirect Multiplier。在不重新生成Realtime lightmaps的情況下,可以看到場(chǎng)景內(nèi)的靜態(tài)物體的直接光照和間接光照均會(huì)實(shí)時(shí)受到影響。
但是如果修改靜態(tài)物體的旋轉(zhuǎn)角度,將靜態(tài)膠囊體繞Z軸旋轉(zhuǎn)180度,原先左側(cè)靠近紅色立方的的半邊旋轉(zhuǎn)到右側(cè)。
環(huán)境光設(shè)置
環(huán)境光的設(shè)置在Lighting-Environment選項(xiàng)卡內(nèi)
下表是Unity關(guān)于Environment各個(gè)屬性的說明文章來源:http://www.zghlxwxcb.cn/news/detail-608598.html
屬性: | 功能: | |
Skybox Material | 天空盒是一種材質(zhì),它出現(xiàn)在場(chǎng)景中的所有其他對(duì)象后方,用于模擬天空或其他遙遠(yuǎn)的背景。使用此屬性可選擇要用于場(chǎng)景的天空盒。默認(rèn)值是內(nèi)置的默認(rèn)天空盒 (Default Skybox)。 | |
Sun Source | 當(dāng)天空盒材質(zhì)是Procedural 天空盒時(shí),使用此設(shè)置指定具有定向光源組件的游戲?qū)ο?,用來指示太陽的方向(或任何大型、遙遠(yuǎn)的照亮當(dāng)前場(chǎng)景的光源)。如果將其設(shè)置為“None”,則假定場(chǎng)景中最亮的定向光代表太陽。渲染模式屬性設(shè)置為“Not Important ”的光源不會(huì)影響天空盒。默認(rèn)值為無。 有關(guān)渲染模式設(shè)置的更多信息,請(qǐng)參閱Lights的其他設(shè)置部分。 |
|
Realtime Shadow Color | 定義 Unity 用于在 Subtractive 光照模式下渲染實(shí)時(shí)陰影的顏色。 此設(shè)置僅在__Lighting Mode__ 設(shè)置為 Subtractive 時(shí)可見。 |
|
Environment Lighting | 此部分包含可影響當(dāng)前場(chǎng)景中的環(huán)境光的設(shè)置。 | |
Source | 使用此屬性可定義場(chǎng)景中環(huán)境光的光源顏色。默認(rèn)值為 Skybox。 | |
Skybox | 使用 Skybox Material 中設(shè)置的天空盒顏色來確定來自不同角度的環(huán)境光。這可以實(shí)現(xiàn)比 Gradient 更精細(xì)的效果。 | |
Gradient | 可為來自天空、地平線和地面的環(huán)境光選擇單獨(dú)的顏色,并在它們之間平滑混合。 | |
Color | 對(duì)所有環(huán)境光使用單調(diào)顏色。 | |
Intensity Multiplier | 使用此屬性可設(shè)置場(chǎng)景中環(huán)境光的亮度,定義為 0 到 8 之間的值。默認(rèn)值為 1。 | |
Environment Reflections | 此部分包含反射探針烘焙的全局設(shè)置,以及影響全局反射的設(shè)置。 | |
Source | Use this setting to specify whether you want to use the Skybox for reflection effects, or a Cubemap of your choice. The default value is Skybox. | |
Skybox | 選擇此選項(xiàng)可使用天空盒作為反射源。 | |
Custom | 選擇該選項(xiàng)后,可以選擇Cubemap,或者Dimmension設(shè)置為Cube的RenderTexture,用于進(jìn)行反射。 | |
Resolution | 使用此屬性可設(shè)置用于反射的天空盒的分辨率。僅當(dāng) Source 設(shè)置為 Skybox 時(shí),此屬性才可見。 | |
Cubemap | 用于進(jìn)行反射的Cubemap,該屬性只在反射的Source設(shè)置為Custom是有效 | |
Compression | 使用此屬性可定義是否壓縮反射紋理。默認(rèn)設(shè)置是 Auto。 | |
Auto | 如果壓縮格式合適,則壓縮反射紋理。 | |
Uncompressed | 反射紋理以非壓縮狀態(tài)存儲(chǔ)在內(nèi)存中。 | |
Compressed | 壓縮紋理。 | |
Intensity Multiplier | 反射源在反射對(duì)象中可見的程度。 | |
Bounces | 當(dāng)來自一個(gè)對(duì)象的反射隨后被另一個(gè)對(duì)象反射時(shí),便發(fā)生反射反彈。使用此屬性可設(shè)置反射探針評(píng)估對(duì)象之間來回反彈的次數(shù)。如果設(shè)置為 1,則 Unity 只會(huì)考慮初始反射(來自 Reflection Source 屬性中指定的天空盒和立方體貼圖)。 |
創(chuàng)作不易,如果覺得這篇文章對(duì)你有所幫助,可以動(dòng)動(dòng)小手,點(diǎn)個(gè)贊哈,?( ′???` )比心文章來源地址http://www.zghlxwxcb.cn/news/detail-608598.html
到了這里,關(guān)于Unity光照相關(guān)知識(shí)和實(shí)踐 (烘焙光照,環(huán)境光設(shè)置,全局光照)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!