SLIM (スケーラブル軽量インタラクティブモデル) は、クラウドベースのトランスコーディング(アセットをより効率的な形式に変換)を使用して、Models とプラットフォームアバターの軽量で最適化された表現を生成する自動最適化システムです。SLIMが有効になると、複数のパーツが少ない描画コール(GPUに送信されるレンダリングコマンド)に統合され、複数の詳細レベルが生成され、エンジンは距離、デバイスの能力、および利用可能なリソースに基づいて最適な表現をインテリジェントに選択します。


SLIMは、以下の3つの主要な利点を提供します:
- 視覚品質— 遠くのモデルは、従来のモデルのレベルオブディテールシステムよりも詳細に見え、元のモデルにより近い忠実度を維持します。
- 一貫した遷移— モデル内のすべてのパーツが同時に詳細レベルを切り替え、部分ごとの不自然な遷移を排除します。
- パフォーマンス— 複合メッシュは描画コール、三角形数、およびメモリ使用量を大幅に削減し、すべてのデバイスタイアでよりリッチなシーンを可能にします。
これらの公開ゲームでSLIMを探求してください:


前提条件
SLIMには以下が必要です:
- プレースは Robloxに保存 されている必要があります(ローカルの .rbxl ファイルではなく)、SLIMはクラウドトランスコーディングを使用して最適化されたアセットを生成します。ローカルでテストしている場合は、プレースを公開してからSLIMを有効にしてください。
- ゲームには Team Create が有効である必要があります。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 設定を使用している場合、個々のモデルを選択して プロパティ ウィンドウでプロパティを変更することで変換できます。また、以下のスクリプトを コマンドバー で使用して、複数のモデルを一度にバッチ変換することもできます。StreamingMesh で動作していた一部のモデルは、特に重なり合うパーツや複雑な PartOperation 階層を持つモデルは、SLIM用に調整が必要な場合があります。
for _, descendant in workspace:GetDescendants() do
if descendant:IsA("Model") and descendant.LevelOfDetail ==
Enum.ModelLevelOfDetail.StreamingMesh then
descendant.LevelOfDetail = Enum.ModelLevelOfDetail.SLIM
end
endアバターのためのSLIM
現在ストリーミングされていないエリアのプラットフォームアバターは、デフォルトでは表示されません。SLIMアバターを有効にすると、標準のプレイヤーキャラクターが、アクセサリーや衣服のレイヤーがいくつあっても、軽量でアニメーションされたスタンドインとしてレンダリングされ、レンダリングコストのわずかな部分で視覚的忠実度を維持します。


アバターのためのSLIM特有の重要なプロパティは、Workspace.EnableSLIMAvatars で、プロパティ ウィンドウで Enabled に設定する必要があります。また、非アバターのワールドモデルには LevelOfDetail を SLIM に設定します。

EnableSLIMAvatars が有効になると、エンジンは:
- 実際のアバターモデルがストリーミングアウトされると、SLIMバージョンをレンダリングします。
- 利用可能なリソースに基づいて、ストリーミング半径内でもSLIMとフル解像度の表現を切り替えます。
- シーンの重要性と利用可能な帯域幅に基づいてSLIMアニメーションを制限します。
モデルのSLIMとは異なり、モデルから遠くに移動してストリーミングアウトされるまでテストできるのに対し、SLIMアバターはゲーム内で複数のプレイヤーが必要です。SLIMアバターをテストするには、以下のいずれかのテストモードを使用してください:
- チームテスト — 友達や別のアカウントと参加して、遠くでSLIMアバターを確認します。
- サーバーとクライアント — 2つ以上のクライアントウィンドウを起動し、各クライアントが他のクライアントが遠くでSLIMとしてレンダリングするアバターのコピーを表示します。
アバターは、SLIMが有効なゲームでトランスコードされている必要があります。最初のテストでアバターがSLIMとしてレンダリングされない場合は、トランスコーディングが完了するまでしばらく待ってからゲームに再参加してください。
制限
| 制限 | 詳細 |
|---|---|
| ストリーミングが必要 | SLIMは、StreamingEnabled が true に設定されている場合にのみ機能します。ストリーミングがない場合、SLIM対象のモデルは従来のレベルオブディテールレンダリングにフォールバックします。 |
| 静的モデルのみ | モデルSLIMは、ランタイム中に変更されたモデル(パーツの追加/削除、プロパティの変更)やアニメーションを再生するモデルをサポートしていません。 |
| ヒューマノイドインスタンス | エンジンは、静的モデルSLIM処理から Humanoid を含むモデルを除外します。アニメーションされたプレイヤーキャラクターにはSLIMアバターを使用してください。 |
| アバターの制限 | SLIMアバターは、R15プレイヤーキャラクターのみをサポートします。R6リグ、NPC、およびカスタムプロポーションのアバターはデフォルトのレンダリングにフォールバックします。 |
| クラウド依存 | クラウドサービスはSLIMアセットを生成し、CDNに保存します。公開されていないオフラインまたはローカルテストではSLIM結果は生成されません。 |
| ゼロスケールモデル | エンジンは、SLIM処理から Scale が 0 のモデルを除外します。 |
| プラットフォームの可用性 | SLIMがまだサポートされていないプラットフォームでは、SLIM に設定されたモデルは Disabled にフォールバックします。 |
デバッグ
SLIMモデルの状態をよりよく理解するために、Robloxは開発者コンソールの DebugVisualizations ⟩ SlimTintMode ドロップダウンにいくつかの デバッグティントモード を提供しています。このメニューは、ゲームの 編集 権限を持つクリエイターのみが利用できます。

選択できるティントモードは複数あります。各モードの色のマッピングについては Enum.SlimTintMode を参照してください。
LOD は、各メッシュを現在の詳細レベルによって青から赤のヒートマップで色付けします。青は最低詳細を示し、暖色はより高い詳細を示します。
また、視覚化オプションメニューからティントモードを選択することで、スタジオ内でSLIMデバッグ視覚化を確認できます:

LOD / DataModelState ティントモードに加えて、スタジオは TranscoderStatus ティントモードを提供します。編集中は、このティントモードのみが視覚化オプションメニューで利用可能であり、プレイ中はすべてのティントモードが利用可能です。各ステータスの色のマッピングについては Enum.SlimTranscoderStatus を参照してください。
トラブルシューティング
- StreamingEnabled が true であることを確認してください。
- プレースがRobloxに公開されており、Team Create が有効であることを確認してください。
- モデルの LevelOfDetail が SLIM に設定されていることを確認してください。
- 最初の公開後、クラウドトランスコーディングが完了するまで1〜2分待ってから再参加してください。
- モデルに Humanoid インスタンスが含まれていないことを確認してください。
ソリッドモデリングのための PartOperation インスタンス(ユニオン、交差、否定)は、一部のSLIMモデルで正しくレンダリングされない場合があります。SLIM表現でユニオンが欠落しているか歪んでいる場合は、影響を受けた PartOperation を独自のモデルに分離するか、CSG操作を簡素化してみてください。
Zファイティングは、元のモデルのパーツに重なり合うまたは共面の面がある場合に発生することがあります。解決するには:
- 重なり合うパーツを少し離して配置します(0.01 スタッドでも十分です)。
- 同じモデル内の隣接するパーツ間で完全にフラッシュな表面を避けます。
SLIMはトランスコーディング中にUVマッピング(テクスチャが3D表面に投影される方法)を再生成します。デフォルトのRobloxマテリアルは、元のものと比較してわずかに異なるタイルパターンを示す場合があります。軽減するには:
- 重要な表面には SurfaceAppearance を介してカスタムテクスチャを使用します。
- 視覚的に関連するパーツを同じモデルにグループ化して、一貫したテクスチャリングを確保します。
- Workspace.EnableSLIMAvatars が Enabled に設定されていることを確認してください。
- サーバーとクライアントテストモードを使用して複数のクライアントでテストしてください(少なくとも2クライアントが必要です)。
- ゲームが Player.CharacterAppearanceLoaded イベントの後にアバターを変更しないことを確認してください。
全身または指のアニメーションは、骨の複製タイミングにより視覚的アーティファクトを表示することがあります。これは既知の問題であり、積極的に改善されています。問題が深刻な場合は、アニメーションスクリプトが標準のアニメーションパイプラインの外で骨の変換を変更していないことを確認してください。
レンダリング統計パネルは、SLIMアバターが有効な場合に不正確な三角形数を報告することがあります。これは既知の報告バグであり、実際のレンダリングパフォーマンスには影響しません。