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 にフォールバックします。 |
トラブルシューティング
- 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クライアントが必要です)。
- アバターがカスタムプロポーションのない標準R15リグを使用していることを確認してください。
- ゲームが Player.CharacterAppearanceLoaded イベントの後にアバターを変更しないことを確認してください。
全身または指のアニメーションは、骨の複製タイミングにより視覚的アーティファクトを表示することがあります。これは既知の問題であり、積極的に改善されています。問題が深刻な場合は、アニメーションスクリプトが標準のアニメーションパイプラインの外で骨の変換を変更していないことを確認してください。
レンダリング統計パネルは、SLIMアバターが有効な場合に不正確な三角形数を報告することがあります。これは既知の報告バグであり、実際のレンダリングパフォーマンスには影響しません。