日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity Reflection Probe

發布時間:2023/12/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity Reflection Probe 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Reflection Probe相關

天空盒的信息不可能包含所有的場景對象,在許多情況下,對象從天空搜集反射信息時可能會被遮蔽,像是室內對象或是在類似橋或是隧道等建筑物里的對象,為了要準確反射這些對象,必須用反射探頭針對這些對象取樣,這種探頭從他們的位置對周圍取樣并把結果寫到方體貼圖,可以讓周圍經過的物體得到環境的反射影像。可以透過GameObject->Light->Reflection Probe來新增一個反射探頭,反射探頭的位置會決定方體貼圖取樣的內容,以及反射所看起來的樣子,基于效能考慮反射探頭越少越好,反射探頭并非用來讓物理得到精確結果,而是讓游戲世界有更好的反射,大多數情況下幾個安排妥當的反射探頭就很足夠了。

Reflection Probe種類

  • Baked:在編輯器里存儲一個生成的反射cubemap。可以點inspector窗口下面的bake按鈕或者light窗口下邊的bake按鈕進行烘焙生成反射cubemap。跟烘焙lightmap差不多,如果light窗口Auto勾選上了,會自動更新cubemap。baked探頭只能顯示標記為Reflection Probe Static的物體。一旦烘焙完后,cube map就不會變化,所以不會受移動物體實時變化的影響。消耗比實時的小很多。可以更進一步,通過culling mask和clipping plane屬性(像攝像機一樣)將不想要的物體屏蔽出reflection probe。
  • Realtime:在運行時實時生成cubemap,也就是說反射不局限于靜態物體,而且在場景中會實時更新。然而,需要花費大量的處理時間刷新光探頭,unity允許你通過腳本觸發刷新。同時,有選項控制刷新,這樣就可以好幾幀刷新一次。也可以通過culling mask和clipping plane控制哪些物體加入反射cubemap。
  • Custom:這種也可以在場景中烘焙,像Baked探頭一樣,但是你可以設置一個自定義的反射cubemap,自定義的也不會實時更新。但有動態物體選項,勾選上后,允許沒有標記為Reflection Probe Static的物體加入反射cubemap中。
  • Reflection Probe的使用

  • 首先我們在場景中添加兩個游戲對象,一個Sphere,一個Cube。然后再創建兩個材質球。
    第一個命名為Green_Metalic。用shader是standard;第二個命名為Mirror,shader是standard(Specular setup),Specular下的Smoothness設為1.Green_metalic給Sphere,Mirror給Cube;
  • 將cube放大,把sphere放在cube前面,添加Reflection Probe。調成RealTime類型,cube上就會看到綠色的影子;
  • 將類型設為bake,將sphere設為Reflection Probe static,點擊烘焙,cube上能看到綠色的影子;
  • 將類型設為custom,將之前生成的reflection cubemap設到cubemap那兒,將sphere的reflect probe static勾選去掉,勾選probe上的dynamic object,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會消耗大量時間是由于:

  • 需要在探頭的起始位置分別渲染6個cubemap面;
  • 這些探針需要為每個反射級別單獨花費時間渲染;
  • cubemap的不同mipmap需要一個混合的過程;
    渲染probe的時間既影響編輯器內部烘焙,又影響實時性能。下面是一些性能優化的建議。
  • 統一的建議

  • 分辨率:當反射細節不是很重要(反射物體很小或很遠)時,可以將分辨率設置小點兒;
  • culling mask:用這個可以避免渲染一些不重要的物體,比如一些小物體可以放到一個layer中,用culling mask避免在反射中渲染他們;
  • 貼圖壓縮:可以通過控制烘焙反射探頭貼圖的壓縮減少gpu消耗:在light窗口,Environment Lighting->Reflection,壓縮下拉列表。注意,實時反射探頭在內存中沒有壓縮,他們在內存的大學取決于分辨率和HDR設置。所以,實時反射探頭分辨率更敏感;
  • 實時探頭優化

    實時探頭的渲染負載比編輯器里烘焙的影響更大。更新比較頻繁,如果不正確管理會對幀率影響較大。以下幾個屬性可以讓你有效率地控制探頭渲染:

  • 刷新模式

    • 控制什么時候刷新探頭,最費的是逐幀,需要的代碼最少,但如果每個探頭都用這個,將會有很大的性能問題。
    • 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。