這一篇比較偏重于功能介紹,具體的實(shí)例操作請參考其他文章:未完成
游戲場景中燈光照明的構(gòu)成
現(xiàn)實(shí)生活中的光線是有反射、折射芽唇、衍射等特性的。對這些基本特性的模擬一直以來都是計(jì)算機(jī)圖形圖像學(xué)的重要研究方向取劫。
在CG中匆笤,默認(rèn)的照明方式都是不考慮這些光線特性的,因此出來的效果與現(xiàn)實(shí)生活區(qū)別很大谱邪。最早期的時(shí)候炮捧,人們利用各種方式來模擬真實(shí)光照的效果,比如手動在貼圖上畫上柔和陰影惦银,或者用一盞微弱的面積光源去照明物體的暗部以模擬漫反射現(xiàn)象等等寓盗。
然后出現(xiàn)了所謂的高級渲染器,用計(jì)算機(jī)的計(jì)算來代替我們的手工勞動來進(jìn)行這個(gè)“模擬”的工作璧函。在漫長的發(fā)展過程中傀蚌,出現(xiàn)過很多很多計(jì)算方案,總體上分為這樣幾類:
- 直接模擬光線從被光源發(fā)出到最終被物體完全吸收的正向過程蘸吓,也就是常說的GI(Global Illumination)善炫;
- 不直接模擬光線,而是反向搜集物體表面特定點(diǎn)的受光照強(qiáng)度來模擬現(xiàn)實(shí)照明效果库继,也就是常說的FG(Final Gathering);
- 完全不考慮光線的行為箩艺,單純基于“物體上與其他物體越接近的區(qū)域窜醉,受到反射光線的照明越弱”這一現(xiàn)象來模擬模擬現(xiàn)實(shí)照明(的一部分)效果,也就是常說的AO(Ambient Occlusion)艺谆;
- 將場景光照結(jié)果完全烘焙到模型貼圖上榨惰,從而完完全全的假冒現(xiàn)實(shí)光照效果,也就是我們所說的Lightmap静汤。
不論是GI還是FG琅催,計(jì)算量都是非常大的,一幀圖片需要幾十分鐘甚至幾十小時(shí)來渲染虫给,所以很難被應(yīng)用在游戲設(shè)計(jì)領(lǐng)域藤抡。
因此在游戲設(shè)計(jì)領(lǐng)域,光照貼圖技術(shù)依然是目前的主流方式抹估。
由于光照貼圖需要事先烘焙(baking)出來缠黍,且僅支持靜態(tài)物體(Static Object),而我們的游戲場景中幾乎不可能全都是靜態(tài)物體药蜻,所以通常游戲場景中的燈光照明是多種照明方式的混合作用瓷式。
- 對于靜態(tài)物體來說,大多使用光照貼圖來模擬間接光的照明效果语泽,然后加上直接光源的動態(tài)照明效果蒿往;
- 對于運(yùn)動物體來說,則僅用直接光源的動態(tài)照明效果湿弦,或者使用光照探針來模擬間接光的照明效果。
隨著技術(shù)的發(fā)展以及計(jì)算機(jī)計(jì)算能力的提高腾夯,也許在未來颊埃,我們能夠直接在游戲場景中進(jìn)行動態(tài)的全局光照模擬也說不定呢。新版Unity3D中就已經(jīng)出現(xiàn)了Realtime Global Illumination蝶俱,雖然這個(gè)技術(shù)還處于雛形階段班利,所需要的計(jì)算量依然龐大,但確實(shí)為我們展示了一個(gè)令人激動的前景榨呆。
當(dāng)然罗标,技術(shù)是技術(shù),產(chǎn)品是產(chǎn)品积蜻。技術(shù)是為產(chǎn)品服務(wù)的闯割,再先進(jìn)的實(shí)時(shí)全局光照系統(tǒng),對于像素風(fēng)格的游戲場景的提升也是幾近于0竿拆。
“選擇合適的技術(shù)來完善我們的產(chǎn)品和制作流程”宙拉,以及“根據(jù)現(xiàn)有技術(shù)來設(shè)計(jì)產(chǎn)品和制作流程”,說的其實(shí)是同一個(gè)意思丙笋。
1. 直接照明(Direct Lighting)
Unity3D中的直接照明主要來源于各種燈光物體谢澈,而燈光物體本質(zhì)上是空物體加上燈光組件煌贴。直接照明可以產(chǎn)生陰影,但光線不會反射锥忿、也不會折射牛郑,但可以穿透半透明材質(zhì)物體。
1.1 燈光類型(Lights)
Unity3D中默認(rèn)可以創(chuàng)建這么幾種燈光:聚光燈敬鬓、點(diǎn)光源淹朋、平行光、面積光列林,另外還可以創(chuàng)建兩種探針(Probe):反射探針(Reflection Probe)和光照探針組(Light Probe Group)瑞你。
平行光
平行光通常用來做陽光,Unity3D新建場景后會默認(rèn)在場景中放置一盞平行光希痴。平行光不會衰減者甲。
-
Type
:燈光類型,所有類型的燈光都其實(shí)共用一個(gè)組件砌创,本質(zhì)上是一樣的虏缸。 -
Color
:燈光顏色 -
Mode
:燈光照明模式,每種模式對應(yīng)Lighting面板中一組設(shè)定-
Realtime
:對應(yīng)Realtime Lighting -
Mixed
:對應(yīng)Mixed Lighting -
Baked
:對應(yīng)Lightmapping Setting
-
Realtime Lighting是新出現(xiàn)的一種烘焙光照技術(shù)嫩实,它并不像傳統(tǒng)的烘焙技術(shù)一樣直接烘焙間接光照顏色和亮度信息到光照貼圖上刽辙,而是烘焙物體和物體之間的關(guān)系信息,比如A面對B面有漫反射效果甲献,B面對C面有漫反射效果等等宰缤。這樣一來,只要物體之間的關(guān)系不變(也就是所有的靜態(tài)物體都不移動位置)晃洒,就不需要重新烘焙慨灭,從而使得我們可以在場景中隨意運(yùn)用動態(tài)光源(dynamic lights)。而傳統(tǒng)的Lightmapping光照貼圖方式則不支持動態(tài)光源效果(改變光源不會改變場景光照)球及。Realtime Lighting比Lightmapping要更耗費(fèi)系統(tǒng)資源氧骤,所以手游上就不要考慮了。
-
Intensity
:燈光強(qiáng)度 -
Indirect Multiplier
:在計(jì)算該燈光所產(chǎn)生的間接光照時(shí)的強(qiáng)度倍乘 -
Shadow Type
:陰影貼圖的類型-
No Shadows
:無陰影貼圖 -
Hard Shadows
:硬陰影貼圖 -
Soft Shadows
:光滑陰影邊緣(也就是陰影模糊效果)
-
-
Baked Shadow Angle
:烘焙陰影的角度 -
Realtime Shadows Strength
:實(shí)時(shí)陰影強(qiáng)度 -
Resolution
:陰影貼圖分辨率 -
Bias
:陰影偏移吃引,通常適當(dāng)增加這個(gè)值來修正一些陰影的artifact -
Normal Bias
:法線偏移筹陵,通常適當(dāng)減少這個(gè)值來修正一些陰影的artifact(不同于Bias
的使用場合) -
Near Plane
:陰影剪切平面,對于與攝影機(jī)距離小于這個(gè)距離的場景物體不產(chǎn)生陰影 -
Cookie
:Cookie相當(dāng)于在燈光上貼黑白圖镊尺,用來模擬一些陰影效果牲芋,比如貼上網(wǎng)格圖模擬窗戶柵格效果 -
Cookie Size
:調(diào)整Cookie貼圖大小 -
Draw Halo
:燈光是否顯示輝光播赁,不顯示輝光的燈本身是看不見的 -
Flare
:Flare可以使用一張黑白貼圖來模擬燈光在鏡頭中的“星狀輝光”效果 -
Render Mode
:渲染模式 -
Culling Mask
:
點(diǎn)光源
點(diǎn)光源模擬一個(gè)小燈泡向四周發(fā)出光線的效果新博,點(diǎn)光源在其照亮范圍內(nèi)隨距離增加而亮度衰減
-
Range
:光線射出的范圍熔掺,超出這個(gè)范圍則不會照亮物體
聚光燈
聚光燈模擬一個(gè)點(diǎn)光源僅沿著一個(gè)圓錐體方向發(fā)出光線的效果,聚光燈在其照亮范圍內(nèi)隨距離增加而亮度衰減
-
Spot Angle
:燈光射出的張角范圍
面積光
面積光模擬一個(gè)較大的發(fā)光表面對周圍環(huán)境的照明效果旭愧,通常面積光的燈光亮度衰減很快颅筋,陰影非常柔和宙暇。
Unity3D的面積光僅在烘焙光照貼圖時(shí)有效,并不像Maya的Area Lights一樣能動態(tài)照亮場景议泵。
-
Width
:面積光寬度 -
Height
:面積光的高度
總的來說占贫,Unity3D中自帶燈光比較簡單,根據(jù)我們在Maya中使用燈光的經(jīng)驗(yàn)先口,可以很快熟悉這些燈光類型的使用型奥。
1.2 陰影類型(Shadow)
Unity3D的燈光可以設(shè)置不同的陰影類型,分別是:無陰影碉京、硬陰影厢汹、軟陰影。要注意的是谐宙,不論是硬陰影還是軟陰影烫葬,本質(zhì)上都是用陰影貼圖模擬的陰影效果,而不是真實(shí)光照而自然形成的暗色區(qū)域凡蜻。
燈光上陰影設(shè)置部分會隨著Mode
參數(shù)的不同而變化搭综,Realtime Lighting Mode對應(yīng)的選項(xiàng)很多,而Baked Mode僅對應(yīng)Baked Shadow Angle一項(xiàng)划栓。
無陰影
燈光不產(chǎn)生陰影兑巾,新建場景后默認(rèn)生成的平行光就是無陰影的。
硬陰影
陰影邊緣清晰
軟陰影
陰影邊緣柔和忠荞,有過渡效果
陰影質(zhì)量設(shè)置
雖然我們在燈光的陰影設(shè)置中可以調(diào)節(jié)Resolution以提高陰影質(zhì)量蒋歌,但真正的陰影質(zhì)量調(diào)節(jié)應(yīng)該在Quality面板中來進(jìn)行,燈光中的陰影Resolution參數(shù)默認(rèn)設(shè)置是Use Quality Settings委煤,就是從Quality面板的設(shè)定中來選擇堂油。
從菜單Edit
> Project Settings
> Quality
打開Quality面板,這里可以針對不同質(zhì)量等級設(shè)置不同的參數(shù)素标。
我們現(xiàn)在先不在這里對Quality面板做全面介紹,僅介紹關(guān)于陰影的那一部分設(shè)置內(nèi)容:
-
Shadows
:在當(dāng)前質(zhì)量下是不渲染陰影萍悴,還是只渲染硬陰影头遭,還是軟硬陰影都渲染 -
Shadow Resolution
:在當(dāng)前質(zhì)量下陰影貼圖分辨率,這就對應(yīng)了燈光面板中的Resolution參數(shù)癣诱。 -
Shadow Projection
:陰影貼圖的投影方式计维,Close Fit方式會優(yōu)化近處的陰影質(zhì)量,缺點(diǎn)是運(yùn)動狀態(tài)下可能會出現(xiàn)一些波動撕予,Stable Fit方式不會有波動鲫惶,但質(zhì)量比較差
有的時(shí)候陰影貼圖會出錯(cuò),比如無緣無故多出一條亮縫之類实抡,通城纺福可以選擇切換到
Close Fit
方式來解決欢策,如果不想切換的Close Fit
方式,可以適當(dāng)降低燈光陰影參數(shù)中的Normal Bias
參數(shù)赏淌,或者將對應(yīng)場景物體設(shè)置成雙面顯示踩寇。
-
Shadow Near Plane Offset
:很近處不渲染陰影 -
Shadow Cascades
:陰影貼圖疊加方式,可以是單層六水、2層或者4層-
Cascade Splits
:不同層所對應(yīng)場景區(qū)域的比例分配劃分
-
Shadow Cascades
是一種陰影貼圖算法俺孙,比如我們選擇4層疊加,那么實(shí)際上會計(jì)算4次陰影貼圖掷贾,每次對應(yīng)距離攝影機(jī)一定距離范圍以內(nèi)的場景物體睛榄,而這個(gè)距離范圍的劃分就通過Cascade Splits
中所顯示的紫、綠想帅、黃场靴、紅四種顏色區(qū)域所占比例來區(qū)分。紫色代表最近處的區(qū)域博脑,而紅色代表最遠(yuǎn)處的區(qū)域憎乙。紫色條越窄代表其對應(yīng)的那一層陰影貼圖所對應(yīng)的場景區(qū)域越小,這樣一來該區(qū)域的陰影貼圖精度就很高了叉趣。
我們可以看到這里的Shadow Resolution就對應(yīng)了燈光面板中的Resolution參數(shù)泞边。
1.3 渲染路徑(Rendering Path)
Unity3D提供兩種渲染路徑(Rendering Path),對于初學(xué)者來說疗杉,渲染路徑這個(gè)概念不是很好理解阵谚,大家可以理解成是兩種不同的渲染器,分別有利弊就好了烟具。
1.3.2 Forward
在Forward渲染路徑下梢什,每個(gè)物體會被每個(gè)光源渲染成一個(gè)“通道”,因此物體受到越多燈光的影響朝聋,其渲染次數(shù)就會越多嗡午。
Forward渲染路徑的優(yōu)勢在于,在燈光比較少的情況下冀痕,F(xiàn)orward方式的渲染速度會非忱蠖茫快,處理透明貼圖也非逞陨撸快僻他,還可以使用諸如“多重取樣抗鋸齒(MSAA)”這樣的硬件處理技術(shù)技術(shù)。
但Forward渲染路徑的渲染速度會隨著燈光的增多而迅速變慢腊尚,在一些有很多燈光照明的特定場景中(比如高科技室內(nèi)環(huán)境)并不適合使用Forward渲染路徑吨拗。
1.3.1 Deferred
使用Deffered渲染路徑,渲染時(shí)間不會隨著燈光的增多而提高,而是會隨著受整體光照影響區(qū)域的擴(kuò)大而提高(也就是說劝篷,場景中越多像素被照亮哨鸭,渲染速度就越慢,但全屏被照亮的情況下携龟,燈光設(shè)置復(fù)雜度不會進(jìn)一步影響渲染速度了)兔跌。
Deffered渲染路徑在整體上需要更多的計(jì)算量,對于一些移動設(shè)備峡蟋,Deffered渲染路徑還不能支持坟桅。
新版Unity3D的默認(rèn)渲染路徑是Deffered渲染,如果場景非常簡單蕊蝗,或者希望使用MSAA仅乓,可以自行修改成Forward渲染路徑。
2. 間接照明
間接照明有這么幾種來源:
- 天光蓬戚,也就是環(huán)境光(Ambient Light)夸楣,特指來自于天空的漫反射。在Unity3D中可以繼承“天空球”的顏色作用環(huán)境光顏色子漩,也可以自行指定環(huán)境光顏色豫喧。
- 反射光,特指天空漫反射之外的所有環(huán)境漫反射幢泼。在Unity3D中主要通過光照貼圖或燈光探針來模擬紧显。
- 自發(fā)光物體。在Unity3D中自發(fā)光物體本身的亮度僅使用顏色來模擬缕棵,自發(fā)光物體對于環(huán)境的影響則通過光照貼圖或燈光探針來模擬孵班。
2.1 天空盒(Skybox)與環(huán)境光(Ambient)
Unity3D的天空盒類似于Maya中的天空球的概念,都是在場景外圍生成一個(gè)封閉并正面向內(nèi)的環(huán)境招驴,用來模擬天空的顏色和照明效果篙程。但Unity3D的天空盒采用的是Box形狀的天空環(huán)境而非球形,用6張不同的貼圖而非1張全景貼圖來作為天空貼圖别厘。
我們可以將Maya中常用的全景HDR環(huán)境貼圖轉(zhuǎn)換為適用于Skybox的方形貼圖虱饿,來創(chuàng)建我們自己的Skybox。這種轉(zhuǎn)換可以在貼圖設(shè)置中完成:
將
Default
類型的貼圖的Texture Shape
從2D
改為Cube
触趴,然后修改Mapping
為6 Frames Layout (Cubic Environment)
氮发,點(diǎn)擊Apply
就可以了。
Skybox的貼圖都是高動態(tài)顏色深度的.exr
圖片格式(也就是俗稱的HDR圖片)雕蔽。最好不要使用.jpg
或者.png
這種傳統(tǒng)8位色深的圖片來做Skybox折柠,除非我們確認(rèn)不需要對場景進(jìn)行貼圖烘焙(這樣的話天空盒就只起到環(huán)境貼圖的作用了)宾娜。
簡單的場景(或者刻意追求一種純粹的效果)可以不使用Skybox而使用純色天空批狐,甚至游戲不需要看到天空的,可以直接設(shè)置成None。
天空盒對于場景的照明影響主要來源于其對于環(huán)境光的影響嚣艇。天空盒貼圖所產(chǎn)生的環(huán)境光肯定比純色環(huán)境光要更為豐富承冰,也更為契合天空顏色一些。
環(huán)境光所需要的計(jì)算量很小食零,所以是很有效的照明手段困乒,大家不要忽視了。
2.2 光照貼圖(Lightmap)與烘焙(Baking)
簡單來說贰谣,Lightmap就是用貼圖來模擬全局照明的效果娜搂,但當(dāng)今游戲引擎的Lightmap的功能卻遠(yuǎn)遠(yuǎn)不是一張貼圖那么簡單。按照官方的說法吱抚,Lightmap中不僅可以包括物體表面的光照顏色信息(傳統(tǒng)的Lightmap功能)百宇,還可以包括物體和物體之間的光線滲透關(guān)系信息(新版中的Realtime Lighting功能),也就是說秘豹,動態(tài)光源也可以對于烘焙了光照貼圖的靜態(tài)場景物體產(chǎn)生正確的光照携御。
光照貼圖需要將所有參與的場景物體的UV重新排列組合成互不重疊且盡量少形變的方形結(jié)構(gòu),然后再把光照信息烘焙到一張或幾張較大尺寸(最大到4K)的貼圖中既绕。這些烘焙好的貼圖會被儲存在場景文件所在目錄下與場景文件同名的子目錄中啄刹,所以烘焙光照貼圖之前需要保存場景。
光照貼圖烘焙參數(shù)設(shè)置
Environment:關(guān)于環(huán)境的參數(shù)設(shè)置
-
Skybox Material
:設(shè)置天空盒材質(zhì) -
Sun Source
:設(shè)置太陽凄贩,可以指定一個(gè)平行光作為太陽誓军,然后該平行光的旋轉(zhuǎn)角度會影響其亮度和顏色 - Environment Lighting:關(guān)于環(huán)境光照的設(shè)置
-
Source
:環(huán)境光照來源
-Skybox
:來源于天空盒
-Gradient
:來源于一個(gè)從地平線到穹頂?shù)念伾珴u變
-Color
:來源于單色 -
Intensity Multiplier
:環(huán)境光照明強(qiáng)度強(qiáng)化 -
Ambient Mode
:環(huán)境光照明模式
-Baked
:烘焙在光照貼圖中
-Realtime
:實(shí)時(shí) - Environment Reflections:關(guān)于環(huán)境反射的設(shè)置
-
Source
:環(huán)境反射來源
-Skybox
:來源于天空盒
-Custom
:來源于一個(gè)自定義的Cubemap(方盒貼圖) -
Resolution
:環(huán)境反射貼圖分辨率 -
Compression
:是否壓縮環(huán)境反射貼圖 -
Intensity Multiplier
:環(huán)境反射強(qiáng)度強(qiáng)化 -
Bounces
:環(huán)境反射計(jì)算次數(shù)
Realtime Lighting:關(guān)于實(shí)時(shí)光照烘焙的設(shè)置
-
Realtime Global Illumination
:是否進(jìn)行實(shí)時(shí)光照烘焙
Mixed Lighting:關(guān)于混合光照烘焙的設(shè)置
-
Baked Global Illumination
:是否進(jìn)行混合光照烘焙 -
Lighting Mode
:光照模式Baked Indirect
Distance Shadowmask
Shadowmask
Subtractive
Lightmapping Settings:關(guān)于光照烘焙的通用設(shè)定
-
Lightmapper
:選擇光照烘焙器-
Enlighten
:這是常用的一種烘焙器 -
Progressive (Preview)
:這是新版的一種烘焙器,還處于預(yù)覽狀態(tài)怎炊,它會先烘焙攝影機(jī)可見區(qū)域谭企,再烘焙其他區(qū)域,所以預(yù)覽較快
-
-
Indirect Resolution
:間接光照分辨率(每單位長度多少體素(texel))评肆,數(shù)值越高债查,光照細(xì)節(jié)越高 -
Lightmap Resolution
:光照貼圖分辨率(每單位長度多少體素),通常設(shè)置為Indirect Resolution
的10倍左右 -
Lightmap Padding
:修正兩個(gè)物體的Lightmap之間的距離瓜挽,以避免顏色滲透 -
Lightmap Size
:光照貼圖大许锿ⅰ(最大4096) -
Compress Lightmaps
:是否壓縮光照貼圖 -
Ambient Occlusion
:是否烘焙環(huán)境光遮罩 -
Final Gather
:是否對最后一次GI光線反射后的光照結(jié)果再進(jìn)行一次FG計(jì)算,勾選上會有較好的質(zhì)量表現(xiàn)久橙,但烘焙時(shí)間會增加 Directional Mode
-
Indirect Intensity
:間接光照的強(qiáng)度 Albedo Boost
-
Lightmap Parameters
:設(shè)置詳細(xì)的光照貼圖參數(shù)(可以使用幾個(gè)默認(rèn)值俄占,或者創(chuàng)建新設(shè)置,應(yīng)該是給熟手用的吧)
Other Settings:其他設(shè)置
-
Fog
:添加場景霧效-
Color
:霧效顏色 -
Mode
:霧效衰減模式 -
Density
:霧效密度
-
設(shè)置完成后別忘了點(diǎn)擊
Generate Lighting
按鈕烘焙光照貼圖淆衷!
光照貼圖的烘焙(baking)是很需要時(shí)間的缸榄,新版Unity3D提供了自動烘焙的功能:Auto Generate
選項(xiàng),可以讓我們在調(diào)試場景的時(shí)候無需頻繁手動點(diǎn)擊Bake按鈕祝拯,但自動烘焙的結(jié)果并不會被儲存起來甚带,所以最終發(fā)布前還是需要手動烘焙光照貼圖的她肯。
注意,從名字上鹰贵,很容易將“自動烘焙”和“實(shí)時(shí)全局光照”這兩個(gè)設(shè)置等同起來晴氨,這是非常大的誤解。
定義光照貼圖比例
既然所有的場景物體都被Pack成一個(gè)大的貼圖碉输,那么一個(gè)多邊形面片上的光照信息精度就受限于這個(gè)多邊形面片所對應(yīng)的UV在貼圖中所占據(jù)的面積大小了籽前。出于場景優(yōu)化考慮,我們當(dāng)然希望將有限的光照貼圖面積盡量多的分配給更需要的物體咯敷钾,所以Unity3D在Mesh Render組件中提供了修改物體所占光照貼圖比例的參數(shù):
-
Scale In Lightmap
就是控制該物體的UV在Lightmap的重排中比例縮放的枝哄,數(shù)字越小占比越少。
怎么決定哪些物體的UV占比低哪些物體的UV占比高呢阻荒?通常遠(yuǎn)景物體占比比近景物體低膘格,表面很平滑的物體占比比表面細(xì)節(jié)豐富的物體占比低,處于內(nèi)部不太可見的模型占比通常要盡量低财松,地面或者地形這種很大面積的物體瘪贱,占比中等就好了,否則就擠占了其他物體的燈光貼圖細(xì)節(jié)了辆毡。
2.3 燈光探針(Light Probes)
光照烘焙對于動態(tài)物體(Dynamic Object)菜秦,也就是沒有被設(shè)置成Lightmap Static的物體來說都是不起作用的,如果希望動態(tài)物體也能被正確的照明舶掖,則需要?jiǎng)?chuàng)建Light Probe Group球昨。
Light Probe可以被認(rèn)為是在場景中的一個(gè)小“光源”,而多個(gè)Light Probe組成的網(wǎng)絡(luò)眨攘,就是Light Probe Group主慰。這些小光源通過烘焙得到場景中該點(diǎn)的亮度信息,然后整個(gè)網(wǎng)絡(luò)用這個(gè)信息來照明動態(tài)物體鲫售。
同一時(shí)間內(nèi)只會有最靠近動態(tài)物體的那些Probes會起作用共螺,而且Light Probe離運(yùn)動物體越近,其照明效果越強(qiáng)情竹。我們可以根據(jù)場景光照環(huán)境特征來設(shè)置合適的Light Probe Group藐不。
為場景添加Light Probe Group可以很好的將動態(tài)物體與靜態(tài)場景融合,尤其是在光照環(huán)境復(fù)雜的室內(nèi)場景中秦效,尤其需要添加Light Probe Group雏蛮。
3. 如何提高圖像的渲染質(zhì)量
Unity3D中圖像質(zhì)量是由很多因素共同決定的,而且默認(rèn)的參數(shù)設(shè)置常常都不是最佳的阱州。而我們在制作游戲的時(shí)候挑秉,需要在游戲運(yùn)行效率和游戲畫面質(zhì)量上做出選擇。
有些游戲(比如2D游戲)的游戲畫面基本與渲染質(zhì)量無關(guān)苔货,這時(shí)候就可以關(guān)閉一些影響性能的功能或選項(xiàng)來提高運(yùn)行效率犀概。
但有些游戲(比如3D游戲鹊汛,或者仿真應(yīng)用如虛擬樓盤效果圖之類)對于圖像渲染質(zhì)量有較高要求,我們也需要知道可以通過哪些手段來增強(qiáng)畫面效果阱冶,同時(shí)明白這樣做會犧牲多少運(yùn)行性能。
設(shè)置質(zhì)量等級(Quality Level)
Unity3D允許用戶設(shè)置多個(gè)質(zhì)量等級滥嘴,并在各個(gè)等級中運(yùn)用不同的質(zhì)量參數(shù)木蹬,前面講陰影的時(shí)候涉及過這方面的內(nèi)容。
對于新手來說若皱,常常會犯錯(cuò)的地方是明明設(shè)置好了高等級的圖像質(zhì)量镊叁,卻在較低等級預(yù)覽場景,或者明明需要輸出成WebGL(默認(rèn)使用中等質(zhì)量等級)走触,卻不停地調(diào)整最高質(zhì)量等級的參數(shù)晦譬。
選擇渲染路徑
簡單來說,Deferred渲染路徑的圖像質(zhì)量比較高互广,但Forward渲染路徑在燈光不多的情況下速度比較快敛腌。
陰影質(zhì)量
陰影出現(xiàn)Artifacts的時(shí)候請調(diào)整Bias
參數(shù)和Normal Bias
參數(shù)。
復(fù)雜場景的陰影質(zhì)量需要手動調(diào)整Cascade Splits
參數(shù)中多個(gè)層的占比惫皱,以保證近處陰影有足夠的質(zhì)量像樊。
光照準(zhǔn)確性
使用反射探針(Reflection Probe)
Unity3D中并沒并真實(shí)的Raytrace反射,而是通過反射貼圖來模擬所有的反射效果旅敷。
如果我們在場景中放置一個(gè)非常強(qiáng)反射的小球生棍,我們就能看到這個(gè)小球上實(shí)際反射的是我們的Skybox,完全不會反射場景物體媳谁。這樣一來不僅影響到場景中反光物體的反射正確性涂滴,同時(shí)也會嚴(yán)重影響整體場景的光照準(zhǔn)確性。
我們可以為場景添加Reflection Probe
來矯正不正確的反射貼圖晴音。
Reflection Probe可以看做是一個(gè)帶有6個(gè)攝影機(jī)的點(diǎn)柔纵,它會渲染該點(diǎn)的6個(gè)方向(前后左右上下)锤躁,將渲染結(jié)果拼成一個(gè)Cubemap首量,并應(yīng)用給一個(gè)特定方框范圍內(nèi)的所有物體作為反射貼圖。
對于比較復(fù)雜的環(huán)境进苍,比如有多個(gè)區(qū)域的大房間加缘,我們可以放置多個(gè)Reflection Probe并手動設(shè)置其影響范圍。
Reflection Probe默認(rèn)不會計(jì)算動態(tài)物體觉啊,僅計(jì)算烘焙物體拣宏,我們可以修改屬性讓其將動態(tài)物體也包括在內(nèi),同時(shí)還可以修改屬性為Every Frame
使其每幀更新以準(zhǔn)確反射動態(tài)物體的運(yùn)動過程杠人,還可以增加Lighting Setting中的Reflection Bounces提高反射次數(shù)(這樣就不會出現(xiàn)強(qiáng)反射物體在另一個(gè)反射物體中是黑色的情況了)勋乾。但要注意宋下,這些修改都會占用更多的系統(tǒng)資源,尤其是每幀更新反射貼圖這樣的設(shè)置辑莫。
4. 如何提高烘焙效率
烘焙效率雖然不影響最終游戲的表現(xiàn)学歧,但對我們制作過程有很大的影響。沒人會希望每次修改了場景布局或者燈光布局之后都要花費(fèi)幾個(gè)小時(shí)甚至幾十個(gè)小時(shí)的時(shí)間來烘焙光照貼圖各吨。
一個(gè)小技巧是不要將所有物體都設(shè)置成Lightmap Static參與光照貼圖的烘焙枝笨。很多細(xì)碎的物體(比如地上的小碎石)并不需要很精確的間接光照效果,而且也可能根本沒有足夠的光照貼圖精度來對應(yīng)這些細(xì)碎物體揭蜒,這時(shí)候用燈光探針可能比用光照貼圖更有效率横浑。
在Unite 2017關(guān)于燈光烘焙的專場演講中,演講者通過將細(xì)小物體設(shè)置為動態(tài)物體屉更,并添加簡單的Light Probe徙融,讓渲染時(shí)間從3.5分鐘下降到20秒。