[譯]Unity – Shader Level of Detail

因為很短,沒事翻一下XDDD

原文:Shader Level of Detail

Shader 的 LOD(Level of Detial) 只有在該 shader 或 subshader 所設定的 LOD 值低於給予的數值時才會起作用。

在預設值下,允許的 LOD 值為’無限’,這是所有使用者硬體皆可支援的。但是,在某些狀況你可能在硬體可以支援程度下,仍然希望降低 shader 的精細程度。例如,否些便宜的顯示卡或許可以支援所有功能,但他在處理這些東西的效率低落。所以,你或許不希望在他們上面使用 Parallax normal mapping(視差法線貼圖)。

Shader 的 LOD 可以個別的為 shader 設定 (使用 Shader.maximumLOD)或是全域的對所有 shader 設定(使用 Shader.globalMaximumLOD)。

在你的客製化 shader 之中,使用 LOD 指令去設定任何 subshader 的 LOD 值。

Unity 內建的 shader 的設定為:

  • VertexLit kind of shaders = 100
  • Decal, Reflective VertexLit = 150
  • Diffuse = 200
  • Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
  • Bumped, Specular = 300
  • Bumped Specular = 400
  • Parallax = 500
  • Parallax Specular = 600

Page last updated: 2010-09-25 << 這是官方的更新時間。


2017/05/08 update.
最近同事提到這個東西可以拿來在某些狀況控制效能, 丟 google 才發現幾年前我自己就有讀過這段XDD
這裡就順便說明一個具體的流程給未來的我以及需要它的人參考~
以 “Mobile/Bumped Diffuse"(DefaultResourcesExtra/Mobile/Mobile-Bumped.shader) 作為範例.
※以下只列出重點訊息
※以下的MaximumLOD是取"硬體支援程度"&"變數設定"之中的最小值
Shader "Mobile/Bumped Diffuse" {
Properties {...}

SubShader {
Tags { ... }
LOD 250
...
}

FallBack "Mobile/Diffuse"
}
在"Bumped Diffuse"裡面, LOD 被設定為 250.
也就是說, 如果 MaximumLOD 大於等於250的話, 這個 SubShader 就會被執行.
反之, 就會嘗試執行 FallBack 指定的 shader “Mobile/Diffuse".
接著來看 “Mobile/Diffuse" (DefaultResourcesExtra/Mobile/Mobile-Diffuse.shader)
Shader "Mobile/Diffuse" {
Properties {...}
SubShader {
    Tags { ... }
    LOD 150

    ...
}

Fallback "Mobile/VertexLit"
}
同理, MaximumLOD 大於等於150就會執行這個 SubShader.
反之, 嘗試 “Mobile/VertexLit".
接著來看 “Mobile/VertexLit" (DefaultResourcesExtra/Mobile/Mobile-VertexLit.shader)
Shader "Mobile/VertexLit" {
Properties {...}

SubShader {
    Tags { ... }
    LOD 80

    // Non-lightmapped
    Pass {...}
    // Lightmapped, encoded as dLDR
    Pass {...}
    // Lightmapped, encoded as RGBM
    Pass {...}
    // Pass to render object as a shadow caster
    Pass {...}
}
}
同理, MaximumLOD 大於等於80就會執行這個 SubShader 裡面所有的 Pass.
反之, 就沒有然後惹~
整理成表格大概會是這樣:
橫: MaximumLOD
縱: 使用的 shader
0
100
200
300
無限
Bumped Diffuse
none
VertexLit
Diffuse
Bumped Diffuse
Bumped Diffuse
Diffuse
none
VertexLit
Diffuse
Diffuse
Diffuse
VertexLit
none
VertexLit
VertexLit
VertexLit
VertexLit

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.