U3D中物體的渲染順序

2021-09-12 10:12:24 字數 869 閱讀 8539

1,由shader中渲染佇列及佇列中的值決定

2,在同一佇列中,若材質相同

2.1 對於ui,按其在場景層級中的先後順序繪製

2.2 對於3d不透明物體,按其離相機的距離,由近到遠繪製,這樣可以減少畫素重繪

2.2 對於3d透明物體,按其離相機的距離,由遠到近繪製,只有這要才能正確繪製所有半透明物體,反之,有些半透明物體將看不到半透效果

3,在同一佇列中,若材質不同,繪製順序不定,在framedebuger中,移動相機,可以看到繪製順序不斷變換。

舉例:有兩個不透明佇列:20001(a,b,c三個物體,使用材質1,z值由小到大),20002(e,f,g三個物體,使用材質2,z值由小到大),讓它們沿相機z軸排成一排

當移動相機時,在framedebuger中檢視6個物體的繪製順序,可以看到繪製順序不斷變動如:

< a,b,e,c,f,g>  < e,f,a,b,c,g>

但不管怎麼樣變動,同一佇列中的物體總是保持順序不變,即a總在b前,b總在c前,e總在f前,f總在g前

一般情況下我們不需要關心相同佇列物體繪製的先後順序,但當需要處理zwrite, ztest, stenciltest時,就必須精確控制物體的繪製順序,否則就實現不了想要的效果。如利用模板測試繪製鏡子,必須先繪製鏡子,將鏡子區域的畫素的模板值寫為某個值x,然後繪製被鏡子照到的物體(如果模板值為x則繪製,否則丟棄畫素)。

4,物體上掛接的指令碼的執行先後完全沒有什麼規律。只是確定的一點是: 若a的start先於b,c的start執行,則a.update也先於b.c的update執行

setsiblingindex(idx)設定兄弟結點先後順序時,若idx處已有結點x,則結點x及其後的所有節點後移

posted on 2018-06-14 10:19收藏

在U3D中查詢物體和元件的方式

一 找物體 gameobject a.find string name 通過物體的名字查詢 b.findwithtag string tag 通過標籤獲取新增該標籤的乙個物體 c.findobjectoftype 依據元件型別 d.findgameobjectswithtag string tag ...

U3D子物體和父物體的獲得及建立子物體

獲得父物體的方法是,通過transform類中的乙個函式parent獲得該父物體的transform資訊 因為該函式的返回值是transform型別 再通過transform類的gameobject函式獲得該物體,從而可以控制物體了。如果是建立子物體的話,只需要建立後設定物體的父物體就好了,獲取子物...

U3D中對物體的平移旋轉縮放位置操作

位置 obj.transform.position vector3 vector3為乙個三維向量,存放位置座標 平移 obj.transform.translate vector3 引數僅為平移的方向和向量的模 旋轉 obj.transform.rotate vector3 縮放 obj.trans...