SLIM (可擴展輕量互動模型) 是一個自動優化系統,使用雲端轉碼(將資產轉換為更高效的格式)生成輕量級、優化的 Models 和平台虛擬形象的表示。啟用後,SLIM 將多個部分合併為更少的繪製調用(發送到 GPU 的渲染命令),並生成多個細節層級,允許引擎根據距離、設備能力和可用資源智能選擇最佳表示。


SLIM 提供三個主要好處:
- 視覺質量— 遠處模型的細節比舊版模型細節系統更豐富,保持更接近原始的真實感。
- 一致的過渡— 模型內的所有部分同時切換細節層級,消除令人不適的逐部分過渡。
- 性能— 複合網格顯著減少繪製調用、三角形數量和內存使用,能夠在所有設備層級上實現更豐富的場景。
在這些已發佈的遊戲中探索 SLIM:


前提條件
SLIM 需要以下條件:
- 地點必須 保存到 Roblox(而不是本地 .rbxl 文件),因為 SLIM 使用雲端轉碼生成優化資產。如果您在本地測試,請發佈地點然後啟用 SLIM。
- 必須為遊戲啟用 團隊創建,因為 SLIM 依賴於雲資產生成的相關屬性。
技術行為
當您發佈或測試一個啟用 SLIM 的模型的遊戲時,引擎會將模型數據上傳到雲服務,該服務生成具有多個細節層級的優化複合網格。在運行時,客戶端從 CDN 獲取這些資產,並根據距離和設備能力選擇適當的細節層級,根據距離將每個 SLIM 模型分類到渲染區域:

| 範圍 | 數據模型狀態 | 渲染 |
|---|---|---|
| 完整實例已流式傳輸進來。 | 傳統的逐部分渲染。 | |
| 完整實例已流式傳輸進來。 | 當更有效時,引擎渲染 SLIM 複合體。 | |
| 實例已流式傳輸出。DataModel 中僅存在最小佔位符,而不是完整的模型層級結構。 | SLIM 複合體渲染。 | |
| DataModel 中的最小佔位符。 | 未渲染。 |
SLIM 用於模型
SLIM 最適合用於表示 靜態世界幾何 的模型 — 建築、道具、車輛、地形特徵和其他在運行時不會改變的環境對象。在運行時添加或移除部分、改變材料或修改幾何形狀會阻止 SLIM 正確渲染模型。請參見 模型結構 以獲取一般模型結構指導和 限制 以獲取完整的排除列表。
要在模型上啟用 SLIM,請在 屬性 窗口中將其 LevelOfDetail 屬性設置為 SLIM。

當 SLIM 在模型上設置時,引擎:
- 將模型的渲染相關屬性(幾何、材料、紋理、變換)序列化為緊湊表示。模型內支持的實例類型包括 Part、MeshPart、Decal、Texture、SurfaceAppearance、PartOperation、NegateOperation 和 SpecialMesh。
- 在首次發佈或播放時將此數據上傳到雲轉碼服務。
- 雲服務生成具有多個細節層級的合成網格,移除隱藏的內部幾何並優化紋理。
- 在運行時,客戶端獲取優化的 SLIM 資產,並在引擎流式傳輸原始模型或當 SLIM 比完整模型更有效時渲染它。
如果您的遊戲使用舊版的 StreamingMesh 設置來設置 Model.LevelOfDetail,您可以通過選擇它們並在 屬性 窗口中更改屬性來轉換單個模型,或者您可以使用以下腳本在 命令欄 中批量轉換多個模型。請注意,某些與 StreamingMesh 一起使用的模型可能需要對 SLIM 進行調整,特別是那些具有重疊部分或複雜的 PartOperation 層級結構的模型。
for _, descendant in workspace:GetDescendants() do
if descendant:IsA("Model") and descendant.LevelOfDetail ==
Enum.ModelLevelOfDetail.StreamingMesh then
descendant.LevelOfDetail = Enum.ModelLevelOfDetail.SLIM
end
endSLIM 用於虛擬形象
默認情況下,當前流式傳輸區域外的平臺虛擬形象不可見。啟用 SLIM 虛擬形象會將 標準 玩家角色 — 無論他們有多少配件或服裝層 — 渲染為輕量級的動畫替代品,並在渲染成本的很小一部分中保持視覺真實感。


虛擬形象的關鍵 SLIM 特定屬性是 Workspace.EnableSLIMAvatars,應在 屬性 窗口中設置為 Enabled,同時將 LevelOfDetail 設置為 SLIM 在您的非虛擬形象世界模型上。

啟用 EnableSLIMAvatars 後,引擎:
- 當實際虛擬形象模型流式傳輸出時,渲染 SLIM 版本。
- 根據可用資源在 SLIM 和全解析度表示之間切換,即使在流式傳輸半徑內。
- 根據場景重要性和可用帶寬限制 SLIM 動畫。
限制
| 限制 | 詳細信息 |
|---|---|
| 需要流式傳輸 | SLIM 只在 StreamingEnabled 設置為 true 時運行。沒有流式傳輸,符合 SLIM 的模型將回退到傳統的細節層級渲染。 |
| 僅靜態模型 | 模型 SLIM 不支持在運行時修改的模型(添加/移除部分、改變屬性)或播放動畫的模型。 |
| 人形實例 | 引擎排除包含 Humanoid 的模型進行靜態 模型 SLIM 處理。對於動畫玩家角色,請使用 SLIM 虛擬形象。 |
| 虛擬形象限制 | SLIM 虛擬形象 只支持 R15 玩家角色。R6 骨架、NPC 和具有自定義比例的虛擬形象將回退到默認渲染。 |
| 雲依賴性 | 雲服務在 CDN 上生成和存儲 SLIM 資產。離線或本地測試而不發佈地點不會產生 SLIM 結果。 |
| 零縮放模型 | 引擎排除縮放為 0 的 Scale 模型進行 SLIM 處理。 |
| 平台可用性 | 在尚不支持 SLIM 的平台上,設置為 SLIM 的模型將回退到 Disabled。 |
調試
為了更好地了解 SLIM 模型的狀態,Roblox 提供了幾種 調試著色模式 在 開發者控制台 的 DebugVisualizations ⟩ SlimTintMode 下拉菜單中。請注意,此菜單僅對擁有遊戲 編輯 權限的創作者可用。

有多種著色模式可供選擇。請參見 Enum.SlimTintMode 以獲取每種模式的顏色映射。
LOD 根據當前的細節層級為每個網格著色,使用藍色到紅色的熱圖。藍色表示最低細節,較暖的顏色表示較高的細節。
您還可以通過從 可視化選項 菜單中選擇著色模式,在 Studio 中查看 SLIM 調試可視化:

除了 LOD/DataModelState 著色模式外,Studio 還提供 TranscoderStatus 著色模式。在編輯時,只有此著色模式可用於可視化選項菜單;在播放時,所有著色模式均可用。請參見 Enum.SlimTranscoderStatus 以獲取每個狀態的顏色映射。
故障排除
- 確認 StreamingEnabled 為 true。
- 確認地點已發佈到 Roblox 並且啟用了 團隊創建。
- 檢查模型的 LevelOfDetail 是否設置為 SLIM。
- 在首次發佈後等待 1-2 分鐘以完成雲轉碼,然後重新加入。
- 確保模型不包含 Humanoid 實例。
PartOperation 實例的 固體建模(聯合、交集、否定)在某些 SLIM 模型中可能無法正確渲染。如果聯合在 SLIM 表示中顯示缺失或失真,請嘗試將受影響的 PartOperation 分離到自己的模型中或簡化 CSG 操作。
當原始模型中的部分具有重疊或共面的面時,可能會發生 Z-衝突。要解決:
- 將重疊的部分稍微分開(即使 0.01 studs 也足夠)。
- 避免在同一模型中相鄰部分之間的完全平整表面。
SLIM 在轉碼過程中重新生成 UV 映射(紋理如何投影到 3D 表面上)。默認的 Roblox 材料可能顯示出與原始材料略有不同的鋪設模式。為了減輕:
- 對於重要表面,通過 SurfaceAppearance 使用自定義紋理。
- 將視覺相關的部分分組到同一模型中,以確保紋理一致。
- 確認 Workspace.EnableSLIMAvatars 設置為 Enabled。
- 使用 伺服器和客戶端 測試模式進行多客戶端測試(需要至少 2 個客戶端)。
- 確保虛擬形象使用標準或高級 R15 骨架,且沒有自定義比例。
- 確認遊戲在 Player.CharacterAppearanceLoaded 事件後不會修改虛擬形象。
全身或手指動畫可能偶爾顯示視覺伪影,這是由於骨骼複製時間造成的。這是一個已知問題,正在積極改進。如果問題嚴重,請確認動畫腳本未在標準動畫管道之外修改骨骼變換。
當啟用 SLIM 虛擬形象時,渲染統計面板可能報告不正確的三角形數量。這是一個已知的報告錯誤,不會影響實際的渲染性能。