组建资产库

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处。

组建资产库 是在游戏的中心位置导入和配置一组资产的过程,以便于访问和重用。这个过程可以为您在准备构建环境时节省大量时间,特别是如果您配置每个资产的值以提高性能并优化中低端设备的内存使用。

使用 环境艺术 - 组建 .rbxl 文件作为参考,本节环境艺术课程向您展示如何从您的精美资产中组建资产库,包括逐步说明:

  • 从可平铺纹理创建自定义材料用于您的地形。
  • 为您的修边纸创建 SurfaceAppearance 对象,并将其应用于资产库中的未展开网格。
  • 设置资产的渲染参数,以确保在所有设备上实现最佳性能。
  • 将您的资产转换为包,以便您可以在所有项目中更新和重用它们。

完成本节后,您将学习如何以创造性的方式利用您的资产库来替换或转换灰盒环境,并添加最终的修饰,以增强整体 3D 空间。

示例激光标记游戏的模块化和道具包。

创建自定义材料

Studio 将自定义材料表示为 MaterialVariant 对象,位于 MaterialService 中。这些 MaterialVariant 对象有四个属性,结合四个可平铺的 纹理图 来创建具有物理特性的高质量自定义材料:

在您将纹理图提供给这些属性后,您可以将新的自定义材料应用于零件、网格和地形。您可以使用或修改示例纹理图 .png 文件,以在最终示例激光标记环境中创建 Lumpy Moss、Flowering Lumpy Moss、Lumpy Moss with Stones 和 Stones 自定义材料,或者您可以使用您在教程的前一部分设计的自己的材料。

要为您的可平铺纹理创建 MaterialVariant 对象:

  1. 从 窗口 ⟩ 3D 菜单中,选择 材料 以打开 材料管理器。

  2. 在 材料 列表中,选择与您的可平铺纹理最相符的基础材料。例如,如果您要为 Lumpy Moss 可平铺纹理创建 MaterialVariant 对象,请选择默认的地面材料,以便材料继承其物理属性。

  3. 在上方工具栏中,单击 ⊕ 图标。一个新的 MaterialVariant 在调色板中显示,右下角的图标指示它是一个自定义材料。

    材料管理器中新材料变体的图标,指示自定义材料
  4. 在 检查器 中,导航到 常规 部分,然后将材料重命名为与您的可平铺纹理名称一致。

    检查器视图,材料名称突出显示。
  5. 在 纹理图 部分,在 颜色 右侧,单击 导入 按钮。文件浏览器显示。

    检查器视图的纹理图部分,导入按钮突出显示。
  6. 在文件浏览器中,选择对应可平铺纹理的 反照率 纹理图 .png 文件,然后单击 打开 按钮。文件浏览器关闭,新的颜色图显示其资产 ID。

  7. 对 金属度、法线 和 粗糙度 纹理图重复此过程。自定义材料更新以反映纹理图。

    Moss_Lumpy_A 材料的所有纹理图。
    应用 Moss_Lumpy_A 材料的球体部分。
  8. 在 覆盖 部分,启用 设置为覆盖 切换,以确保当您将地面应用于地形时,Studio 使用此自定义材料。

    启用的设置为覆盖切换。
  9. 可选
    如果您正在创建一个代表有机材料的自定义材料,

    1. 在 平铺 部分,单击 模式 下拉菜单。
    2. 选择 有机 以随机化输出并减少可见平铺。
    检查器视图的平铺部分及其设置。
  10. 对您希望在游戏中包含的每个可平铺纹理重复此过程。

创建 SurfaceAppearance 包

Studio 在 SurfaceAppearance 对象中利用修边纸,您可以将其父级设置为包含 UV 数据的 MeshParts。与自定义材料类似,SurfaceAppearance 对象有四个属性,结合四个修边纸纹理图以创建高质量的 3D 视觉表面处理:

SurfaceAppearance.ColorMap – 表示反照率纹理图。
SurfaceAppearance.MetalnessMap – 表示金属度纹理图。
SurfaceAppearance.NormalMap – 表示法线纹理图。
SurfaceAppearance.RoughnessMap – 表示粗糙度纹理图。

在您将纹理图提供给这些属性后,您可以将 SurfaceAppearance 对象作为 MeshPart 的子对象,该对象的 UV 数据映射到您的修边纸,UV 数据会自动应用于父网格。这就是为什么将 SurfaceAppearance 对象制作成 包 是有用的,以便您可以在所有模块化资产和道具中重用相同的 SurfaceAppearance 对象。例如,以下网格都有 UV 数据,映射到在单个 SurfaceAppearance 对象包中表示的相同修边纸布局。

您可以使用或修改示例纹理图 .png 文件,以创建一个 SurfaceAppearance 对象,该对象尊重最终示例激光标记环境中模块化资产和道具的 UV 数据,或者您可以使用您在教程的前一部分设计的自己的材料,适用于您自己的模块化资产和道具。

要创建可以作为子对象添加到您的模块化工具包和道具的 SurfaceAppearance 包:

  1. 将 SurfaceAppearance 对象插入到 Workspace 中。

  2. 选择 SurfaceAppearance 对象,然后在 属性 窗口中,选择 ColorMap 属性。弹出窗口显示。

  3. 单击 添加图像... 按钮。文件浏览器显示。

    ColorMap 弹出窗口,添加图像按钮突出显示。
  4. 选择对应可平铺纹理的 反照率 纹理图,然后单击 打开 按钮。文件浏览器关闭,ColorMap 属性更新为新的资产 ID。

  5. 对 金属度图、法线图 和 粗糙度图 属性重复此过程,从文件浏览器中选择它们各自的纹理图。

  6. 在 资源管理器 窗口中,右键单击 SurfaceAppearance 对象,然后从上下文菜单中选择 转换为包。转换为包 对话框显示。

  7. 填写 标题 和 描述 字段,将所有权设置为您自己或一个组,然后单击 提交 按钮。完成后,链环符号会显示在 SurfaceAppearance 对象的图标上,以标识它为一个包。

    带有链环符号的 Surface Appearance 图标。
  8. 可选
    选择 SurfaceAppearance 对象的子 PackageLink 对象,然后在 属性 窗口中,启用 自动更新,以便在您对 SurfaceAppearance 对象进行任何修改时自动更新包。

导入模块化资产和道具

Studio 将您导入的模块化资产和道具表示为 Model 对象,每个资产的组件都有子 MeshParts。例如,如果您导入一个带有顶部修边、底部修边和墙体组件的墙段,Studio 将 .fbx 或 .obj 文件表示为 Wall_Section Model,并具有单独的子 Top_Trim、Bottom_Trim 和 Wall MeshParts。

使用导入工具,您可以将示例模块化工具包和道具导入 Studio,以便在您的资产库中使用,或者您可以导入您在教程的前一部分设计的任何资产。有关此工具功能的更多信息,请参见 导入器。

要将您的模块化资产和道具导入游戏:

  1. 从 文件 菜单中,选择 导入。文件浏览器显示。

  2. 选择一个 .fbx 文件,作为模块化资产或道具。

  3. 验证对象预览并检查导入设置是否正确。

  4. 验证任何 警告或错误消息。

  5. 单击 导入。资产在 资源管理器 窗口和视口中显示。

  6. 对每个模块化资产和道具重复此过程。

  7. 将所有资产移动到游戏中靠近灰盒几何体的一个区域。该区域就是您的资产库。

应用 SurfaceAppearance 数据

当您通过第三方建模软件展开网格的 UV 时,软件会将 UV 数据存储在网格的 .fbx 或 .obj 文件中。当您将该网格导入 Studio 时,生成的 MeshPart 对象保留该数据,但您仍然需要应用一个具有来自修边纸的纹理图属性的 SurfaceAppearance 对象,以便在资产上显示修边纹理。

要将 SurfaceAppearance 纹理图数据应用于资产库中的未展开网格:

  1. 在 资源管理器 窗口中,单击您的 SurfaceAppearance 包,然后按 CtrlD (⌘D) 进行复制。
  2. 将复制的 SurfaceAppearance 包作为子对象添加到模块化资产或道具。资产将其 UV 数据应用于纹理图并显示其视觉处理。
  3. 对每个模块化资产和道具重复此过程。

设置物理和渲染参数

现在您在 Studio 中拥有资产,重要的是设置物理和渲染参数,以使资产在内存和 GPU 限制的设备上保持尽可能高的视觉质量。一般来说,您越是遵循本节中的指导,您的游戏性能就越好。然而,重要的是仔细考虑您计划在整体环境中放置每个资产的上下文,以确保您保持美学目标和游戏玩法要求。

固定

BasePart.Anchored 属性决定 Roblox 引擎的物理系统是否影响对象的位置。当您为 Part 或 MeshPart 启用此属性时,它会将对象从游戏中始终运行的动态模拟的物理计算中移除,这意味着对象永远不会因重力或其他对象的碰撞而改变位置。

不模拟物理响应的对象渲染成本较低,因为它们不占用进行这些物理计算所需的 GPU。当您释放 GPU 时,您提高了游戏的性能,特别是在需要为快速游戏玩法节省 GPU 的低端设备上。因此,最终示例激光标记环境中 每个 资产(除了门)都是固定的。

可碰撞

BasePart.CanCollide 属性决定对象是否可以与其他对象物理交互。当您为 Part 或 MeshPart 启用此属性时,该对象是不可穿透的,Roblox 引擎会在物理计算中考虑它。当引擎必须考虑许多对象的物理计算时,这些计算可能会影响您游戏的性能。

为了减轻这种对性能的影响,对于用户永远不会与之交互的对象,请禁用此属性。例如,最终示例激光标记环境为所有植被禁用此属性。

可触碰

BasePart.CanTouch 属性决定 Touched 和 TouchEnded 事件是否在对象上触发。当您为 Part 或 MeshPart 启用此属性时,Roblox 引擎会检查对象的触摸事件状态,以查看是否需要触发或停止事件。

此过程发生在每一帧上,如果引擎需要同时检查许多对象的触摸事件状态,这可能会占用大量内存。为了减轻这种对内存的影响,仅对必须触发事件的对象启用此属性。

可查询

BasePart.CanQuery 属性决定 Roblox 引擎在空间查询操作(例如射线投射)期间是否考虑该对象。Studio 默认为每个 Part 或 MeshPart 启用此属性,这意味着引擎会检查每个对象是否需要调用空间查询操作。此过程发生在每一帧上,当引擎需要对许多对象进行这些检查时,这可能会占用大量内存。

因此,建议对 Roblox 引擎不需要考虑进行空间查询操作的对象禁用此属性。在决定在哪里禁用此属性时,请考虑每个资产对游戏玩法的影响。例如,最终示例激光标记环境为建筑物中的每面墙保留此属性,因为引擎需要考虑这些表面,因为用户从激光标记枪发射激光。如果引擎不考虑这些资产,则激光会像没有任何障碍物一样直接穿过建筑物。

投射阴影

BasePart.CastShadow 属性决定对象是否投射阴影。当您为 Part 或 MeshPart 启用此属性时,Roblox 引擎在运行时计算对象的每个顶点位置,然后从太阳绘制一条射线到其任何相邻对象,直到与另一个对象碰撞以创建阴影。

这些计算可能会带来性能成本,尤其是当您有许多几何复杂的对象时。这是因为几何复杂的对象比几何简单的对象有更多的多边形,这意味着它们有更多的顶点,引擎需要计算对象的阴影。对象中的多边形越少,操作越快,阴影的成本越低。

一个多边形较少的墙段,以及一个多边形较多的植物在白墙上投射阴影。

阴影可以为具有 3D 几何深度的对象提供很强的现实感,因此在决定在哪里禁用此属性时,请考虑对象在哪里为环境提供显著的视觉改善,以及用户在哪里会注意到缺失的阴影。例如,植被的复杂阴影可以在户外空间提供很强的沉浸感,用户可能会看到它们,但对于用户永远不会与之交互的穿过天花板的植被,这种沉浸感就不是必要的。

双面

MeshPart.DoubleSided 属性决定是否渲染网格中的两个面或多边形。当您为平面 MeshPart 启用此属性时,例如叶子、头发或布卡片,Roblox 引擎会渲染网格中的两个面或多边形,以便用户可以从任何角度看到对象的完整性。例如,以下树叶是单面平面网格,当您启用此属性时,任何面朝远离相机的叶子都会对用户可见。

此属性对于为您的环境增加现实感非常有用,但它会带来性能成本,因为引擎需要两次渲染对象的多边形:一次是面朝用户相机的方向,另一次是面朝用户相机的任何网格。为了减轻这种对性能的影响,最终示例激光标记环境仅为植被启用此属性,因为它在 3D 空间中对现实感有很强的视觉影响。

碰撞精度

MeshPart.CollisionFidelity 属性决定网格或联合的物理碰撞盒与其视觉表示的匹配程度。默认情况下,此设置渲染的碰撞盒大致与网格的多边形形状相同,这意味着用户与对象碰撞的地方与网格的实际几何形状相似。例如,以下图像中的城堡网格具有几乎与其几何形状匹配的默认碰撞盒。

一个灰色的城堡网格。
原始网格
相同的城堡网格,带有彩色碰撞盒,显示用户可以与城堡碰撞的地方。
默认

您可以将此属性设置为不同的值,以减少网格碰撞盒的精度。例如,当您将此属性设置为 Hull 时,Roblox 引擎会显著减少网格碰撞盒的顶点数量,当您将此属性设置为 Box 时,引擎会将网格的碰撞盒减少为一个包围网格的立方体。此外,如果您想增加网格碰撞盒的精度,可以将此属性设置为 PreciseConvexDecomposition,以增加碰撞盒中的顶点数量。

相同的城堡网格,带有立方体碰撞盒,显示用户可以与城堡碰撞的地方。
Box
相同的城堡网格,带有圆柱形碰撞盒,显示用户可以与城堡碰撞的地方。
Hull
相同的城堡网格,带有彩色碰撞盒,显示用户可以与城堡碰撞的地方。此版本显示比默认碰撞盒更多的彩色面。
PreciseConvexDecomposition

与 BasePart.CastShadow 类似,Roblox 引擎需要渲染的顶点越多,性能成本就越高。因此,考虑您希望用户如何与每个网格交互,以查看是否可以减少引擎需要渲染的网格碰撞盒的顶点数量。在不需要碰撞盒精确的情况下,将此属性设置为 Box 或 Hull。

为了演示这一概念,请参考以下图像,显示最终示例激光标记环境中提供一层高度的墙模型的每个网格的碰撞盒。主墙的默认碰撞盒具有大量不必要的几何形状,因为它只需要提供一个表面以防止用户朝该方向移动。如果您将此网格的属性设置为 Box,则可以在保持碰撞盒目的不变的情况下去除这些冗余几何形状。

提供高度的墙模型。
原始网格
相同的墙模型,带有彩色碰撞盒,显示用户可以与墙碰撞的地方。
默认
相同的墙模型,带有彩色碰撞盒用于修边,但墙网格仅具有立方体碰撞盒。
Box

在做出这些决定时,考虑更改默认值可能会对用户在导航环境时产生负面影响是很重要的。例如,如果您将墙模型的修边网格的属性设置为 Box,用户在尝试跳跃靠近墙时会与碰撞盒发生碰撞。相反,将这些网格设置为 Hull,以减少其顶点数量,同时保持碰撞盒更接近网格几何形状。

墙模型的顶部修边具有立方体碰撞盒。由于立方体突出,用户可能会无意中与顶部修边碰撞。
Box
相同的墙模型的顶部修边具有 Hull 碰撞盒。由于 Hull 碰撞盒更紧密地符合模型顶部,允许用户避免与修边碰撞。
Hull

请注意,拥有一个精确符合网格形状的碰撞盒可能是重要的,特别是当您需要精确控制用户如何与其形状碰撞时。例如,在最终示例激光标记环境中,用户只与门口的边缘碰撞,而不是门本身,否则他们将无法进入或退出战斗区域。

具有优化碰撞盒网格的门口模型。

渲染精度

MeshPart.RenderFidelity 属性决定网格向用户显示的细节级别。当您将此属性设置为 Enum.RenderFidelity.Automatic 时,Roblox 引擎会根据用户与网格的距离减少网格的精度,当您将此属性设置为 Enum.RenderFidelity.Precise 时,网格的每个顶点都会按您所期望的方式渲染,无论它们之间的距离如何。

引擎必须精确渲染给用户的对象越多,尤其是当它们具有高顶点数量时,性能成本就越高。为了减轻这种对性能的影响,对于具有几何复杂性的对象,例如示例资产库中的植被,将此属性设置为 Enum.RenderFidelity.Performance,因为它们不需要从远处完整显示以满足任何游戏玩法要求。这减少了游戏的多边形数量,而不会降低整体视觉质量。

将资产转换为包

现在您在 Studio 中的所有模块化资产都具有设置为保持高视觉质量的渲染参数,是时候将它们转换为包了。将资产转换为包很重要,因为它允许您在当前游戏和其他项目中反复使用它们。此外,您可以轻松编辑一个包,这些更改会立即传播到其所有实例,从而为您节省大量迭代过程中的时间。

由于您的 SurfaceAppearance 对象已经是包,因此当您将 Model 对象转换为包时,它们会变成嵌套包。嵌套包允许您维护复杂的子对象层次结构,您可以独立于 Model 对象包进行修改。这使您能够更好地控制资产的各个组件。

要将您的模块化资产和道具转换为包:

  1. 在 资源管理器 窗口中,右键单击一个模块化资产或道具,然后从上下文菜单中选择 转换为包。转换为包 对话框显示。

  2. 填写 标题 和 描述 字段,将所有权设置为您自己或一个组,然后单击 提交 按钮。完成后,链环符号会显示在模型的图标上,以标识它为一个包。

    带有链环符号的模型图标。
  3. 对每个模块化资产和道具重复此过程。

一旦您对资产库的整体布局感到满意,就可以继续用您新精美的资产装饰环境,并配置 3D 空间的其他元素,使您的世界栩栩如生。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。