Unity漸進(jìn)式光照貼圖烘焙(Progressive Lightmapper)
Unity光照系統(tǒng)
- 直接光照
- 間接光照
為什么要使用間接光照
如果沒有間接光照,那么整個場景就沒有真實(shí)性可言泥从。
間接光照的局限贞谓,以及為什么使用光照貼圖
但是間接光照的實(shí)時計算在目前的硬件條件下纪蜒,只有支持實(shí)時光線追蹤的硬件才能實(shí)現(xiàn),比如Nvidia的RTX系列顯卡,在普通的計算設(shè)備上,特別是移動端設(shè)備上目前還沒有實(shí)時光線追蹤的解決方案出現(xiàn)作媚。因此我們必須依賴預(yù)先計算好的光照貼圖來提供這些間接光照信息。
光照貼圖是什么
本質(zhì)上就是一張或者多張應(yīng)用在場景模型上的貼圖帅刊。它們包含的是通過光照貼圖烘焙方式進(jìn)行預(yù)計算所獲得的間接光照纸泡,陰影等信息(可以在烘焙時選擇只烘焙間接光照,不烘焙陰影)厚掷。使用光照貼圖可以避免在游戲運(yùn)行時進(jìn)行實(shí)時的光照和陰影計算弟灼,提高游戲的運(yùn)行性能,特別適合用于性能較弱的計算平臺比如移動平臺上冒黑。
Unity光照技術(shù):Progressive Lightmapper
Progressive Lightmapper基于AMD的Radeon Rays技術(shù)(https://gpuopen.com/radeon-rays/)開發(fā)。Radeon Rays是一套支持跨平臺的ray intersection庫(如大家對Radeon Rays技術(shù)感興趣勤哗,可以參考網(wǎng)址:https://gpuopen.com/radeon-rays/)
漸進(jìn)式光照貼圖烘焙對場景中模型的要求是什么抡爹?
(1) 模型上不能有重疊的UV。我們可以嘗試使用Unity的Import Settings窗口中的Generate Lightmap UVs來生成第二套UV(記得在勾選復(fù)選框以后點(diǎn)擊Apply按鈕):
(2) UV之間要有足夠的間距以避免“滲色”現(xiàn)象的發(fā)生芒划《梗“滲色”的發(fā)生因?yàn)閮蓧KUV之間的間隔不足,導(dǎo)致一塊UV上的顏色“滲透”到了相鄰的UV上民逼。
通常建議大家在建模軟件中制作第二套UV泵殴,因?yàn)楣庹召N圖烘焙用的UV與普通紋理貼圖的UV有所不同。
Unity中并沒有內(nèi)置的模型UV查看功能拼苍,這里介紹一個Unity資源商店中的小工具UV Inspector笑诅,下面兩張圖是在Unity中使用UV Inspector的界面。在Scene窗口選中模型以后疮鲫,UV Inspector界面就會顯示當(dāng)前模型包含的所有UV吆你。左側(cè)為第一套UV用于紋理貼圖;右側(cè)為第二套UV用于光照貼圖烘焙:
(3) 因?yàn)楣庹召N圖只能烘焙靜態(tài)物體俊犯,所以我們要把需要參與烘焙的物體標(biāo)記為Static妇多,如下圖所示:
我們習(xí)慣上直接在Game Object上勾選右上角的Static復(fù)選框,然后把層級中所有物體標(biāo)記為Static燕侠。不過對于光照貼圖烘焙有意義的兩項(xiàng)是Contribute GI和Reflection Probe Static者祖,因此你也可以只勾選這兩項(xiàng)立莉。
上圖中的Contribute GI(貢獻(xiàn)全局光照)選項(xiàng)和Mesh Renderer中的Contribute Global Illumination(貢獻(xiàn)全局光照)是聯(lián)動的。如果我們勾選右上角的Contribute GI七问,Mesh Renderer組件中的Contribute Global Illumination也會被勾選蜓耻,Receive Global Illumination(接受全局光照)則會被設(shè)置為Lightmaps,意指當(dāng)前Game Object會使用光照貼圖獲取間接光照烂瘫。
我們也可以把Receive Global Illumination 設(shè)置成Light Probes媒熊,這時間接光照信息就會來自相關(guān)的光照探針(Light Probes)。
硬件要求
漸進(jìn)式光照貼圖烘焙對硬件的要求是什么坟比?支持Unity的哪些渲染管線芦鳍?
硬件要求:
(1) 至少需要一塊支持OpenCL 1.2的顯卡
(2) 至少2GB的顯存
(3) CPU支持SSE4.1指令
支持的渲染管線:
(1) 內(nèi)置渲染管線(Built-in Render Pipeline):支持Baked Indirect,Subtractive和Shadowmask光照模式葛账。
(2) 通用渲染管線(Universal Render Pipeline柠衅,簡稱URP):支持Baked Indirect,Subtractive和Shadowmask光照模式籍琳。
(3) 高清渲染管線(High Definition Render Pipeline菲宴,簡稱HDRP):支持Baked Indirect和Shadowmask光照模式。
因?yàn)橛糜诤姹簻y試的兩個場景都是基于HDRP來制作的趋急,所以接下去的講解我們將會圍繞HDRP的光照烘焙模塊來進(jìn)行喝峦。
漸進(jìn)式光照貼圖烘焙出來的是什么?
光照貼圖烘焙出來的是光照貼圖(Lightmaps)呜达,光照探針(Light Probes)和反射探針(Reflection Probes)谣蠢。
按照不同的Lighting Mode(光照模式),光照貼圖烘焙出來的結(jié)果是不同的查近。
HDRP下Lighting窗口的光照模式支持Baked Indirect和Shadowmask兩種(內(nèi)置渲染管線和通用渲染管線請參考文檔)眉踱。
? Baked Indirect模式:
如果場景中的燈光模式設(shè)置為Mixed,那么這些燈光會給場景提供直接光照霜威,間接光照信息則被烘焙到光照貼圖和光照探針中谈喳。此選項(xiàng)適合中高端的平臺,比如PC戈泼,主機(jī)婿禽。
? Shadowmask模式:
如果場景中的燈光模式設(shè)置為Mixed,燈光會給場景提供直接光照矮冬,間接光照烘焙到光照貼圖和光照探針中谈宛。Shadowmask和光照探針遮擋信息會被烘焙到陰影信息中。你可以在Project Settings > Quality窗口設(shè)置Shadowmask的模式(Shadowmask或者Distance Shadowmask兩種模式可選)胎署。此選項(xiàng)在游戲運(yùn)行時比Baked Indirect模式性能更好吆录,因?yàn)楣庹召N圖中已經(jīng)預(yù)先烘焙了陰影信息。
? Subtractive模式:(在內(nèi)置和通用渲染管線中支持)
場景中的直接光照琼牧,間接光照和陰影信息都會烘焙到光照貼圖中恢筝。適合對性能敏感的平臺比如移動端平臺哀卫。
上述對比中的Shadow Distance在三種不同渲染管線中設(shè)置的方式是不一樣的撬槽。
(1) 內(nèi)置渲染管線:
打開Edit > Project Settings > Quality > Shadows > Shadow Distance此改。
(2) URP通用渲染管線:
打開Edit > Project Settings > Graphics中選擇UniversalRenderPipelineAsset進(jìn)行設(shè)置。
(3) HDRP高清渲染管線:
通過在場景中使用的Volume進(jìn)行設(shè)置侄柔。
界面操作(HDRP示例):打開Window > Rendering > Lighting Settings窗口共啃,在Mixed Lighting區(qū)域勾選Baked Global Illumination復(fù)選框,然后在Lighting Mode中選擇光照模式:
(HDRP中不支持Subtractive光照模式)
漸進(jìn)式光照貼圖烘焙的CPU版本和GPU版本有什么區(qū)別暂题?
CPU和GPU兩個版本所用的底層技術(shù)相同移剪,唯一的區(qū)別是:CPU版本使用CPU和內(nèi)存進(jìn)行計算;GPU版本使用顯卡和顯存進(jìn)行計算薪者。
? 如果使用CPU版本進(jìn)行烘焙纵苛,影響烘焙效率的是CPU的速度和內(nèi)存的大小。
? 如果使用GPU版本進(jìn)行烘焙言津,影響烘焙效率的則是顯卡的速度和顯存的大小攻人。
界面操作(HDRP示例):打開Window > Rendering > Lighting Settings窗口,在Lightmapping Settings區(qū)域可以選擇使用哪個版本的Progressive Lightmapper:
Lighting界面上那一堆參數(shù)理解一下悬槽?
選擇好Lighting Mode和Lightmapper怀吻,我們來看一下具體的烘焙參數(shù)。確保打開Window > Rendering > Lighting Settings窗口初婆。
在HDRP中進(jìn)行光照烘焙時可以為整個場景指定一個用于烘焙的天空盒作為環(huán)境光烙博,如下圖所示:
我們可以在這里使用當(dāng)前HDRP場景中使用的天空盒設(shè)置,也可以使用不同的天空盒設(shè)置烟逊。當(dāng)然,如果你使用相同的天空盒铺根,那么烘焙所得的光照貼圖將會擁有與當(dāng)前場景一樣的環(huán)境光宪躯。
內(nèi)置和通用渲染管線的環(huán)境光設(shè)置參數(shù):
(上圖中的設(shè)置不在此詳細(xì)講解,可以參考中文文檔中的具體描述:https://docs.unity.cn/cn/current/Manual/GlobalIllumination.html)
接著我們來看具體的烘焙參數(shù)位迂。如下圖所示访雪,光照貼圖烘焙窗口中Lightmapping Settings區(qū)域的這些參數(shù)在UI上目前是放在一起的,這么多密集擺放的參數(shù)對于新用戶來說一眼看上去會有不知所措的感覺:
- Prioritize View:
啟用此選項(xiàng)掂林,如果Scene窗口打開臣缀,系統(tǒng)會逐步烘焙Scene窗口看到的畫面,然后再繼續(xù)烘焙Scene畫面之外的場景區(qū)域泻帮。
如果你在Scene窗口移動場景中物體精置,改變物體和燈光屬性或者改變Scene窗口畫面等操作,烘焙會及時調(diào)整锣杂,快速逐步烘焙改變后的畫面脂倦。
通過這個方式番宁,我們可以快速預(yù)覽Scene窗口當(dāng)前畫面的間接光照信息,及時做出相應(yīng)修改赖阻,加快迭代速度蝶押,而不必像之前使用Enlighten時需要等待烘焙全部完成以后才能看到結(jié)果。
在使用此選項(xiàng)時記得打開Auto Generate(自動生成)復(fù)選框火欧。 -
采樣設(shè)置相關(guān):
此區(qū)域的設(shè)置跟烘焙時所用的采樣方式和采樣數(shù)值相關(guān)棋电。
Multiple Importance Sampling:(默認(rèn)是禁用狀態(tài))這是針對環(huán)境光采樣的設(shè)置。如果開啟苇侵,可以縮短光照貼圖的生成時間赶盔,但是在場景中某些較暗的地方會產(chǎn)生明顯的噪點(diǎn)。
Direct Samples:用于設(shè)置從每一個紋素(Texel)射出的采樣路徑數(shù)(針對直接光照)衅檀。數(shù)值越大效果越好招刨,烘焙時間也越長。
Indirect Samples:用于設(shè)置從每一個紋素(Texel)射出的采樣路徑數(shù)(針對間接光照)哀军。數(shù)值越大效果越好沉眶,烘焙時間也越長。針對戶外場景杉适,指導(dǎo)數(shù)值為100谎倔。室內(nèi)場景(包含自發(fā)光物體),可以按需增加采樣路徑數(shù)直到看到效果猿推。
Environment Samples:針對環(huán)境光的采樣數(shù)片习。數(shù)值越大效果越好,烘焙時間也越長蹬叭。默認(rèn)數(shù)值為500藕咏。
Light Probe Sample Multiplier:
如要使用此功能,必須在Project Settings > Editor > Graphics中禁用Use legacy Light Probe sample counts秽五,如下圖所示:
此數(shù)值會被用于分別乘以Direct Samples孽查,Indirect Samples和Environment Samples這三個數(shù)值。這三個數(shù)值會被應(yīng)用于Light Probes采樣坦喘。數(shù)值越大效果越好盲再,烘焙時間也越長。
Bounces:此數(shù)值用于控制計算光子彈射時的反彈次數(shù)瓣铣,一般2次可以滿足普通場景的需求答朋。 -
降噪設(shè)置相關(guān):
Filtering區(qū)域的設(shè)置用于光照貼圖的降噪操作。降噪操作本質(zhì)上是一個針對已經(jīng)烘焙好的光照貼圖做后處理的過程棠笑。
如果啟用Filtering功能梦碗,系統(tǒng)會在把光照貼圖的Direct,Indirect和Ambient Occlusion這三部分信息結(jié)合之前,分別為這三個部分應(yīng)用降噪算法叉弦。
我們可以選擇Auto(自動)或者Advanced(高級)兩種方式丐一。
自動:Progressive Lightmapper會自動選擇一個當(dāng)前機(jī)器支持的降噪算法應(yīng)用到光照貼圖上(因?yàn)橐?guī)則是固定的,所以具體規(guī)則請參考Unity文檔)淹冰。
高級:可以為Direct库车,Indirect和Ambient Occlusion分別選擇降噪算法(Denoiser)或者降噪濾鏡(Filter)。如果你有支持Nvidia Optix降噪算法的GPU樱拴,可以選擇Optix柠衍;如果有支持RadeonPro降噪算法的GPU,可以選擇RadeonPro晶乔;在任何情況下珍坊,都可以選擇基于CPU的降噪算法OpenImageDenoise。
無降噪設(shè)置:
無降噪設(shè)置烘焙結(jié)果:
打開降噪設(shè)置:
打開降噪設(shè)置烘焙結(jié)果:
除了使用Optix正罢,Radeon Pro和Open Image Denoiser這一類具備AI功能的降噪算法之外阵漏,我們也可以進(jìn)一步使用降噪濾鏡,比如以下配置:
這里的Guassian(高斯)濾鏡會在降噪算法之后在光照貼圖上做進(jìn)一步的模糊處理翻具,以減少光照貼圖中的噪點(diǎn)履怯。
(注:內(nèi)置渲染管線和通用渲染管線還支持A-Trous濾鏡。此濾鏡會在盡量減少光照貼圖中噪點(diǎn)的同時降低模糊的效果裆泳,因此通常比高斯濾鏡的效果更好叹洲。)
-
光照貼圖分辨率和大小相關(guān):
這里涉及三個參數(shù):Lightmap Resolution,Lightmap Padding和Lightmap Size工禾。
Lightmap Resolution(光照貼圖分辨率):數(shù)值單位為texels per unit(每單位面積的紋素)运提。
Texel(紋素)有別于Pixel(像素)。像素是圖片的基本單位闻葵,如果我們在圖片編輯軟件中把圖片放大到足夠大民泵,可以看到這些圖片由許多正方形的像素組成,所以像素是屏幕空間的概念槽畔。紋素則是紋理貼圖的基本單位洪灯,紋理貼圖是應(yīng)用于模型上的,所以并不是屏幕空間的概念竟痰。
在模型被繪制到屏幕上時,紋素會被轉(zhuǎn)換成屏幕上的像素展現(xiàn)出來掏呼。我們可以通過網(wǎng)絡(luò)上找到的這張圖來理解像素和紋素之間的對應(yīng)關(guān)系:
像素和紋素最大的區(qū)別是:像素其實(shí)就是圖片數(shù)據(jù)坏快;但是紋素可以代表很多類型的數(shù)據(jù),它可以是紋理貼圖憎夷,也可以是用于計算陰影的深度圖莽鸿。
光照貼圖本質(zhì)上是紋理貼圖,因此Progressive Lightmapper在這里用紋素而不是像素來代表光照貼圖的分辨率。
Lightmap Padding(光照貼圖間距):數(shù)值單位為texel(紋素)祥得,默認(rèn)值為2兔沃。烘焙好的光照貼圖中包含很多Charts。這些Charts可以理解成對應(yīng)模型上包含烘焙光照信息的UV色塊级及。在游戲運(yùn)行時乒疏,這些色塊會與模型網(wǎng)格進(jìn)行映射,完成最終效果的計算(在模型原先的紋理上疊加烘焙的光照信息)饮焦。但是這些“色塊”之間必須保持一定的距離才能確保模型上一個部位的顏色不會“滲色”到另一個部位怕吴。
Lightmap Size(光照貼圖大小):數(shù)值單位為像素县踢,默認(rèn)值為1024转绷。根據(jù)Lightmap Resolution和Lightmap Padding的參數(shù)設(shè)定,烘焙出來的光照貼圖數(shù)量會相應(yīng)的變化硼啤。這里的大小其實(shí)代表的是每張光照貼圖的最大尺寸议经。按照實(shí)際需求,即使設(shè)置了2048谴返,某些光照貼圖的尺寸也有可能是1024或者512煞肾。
接下去我們用一組測試數(shù)據(jù)來說明上述三個參數(shù)的關(guān)系(使用的項(xiàng)目是上面的夜間場景):
從上述測試數(shù)值可以總結(jié)如下:
(1) Lightmap Resolution越大,烘焙時間越長亏镰,光照貼圖越精細(xì)扯旷。
(2) Lightmap Padding越大,光照貼圖的數(shù)量越多索抓,但是可能可以減少提示UV重疊的模型數(shù)量钧忽。
(3) Lightmap Size越大,光照貼圖的數(shù)量越少逼肯,光照貼圖越精細(xì)耸黑。
以下截圖是配置-6的烘焙參數(shù)和結(jié)果:
從上圖中可以看到,在提高了Lightmap Resolution篮幢,增加了Lightmap Padding數(shù)值和Lightmap Size數(shù)值以后大刊,從原先的119個UV重疊的物體下降到了94個UV重疊的物體。
那么UV重疊到底是什么意思三椿?是因?yàn)槲覀冊谥谱髂P徒釻V的時候沒有做到UV之間保持足夠距離嗎缺菌?
出現(xiàn)這個黃色警告信息的原因有以下幾種(我們也列出了可能的解決方法):
(1) 模型上用于光照烘焙的UV確實(shí)存在重疊:
在Console界面我們可以看到警告UV重疊的信息中包含了具體哪個模型有這個問題。我們可以具體看一下這些模型的UV(這是用于光照貼圖烘焙的第二套UV搜锰。如果沒有這套用于光照烘焙的UV伴郁,我們需要手動生成或者用Unity的模型導(dǎo)入界面來生成這套UV)。
如果模型的原始UV確實(shí)存在重疊蛋叼,我們可以通過外部建模工具來修復(fù)焊傅。
(2) 模型上用于光照烘焙的UV不存在重疊:
如果看下來其實(shí)所有模型的原始UV都不存在問題剂陡,在實(shí)際烘焙好光照貼圖的場景中也看不出有什么“滲色”的情況,我們可以忽略這個警告狐胎。
當(dāng)然我們可以嘗試提高Lightmap Resolution和增加Lightmap Padding的方式來提高光照貼圖的精度鸭栖,從而減少出現(xiàn)在警告中提示UV重疊的物體數(shù)量。不過要注意這會影響烘焙所需的時長握巢,以及增加的光照貼圖的大小晕鹊。
- Compress Lightmaps:
默認(rèn)啟用,對光照貼圖進(jìn)行壓縮操作镜粤。雖然壓縮過的光照貼圖可以減少內(nèi)存占用捏题,但是也會導(dǎo)致光照貼圖質(zhì)量下降。 -
Ambient Occlusion相關(guān):
環(huán)境光遮蔽用于為場景中的某些區(qū)域比如裂縫肉渴,孔洞公荧,墻面的交界處,或者任何兩個物體相鄰的區(qū)域添加類似于陰影的效果同规。它會讓這些地方變得比其他地方更暗一些循狰。此處的設(shè)置會把這些環(huán)境光遮蔽信息烘焙入光照貼圖中。
在HDRP中券勺,我們可以在Volume中設(shè)置Ambient Occlusion绪钥,不過那是針對當(dāng)前攝像機(jī)看到的區(qū)域來計算的基于屏幕空間的實(shí)時環(huán)境光遮蔽,屬于實(shí)時計算的范疇关炼。Volume中設(shè)置的實(shí)時環(huán)境光遮蔽效果程腹,可以通過Window > Render Pipeline > Render Pipeline Debug窗口,把Lightings設(shè)置的Full Screen Debug Mode設(shè)置為SSAO(Screen Space Ambient Occlusion)儒拂,就能看到基于屏幕空間的環(huán)境光遮蔽效果(紅色箭頭區(qū)域?yàn)椴糠諥O效果):
(1) Max Distance(最大距離):
為了計算出一個物體是否被另一個物體擋住從而算出相應(yīng)的環(huán)境光遮蔽效果寸潦,系統(tǒng)需要使用射線來做偵測之用。此參數(shù)用于控制射線的長度社痛。
射線的長度越長见转,光照貼圖中由環(huán)境光遮蔽產(chǎn)生的陰影區(qū)域越多,反之越少(只有相鄰很近的物體之間才會有環(huán)境光遮蔽產(chǎn)生的陰影)蒜哀。
如果設(shè)置為0斩箫,意味著此射線為無限長;默認(rèn)數(shù)值為1撵儿。
Max Distance設(shè)置為0:
Max Distance設(shè)置為1:
因?yàn)閿?shù)值0代表射線長度無限長乘客,所以畫面中的環(huán)境光遮蔽明顯暗很多。
(2) Indirect Contribution(間接光貢獻(xiàn)):數(shù)值在0到10之間淀歇,默認(rèn)數(shù)值為1寨典。此參數(shù)用于控制間接光強(qiáng)度對環(huán)境光遮蔽的影響。
下面三張圖比較了不同Indirect Contribution數(shù)值對畫面整體的環(huán)境光遮蔽造成的影響房匆,可以看到Indirect Contribution越大,環(huán)境光遮蔽越暗(紅色線條標(biāo)出的區(qū)域最明顯)。
參數(shù)配置一:Max Distance = 1浴鸿,Indirect
Contribution = 0井氢,Direct Contribution = 0:
參數(shù)配置二:Max Distance = 1,Indirect
Contribution = 1岳链,Direct Contribution = 0:
參數(shù)配置三:Max Distance = 1花竞,Indirect
Contribution = 10,Direct Contribution = 0:
(3) Direct Contribution(直接光貢獻(xiàn)): 數(shù)值在0到10之間掸哑,默認(rèn)數(shù)值為0约急。此參數(shù)用于控制直接光強(qiáng)度對環(huán)境光遮蔽的影響。
- Directional Mode(方向模式):
Directional:此模式下會生成第二套光照貼圖苗分,專門用于保存入射光的主要方向信息厌蔽。使用法線貼圖的材質(zhì)可以利用這張光照貼圖上的方向信息,在計算法線貼圖時加入光照貼圖中保存的全局光照信息摔癣。不過此模式下生成的光照貼圖通常比Non-Directional模式下生成的光照貼圖大一倍奴饮。(此模式下生成的光照貼圖無法在SM2.0和GLES2.0硬件上解碼使用。在這些硬件上會回退到Non-Directional模式)择浊。
Non-Directional:禁止烘焙時生成第二套用于保存入射光主要方向信息的光照貼圖戴卜。 - Indirect Intensity和Albedo Boost:
Indirect Intensity(間接光強(qiáng)度):用于控制光照貼圖中保存的間接光強(qiáng)度。數(shù)值限定在0到5之間琢岩。默認(rèn)數(shù)值為1投剥。數(shù)值大于1會增強(qiáng)間接光強(qiáng)度,小于1會減弱間接光強(qiáng)度担孔。
Albedo Boost(反射率增強(qiáng)):用于控制物體表面之間光子彈射的數(shù)量江锨。默認(rèn)數(shù)值為1。數(shù)值限定在1到10之間攒磨。數(shù)值越大泳桦,物體表面的反射率越趨向于白色。 -
Lightmap Parameters:
用于控制各項(xiàng)烘焙相關(guān)的參數(shù)娩缰。你可以使用預(yù)設(shè)的參數(shù)也可以自行創(chuàng)建參數(shù)并保存下來以便復(fù)用灸撰。
除了在烘焙窗口可以全局指定這些預(yù)設(shè)的參數(shù),你也可以為場景中參與烘焙的模型的Mesh Renderer組件單獨(dú)指定預(yù)設(shè)的參數(shù)拼坎,示例如下圖所示:
不同顯卡對GPU版本的烘焙效率有什么影響浮毯?
CUDA核心越多,顯存越大泰鸡,烘焙時間越短
既然GPU版本那么快债蓝,為什么還要CPU版本?
進(jìn)行光照貼圖烘焙時盛龄,GPU版本使用的是顯存饰迹。就目前的顯卡來說芳誓,顯存總是有限的,我們也無法像添加內(nèi)存那樣可以自行添加(內(nèi)存也相對便宜很多)啊鸭。如果當(dāng)前場景在烘焙時所需的顯存空間超出了當(dāng)前顯卡具備的顯存大小锹淌,那么GPU版本就會停止工作。這時我們就需要一個后退的方法赠制,那就是CPU版本來救場了:在烘焙過程中赂摆,如果Unity發(fā)現(xiàn)顯存耗盡,Unity會把GPU版本自動切換到CPU版本钟些。
為什么GPU版本開始烘焙以后烟号,有時候會自動切換成CPU版本?
GPU版本自動切換到CPU版本的原因是當(dāng)前系統(tǒng)的可用顯存不足政恍,GPU版本無法繼續(xù)進(jìn)行正常的烘焙操作汪拥。
從GPU版本到CPU版本的切換會發(fā)生在準(zhǔn)備烘焙階段。在Unity編輯器的Console窗口可能會出現(xiàn)兩段黃色的警報信息(第一段必出)抚垃,示例圖如下
OpenCL報錯:后退到CPU光照烘焙喷楣。后面一段的意思就是顯存不足了。
(可能出現(xiàn))這一段是說降噪處理失敗鹤树。請嘗試警用降噪處理或者降低光照貼圖大小铣焊。
我們在使用GPU烘焙的時候,需要注意的是:等待Prepare Baking…這個階段結(jié)束罕伯,開始Baking的時候看是否會切換到CPU版本曲伊,如下圖所示:
如果看到Baking…[ETA: xx:xx:xx],觀察到?jīng)]有切換到CPU版本的話追他,你可以放心之后會繼續(xù)用GPU版本進(jìn)行烘焙了坟募。否則如果這時候你離座去干個別的事情,可能回來一看烘焙時間翻了10倍:因?yàn)樽詣忧袚Q到CPU版本邑狸。
如何避免GPU烘焙自動切換成CPU烘焙懈糯?
因?yàn)閳鼍爸袇⑴c烘焙的資源量大小是不一樣的,所以完全避免切換是不可能的单雾。
通過前面不同型號的GPU烘焙測試赚哗,可以知道確保能夠在場景中使用GPU烘焙的前提條件是當(dāng)前系統(tǒng)可用顯存的大小。因此能否使用GPU烘焙就看我們的系統(tǒng)能否省出足夠的顯存給漸進(jìn)式光照烘焙這個模塊用硅堆。以下是一些節(jié)省系統(tǒng)顯存的方法:
(1) 如下圖所示屿储,通過頂部菜單Edit > Project Settings打開項(xiàng)目設(shè)置界面,在烘焙開始之前將Texture Quality調(diào)整為Eighth Res渐逃,意思是在Scene窗口和Game窗口只使用紋理貼圖的1/8尺寸進(jìn)行顯示够掠。(默認(rèn)為Full Res:意思為使用完整尺寸的紋理貼圖進(jìn)行顯示)。烘焙結(jié)束之后調(diào)整回Full Res茄菊。具體設(shè)置界面如下圖所示:
(2) 在烘焙過程中如果不需要查看漸進(jìn)式的烘焙過程疯潭,可以隱藏Scene窗口和Game窗口赊堪,比如像下圖一樣將Project Settings窗口覆蓋在最上層:
(3) 將場景切分成多個小場景,使用多場景的方式進(jìn)行加載竖哩。這樣可以針對各個小場景進(jìn)行烘焙雹食。
結(jié)語:漸進(jìn)式光照貼圖烘焙系統(tǒng)為我們提供了快速迭代的工作流和整個烘焙時長的預(yù)估,完全改變了之前使用Enlighten系統(tǒng)時對所需烘焙時長完全靠猜期丰,以及光照貼圖烘焙效果要等到烘焙完成以后才能看到的問題。這大大加快了光照烘焙的速度吃挑,也讓燈光美術(shù)師有了更多的自由度獲得自己想要的效果钝荡。