Unity-LOD 組
LOD 組 (LOD Group)?組件管理游戲?qū)ο蟮募?xì)節(jié)級(jí)別?(LOD)。

A:LOD 級(jí)別之間的過(guò)渡的控件
B:LOD 組選擇條,用于在 LOD 級(jí)別之間切換以及預(yù)覽 LOD 渲染
C:關(guān)于?LOD Bias?質(zhì)量設(shè)置的信息。如果?Lod Bias?屬性設(shè)置為 1 以外的任何值,將顯示此消息。
D:所選 LOD 級(jí)別的?Fade Transition Width?設(shè)置。僅在禁用?Animate Cross-fading?屬性(即,選擇按寬度而不是按時(shí)間來(lái)設(shè)置過(guò)渡區(qū))的情況下,才顯示該屬性。
E:為所選 LOD 級(jí)別設(shè)置的網(wǎng)格渲染器 (Renderers)
此外,該組件底部有兩個(gè)按鈕:
添加新的 LOD 級(jí)別后,單擊?Recalculate Bounds?將重新計(jì)算所有 LOD 網(wǎng)格游戲?qū)ο蟮陌鼑w。
通過(guò)單擊?Recalculate Lightmap Scale,可根據(jù)對(duì) LOD 級(jí)別邊界進(jìn)行的更改,在所有 LOD 網(wǎng)格渲染器上更新?Scale in Lightmap?屬性。
LOD 組選擇條
LOD 組選擇條將不同的 LOD 級(jí)別表示為彩色框。
每個(gè) LOD 級(jí)別框中顯示的百分比表示激活該級(jí)別的閾值。該閾值基于游戲?qū)ο蟮钠聊豢臻g高度與屏幕總高度之比。例如,如果 LOD 1 的閾值設(shè)置為 50%,則當(dāng)攝像機(jī)回拉得足夠遠(yuǎn),使得游戲?qū)ο蟮母叨日家晥D的一半時(shí),LOD 1 就會(huì)激活。

A: LOD 預(yù)覽的播放頭。可以來(lái)回拖動(dòng)攝像機(jī)圖標(biāo)來(lái)測(cè)試 LOD 級(jí)別及其過(guò)渡。在播放頭的底部,可以看到當(dāng)前的百分比。
B:若要選擇某個(gè)級(jí)別,請(qǐng)單擊該級(jí)別框。對(duì)于所選的每個(gè) LOD 級(jí)別,可以選擇要使用的渲染器或自定義過(guò)渡區(qū)。
C:若要在選擇條中添加和刪除 LOD 級(jí)別,右鍵單擊 LOD 級(jí)別框,然后從上下文菜單選擇?Insert Before?或?Delete。
D:級(jí)別調(diào)整控件。若要更改 LOD 級(jí)別的百分比值,請(qǐng)拖動(dòng) LOD 級(jí)別框邊界的左邊框。
注意:如果?Lod Bias?屬性未設(shè)置為 1,攝像機(jī)位置可能不匹配每個(gè) LOD 級(jí)別過(guò)渡到下一級(jí)別的實(shí)際位置。在此情況下,選擇條下方會(huì)顯示一條警告消息。

預(yù)覽 LOD 過(guò)渡
在 LOD 組選擇條上移動(dòng)攝像機(jī)圖標(biāo)時(shí),Scene 視圖將顯示 LOD 級(jí)別之間的過(guò)渡預(yù)覽。攝像機(jī)圖標(biāo)充當(dāng)播放頭,可用于來(lái)回拖動(dòng)以控制沿 LOD 組選擇條預(yù)覽的準(zhǔn)確位置。預(yù)覽會(huì)顯示攝像機(jī)將在每個(gè) LOD 級(jí)別渲染的內(nèi)容。

LOD 預(yù)覽播放頭使沿 LOD 組選擇條的準(zhǔn)確位置顯示為百分比(從左側(cè)的 100% 到右側(cè)的 0%)。該百分比表示游戲?qū)ο蟮钠聊豢臻g高度與屏幕總高度之比。
在級(jí)別中移動(dòng)時(shí),Scene 視圖顯示樹(shù)資源的包圍盒,而覆蓋層指示哪個(gè) LOD 處于激活狀態(tài):

LOD 網(wǎng)格的渲染器
在?LOD 組選擇條上選擇 LOD 級(jí)別框時(shí),將顯示?Renderers?面板。

“Renderers”(渲染器)實(shí)際上是為此 LOD 級(jí)別保存網(wǎng)格的游戲?qū)ο?。通常,這是具有?LODGroup?組件的游戲?qū)ο蟮淖禹?xiàng)。
若要為當(dāng)前的 LOD 級(jí)別設(shè)置渲染器網(wǎng)格,請(qǐng)單擊?Add?框,然后從對(duì)象選擇器中選擇該 LOD 級(jí)別的游戲?qū)ο蟆?/p>
可以為渲染器選擇任何游戲?qū)ο螅侨绻x擇的游戲?qū)ο筮€不是子項(xiàng),Unity 會(huì)提示您將其作為?LODGroup?游戲?qū)ο蟮淖禹?xiàng)。
LOD 級(jí)別之間的過(guò)渡
LOD 級(jí)別之間的平滑過(guò)渡可以改善玩家的游戲體驗(yàn)。攝像機(jī)移近或移遠(yuǎn)時(shí),您不希望玩家發(fā)現(xiàn)當(dāng)前的 LOD 級(jí)別與下一個(gè)級(jí)別之間存在明顯的切換痕跡(有時(shí)稱為突現(xiàn) (popping))。
平滑的過(guò)渡發(fā)生在過(guò)渡區(qū)內(nèi);在此區(qū)域中,Unity 分別渲染當(dāng)前和下一個(gè) LOD 級(jí)別,然后使兩個(gè)級(jí)別一起交叉淡化。
交叉淡化 (Cross-fading)?是用于同時(shí)渲染兩個(gè)級(jí)別的方法,其中,當(dāng)前?LOD 級(jí)別的權(quán)重為 1 至 0,下一個(gè)?LOD 級(jí)別的權(quán)重為 0 至 1:

Unity 通常通過(guò)屏幕空間抖動(dòng)或透明度來(lái)實(shí)現(xiàn)交叉淡化。對(duì)于上一個(gè) LOD 級(jí)別,不會(huì)發(fā)生交叉淡化:當(dāng)前級(jí)別只是淡出。
要在 LOD 級(jí)別上設(shè)置平滑過(guò)渡,請(qǐng)執(zhí)行以下操作:
1.從下拉菜單中選擇?Fade Mode,然后選擇?Cross Fade:

**注意:**如果樹(shù)資源是使用 [SpeedTree](https://store.speedtree.com/unity/) 制作的,請(qǐng)選擇 **Speed Tree** 模式。有關(guān)更多信息,請(qǐng)參閱[使用 SpeedTree 模型](#SpeedTreeModels)。
2.默認(rèn)情況下已啟用?Animate Cross-fading?選項(xiàng),這意味著 Unity 執(zhí)行基于時(shí)間的過(guò)渡。如果希望基于攝像機(jī)位置來(lái)定義您自己的過(guò)渡區(qū),請(qǐng)禁用?Animate Cross-fading?選項(xiàng)并設(shè)置?Fade Transition Width?屬性。
有關(guān)更多信息,請(qǐng)參閱[自定義過(guò)渡區(qū)](#width)值。
自定義過(guò)渡區(qū)
兩個(gè) LOD 級(jí)別之間的過(guò)渡從模型的高度比值跨過(guò)下一個(gè) LOD 閾值時(shí)開(kāi)始。例如,如果 LOD 1 閾值設(shè)定為 60%,則 LOD 0 和 LOD 1 級(jí)別之間的過(guò)渡總是在模型高度一達(dá)到 60% 時(shí)就開(kāi)始。此過(guò)渡持續(xù)時(shí)間很短:

此行為是按時(shí)間變化的,因此在啟用?Animate Cross-fading?屬性后,無(wú)需設(shè)置任何屬性。對(duì)于每個(gè) LOD 級(jí)別,交叉淡化的確切持續(xù)時(shí)間都是相同的。
或者,也可以在每個(gè) LOD 級(jí)別內(nèi)按位置手動(dòng)定義過(guò)渡區(qū)。每個(gè)區(qū)域在下一個(gè) LOD 級(jí)別的閾值之前開(kāi)始和結(jié)束??梢远x每個(gè) LOD 級(jí)別中用作過(guò)渡區(qū)的比例;即,設(shè)置從過(guò)渡開(kāi)始到下一個(gè)級(jí)別閾值之間的距離:

使用?Fade Transition Width?屬性來(lái)定義每個(gè) LOD 級(jí)別上的過(guò)渡區(qū):
1.禁用?Animate Cross-fading?選項(xiàng)。
2.單擊要設(shè)置的特定 LOD 級(jí)別框。
**Fade Transition Width** 屬性顯示在 **LOD 組**選擇條之下。

3.設(shè)置?Fade Transition Width?屬性,將交叉淡化過(guò)渡區(qū)的寬度定義為當(dāng)前 LOD 級(jí)別整個(gè)長(zhǎng)度的一個(gè)比例(0.0 與 1.0 之間)。例如,指定更小的值可延遲進(jìn)行混合并創(chuàng)建更快的過(guò)渡。
使用 SpeedTree 模型
SpeedTree 幾何體存儲(chǔ)每個(gè)頂點(diǎn)的下一個(gè)?LOD 位置。然后,每個(gè)頂點(diǎn)都知道如何在當(dāng)前 LOD 位置與下一個(gè) LOD 位置之間進(jìn)行插值。Unity 導(dǎo)入在 SpeedTree 中創(chuàng)建的模型時(shí),自動(dòng)將這些模型設(shè)置為?Speed Tree?模式。

Unity 只需渲染當(dāng)前 LOD 幾何體并提供 0 到 1 之間的值,從而指示每個(gè)頂點(diǎn)逐漸移動(dòng)到下一個(gè) LOD 位置。在過(guò)渡結(jié)束時(shí),當(dāng)前 LOD 和下一個(gè) LOD 的幾何體完美匹配。
兩個(gè) LOD 級(jí)別之間的混合從 0 開(kāi)始,到 1 結(jié)束。沿該區(qū)域的任何點(diǎn)都是混合因子 (blend factor),表示當(dāng)前 LOD 級(jí)別與下一個(gè) LOD 級(jí)別之間的權(quán)重:

Speed Tree?模式使用混合因子來(lái)插入當(dāng)前__網(wǎng)格 LOD 級(jí)別__與下一個(gè)網(wǎng)格 LOD 級(jí)別之間的頂點(diǎn)位置,然后在該位置渲染幾何體。
注意:Speed Tree?模式僅用于兩個(gè)網(wǎng)格 LOD 級(jí)別之間的混合:即,當(dāng)前和下一個(gè) LOD 級(jí)別都具有網(wǎng)格渲染器 (Mesh Renderer) 的情況。過(guò)渡到公告牌 LOD 級(jí)別或完全淡出時(shí),Unity 執(zhí)行交叉淡化 (Cross Fade)?式混合。
著色器代碼中的混合因子
Unity 沒(méi)有提供默認(rèn)的內(nèi)置技術(shù)來(lái)混合 LOD 幾何體。您需要根據(jù)游戲類型和資源制作管線來(lái)實(shí)現(xiàn)自己的技術(shù)。
Unity 根據(jù)游戲?qū)ο蟮钠聊淮笮?lái)計(jì)算混合因子,并在?unity_LODFade.x uniform?變量中將其傳遞給著色器。對(duì)于使用 LOD 淡化來(lái)渲染的游戲?qū)ο?,?qǐng)根據(jù)所選的?Fade Mode,使用?LOD_FADE_PERCENTAGE
?或?LOD_FADE_CROSSFADE
?關(guān)鍵字。
對(duì)于基于時(shí)間(動(dòng)畫(huà)化)的過(guò)渡,可以在全局為具有?LODGroup.crossFadeAnimationDuration?成員的每個(gè) LOD 級(jí)別設(shè)置準(zhǔn)確的過(guò)渡持續(xù)時(shí)間。
有關(guān) LOD 命名約定的信息,請(qǐng)參閱細(xì)節(jié)級(jí)別。