使用 VFX 创建瀑布

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

一个 瀑布 是河流或溪流中水流过一个或多个垂直落差进入水体的地方。游戏中常常包含瀑布以增强视觉美感,例如提升环境或创造视觉兴趣点,或出于功能性游戏目的,例如隐藏资源或在场地内不同区域之间过渡。

使用 Waterfall Island .rbxl 文件作为参考,本教程向您展示如何创建一个具有 VFX 对象的瀑布,这些对象代表现实世界的物理行为,包括以下指导:

  • 将参考材料分解为具有不同视觉和行为特征的单独组件。
  • 配置以不同速度下落的瀑布,以模拟水从悬崖下降时的分散。
  • 配置溅水,以模拟水在瀑布冲击底部水池时变成气溶胶。
  • 配置白水,以模拟湍流的气泡水在流出时撞击岩石。
  • 配置泡沫,以模拟毛细波破坏表面张力。
  • 配置雾气,以模拟雾气从冲击点向上升起,创造出玩家可以从任何角度看到的彩虹。

分解参考

为了创建可信的瀑布,在设计过程中参考现实世界的自然特征非常重要,因为这使您能够将主题分解为具有不同视觉和行为特征的单独组件。例如,示例 Waterfall Island 游戏参考了华盛顿州的斯诺夸尔米瀑布,以指导与瀑布及其周围地形相关的所有纹理和 VFX 设计决策。

斯诺夸尔米瀑布的远景。

虽然瀑布是一个连续且相连的水流,涉及多种物质状态和动态流体与空气运动,但将这个复杂系统分解为单独组件是有用的,这样您就可以计划如何利用不同的 VFX 对象来模仿它们的现实世界对应物。为了演示,本教程将示例瀑布分解为五个独特的组件:

  • 瀑布流 – 从悬崖下降的水。
  • 溅水 – 当瀑布流与底部水池碰撞时散开的水。
  • 白水 – 当水源接近悬崖边缘时产生的湍流水。
  • 泡沫 – 在瀑布流与水池碰撞时水平散开的气泡水。
  • 雾气 – 由于整体瀑布的影响而在空气中蒸发的云状水。
突出显示所有五个组件的斯诺夸尔米瀑布。
示例瀑布,突出显示相同的五个组件,以便将参考图像与最终结果进行比较。

以下部分提供了对不同设计决策和技术的深入分析,您可以使用这些技术重新创建构成示例 3D 空间中主要落差的每个瀑布组件。在您审查这些决策并尝试各种 Beam 和 ParticleEmitter 属性时,您将学习如何利用 VFX 来解决您自己游戏的独特环境需求。

配置瀑布流

瀑布流 是从悬崖或高地下降到底部水池的落水。瀑布流的下落速度因其水量和落差的规模而异。例如,示例的主要落差似乎下落得更慢,因为有大量水在大距离上落下,但示例的第二个落差似乎下落得更快,因为较小的水量在短距离上落下。

主要落差
第二个落差

此外,瀑布通常有多层瀑布流以不同的速度下落,因为水在下降到水池时会分散。为了演示这一原理,示例使用多个 Beam 对象,配有无缝纹理,这些纹理在不同速度和长度的 Attachment 对象之间渲染。除了为主要落差提供更真实的下落行为外,这种技术还创造了视差的错觉,使瀑布流看起来具有深度和体积感,即使它只是一个 2D 图像。

这个瀑布看起来自然,因为水以不同的速度下降和分散。
这个瀑布看起来不自然,因为水以相同的速度下降和分散。

要重新创建示例 Waterfall Island 场地文件中的主要落差的瀑布流:

  1. 创建瀑布流的出流。

    1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有出流对象,然后将文件夹重命名为 Outflow。

    2. 在 Outflow 文件夹中插入两个 块 部件,然后分别将它们重命名为 OutflowStart 和 OutflowStop。

    3. 将 OutflowStart 移动到您希望出流开始的位置,将 OutflowStop 移动到悬崖的边缘。

      出流水的倾斜俯视图,两个块部件定位在出流纹理应该渲染的位置。
    4. 在 OutflowStart 和 OutflowStop 中插入一个附件,然后旋转附件,直到黄色视觉辅助指向上方。

      出流水的倾斜俯视图,两个块部件包含附件,黄色视觉辅助指向上方。
    5. 在 Outflow 文件夹中插入一个 Beam,然后将其重命名为 OutflowWater。

    6. 将每个部件的附件分配给 OutflowWater。

      1. 在 资源管理器 窗口中,选择 OutflowWater。
      2. 在 属性 窗口中,
        1. 将 Attachment0 设置为 OutflowStart 中的附件。
        2. 将 Attachment1 设置为 OutflowStop 中的附件。光束在两个附件之间渲染其默认纹理。
      出流水的倾斜俯视图,两个块部件在附件之间渲染默认光束纹理。
    7. 自定义光束的视觉外观,使其看起来像是流动的水,接近悬崖的边缘。

      1. 在 资源管理器 窗口中,确认 OutflowWater 仍然被选中。
      2. 在 属性 窗口中,
        1. 将 Texture 设置为 rbxassetid://4787437624,以渲染看起来像流动泡沫的新纹理。

        2. 将 Width0 设置为 60,以从开始渲染的轴上加宽纹理。

        3. 将 Width1 设置为 20,以将纹理引导到悬崖的边缘。

        4. 将 TextureSpeed 设置为 0.4,以减慢纹理的流动速度。

        5. 将 TextureLength 设置为 64,以拉伸纹理的长度。

        6. 将 TextureMode 设置为 Wrap,以在 3D 世界中在两个附件之间的光束整体长度除以其 TextureLength 的数量上重复纹理。这使得纹理看起来更像流动的水。

        7. 将 Color 设置为一个颜色序列,该序列在深蓝色和浅蓝色到白色之间交替。

          1. 点击 Color 属性,然后点击 ⋯ 按钮。将显示一个颜色序列弹出窗口。

            Studio 属性窗口的特写视图,突出显示颜色属性的省略号按钮。

            颜色序列底部轴上的每个三角形都是一个 关键点,它确定粒子生命周期中该点的属性的颜色值。

          2. 在颜色序列中设置以下时间和值属性:

            • Time = 0,RGB Value = 208, 247, 255
            • Time = 0.135,RGB Value = 146, 235, 255
            • Time = 0.248,RGB Value = 255, 255, 255
            • Time = 0.384,RGB Value = 128, 183, 202
            • Time = 0.757,RGB Value = 166, 213, 248
            • Time = 1,RGB Value = 255, 255, 255
        8. 将 Transparency 设置为一个数字序列,使水在接近悬崖边缘时变得更加生动。

          1. 点击 Transparency 属性,然后点击 ⋯ 按钮。将显示一个数字序列弹出窗口。默认情况下,图表是一条直线,图像在从左到右的透明度保持不变。

            透明度数字序列图的特写视图。

            数字序列开始和结束的每个方块都是一个 关键点,它确定从左到右的纹理在该点的透明度值。

          2. 在数字序列中设置以下时间和值属性:

            • Time = 0,Value = 1
            • Time = 0.375,Value = 0.725
            • Time = 0.615,Value = 0
            • Time = 0.92,Value = 1
            • Time = 1,Value = 1
        9. 缩放每个部件,以确保纹理覆盖出流池的宽度。出流现在看起来像是从各个角度流向悬崖的边缘。

  2. 创建来自主要落差的快速流动的瀑布水。

    1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有瀑布水对象,然后将文件夹重命名为 Cascades。

    2. 在 Cascades 文件夹中插入两个 块 部件,然后分别将它们重命名为 MainDropStart 和 MainDropStop。

    3. 将 MainDropStart 移动到悬崖的边缘,将 MainDropStop 移动到水池下方的位置。

      悬崖的侧面倾斜视图,两个块部件定位在快速流动的瀑布纹理应该渲染的位置。
    4. 配置所有来自主要落差的瀑布水光束的附件,以用于渲染其纹理。

      1. 在 MainDropStart 中插入一个附件,然后旋转附件,直到黄色视觉辅助指向远离悬崖。
      2. 在 MainDropStop 中插入一个附件,然后旋转附件,直到黄色视觉辅助指向悬崖。
      悬崖的侧面倾斜视图,两个块部件包含附件。悬崖顶部的块部件包含一个指向远离悬崖的黄色视觉辅助,而悬崖底部的块部件包含一个指向悬崖的黄色视觉辅助。
    5. 在 Cascades 文件夹中插入一个 Beam,然后将其重命名为 FastDrop。

    6. 将每个部件的附件分配给 FastDrop。

      1. 在 资源管理器 窗口中,选择 FastDrop。
      2. 在 属性 窗口中,
        1. 将 Attachment0 设置为 MainDropStart 中的附件。
        2. 将 Attachment1 设置为 MainDropStop 中的附件。光束在两个附件之间渲染其默认纹理。
      悬崖的侧面倾斜视图,两个块部件在附件之间渲染默认光束纹理。
    7. 自定义光束的视觉外观,使其看起来像是来自主要落差的快速流动的瀑布水。

      1. 在 资源管理器 窗口中,确认 FastDrop 仍然被选中。

      2. 在 属性 窗口中,

        1. 将 Texture 设置为 rbxassetid://16808804567,以渲染看起来像流动水的新纹理。
        2. 将 Width0 设置为 5,以从开始渲染的轴上加宽纹理。
        3. 将 Width1 设置为 10,以在与水池相遇时加宽纹理。
        4. 将 CurveSize0 设置为 10,以使纹理从悬崖弯曲。
        5. 将 CurveSize1 设置为 20,以使纹理弯曲进入水池。
        6. 将 TextureSpeed 设置为 1.3,以使纹理快速流动。
        7. 将 TextureLength 设置为 2,以稍微拉伸纹理的长度。
        8. 将 Color 设置为一个颜色序列,该序列在深蓝色和浅蓝色到白色之间交替。
        • Time = 0,RGB Value = 208, 247, 255
        • Time = 0.135,RGB Value = 210, 246, 255
        • Time = 0.25,RGB Value = 255, 255, 255
        • Time = 0.384,RGB Value = 163, 187, 202
        • Time = 0.757,RGB Value = 214, 229, 248
        • Time = 1,RGB Value = 255, 255, 255
        1. 将 Transparency 设置为一个数字序列,使瀑布水在附件点之间更加生动。
        • Time = 0,Value = 1
        • Time = 0.115,Value = 0
        • Time = 0.835,Value = 0
        • Time = 0.881,Value = .994
        • Time = 1,Value = 1
        1. 将 ZOffset 设置为 2,以使纹理稍微远离悬崖。
        2. 启用 FaceCamera,以确保无论玩家从水的哪个角度,瀑布水都可见。
  3. 创建来自主要落差的慢速流动的瀑布水。

    1. 复制 FastDrop,然后将复制的光束重命名为 SlowDrop。

    2. 自定义光束的视觉外观,使其看起来像来自主要落差的慢速流动的瀑布水。

      1. 在 资源管理器 窗口中,选择 SlowDrop。
      2. 在 属性 窗口中,
        1. 将 Width1 设置为 20,以在与水池相遇时进一步加宽纹理。
        2. 将 TextureLength 设置为 1.5,以稍微缩短纹理的长度。
        3. 将 TextureSpeed 设置为 1,以使纹理流动得不那么快。
        4. 将 ZOffset 设置为 0,以允许纹理直接从悬崖边缘流出。
  4. 在 资源管理器 窗口中,选择 Outflow 文件夹中的所有块部件,然后在 属性 窗口中,将 Transparency 设置为 1,以使块变得不可见。

配置溅水

当瀑布流冲击底部水池的密度时,水从冲击点向上喷射,形成 溅水。当这种气溶胶水向上喷射时,它会扩展并从自身分开,产生向各个方向散开的水滴。

为了演示这个过程,示例在主要落差的底部使用了两个 ParticleEmitter 对象。第一个粒子发射器发射看起来像密集溅水的粒子,代表水的重量开始向上喷射,当瀑布流冲击水池时。第二个粒子发射器发射看起来像水滴的粒子,代表水变成气溶胶。

当您配置这些粒子发射器同时发射这两种粒子,但以不同的速率时,产生的视觉效果模拟了溅水的现实世界物理行为。这些类型的细节有助于增强您的 VFX 的真实感,并使玩家沉浸在 3D 空间中。

代表重度气溶胶水的 2D 纹理,在分开之前。
密集纹理 = rbxassetid://16829556885
代表重度气溶胶水分开时的 2D 纹理。
水滴纹理 = rbxassetid://17082061238

要在示例 Waterfall Island 场地文件的主要落差底部重新创建溅水:

  1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有溅水对象,然后将文件夹重命名为 Splashes。

  2. 在 Splashes 中插入一个 块 部件,然后将其重命名为 MainDropSplashes。

  3. 定位并缩放 MainDropSplashes,以覆盖瀑布流冲击水池的整个表面区域。

    悬崖底部的特写视图,块部件定位在瀑布流冲击水池的点。
  4. 创建主要落差的瀑布流冲击水池时的密集溅水。

    1. 在 MainDropSplashes 中插入一个 ParticleEmitter,然后将发射器重命名为 SplashDense。

    2. 选择 SplashDense,然后在 属性 窗口中,

      1. 将 Texture 设置为 rbxassetid://16829556885,以渲染看起来像密集溅水的粒子。
      2. 将 Color 设置为一个颜色序列,从蓝色开始然后变为白色。
      • Time = 0,RGB Value = 189, 246, 255
      • Time = 1,RGB Value = 255, 255, 255
      1. 将 Size 设置为一个数字序列,大小稳步增加并具有变化范围。
      • Time = 0,Value = 1.81,Envelope = 0.562
      • Time = 1,Value = 5.75,Envelope = 1.31
      1. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,变为不透明,然后在其生命周期内再次变为透明,具有较大的变化范围。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.5,Value = 0.181,Envelope = 0.181
      • Time = 1,Value = 1,Envelope = 0
      1. 将 Lifetime 设置为 0.25, 0.35,以随机设置每个粒子的生命周期在 250 到 350 毫秒之间。
      2. 将 Rate 设置为 30,以每秒发射 30 个粒子。
      3. 将 Rotation 设置为 -45, 45,以随机定向每个粒子在每秒之间 -45 到 45 度。
      4. 将 RotSpeed 设置为 -40, 40,以随机发射每个粒子在每秒之间 -45 到 40 度。
      5. 将 Speed 设置为 20, 35,以随机发射每个粒子在每秒之间 20 到 35 studs。
      6. 将 SpreadAngle 设置为 50, 50,以在 X 和 Z 轴上发射粒子。
      7. 将 Acceleration 设置为 0, -40, 0,以模拟重力并将粒子向下拉。
      8. 将 LightEmission 设置为 0.5,以使粒子变亮。
      9. 将 LightInfluence 设置为 0.1,以显著减少环境光对粒子颜色的影响。
  5. 创建主要落差的瀑布流冲击水池时的水滴。

    1. 复制 SplashDense,然后将其重命名为 SplashDroplets。

    2. 选择 SplashDroplets,然后在 属性 窗口中,

      1. 将 Texture 设置为 rbxassetid://17082061238,以渲染看起来像水滴的粒子。
      2. 将 Size 设置为一个数字序列,大小迅速增加并具有变化范围。
      • Time = 0,Value = 1.81,Envelope = 0.562
      • Time = 1,Value = 8.69,Envelope = 1.31
      1. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,迅速变为不透明,然后在生命周期中间慢慢变为透明。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.104,Value = 0.0625,Envelope = 0.0625
      • Time = 0.429,Value = 0.0562,Envelope = 0.0562
      • Time = 1,Value = 1,Envelope = 0
      1. 将 Lifetime 设置为 0.15, 0.6,以随机设置每个粒子的生命周期在 150 到 600 毫秒之间。
      2. 将 Rate 设置为 20,以每秒发射 20 个粒子。
  6. 在 资源管理器 窗口中,选择 Splashes 文件夹中的所有块部件,然后在 属性 窗口中,将 Transparency 设置为 1,以使块变得不可见。

配置白水

白水 是当水源在接近下降并与路径中的物体碰撞时变得更加湍流的结果。这导致气泡丰富的水看起来是白色的,因为水源中有更多的气泡。

为了模拟这个过程,示例使用了两个 ParticleEmitter 对象,这些对象发射看起来像重度气溶胶溅水的粒子,当出流撞击悬崖边缘的岩石时。发射器不使用内置照明,而是优先考虑白色和灰色的色调,并具有不同的下落速率,以展示水中空气的数量。

代表重度气溶胶水撞击岩石的 2D 纹理。
白水纹理 = rbxassetid://16808075391

要在示例 Waterfall Island 场地文件中重新创建出流与悬崖岩石碰撞时的白水:

  1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有白水对象,然后将文件夹重命名为 WhiteWater。

  2. 在 WhiteWater 中插入一个 块 部件,然后将其重命名为 MainDropWW。

  3. 定位并缩放 MainDropWW,以覆盖出流开始流过悬崖的整个表面区域。

    悬崖顶部的倾斜侧面视图,块部件定位在出流开始流过悬崖的点。
  4. 创建主要出流与周围岩石碰撞时的较少湍流的白水。

    1. 在 MainDropWW 中插入一个 ParticleEmitter,然后将发射器重命名为 GentleWW。

    2. 选择 GentleWW,然后在 属性 窗口中,

      1. 将 Texture 设置为 rbxassetid://16808075391,以渲染看起来像网状溅水的粒子。
      2. 将 Color 设置为一个颜色序列,从蓝色开始然后变为白色。
      • Time = 0,RGB Value = 189, 246, 255
      • Time = 1,RGB Value = 255, 255, 255
      1. 将 Size 设置为一个数字序列,大小稳步增加并具有变化范围。
      • Time = 0,Value = 1.13,Envelope = 0.562
      • Time = 1,Value = 5.56,Envelope = 0.563
      1. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,变得大约一半不透明,然后在其生命周期中有轻微的峰值再次变为透明。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.143,Value = 0.462,Envelope = 0.0625
      • Time = 0.336,Value = 0.462,Envelope = 0.0562
      • Time = 0.622,Value = 0.788,Envelope = 0.0538
      • Time = 1,Value = 1,Envelope = 0
      1. 将 ZOffset 设置为 2,以使纹理稍微远离悬崖。
      2. 将 Lifetime 设置为 1.25, 1.5,以随机设置每个粒子的生命周期在 1250 到 1500 毫秒之间。
      3. 将 Rate 设置为 12,以每秒发射 12 个粒子。
      4. 将 Rotation 设置为 -45, 45,以随机定向每个粒子在每秒之间 -45 到 45 度。
      5. 将 RotSpeed 设置为 -40, 40,以随机发射每个粒子在每秒之间 -45 到 40 度。
      6. 将 Speed 设置为 15, 18,以随机发射每个粒子在每秒之间 20 到 35 studs。
      7. 将 SpreadAngle 设置为 5, 5,以在 X 和 Z 轴上发射粒子。
      8. 将 Acceleration 设置为 0, -35, 0,以模拟重力并将粒子向下拉。
      9. 将 Drag 设置为 0.25,以使粒子以指数衰减失去速度。
      10. 将 LightEmission 设置为 0.6,以使粒子变亮。
      11. 将 LightInfluence 设置为 0.1,以显著减少环境光对粒子颜色的影响。
  5. 创建主要出流与周围岩石碰撞时的更湍流的白水。

    1. 复制 GentleWW,然后将其重命名为 TurbulentWW。

    2. 选择 TurbulentWW,然后在 属性 窗口中,

      1. 将 Size 设置为一个数字序列,大小微妙增加并具有变化范围。
      • Time = 0,Value = 1.6,Envelope = 0.562
      • Time = 1,Value = 2.63,Envelope = 0.563
      1. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,变得不透明,然后在其生命周期中间再次变为透明。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.156,Value = 0.0437,Envelope = 0.0437
      • Time = 0.55,Value = 0.075,Envelope = 0.0252
      • Time = 1,Value = 1,Envelope = 0
      1. 将 Lifetime 设置为 0.25, 0.5,以随机设置每个粒子的生命周期在 250 到 500 毫秒之间。
      2. 将 Rate 设置为 20,以每秒发射 20 个粒子。
      3. 将 Speed 设置为 5, 6,以随机发射每个粒子在每秒之间 5 到 6 studs。
      4. 将 Acceleration 设置为 0, -15, 0,以模拟重力并将粒子向下拉。
  6. 在 资源管理器 窗口中,选择 WhiteWater 文件夹中的所有块部件,然后在 属性 窗口中,将 Transparency 设置为 1,以使块变得不可见。

配置泡沫

与在瀑布流冲击水池时向上喷射的溅水不同,泡沫 是从冲击点的底部向外扩散的气泡水。与溅水类似,泡沫在变成气溶胶时扩展并从自身分开,形成网状水滴。

为了模拟这种效果,示例使用了一个 ParticleEmitter 对象来发射看起来像泡沫涟漪的粒子,并且它缓慢地平行于水池发射。这使得粒子能够模拟毛细波破坏底部水池表面张力的视觉和行为效果。

代表从瀑布流冲击水池处向外扩散的气溶胶水的 2D 纹理。
泡沫涟漪纹理 = rbxassetid://16811365086

要在示例 Waterfall Island 场地文件的主要落差底部重新创建泡沫:

  1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有泡沫对象,然后将文件夹重命名为 Foam。

  2. 在 Foam 中插入一个 块 部件,然后将其重命名为 MainDropFoam。

  3. 定位并缩放 MainDropFoam,以覆盖主要瀑布流冲击水池的最密集部分的整个表面区域。

    悬崖底部的倾斜侧面视图,块部件定位在瀑布流冲击水池的点。
  4. 在 MainDropFoam 中插入一个 ParticleEmitter,然后将发射器重命名为 FoamRipples。

  5. 在 资源管理器 窗口中,选择 FoamRipples,然后在 属性 窗口中,

    1. 将 Texture 设置为 rbxassetid://16811365086,以渲染看起来像泡沫涟漪的粒子。

    2. 将 Orientation 设置为 VelocityPerpendicular,以垂直于其运动方向发射粒子。

    3. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,迅速变为不透明,然后在其生命周期结束时迅速变为透明。

      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.143,Value = 0.119,Envelope = 0.1
      • Time = 0.664,Value = 0.125,Envelope = 0.112
      • Time = 1,Value = 1,Envelope = 0
    4. 将 Lifetime 设置为 0.5, 0.7,以随机设置每个粒子的生命周期在 500 到 700 毫秒之间。

    5. 将 Rate 设置为 5,以每秒发射 5 个粒子。

    6. 将 Rotation 设置为 0, 360,以随机定向每个粒子从发射点形成一个圆圈。

    7. 将 RotSpeed 设置为 -15, 15,以随机发射每个粒子在每秒之间 -15 到 15 度。

    8. 将 Speed 设置为 0, .01,以随机发射每个粒子在每秒之间 0 到 .01 studs。

    9. 将 LightEmission 设置为 0.25,以稍微使粒子变亮。

    10. 将 LightInfluence 设置为 0,以防止环境光影响粒子的颜色。

  6. 在 命令栏 中输入以下字符串,以在粒子的生命周期内将每个粒子的大小从 5 增加到 20 studs,并具有小的变化范围:

    workspace.Foam.MainDropFoam.FoamRipples.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,5,0), NumberSequenceKeypoint.new(1,20,5)}
  7. 在 资源管理器 窗口中,选择 Foam 文件夹中的所有块部件,然后在 属性 窗口中,将 Transparency 设置为 1,以使块变得不可见。

配置雾气

当瀑布流冲击水池时,一些水蒸发并在凉爽潮湿的空气中凝结,形成 雾气。雾气蒸汽不会像坚硬表面那样捕捉光线;相反,它们以往往意想不到的方式反射光线,在整体环境中显得明亮,直到它们完全蒸发。

示例通过在落差底部使用两个 ParticleEmitter 对象来模拟这个过程。第一个粒子发射器有力地向冲击点和悬崖发射粒子,第二个发射器则发射缓慢上升到天空的粒子。两个粒子发射器的粒子在生命周期开始时明亮,并在生命周期结束时逐渐变得透明,随着它们的蒸发而消失。

与现实世界类似,雾气蒸发过程允许形成彩虹,因为光线反射在小水滴上,示例也通过一个 ParticleEmitter 对象模拟这一点,该对象发射具有短生命周期的彩虹粒子。这些粒子无论玩家从瀑布的哪个角度都面向相机,产生光线捕捉蒸汽本身的光学错觉。

代表雾气的 2D 纹理。
雾气纹理 = rbxassetid://16830667309
代表彩虹的 2D 纹理。
彩虹纹理 = rbxassetid://16828911033

要在示例 Waterfall Island 场地文件中重新创建从主要落差底部向外和向上移动的雾气:

  1. 在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有与雾气相关的对象,然后将文件夹重命名为 Mist。

  2. 创建从瀑布流冲击水池处辐射的雾气。

    1. 在 Mist 中插入一个 块 部件,然后将其重命名为 BaseMist。

    2. 定位、定向并缩放 BaseMist,使其面向主要瀑布流冲击水池的最密集部分。

      悬崖底部的倾斜侧面视图,块部件定位在瀑布流冲击水池的点。块部件稍微倾斜,使顶部面朝远离悬崖。
    3. 在 BaseMist 中插入一个 ParticleEmitter,然后将发射器重命名为 Mist。

    4. 选择 Mist,然后在 属性 窗口中,

      1. 将 Texture 设置为 rbxassetid://16830667309,以渲染看起来像浓雾的粒子。
      2. 将 Color 设置为一个颜色序列,从蓝色开始然后变为白色。
      • Time = 0,RGB Value = 171, 244, 255
      • Time = 0.339,RGB Value = 251, 254, 255
      • Time = 1,RGB Value = 255, 255, 255
      1. 将 Size 设置为一个数字序列,大小稳步增加。
      • Time = 0,Value = 8,Envelope = 0
      • Time = 1,Value = 10,Envelope = 0
      1. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,迅速变为稍微不透明,然后在其生命周期结束时迅速变为透明。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.0971,Value = 0.8,Envelope = 0.0625
      • Time = 1,Value = 1,Envelope = 0
      1. 将 ZOffset 设置为 2,以使纹理稍微远离水池。
      2. 将 Lifetime 设置为 0.5, 1,以随机设置每个粒子的生命周期在 500 到 1000 毫秒之间。
      3. 将 Rate 设置为 20,以每秒发射 20 个粒子。
      4. 将 Rotation 设置为 -360, 360,以随机定向每个粒子形成一个圆圈。
      5. 将 RotSpeed 设置为 -50, 50,以随机发射每个粒子在每秒之间 -50 到 50 度。
      6. 将 Speed 设置为 35, 50,以随机发射每个粒子在每秒之间 35 到 50 studs。
      7. 将 SpreadAngle 设置为 25, 25,以在 X 和 Z 轴上发射粒子。
      8. 将 Acceleration 设置为 -10, -25, -10,以模拟溅水从水池向外爆炸的影响。
      9. 将 Drag 设置为 1.5,以使粒子以指数衰减失去速度。
  3. 创建从水池上升的雾气。

    1. 复制 BaseMist,然后将其重命名为 RiseMist。
    2. 定向 RiseMist,使发射粒子的部件顶部朝向天空。
    3. 选择其子粒子发射器,然后在 属性 窗口中,
      1. 将 Lifetime 设置为 4,以将每个粒子的生命周期设置为 4 秒。
      2. 将 Rate 设置为 3,以每秒发射 3 个粒子。
      3. 将 RotSpeed 设置为 -10, 10,以随机发射每个粒子在每秒之间 -10 到 10 度。
      4. 将 Speed 设置为 25,以每秒发射每个粒子 25 studs。
      5. 将 Acceleration 设置为 0, 0, 0,以移除之前的模拟。
      6. 将 Drag 设置为 1,以使粒子以指数衰减失去速度。
    4. 在 命令栏 中输入以下字符串,以在粒子的生命周期内将每个粒子的大小从 20 增加到 20 studs,并具有小的变化范围:
    workspace.Mist.RiseMist.Mist.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,20,1), NumberSequenceKeypoint.new(1,25,5)}
  4. 创建彩虹。

    1. 在 Mist 中插入一个 块 部件,然后将其重命名为 RainbowPart。

    2. 将 RainbowPart 定位在其他块部件的稍上方。

    3. 在 Rainbow 中插入一个 ParticleEmitter,然后将发射器重命名为 Rainbow。

    4. 选择 Rainbow,然后在 属性 窗口中,

      1. 将 Texture 设置为 rbxassetid://16828911033,以渲染看起来像微弱彩虹的粒子。
      2. 将 Size 设置为 25,以渲染大粒子。
      3. 将 Transparency 设置为一个数字序列,其中粒子开始时透明,稍微变为不透明,然后在其生命周期中再次变为透明。
      • Time = 0,Value = 1,Envelope = 0
      • Time = 0.497,Value = 0.363,Envelope = 0.05
      • Time = 1,Value = 1,Envelope = 0
      1. 将 Lifetime 设置为 2, 4,以随机设置每个粒子的生命周期在 200 到 400 毫秒之间。
      2. 将 Rate 设置为 0.25,以每 4 秒发射一个粒子。
      3. 将 Rotation 设置为 -20,以使每个粒子稍微倾斜。
      4. 将 Speed 设置为 0,以每秒发射每个粒子 0 studs。
      5. 将 Drag 设置为 1,以使粒子以指数衰减失去速度。
      6. 将 LightEmission 设置为 1,以使用加法混合将粒子与其后面的颜色渲染在一起。此步骤还去除了纹理本身的黑色背景。
      7. 将 LightInfluence 设置为 0,以防止环境光影响粒子的颜色。
  5. 在 资源管理器 窗口中,选择 Mist 文件夹中的所有块部件,然后在 属性 窗口中,将 Transparency 设置为 1,以使块变得不可见。

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