Renderer’s rendering order

 

Unity 中,rendering order 是根據以下參數進行排序:Camera depth >  ZTest、ZWrite > RenderQueue > Sorting layer > Order in layer > Material render queue > Camera order algorithm。

  • Camera depth
    • 數字越大越晚畫
    • 通常無法搭配 Clear Flags: Don’t Clear,因為不會清除 depth buffer (z-buffer)
    • 程式設定 camera.depth
    • 選擇場景中的 camera 編輯
      編輯 depth 參數

      編輯 depth 參數

  • Material type
    • 先畫不透明物件 (opaque),再畫透明物件 (transparent)
    • 根據 material render queue 來決定,數值小於等於 2500 為不透明物件,數值大於 2500 為透明物件
  • Sorting layer
    • 數字越大越晚畫
    • 大多數的 renderer 都有支援此參數,但僅有 SpriteRenderder 以及 ParticleSystemRenderer 能在預設的 Inspector 編輯(不過自定義編輯器來達成)
    • 程式設定 renderer.sortingLayerID
    • 在 Tag Manager 編輯 Sorting layer
      編輯 Sorting layers
    • 選擇場景的 SpriteRenderder 或是 ParticleSystemRenderer 編輯 Sorting layer
      編輯 Sorting layer
  • Order in layer
    • 數字越大越晚畫
    • 大多數的 renderer 都有支援此參數,但僅有 SpriteRenderder 以及 ParticleSystemRenderer 能在預設的 Inspector 編輯
    • 程式設定 renderer.sortingOrder
    • 選擇場景的 SpriteRenderder 或是 ParticleSystemRenderer 編輯 Order in layer
      編輯 Order in layer
  • Material render queue
    • 數字越大越晚畫
    • 預設值會從 Shader 取得,但可自行定義
    • 不透明物件 (Opaque)、半透明物件 (AlphaTest)、透明物件 (Transparent) 預設值分別 2000、2450、以及 3000
      • 通常只有透明物件會關閉 ZWrite
    • 程式設定 material.renderQueue
    • 選擇專案中的 material 編輯
      編輯 render queue
  • Camera render algorithm
    • 無法在預設編輯器修改,使用程式調整
    • 非透明物件排序演算法 camera.opaqueSortMode
      • Default:在 Unity 2018.1 預設值 FrontToBack
      • FrontToBack:粗略低由近到遠排序繪製,能使得 GPU rendering 時有更好的效能
      • NoDistanceSort:關閉排序繪製,能降低 CPU 的使用量
    • 透明物件排序演算法 camera.transparencySortMode
      • Default:根據 camera projection mode 調整
      • Perspective:根據 camera 位置到物件中心 (object center) 的距離排序
      • Orthographic:根據 view plane 到物件中心 (object center) 的距離排序
      • CustomAxis:制定 axis 排序,專門用於 2D 遊戲製作,可參考這篇文章
posted @ 2019-02-14 17:24  何人之名  阅读(427)  评论(0)    收藏  举报