unity Reflection Probe
Reflection Probe相關
天空盒的信息不可能包含所有的場景對象,在許多情況下,對象從天空搜集反射信息時可能會被遮蔽,像是室內對象或是在類似橋或是隧道等建筑物里的對象,為了要準確反射這些對象,必須用反射探頭針對這些對象取樣,這種探頭從他們的位置對周圍取樣并把結果寫到方體貼圖,可以讓周圍經過的物體得到環境的反射影像。可以透過GameObject->Light->Reflection Probe來新增一個反射探頭,反射探頭的位置會決定方體貼圖取樣的內容,以及反射所看起來的樣子,基于效能考慮反射探頭越少越好,反射探頭并非用來讓物理得到精確結果,而是讓游戲世界有更好的反射,大多數情況下幾個安排妥當的反射探頭就很足夠了。
Reflection Probe種類
Reflection Probe的使用
第一個命名為Green_Metalic。用shader是standard;第二個命名為Mirror,shader是standard(Specular setup),Specular下的Smoothness設為1.Green_metalic給Sphere,Mirror給Cube;
重疊的Reflection Probe
當一個物體橫跨了多個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.用在外部物體上,當物體離開反射探頭的包圍盒時,會漸變到天空盒的反射。
幾個屬性
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會進行一個混合.
Box Size—該Reflection Probe的影響范圍. 進入這個范圍的MeshRenderer會自動和這個Reflection Probe產生關聯. 同時, 當Box Projection開啟的時候, 這個Size也會影響Reflection Probe的UV映射.
Box Offset—取樣點相對于影響范圍中心的偏移. 當勾選了Box Projection的時候, Box Offset會影響Reflection Probe的UV映射.
Box projection:一般情況下,反射cubemap是被假設在無限遠出投射出來的圖像,不同的角度都能看到反射的團,但是當你距離反射物體遠近改變時,這個反射的圖案不會發生改變,這個特性,一般情況下,在室外場景很適用,但是到了室內就不行了,開啟Box projection 選項,(支持Shader Model3以上平臺可用)允許我們創建一個投射有限距離內的物體,當我們與反射物體距離發生變化時,反射圖案的尺寸也同樣發生變化,Probe Size以及Probe Origin會影響Reflection Probe的映射圖案的效果.
Shadow Distance—反射陰影距離, 特性和Quality Setting中的特性一樣, 數值越小, 在反射畫面中陰影顯示越近, 但陰影越精細, 調成0會完全關閉陰影.
相互反射:有一種情況,兩個鏡子離得很近,相對放著,每個鏡子都不僅反射鏡子的反面,還反射了這個鏡子產生的折射。結果是無盡的兩者間的反射,這個就叫做相互反射。反射探頭通過從他們的位置獲取鏡頭快照來創建cubemap,然而,只有要給鏡頭快照是無法實現相互反射的效果,所以,相互反射階段需要額外的快照。反射可以在兩個物體間反彈的次數可以通過light窗口,environment->environment reflections->bounces屬性設置。這個會對所有探頭全局變化。bounce為1,光探頭看到的反射物體是黑的,為2,第一次相互反射的物體可見,為2,第二層反射的物體可見。注意,反射的反彈數和探頭在整個烘焙過程中被遞增再次烘焙的次數。
Reflection Probe性能和優化
渲染一個反射探頭的cubemap會消耗大量時間是由于:
渲染probe的時間既影響編輯器內部烘焙,又影響實時性能。下面是一些性能優化的建議。
統一的建議
實時探頭優化
實時探頭的渲染負載比編輯器里烘焙的影響更大。更新比較頻繁,如果不正確管理會對幀率影響較大。以下幾個屬性可以讓你有效率地控制探頭渲染:
刷新模式
- 控制什么時候刷新探頭,最費的是逐幀,需要的代碼最少,但如果每個探頭都用這個,將會有很大的性能問題。
- On Awake,探頭只是在運行,啟動場景的時候刷新一次。可以用于探頭在運行時安裝,再也不修改的情況;
- via Scripting, 讓你通過腳本來控制光探頭的更新。盡管需要編寫腳本,但確實考慮到了性能優化。比如,根據表面上的大小更新探頭。
時間分段
當刷新模式設置為每幀,處理負載會很大。時間分段讓你將更新消耗擴散到好幾幀,從而減小給定時間的負載。這個屬性有3種選擇:
- 所有面一次:使6個cubemap的面(在同一幀)立即渲染,但這6個第一級mipmap的混合放在不同幀進行。剩下mipmap的混合放在同一幀,結果在另一幀中被拷貝到cubemap。整個更新花費9幀,性能消耗中等(9幀之內再次通過Via Scripting調用刷新是無效的); 
- 單獨面:跟所有面一次差不多,只是最初每個面的渲染放在單獨的幀(而不是同一幀)。整個update花費14幀。這個選項對幀率的影響最小,但較長的更新時間會比較明顯。比如燈立馬就亮了(14幀之內再次通過Via Scripting調用刷新是無效的); 
- 沒有時間分段:每個探針的更新在一個單獨的幀里完成,保證了反射與物體的表現精確地同步,但成本很高 (1幀之內再次通過Via Scripting調用刷新是無效的)。 
- 參考:http://blog.csdn.net/yy763496668/article/details/52815579 
 http://blog.csdn.net/yupu56/article/details/53487216
 https://docs.unity3d.com/Manual/ReflectionProbes.html
總結
以上是生活随笔為你收集整理的unity Reflection Probe的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: OpenFOAM中重力的植入方式
- 下一篇: 梦三国2进去显示服务器未连接失败,梦三国
