下面說一下Reflection Probe, 大家都知道:當使用標准着色器時,每一個材質都會具有一定程度的鏡面反射(specularity)和金屬反射
(metalness)屬性,在沒有強大的硬件來處理即時光跡追蹤反射的情況下,我們得仰賴預先計算著色反射,我們使用了一個由六張描
述天空的圖片所組成的方體貼圖(Cubemap)然后在和其他光和地表信息混合運算來仿真如同我們真實世界看到的反射效果。
從Unity 5.x開始,我們可以反射探頭(Reflection Probe)產生貼圖來模擬反射,
工作原理:在某個定點搜集環境信息,動態生成cubemap 反射貼圖。

當一個物體橫跨了多個Reflection Probe的時候, 他的Mesh Renderer中會自動加入所有他觸及到的Reflection Probe. Weight是通
過計算每個他觸及的Reflection Probe和這個物體之間距離來得出的. 另外還可以單獨調節Reflection Probe的”Importance”這
個參數來手動干預這個計算結果.

Mesh Renderer的Reflection Probes選項能夠選擇四種使用Reflection Probe的方法,
1.Off:代表不使用Reflection Probe.
2.Simple:代表只使用列表中Weight值最大的那個ReflectionProbe.
3.Blend Probes:should be used for interior objects, that way you’ll ensure that object won’t accidentally
use reflections from skybox (a.k.a default reflection).
4.Blend Probes And Skybox:should be used for exterior objects, that way when object leaves the bounding box
of reflection probe, it will gradually switch reflections from reflection probe to skybox.
下面我們講一下Refelection Probe的面板參數,這里只講無法第一時間測試出意義的參數. 其他參數都比較簡單.

Type選擇類型, 三種可選.
Baked:用於烘焙模式的,在Lighting面板下點擊Bake進行烘焙光照貼圖時,生成對應的反射貼圖。
Custom:自定義一個cubeMap來指定反射貼圖,選擇Dynamic Objects可將非靜態物體也給Bake出來.
Realtime:實時生成反射貼圖,但是和實時光照一樣的消耗性能,
詳細參數見下:
Time Slicing---官方文檔上說這個選項僅僅針對於當我選擇了Every frame作為刷新模式的情況, 實則不然, 因為不管是On Awake還是Every frame還是
Via scripting, 這個Time Slicing都是有效果的, 要了解這個選項. 首先要了解一下Reflection Probe的內部生成機制, 一個Realtime的Reflection的生成有三個步驟:第一個步驟要計算一個Cubemap的六個面, 第二步要考慮這個Cubemap的mipmap(文檔上說為了支持Glossy Reflections, mipmap是必要的, 而Glossy Reflections對於調節不同程度的Smoothness時是有一定效果上的提升的), 第三步是將計算結果拷貝到Cubemap中.
那么TimeSlicing的三個選項分別有不同的三步計算所需幀數:
All faces at once---9幀, 性能消耗中等. (9幀之內再次通過Via Scripting調用刷新是無效的)
Individual faces---14幀(在9幀的基礎上加了將六個面分為六幀的那多出來的五幀), 性能消耗最低.(14幀之內再次通過Via Scripting調用刷新是無效的)
No time slicing---1幀. 所有動作都在同一幀執行, 這種性能消耗最大. (1幀之內再次通過Via Scripting調用刷新是無效的)
Importance---影響了一個MeshRenderer中的多個ReflectionProbe的Weight的自動混合比例. 當一個物體處在多個Reflection Probe的”領地”內的時候, 首先會考慮每個Reflection Probe的Importance, 之后, 在此基礎上才會考慮每個Reflection Probe與該物體之間的分別的交叉的體積的大小. 也就是說Importance的優先級高於交叉體積的計算.
關於交叉體積的計算: For ex., if the first volume is 1.0 and the second is 2.0, then first probe’s influence will be 1.0 / (1.0 + 2.0) = 0.33, the second probe’s influence will be 2.0 / (1.0 + 2.0) = 0.67. 還有一種特殊情況, 就是就是一個小的Probe套在一個大的Probe里面, 而一個物體又完全在這個小的Probe里面, 那么對這個物體來說, 小的Probe的Weight會是1, 大的會是0. 而當這個物體逐漸脫離這個小的Probe的時候, 那么小的Probe和大的Probe對於這個物體的Weight會進行一個混合.
Size---該Reflection Probe的影響范圍. 進入這個范圍的MeshRenderer會自動和這個Reflection Probe產生關聯. 同時, 當Box Projection開啟的時候, 這個Size也會影響Reflection Probe的UV映射.
Probe Origin---取樣點相對於影響范圍中心的偏移. 當勾選了Box Projection的時候, Probe Origin的位置會影響Reflection Probe的UV映射.
Box projection:一般情況下,反射cubemap是被假設在無限遠出投射出來的圖像,不同的角度都能看到反射的團,但是當你距離反射物體遠近改變時,這個反射的圖案不會發生改變,這個特性,一般情況下,在室外場景很適用,但是到了室內就不行了,
開啟Box projection 選項,(支持Shader Model3以上平台可用)允許我們創建一個投射有限距離內的物體,當我們與反射物體距離發生變化時,反射圖案的尺寸也同樣發生變化,Probe Size以及Probe Origin會影響Reflection Probe的映射圖案的效果.
Shadow Distance---反射陰影距離, 特性和Quality Setting中的特性一樣, 數值越小, 在反射畫面中陰影顯示越近, 但陰影越精細, 調成0會完全關閉陰
影.

