1. 程式人生 > >3D UI 互動和 攝像機的Clar Flags 四種模式,Depth 深度理解,Randerer path 渲染方式控制

3D UI 互動和 攝像機的Clar Flags 四種模式,Depth 深度理解,Randerer path 渲染方式控制

1 3D UI 互動

 將 精靈直接拖入3D場景

Spriter render       2D ui 放入3D場景中自動系統自動新增該元件

 BOX collider元件    射線檢測

 Button 元件        變色控制    點選事件

Event Trigger 元件   新增各種觸發控制,滑鼠進入….離開。等等

要顯示的攝像頭 Main Camera 新增PhysicsRaycaster  元件

之後滑鼠就可以出發3D場景中的UI 

2 如何讓3D中的UI 標籤總顯示在模型的前面(無論位置如何調整)

1 為3D 標籤新增標籤層 

設定標籤層為BQ

2 新增倆個一樣的攝像機設為父子關係

父相機設為 Depth Only

Culling Mask   只渲染標籤  

Depth   設為1   

3.子相機根據需求設為Solid Color 或SKY box

 Culling Mask    設為  Mixed    不渲染 BQ層  

 Depth 設為 0     設為5 就不渲染了(其實是看不見了)      必須小於1

注意: 標籤層相機必須大於要優先渲染的物體 ,

       且為 depth Only   其他模式會看不見其他相機的物體

       當場景只有一個相機的時候  

         Depth OnlY  移動物體時---出現影像殘留          don’t Clare  也會

       當場景有倆個相機的時候

       Depth OnlY  將不會出現物體影像殘留,一切正常    don’t Clare  也是一樣

攝像機的四種模式和深度理解:

 每個相機在渲染時會儲存顏色和深度資訊。螢幕的未繪製部分是空的,預設情況下會顯示天空盒。當你使用多個相機時,每一個都將自己的顏色和深度資訊儲存在緩衝區中,還將積累大量的每個相機的渲染資料。當場景中的任何特定相機進行渲染時,你可以設定清除標記以清除緩衝區資訊的不同集合。可以通過下面四個選項之一來完成:

1.Skybox 天空盒

   這是預設設定。在螢幕上空的部分將顯示當前相機的天空盒。如果當前相機沒有設定天空盒,它會預設使用渲染設定(在Edit->Render Settings裡)中選擇的天空盒。然後它將退回使用背景顏色。另外天空盒元件可以新增到相機上。如果你想建立一個新的天空盒,您可以使用本

指南

2.Solid Color 純色

    螢幕上的任何空的部分將顯示當前相機的背景顏色。

3.Depth Only 僅深度

如果你想繪製一個玩家的槍而不讓它在環境內部得到裁剪,你要設定一個深度為0的相機來繪製環境,還要另一個深度為1的相機單獨繪製武器。該武器相機的清除標記應設定為僅深度。這將保持環境的圖形顯示在螢幕上,但會丟棄所有關於每個物件在三維空間中的位置的資訊。當槍被繪製出來,不透明的部分將完全覆蓋任何已繪製的事物,而不管槍到牆之間如何接近。(這部分看起來很費勁)---------------------也就是標籤的設定

4.Don’t Clear 不清除

該模式不清除任何顏色或深度快取。其結果是,每幀繪製在下一幀之上,造成塗片效果。這不是用於遊戲的典型方式,最好是與自定義著色器一起使用。

Culling Mask 剔除遮罩

剔除遮罩使用層有選擇地渲染一組物件。有關使用層的資訊可以在這裡找到。

通常好的做法,是把使用者介面放到不同的層,然後用一個獨立相機單獨渲染UI層。

為了使UI顯示在其他相機視角的頂部,你還需要設定清除標記為Depth only,並確保UI相機的深度比其他相機高。

 同樣的,如果是製作遊戲,你可以建立一個介面攝像機,單獨渲染介面,而別的攝像機將渲染場景。你只需要新增UI圖層,將所有的介面物體的Layer設定為UI,UI攝像機的Culling Mask也只勾選UI層。

Depth 深度

 首先在Unity場景中建立兩個攝像機,分別命名為camera1和camera2;

           再在場景中建立一個cube和Sphere作為攝像機的拍攝物體;並讓兩攝像機都能夠拍攝到兩個物體。

           接著設定camera1的Depth為0,camera2的Depth為1;

           你會發現Game視窗將只顯示camera2拍攝到的畫面;

   可見攝像機Depth屬性設定相機繪圖順序,具有較大值的相機將被繪製在具有較小值的相機的上面,換言之,一個深度為1的相機將繪製在一個深度為0的相機之上。

攝像機Display的理解:

Display 1   -----窗空置顯示這個Display1演示下的物體

Display 2   ------窗空置顯示這個Display2演示下的物體

一個Game檢視中只能顯示一個Display

Game 檢視中可以選擇的去顯示哪個 Display

可以選擇右鍵Game 檢視去 Add game 視窗 同時顯示倆個Game 視窗

渲染路徑:

  Unity支援不同的渲染路徑。應具體取決於你的遊戲內容和目標平臺/硬體來選擇使用哪一個。不同的渲染路徑有不同的特點和效能特點,主要影響燈光和陰影。
       專案所使用的渲染路徑在Player Settings選擇。此外,可以為每個攝像機重寫(不同攝像機可以是不同的設定)。如果圖形卡不能處理選定的渲染路徑,Unity將自動使用一個較低保真度的設定。因此,在GPU上不能處理延遲照明(Deferred Lighting),將使用正向渲染(Forward Rendering)。如果不支援正向渲染(Forward Rendering ),將使用頂點光照(Vertex Lit)。

Forward Rendering 正向渲染
       正向渲染一個基於著色器的渲染路徑。它支援逐畫素計算光照(包括法線貼圖和燈光Cookies)和來自一個平行光的實時陰影。在預設設定中,少數最亮的燈光在逐畫素計算光照模式下渲染。其餘的燈光計算物件頂點的光照。
       根據影響物體的光源的不同,正向渲染路徑用單個或多個通道來渲染物體。在正向渲染中,光源本身也會根據他們的設定和強度受到不同的對待。
實現細節
       在正向渲染中,影響物體的最亮的幾個光源使用逐畫素光照模式。接下來,最多有4個點光源會以逐頂點渲染的方式被計算。其他光源將以球面調和(Spherical Harmonics)的方式進行計算,球面調和技術計算很快但只能得到近似值。根據以下的規則判斷一個光源是否為逐畫素光源:

  • 渲染模式被設定為不重要(Not Important)的光源以逐頂點或球面調和的方式進行計算
  • 最亮的方向光源為畫素光源

  • 渲染模式被設定重要(Important)的光源為畫素光源
  • 如根據以上規則得到的畫素光源數量小於質量設定中的畫素光源數量(Pixel Light Count),為了減少亮度,會有更多的光源以逐畫素的方式進行渲染,向前渲染每個光照都會使用PASS塊,所以在光照越多渲染的效率越低。

用以下的方法渲染每個物體:

  • 基礎通道渲染一個逐畫素方向光和所有的逐頂點/球面調和光。
  • 其他逐畫素光在附加的通道中進行渲染,每個光源都需要一個通道

       假設光源A到H都有相同的顏色和強度,且它們的渲染模式都為自動的(Auto),那麼它們嚴格的按照其名字排序。最亮的光源以逐畫素光照模式的方式進行渲染(A到D),然後最多有4個光源以逐頂點光照模式進行渲染(D到G),其他光源以球面調和的方式進行渲染(G到H)。

     注意不同的光照組間有重疊,如,最後一個逐畫素光源也以逐頂點光照模式的方式渲染,這樣能減少當物體和燈光移動時可能出現的"光照跳躍"現象。
Base Pass 基本通道
       基礎通道用一個逐畫素方向光和所有球面調和光渲染物體。此通道還負責渲染著色器中的光照貼圖,環境光和自發光。在此通道中渲染的方向光可以產生陰影。需要注意的是,使用了光照貼圖的物體不會得到球面調和光的光照。
Additional Passes 附加通道
       附加通道用於渲染影響物體的其他逐畫素光源。這些通道中渲染的光源無法產生陰影(因此,前向渲染支援一個能產生陰影的方向光)。
Performance Considerations 效能注意事項
       渲染球面調和光很快。它們只花費很少的CPU計算時間,並且實際上無需花費任何GPU計算時間(換言之,基礎通道會計算球面調和光照,但由於球面調和光的計算方式,無論有多少球面調和光源,計算它們所花費的時間都是相同的)。
球面調和光源的缺點有:

  • 它們計算的是物體的頂點而不是畫素。這意味著它們不支援投影遮罩和發現貼圖。
  • 球面調和光只有很低的頻率。球面調和光不能產生鋒利的照明過渡。它們也只會影響散射光照(對高光來說,球面調和光的頻率太低了)。
  • 球面調和不是區域性的,靠近曲面的球面調和點光和聚光可能會"看起來不正確"。

二、延遲渲染

1、介紹

在計算機3D圖形學中,延遲渲染技術是一種在螢幕座標空間渲染的技術。所謂延遲渲染,即在頂點和片段著色器中的第一個通道中沒有真正的渲染被執行,而是延遲到第二個通道中被渲染。

在第一個通道中,僅僅是收集渲染所需的計算資料。每個表面的位置、法線和材質資訊被渲染到幾何緩衝區(G-Buffer)中,這種渲染技術被重圍渲染到紋理技術。之後,片段著色器使用貼圖緩衝資訊在螢幕座標空間為每一個畫素計算直接或間接的光照。螢幕座標空間方向的遮擋能作為延遲渲染管道的一部分,給物體的陰影和相互之間的光照反射提供方向性。如圖所示為延遲著色的渲染過程

1.1、漫反射顏色幾何緩衝區

1.2、深度緩衝區(Z-buffering)

1.3、表面法線幾何緩衝區

1.4、最後的合成效果(圖中還含有陰影,

因此計算陰影對映和陰影

卷必須和延遲渲染一起使用)

2、優點

延遲著色的主要優點是場景幾何面的渲染和光照渲染的解耦。只需要一個幾何通道,並且每個光源只計算它實際影響的那些畫素。這為GPU在場景中有多個光源的渲染減少了效能上的開銷。還有一些附加在這個上面的優點,如,對複雜的光源管理更為方便、其他的著色器資源也易於管理以及簡化軟體渲染流水線。

3、缺點

延遲渲染的關鍵缺點就是它不能處理演算法內的透明度,雖然這個問題在Z緩衝(深度緩衝)場景中是一個常見的問題,通常的處理方法都是採用將場景中的透明部分進行排序和延遲。深度剝離在延遲渲染中可以被用來實現順序無關的透明度,但是付出的代價就是增加幾何緩衝區(G-Buffer)和附加批次的大小。
支援DirectX 10以及更高版本的現代GPU顯示硬體通常能夠足夠快的執行批次處理,以保持互動式幀率的穩定。當需要產生順序無關的透明度時(通常在一些遊戲中),延遲渲染並不會比正向渲染使用相同的技術有效。

(注:延遲渲染在正交攝像機模式下也是不支援的,如果攝像機切換到了正交模式之後就會預設使用正向渲染)

       延遲著色中的實時渲染開銷與由光照射的畫素的數量成比例,並且不依賴於場景複雜度。因此,小小的點光源和聚光源都是開銷非常小的渲染,特別是不會穿過攝像機的近平面的點光源和聚光源,渲染開銷就更小。另外,帶陰影的光源比不帶陰影的光源開銷要更高。因為在延遲渲染中,陰影投射到的物體上需要為每個陰影投射光渲染一次或多次。

另外一個比較嚴重的缺點是使用多材質比較困難。要使用多材質不是不可能,需要在幾何緩衝區儲存更多的資料,這就需要更大的記憶體寬頻。

       一個更致命的缺點是,由於光照和幾何渲染的分離,導致抗鋸齒變得不穩定,主要是因為這種分離會導致內插子樣本會產生不穩定的位置、法線和切線屬性。克服這種限制的常用方法是在最終的影象上使用邊緣檢測,然後在邊緣上使用模糊處理。而且,如今有更高階的邊緣平滑處理技術,如MLAA(Efficiently MovingAntialiasing from the GPU to the CPU,https://software.intel.com/sites/default/files/m/d/4/1/d/8/MLAA.pdf),時間反混疊法(Temporal anti-aliasing https://en.wikipedia.org/wiki/Temporal_anti-aliasing用在虛幻引擎中),儘管它不是一個完全的邊緣平滑處理技術,但是能使得給定的邊緣一個平滑的表面。

4、延遲光照(內容有爭議)

       延遲光照是延遲渲染的修訂。這個技術在延遲渲染的時候使用了3個通道,而不是2個。第一個通道覆蓋了場景幾何體,僅僅將計算每個畫素照明所必需的屬性寫入幾何緩衝區。在螢幕空間,“延遲”通道然後輸出僅僅漫反射和高光反射光資料資訊,因此,必須在場景上進行第二遍,以回讀光照資訊和最終輸出的逐畫素渲染。延遲光照最明顯的優點是動態的減少了幾何緩衝區的大小。最明顯的成本就是需要渲染場景幾何體兩次而不是一次。另外一個額外的消耗是在延遲光照的延遲通道必須單獨輸出漫反射和鏡面反射,然而延遲渲染的延遲通道僅僅需要輸出一個兩者組合的輻射值。

       由於幾何緩衝區的大小的減少技術,部分克服了延遲著色的一個嚴重缺點—多個材質。

三、傳統延遲光照渲染(Legacy Deferred LightingRendering Path)

       這是隨著Unity5.0遺留下來的延遲光照特性,新的工程都應該考慮使用前面講的延遲渲染。

四、頂點光照渲染(Vertex Lit Rendering Path Detail)

       頂點光照渲染通常渲染每一個物體都在一個通道上,計算在物體每個頂點上的所有光源的光。這是最快的渲染方式,並且有著最為廣泛的硬體支援。(當然不能工作在控制檯上)。因為,所有的光照計算都發生在頂點著色器上,因此這個渲染方式不能計算許多逐畫素的效果,比如,陰影、法線對映以及光源Cookies,即將被淘汰:

五,總結:


延時光照是有著最高保真度的光照和陰影的渲染路徑。如果你有很多實時燈光,最好是使用延時光照。它需要一定水平的硬體支援,僅在 Unity Pro可用,移動裝置上不支援。
Forward Rendering 正向渲染
       正向渲染一個基於著色器的渲染路徑。它支援逐畫素計算光照(包括法線貼圖和燈光Cookies)和來自一個平行光的實時陰影。在預設設定中,少數最亮的燈光在逐畫素計算光照模式下渲染。其餘的燈光計算物件頂點的光照。
      根據影響物體的光源的不同,正向渲染路徑用單個或多個通道來渲染物體。在正向渲染中,光源本身也會根據他們的設定和強度受到不同的對待。

頂點光照(Vertex Lit) 是最低保真度的光照、不支援實時陰影的渲染路徑。最好是用於舊機器或受限制的移動平臺上。

Rendering Paths Comparison 渲染路徑比較

Deferred Lighting 延時光照 Forward Rendering 正向渲染 Vertex Lit 頂點光照
Features 功能
Per-pixel lighting (normal maps, light cookies)
每畫素計算光照(法線貼圖、燈光cookies)
Yes Yes -
Realtime shadows 實時陰影 Yes 1 Directional Light(一盞平行光) -
Dual Lightmaps 雙光照貼圖 Yes - -
Depth&Normals Buffers 深度與法線緩衝區 Yes Additional render passes 額外渲染通道 -
Soft Particles 軟粒子 Yes - -
Semitransparent objects 半透明的物體 - Yes Yes
Anti-Aliasing 抗鋸齒 - Yes Yes
Light Culling Masks 燈光剔除蒙板 Limited Yes Yes
Lighting Fidelity 光照保真度 All per-pixel 全部畫素 Some per-pixel 某些畫素 All per-vertex 所有頂點
Performance 效能
Cost of a per-pixel Light 每畫素光照的花費 Number of pixels it illuminates
照亮的畫素數
Number of pixels * Number of objects it illuminates
畫素數*照亮的畫素數
-
Platform Support 支援平臺
PC (Windows/Mac) 桌上型電腦 Shader Model 3.0+ Shader Model 2.0+ Anything
Mobile (iOS/Android) 移動設 - OpenGL ES 2.0 OpenGL ES 2.0 & 1.1
Consoles  (遊戲)平臺 360, PS3 360, PS3 -


http://blog.csdn.net/Fenglele_Fans/article/details/77842546