使用反射探針
可將反射探針 (Reflection Probe)?組件添加到場景中的任何對(duì)象,但標(biāo)準(zhǔn)做法是將每個(gè)探針添加到單獨(dú)的空游戲?qū)ο蟆3R?guī)的工作流程如下:
創(chuàng)建新的空游戲?qū)ο螅ú藛危篲_GameObject__ >?Create Empty__),然后將反射探針組件添加到該對(duì)象(菜單:__Component?>?Rendering?>?Reflection Probe__)?;蛘?,如果在場景中已有現(xiàn)成的探針,可能直接復(fù)制該探針的做法更為方便(菜單:__Edit?> __Duplicate__)。
將新探針放在所需位置并設(shè)置其?Offset?點(diǎn)及其效果區(qū)域的大小。 *(可選)在探針上設(shè)置其他屬性以自定義其行為。
繼續(xù)添加探針,直到分配完所有必需的位置。
要查看反射,還需要場景中至少有一個(gè)反射對(duì)象??砂慈缦路绞絼?chuàng)建一個(gè)簡單的測試對(duì)象:
將一個(gè)簡單對(duì)象(如球體)添加到場景中(菜單:__GameObject__ >?3D Object?> __Sphere__)。
創(chuàng)建新材質(zhì)(菜單:__Assets__ >?Create?>?Material__)并保留默認(rèn)的?Standard__ 著色器。
通過將?Metallic?和?Smoothness?屬性均設(shè)置為?1.0?使材質(zhì)具有反射性。
將新創(chuàng)建的材質(zhì)拖動(dòng)到球體對(duì)象上以進(jìn)行分配。
球體現(xiàn)在可以顯示從探針獲得的反射。通過簡單布置單個(gè)探針足以看到反射的基本效果。
最后,必須烘焙探針之后才能讓反射變得可見。如果在?Lighting 窗口中啟用了?Auto Generate?選項(xiàng)(這是默認(rèn)設(shè)置),當(dāng)您在場景中定位或更改對(duì)象時(shí),反射將更新,盡管響應(yīng)不是即時(shí)的。如果禁用自動(dòng)烘焙,則必須單擊反射探針檢視面板中的?Bake?按鈕以更新探針。禁用自動(dòng)烘焙的主要原因是,對(duì)于具有許多探針的復(fù)雜場景,烘焙過程可能需要相當(dāng)長的時(shí)間才能完成。
定位探針
探針的位置主要由其游戲?qū)ο蟮奈恢脹Q定,因此只需將對(duì)象拖動(dòng)到所需位置即可。完成此操作后,應(yīng)設(shè)置探針的效果區(qū)域;這是一個(gè)軸對(duì)齊的盒體形狀,其大小由?Box Size?屬性設(shè)置。您可以直接設(shè)置大小值,也可在檢視面板中啟用大小編輯模式,然后在 Scene 視圖中拖動(dòng)盒體的兩側(cè)(有關(guān)詳細(xì)信息,請(qǐng)參閱反射探針組件頁面)。全套探針的區(qū)域應(yīng)共同覆蓋場景中反射對(duì)象可能通過的所有區(qū)域。
應(yīng)將探針放置在場景中可明顯反射的任何大型對(duì)象附近。中心和角點(diǎn)周圍的區(qū)域是放置探針的良好候選位置。如果較小的對(duì)象具有強(qiáng)烈的視覺效果,可能需要靠近探針。例如,您可能希望反射篝火的火焰,即使對(duì)象本身很小甚至無關(guān)緊要的情況下,也是如此。
如果在所有適當(dāng)?shù)奈恢枚加辛颂结?,則需要為每個(gè)探針定義效果區(qū)域,為此可使用上面提到的?Box Size?屬性來實(shí)現(xiàn)該目的。一面墻壁的大部分長度可能只需要一個(gè)探針區(qū)域(前提是它具有相當(dāng)均勻的外觀),但該區(qū)域在垂直于墻壁的方向上可能相對(duì)較窄;這意味著,墻壁只能被很接近的對(duì)象所反射。一個(gè)開放空間的外觀在不同位置的變化很小,通??梢杂靡粋€(gè)探針覆蓋。請(qǐng)注意,探針的區(qū)域與主世界軸(X、Y 和 Z)對(duì)齊,無法進(jìn)行旋轉(zhuǎn)。這意味著,如果一面均勻的墻壁不是軸對(duì)齊的話,有時(shí)可能需要沿該墻壁布設(shè)的一組探針。
默認(rèn)情況下,探針的效果區(qū)域以其視點(diǎn)為中心,但這可能不是捕獲反射立方體貼圖的理想位置。例如,非常高的墻壁的探針區(qū)域可能會(huì)從墻壁延伸一段距離,但您可能希望從靠近的點(diǎn)而不是區(qū)域的中心捕獲反射。您可以選擇使用?Box Offset?屬性為視點(diǎn)添加偏移量(即,偏移量是游戲?qū)ο蟮木植靠臻g中生成探針立方體貼圖視圖的位置)。使用此設(shè)置,您可以輕松地將視點(diǎn)放置在效果區(qū)域內(nèi)或完全位于區(qū)域外的任何位置。
重疊探針區(qū)域
對(duì)相鄰反射探針的區(qū)域進(jìn)行定位時(shí)不讓它們重疊是非常困難的,幸運(yùn)的是,沒有必要這樣做。然而,這帶來了在重疊區(qū)域中選擇使用哪個(gè)探針的問題。默認(rèn)情況下,Unity 計(jì)算反射對(duì)象的包圍盒與每個(gè)重疊探針區(qū)域之間的交集;與包圍盒具有最大交叉量的區(qū)域即為要選擇的區(qū)域。

您可以使用探針的?Importance?屬性來修改計(jì)算。重要性值較高的探針優(yōu)先于重疊區(qū)域內(nèi)重要性較低的探針。假如您有一個(gè)完全包含在較大區(qū)域內(nèi)的小探針區(qū)域(即,角色的包圍盒與較大包圍區(qū)域的交集可能總是更大,因此永遠(yuǎn)不會(huì)使用小區(qū)域),那么該設(shè)置就會(huì)很有用。
混合
要啟用反射探針混合,請(qǐng)導(dǎo)航至?Graphic Settings?>?Tier settings。啟用混合后,當(dāng)反射對(duì)象從一個(gè)區(qū)域移動(dòng)到另一個(gè)區(qū)域時(shí),Unity 將逐漸淡出一個(gè)探針的立方體貼圖,同時(shí)淡入另一個(gè)探針的立方體貼圖。這種逐漸過渡避免了當(dāng)對(duì)象穿過區(qū)域邊界時(shí)突然有一個(gè)顯眼的對(duì)象“彈出”到反射中的情況。
必須使用網(wǎng)格渲染器 (Mesh Renderer)?組件的?Reflection Probes?屬性控制混合。提供了四個(gè)可用的混合選項(xiàng):
Off?- 禁用反射探針混合。僅將天空盒用于反射
Blend Probes?- 僅混合相鄰探針并忽略天空盒。應(yīng)將此選項(xiàng)用于“室內(nèi)”對(duì)象或場景隱蔽區(qū)域(例如洞穴和隧道)的對(duì)象,因?yàn)閺倪@些地方看不到天空,所以天空不應(yīng)出現(xiàn)在反射中。
Blend Probes and Skybox?- 作用與?Blend Probes?類似,但也允許在混合中使用天空盒。應(yīng)將此選項(xiàng)用于天空始終可見的露天對(duì)象。
Simple?- 當(dāng)存在兩個(gè)重疊的反射探針體積時(shí),禁用探針之間的混合。
當(dāng)探針具有相等的?Importance?值時(shí),給定探針區(qū)域的混合權(quán)重的計(jì)算方法,是將該區(qū)域與對(duì)象包圍盒的交叉量(體積)除以所有探針與該包圍盒的交叉量之和。例如,如果包圍盒與探針 A 區(qū)域的交叉量為 1.0 立方單位,而與探針 B 區(qū)域的交叉量為 2.0 立方單位,則混合值將為:
探針 A:1.0 / (1.0 + 2.0) = 0.33
探針 B:2.0 / (1.0 + 2.0) = 0.67
換句話說,該混合將包含探針 A 的 33% 反射和探針 B 的 67% 反射。
在一個(gè)探針完全包含在另一個(gè)探針內(nèi)的情況下,必須以稍微不同的方式處理該計(jì)算,因?yàn)閮?nèi)部區(qū)域完全與外部區(qū)域重疊。如果對(duì)象的包圍盒完全處于內(nèi)部區(qū)域內(nèi),則該區(qū)域的混合權(quán)重為 1.0(即,根本不使用外部區(qū)域)。當(dāng)對(duì)象部分位于內(nèi)部區(qū)域之外時(shí),對(duì)象包圍盒與內(nèi)部區(qū)域的交叉體積除以包圍盒的總體積。例如,如果交叉體積為 1.0 立方單位,而包圍盒的體積為 4.0 立方單位,則內(nèi)部探針的混合權(quán)重將為 1.0 / 4.0 = 0.25。然后,從 1.0 中減去該值即得到外部探針的權(quán)重,此處即得到 0.75。
當(dāng)參與混合的一個(gè)探針具有比另一個(gè)探針更高的?Importance?值時(shí),更重要的探針通常將覆蓋另一個(gè)探針。