Unity在過去幾年曾經(jīng)被貼上手游專用的標(biāo)簽,除了因?yàn)槿菀咨鲜侄缓芏嗒?dú)立手游開發(fā)者使用之外,更大的原因是老版本Unity的光照系統(tǒng)跟如UE3等知名的引擎相比落后很多。粵嵌武漢U3D培訓(xùn)在這里介紹一下Unity5版本新增的全局光照。
Unity 5中新增一種全局光照明的使用方式:Precomputed Realtime GI(預(yù)計(jì)算實(shí)時(shí)全局光照明),簡(jiǎn)稱:實(shí)時(shí)GI。而另一種Bake GI就是大家在Unity 4中一直用過來的ligtmap烘焙方式。
實(shí)時(shí)GI與Bake GI一樣,也需要預(yù)先的Bake過程,但是與Bake GI不同,實(shí)時(shí)GI并不預(yù)計(jì)算場(chǎng)景中光線的反射信息,而是預(yù)計(jì)算場(chǎng)景中靜態(tài)物體表面所有可能的反射光路,然后在游戲運(yùn)行時(shí)結(jié)合燈光的位置、方向等信息實(shí)時(shí)計(jì)算出全局光照的結(jié)果。
這個(gè)計(jì)算機(jī)制使得預(yù)計(jì)算GI具備非常大的優(yōu)勢(shì),在使用預(yù)計(jì)算GI的燈光,其位置、方向、強(qiáng)度、顏色等各種信息都可以在運(yùn)行時(shí)實(shí)時(shí)變化。
很多學(xué)員參加武漢U3D培訓(xùn)時(shí)有個(gè)疑問,那就是預(yù)計(jì)算GI需要燈光類型是Realtime。Realtime難道不是實(shí)時(shí)燈光嗎?怎么變成全局光照明模型的燈光了?
Unity 5的燈光屬性中增加了一項(xiàng),叫做Bounce Intensity,是指全局光照中的間接光強(qiáng)度,要理解這點(diǎn)可以簡(jiǎn)單地把全局光照理解為直接光照與間接光照兩部分。直接光照指直接從光源射到物體上的光,而間接光照指從其他物體表面反射而來的光。直接光照的部分其實(shí)就是局部光照模型,也就是實(shí)時(shí)光照計(jì)算出來的結(jié)果。
回到正題,Bounce Intensity在Unity 5中默認(rèn)值是1,意思就是說一盞Realtime燈光默認(rèn)是使用預(yù)計(jì)算GI的,并且間接光照的強(qiáng)度不做改變。而lighting窗口中的預(yù)計(jì)算GI選項(xiàng)也是默認(rèn)開啟的,所以如果你并不更改這些設(shè)置,即使看起來你好像只使用了Realtime的燈光,但是真正運(yùn)行的時(shí)候卻其實(shí)是在使用全局光照系統(tǒng)。
只要一盞燈的Bounce Intensity大于0,Unity就會(huì)認(rèn)為你需要使用全局光照系統(tǒng)。那么即使你在lighting窗口中取消勾選Precomputed Realtime GI,Unity依然會(huì)嘗試使用全局光照。
既然已經(jīng)取消了預(yù)計(jì)算GI的選項(xiàng),Unity會(huì)去使用另外一種全局光照的方式,Bake GI(只要你還勾選著Bake GI)。而結(jié)果就是,烘焙出來的lightmap里也有那盞Bounce Intensity大于0的Realtime燈光的信息。
全局光照雖然對(duì)硬件的要求變高了,但是使得Unity5的光照系統(tǒng)更加真實(shí),也使得Unity的應(yīng)用更加廣泛。以上是粵嵌武漢U3D培訓(xùn)對(duì)Unity全局光照的簡(jiǎn)單介紹。