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。 |
故障排除
- 验证 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 头像时,渲染统计面板可能会报告不正确的三角形计数。这是一个已知的报告错误,不会影响实际的渲染性能。