中级教程

使用VFX创建火山喷发

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

一个火山是地壳内的一个火山口,由于内部压力(来自岩浆和溶解气体)喷出岩浆和烟雾。体验通常包括火山在挑战性的游戏区域内,例如玩家必须在岩浆和熔岩岩石危险的危险与有价值资源、Boss战斗竞技场或火山周期性喷发时动态变化的环境之间取得平衡的地点。

使用火山岛 - 开始 .rbxl文件作为起始点,以及火山岛 - 完成作为参考,本教程展示了如何将环境转变为带有自定义照明和VFX对象的火山喷发,这些对象代表现实世界中的物理行为,包括指导:

  • 将参考材料分解为具有不同视觉和行为特征的独立组件。
  • 配置表面波纹以模拟热流体上升到表面并扰动火山口的表面。
  • 配置火星以模拟迅速冷却的熔融岩石片段上升到大气中。
  • 配置喷溅的岩浆以模拟从火山口喷出、流动的各种岩浆粘度状态。
  • 配置烟雾柱以模拟上升到天空的严重杂质,引起玩家的注意。
您可以用来完成本教程的起始火山地形。
火山岛 - 开始
您将在本教程结束时创建的带有VFX对象的完整火山。
火山岛 - 完成

分解参考

为了创建可信的火山,在设计过程中引用现实世界的火山喷发是很重要的,因为这允许您将主题分解为具有不同视觉和行为特征的独立组件。例如,样本火山岛 - 完成体验参考了冰岛的火山喷发,以为与火山口及其周围地形相关的所有纹理和VFX设计决策提供信息。

冰岛火山喷发的远景。

将正在喷发的火山分解为独立组件,这样您就可以规划如何利用不同的VFX对象来模仿它们的现实世界对应物。例如,本教程将样本火山分解为五个独特组件:

  • 表面波纹 – 火山口表面的微小岩浆波浪。
  • 火星 – 从火山口升起的小、轻型熔融岩石片段。
  • 岩浆喷溅 – 由于火山内部压力,喷发出火山口的薄熔融岩石。
  • 岩浆流 – 从火山口流出的粘稠熔融岩石。
  • 烟雾柱 – 从火山口上升到天空的温暖气体和火山灰。
带有所有五个组件高亮的火山喷发参考。
带有同样五个组件高亮的样本火山喷发,以对比参考图像与最终结果。

以下部分提供了对您可以使用的不同设计决策和技术的深入分析,以重现每个组件。当您查看这些决策并实验不同的照明、 ParticleEmitterBeam属性时,您将学习如何利用照明和VFX解决自己体验的独特环境需求。

配置照明

为了使环境元素成为您体验中的兴趣点,重要的是要增加其与整体环境的对比度,以使其在玩家探索时显得突出。例如,为了吸引玩家进入火山口,您可以配置照明源,使火山的岩浆在其他较暗的环境中显得发光。

Studio提供了两种高层次的照明源,您可以利用这些技术:

  • 全局照明 - 为整个户外环境产生光照。
  • 局部照明 - 在您放置它们的位置周围产生光照。

本教程的这一部分教您如何利用这两种类型的照明源,使您的火山喷发成为场景中最重要的兴趣点,同时为您的环境叙事创造戏剧性效果。为此,查看没有自定义照明的最终火山在一个愉快环境中感觉像一个不显眼的危险,而带有自定义照明的火山则在黑暗、忧郁的环境中显得如同一种危险的存在。

带有默认光源的样本火山喷发的完整版本。
使用默认光源
带有自定义光源的样本火山喷发的完整版本。
使用自定义光源

局部照明

局部照明是您体验中局部光源的光亮,例如SpotLightSurfaceLightPointLight对象。局部照明对于添加到您的火山十分重要,因为虽然您可以将亮度应用于ParticleEmitterBeam纹理,但它们无法单独填充峡谷以真实模拟火山口及其流动的岩浆如何照亮现实世界中的环境。

没有局部照明的样本火山喷发的完整版本。
没有局部照明
带有局部照明的样本火山喷发的完整版本。
带有局部照明

在本教程中,在全局照明之前配置局部照明是有帮助的,因为没有局部光源,您无法看到3D空间以配置您的VFX对象。然而,常见的工作流程要求您同时针对局部和全局照明进行迭代,以便查看更改在VFX对象上的效果,因此灵活应对自己体验的设计需求很重要。

要在样本火山岛 - 完成放置文件中重现火山的局部照明:

  1. Explorer窗口中,在Workspace中创建一个文件夹以包含所有局部光源对象,然后将文件夹重命名为LocalLighting

  2. 将三个 block 零件插入LocalLighting文件夹,然后分别将其重命名为LightCalderaLightMagmaLightOutflow

  3. 将这些零件移动到可以照亮整个火山的位置。

    1. LightCaldera移动到火山口与悬崖之间的中央位置。
    2. LightMagma移动到火山口与岩浆流出之间的裂缝的中心。
    3. LightOutflow移动到流出分叉成两条河流的稍上方。
    火山的前视图,三个块状部件在火山 valley 中定位。
  4. 在每个部分中插入一个Pointlight

    火山的前视图,三个块状部件有点光可视化辅助。
  5. 选择LightCalderaPointLight子项,然后在Properties窗口中,

    1. Brightness设置为15以使光源更亮。
    2. Color设置为255, 85, 0以将光照成暗橙色调。
    3. Range设置为60以照亮整个火山口区域。
    火山的前视图,三个块状部件中离火山口最近的块状部件发出橙色光。
  6. 选择LightMagmaLightOutflowPointLight子项,然后在Properties窗口中,

    1. Brightness设置为2以使光源稍微亮一点。
    2. Color设置为255, 81, 0以将光照成橙色调。
    3. Range设置为50以照亮裂缝和流出区域。
    火山的前视图,三个块状部件均发出橙色光。
  7. Explorer窗口中,选择LocalLighting文件夹中的所有块状部件,然后在Properties窗口中,将Transparency设置为1以使块状部件不可见。

    火山的前视图,火山 valley 中遍布橙色照明的效果。

全局照明

全局照明是来自体验中太阳或月亮的光亮。通过调整Lighting服务及其子后期处理效果对象中的几个关键默认属性,您可以显著改变全局光在玩家中出现的方式,以及它与您在体验中放置的任何其他对象(包括ParticleEmitterBeam纹理)的交互方式。

例如,为确保教程后面生成流动岩浆效果的Beam纹理能够发光,您必须配置BloomEffect属性,以抑制光照,例如相机观察亮光时。类似地,为了在夜间模拟更真实的颜色,您还必须调整效果的属性,以减少整个环境的饱和度。

没有光晕效果的样本火山喷发的完整版本。
没有光晕
有光晕效果的样本火山喷发的完整版本。
有光晕

要在样本火山岛 - 完成放置文件中重现全局照明:

  1. Explorer窗口中,选择Lighting服务,然后在Properties窗口中,

    1. Ambient设置为133, 152, 176以在整个户外环境中设置浅灰色调。
    2. Brightness设置为2以使全局光源稍微暗一些。
    3. ColorShift_Top设置为207, 178, 72以将光照调整为反射来自全局光源的表面的黄色调。
    4. LightingStyle设置为Realistic以利用Roblox最先进的照明技术。
    5. ClockTime设置为4.3以将时间设置为凌晨4点15分。
    6. GeographicLatitude设置为199以修改月亮的位置。
    7. ExposureCompensation设置为-1以将环境暴露在月光下减半。
    火山的前视图,户外光照变暗。
  2. Explorer窗口中,选择Bloom子项,然后在Properties窗口中,

    1. Intensity设置为0.75以稍微降低环境中的所有颜色。
    2. Size设置为80以创建更宽的光晕效果。
    3. Threshold设置为0.85以允许环境中的更多颜色发光。
    火山的前视图,户外光暗且局部光照发橙色光。
  3. Explorer窗口中,将ColorCorrection对象插入Lighting服务,然后在Properties窗口中,

    1. Brightness设置为0.017以稍微改变您的像素颜色。
    2. Contrast设置为0.25以增加环境中明暗颜色的对比度。
    3. Saturation设置为-0.15以降低环境中颜色的饱和度。
    4. TintColor设置为255, 214, 143以为像素添加浅黄色调。
    火山的前视图,户外光变得昏暗,局部光照发橙色光。
  4. (可选) 通过空中的云提供间接光照。

    1. Explorer窗口中,将Clouds对象插入Terrain服务。
    2. 选择Clouds对象,然后在Properties窗口中,
      1. Cover设置为1以提供全覆盖的云层。
      2. Density设置为0.08以使云层的密度降低。
      3. Color设置为136, 143, 152以将云层设置为浅灰色调。
    火山的前视图,户外光暗淡,阴云密布,局部光照发橙色光。

配置火山

现在,您的局部和全局照明配置已完成,接下来是配置与实际火山及其周围地形相关的所有VFX对象。当您按照这些说明,准确重现样本火山岛 .rbxl文件中的最终环境时,注意每个步骤如何协同作用,为环境增添特色、动态和光亮。

表面波纹

表面波纹是火山口表面的小岩浆波浪,形成于内部岩浆和来自地壳下方的受压气体向上移动的结果。这一视觉现象传达了真实的物理过程,即对流,或在流体中,当较热的流体上升到表面时的运动,它也增强了您场景的真实感。

表面波纹为玩家提供了有关火山喷发状态的有价值的见解。例如,如果岩浆和气体以足够的力量向上移动,扰动火山口顶部岩浆的状态并导致其翻滚,玩家可以推断火山正在积极喷发,岩浆沸腾,因此在该游戏区域周围应保持谨慎。

没有表面波纹的火山口顶视图。
没有表面波纹
带有表面波纹

为了演示这一过程,样本使用了一个位于火山口底部稍微下方的ParticleEmitter对象,发出平坦、明亮的粒子,这些粒子在深色背景上缓慢扩展和收缩。这使得粒子能够像自然中元素移动的真实方式那样,平滑、持续地模仿岩浆的行为。

表示由翻滚岩浆引起的表面波纹的2D纹理。
泡沫波纹纹理 = rbxassetid://16811365086

要在样本火山岛 - 完成放置文件中重现火山口顶部的表面波纹:

  1. Explorer窗口中,在Workspace中创建一个文件夹以包含所有火山口对象,然后将文件夹重命名为Caldera

  2. 创建一个背景,以为表面波纹提供高对比度的背景。

    1. 将一个block零件插入Caldera文件夹,然后将其重命名为Backdrop

    2. Backdrop定位并缩放,稍微超出火山口的整个表面区域。由于其靠近火山口的局部光源,因此该部分呈现出发光的效果。

      火山口的顶视图,突出显示的块状部件发光的黄色。
  3. 选择Backdrop,然后在Properties窗口中,

    1. Color设置为0, 0, 0以使该部分变黑。

    2. Material设置为Foil以提供背景的纹理。

      火山口的顶视图,黑色块状部件,表面有点粗糙的纹理。
  4. 创建波纹效果。

    1. 复制Backdrop,将其重命名为MagmaRipples,然后稍微缩小到火山口的表面区域。
    2. 选择MagmaRipples,然后在Properties窗口中,将Transparency设置为1以使该块不可见。
    3. MagmaRipples中插入一个ParticleEmitter,然后将发射器重命名为Ripples
    4. 选择Ripples,然后在Properties窗口中,
      1. Texture设置为rbxassetid://16829556885以呈现看起来像泡沫波纹的粒子。

      2. Orientation设置为VelocityPerpendicular以使粒子垂直于它们的运动方向发出。

      3. Color设置为一个颜色序列,其中粒子是棕色、变为鲜红色,然后变为深红色。

        1. 点击Color属性,然后点击**⋯**按钮。颜色序列弹出窗口显示。
        Studio的Properties窗口的特写,突出显示Color属性的省略号按钮。

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

        1. 在颜色序列中设置以下时间和数值属性:
        • Time = 0RGB Value = 130, 53, 2
        • Time = 0.5RGB Value = 224, 37, 0
        • Time = 1RGB Value = 147, 5, 0
      4. Size设置为一个数字序列,其中粒子在其生命周期的中间逐渐增大然后返回到原始大小,并有少量变化的窗口。

        1. 点击Size属性,然后点击**⋯**按钮。数字序列弹出窗口显示。默认情况下,图形表现出一条直线,该图像从左到右保持相同的大小。
        Size数字序列图的特写。

        数字序列开头和结尾的每个正方形都是一个关键点,它确定从左到右纹理在该点的大小值。

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

        • Time = 0Value = 4.81Envelope = 0.438
        • Time = 0.341Value = 8.75Envelope = 0.48
        • Time = 0.497Value = 9.38Envelope = 0.5
        • Time = 0.644Value = 8.75Envelope = 0.48
        • Time = 1Value = 4.81Envelope = 0.438
      5. Transparency设置为一串数字序列,其中粒子在其生命周期开始时是透明的,变得更加不透明,然后在其生命周期结束时再次变为透明。

        1. 点击Transparency属性,然后点击**⋯**按钮。

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

        • Time = 0Value = 1Envelope = 0
        • Time = 0.3Value = 0.387Envelope = 0.0375
        • Time = 0.5Value = 0.269Envelope = 0.0812
        • Time = 0.7Value = 0.381Envelope = 0.05
        • Time = 0Value = 1Envelope = 0
      6. ZOffset设置为-2,使得纹理稍微偏离火山口。

      7. Lifetime设置为5, 8,以随机设置每个粒子的生命周期为5到8秒之间。

      8. Rate设置为12,每秒发出12个粒子。

      9. Rotation设置为-360, 360,随机使每个粒子以圆形的方式取向。

      10. Speed设置为0.01,每个粒子每秒发出十分之一个stud。

      11. LightEmission设置为1,使粒子显著变亮。

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

      13. Brightness设置为15,以扩展发射器发出的光。

火星

火星是从火山口喷出的小、轻的熔融岩石片,快速释放出热量并上升到大气中。与表面波纹类似,火星揭示了地壳下方的内部压力向上施加,导致热元素打破岩浆的表面张力以释放压力。

样本通过使用ParticleEmitter对象来模拟这个过程,该对象发出带有运动模糊效果的粒子,这种效果烘焙到纹理中。当粒子上升并达到其生命末期时,发射器将粒子压缩到1:1的比例,使粒子再形成圆形。此技巧使粒子在从火山口迅速移动时似乎在上升,然后在在天空中消散时减速。

表示从火山口喷出的火星的2D纹理。
火星纹理 = rbxassetid://17581858560

此外,随着粒子的上升,它们会改变颜色、透明度和大小,以反映其温度变化。例如,它们的生命周期开始为大个棕色粒子,但会迅速转变为小型橙色,然后是深红色粒子。这个策略还具有微妙反射峡谷内照明的益处,增强了玩家对环境的沉浸感。

要在样本火山岛 - 完成放置文件中重现火山口表面的火星:

  1. Caldera文件夹中插入一个圆柱体零件,然后将其重命名为GlowingEmbers

  2. GlowingEmbers放置在表面波纹的上方,然后缩放,直到填满火山口内部。由于其靠近火山口的局部光源,零件呈现发光效果。

    火山口的前视图,圆柱体零件发出黄色光。
  3. 选择GlowingEmbers,然后在Properties窗口中将Transparency设置为1以使圆柱体不可见。

  4. GlowingEmbers中插入一个ParticleEmitter,然后将发射器重命名为Embers

  5. 选择Embers,然后在Properties窗口中,

    1. Texture设置为rbxassetid://17581858560以呈现看起来像一个水平和垂直的细长椭圆的粒子。
    2. Orientation设置为VelocityParallel以使粒子沿其运动方向平行发出。
    3. Color设置为一个颜色序列,其中粒子是棕色、变为橙色,然后变为深红色。
    • Time = 0RGB Value = 130, 53, 2
    • Time = 0.5RGB Value = 224, 82, 0
    • Time = 1RGB Value = 147, 5, 0
    1. Size设置为一个数字序列,其中粒子在其生命周期间逐渐减小。
    • Time = 0Value = 0.313Envelope = 0.1
    • Time = 1Value = 0Envelope = 0
    1. Squash设置为一个数字序列,其中粒子在其生命周期大约中间时会略微延伸。
    • Time = 0Value = -3Envelope = 0
    • Time = 0.323Value = -0.188Envelope = 0
    • Time = 1Value = -0.5Envelope = 0
    1. Transparency设置为一个数字序列,其中粒子随机变化其不透明度,以模拟火星在上升时发光。从真正的数值并不重要,只要在生命周期内有很大的变化。
    1. ZOffset设置为1,使得纹理稍微偏移火山口。
    2. Lifetime设置为1, 5,以随机设置每个粒子的生命周期为1到5秒。
    3. Speed设置为5, 8,以随机发出每个粒子在5到8个stud每秒之间。
    4. SpreadAngle设置为180, 180,以在X和Z轴上发射粒子。
    5. Acceleration设置为0, 10, 0,以模拟向上的力量并将粒子拉入天空。
    6. Drag设置为0.8,使粒子随着指数衰减而减速。
    7. LightEmission设置为1,使粒子显著变亮。
    8. LightInfluence设置为0,以防止环境光影响粒子的颜色。
    9. Brightness设置为20,以扩展发射器发出的光。

岩浆喷溅

岩浆喷溅是因内部岩浆和受压气体施加足够力量而导致的薄熔融岩石向上喷发的爆发。这一火山的核心部分是确定火山不再沉睡而正在积极喷发的最常见迹象之一。

样本用两个ParticleEmitter对象表示这一过程,这些对象利用flipbooks在每个粒子的生命周期内动画化其纹理。第一个粒子发射器发出看起来像稠密、粘度高的喷溅粒子,它们厚重、浓稠,导致它们缓慢上下起伏。相反,第二个粒子发射器发出看起来像细腻、低粘度的喷溅粒子,它们轻巧、稀薄,导致它们快速上下起伏。

表示稠密喷溅纹理的2D纹理。
稠密喷溅纹理 = rbxassetid:/17363669906
表示细腻喷溅纹理的2D纹理。
细腻喷溅纹理 = rbxassetid://17363668312

每个粒子发射器在其纹理上动画化64帧,以模仿平滑、逼真的物理行为。虽然您可以只使用一个粒子发射器,但动画的重复性显而易见,可能会破坏玩家的沉浸感,因为他们会每次都看到相同的动画。然而,当两个粒子以略微不同的自定义属性动画化翻转图时,识别重复性就变得更加困难。

示例还提供了一个ParticleEmitter对象,发出看起来像充气喷溅的粒子,以表示更轻的细腻喷溅。这项技术填充了动态运动的空间,并进一步隐藏了翻转动画的重复性。如果您的体验还包括来自创建瀑布的瀑布,则可以为不同的游戏区域重复使用同一纹理,节省内存并提高低端设备的性能。

表示气泡喷溅的2D纹理。
细腻纹理 = rbxassetid://17082061238

要在样本火山岛 - 完成放置文件中重现火山口表面的喷溅岩浆:

  1. Caldera文件夹中插入一个圆柱体零件,然后将其重命名为SplashingLava

  2. SplashingLava放置在表面波纹的上方,然后缩放,直到覆盖中间方位的火山口,您想让岩浆溅出的位置。该部分由于靠近火山口的局部光源而看似发光。

    火山口的前视图,圆柱体零件发出黄色光。
  3. 选择SplashingLava,然后在Properties窗口中将Transparency设置为1以使圆柱体不可见。

  4. SplashingLava中插入一个ParticleEmitter,然后将发射器重命名为WebbySplashes

  5. 选择WebbySplashes,然后在Properties窗口中,

    1. Texture设置为rbxassetid://17363668312以呈现看起来像细腻喷溅的粒子。
    2. Orientation设置为FacingCameraWorldUp以使粒子面向相机,但仅在垂直向上的世界Y轴上旋转。
    3. Color设置为255, 152, 79以将粒子染成浅橙色调。
    4. Size设置为一个数字序列,其中粒子在其生命周期内增大并伴随着变化的窗口。
    • Time = 0Value = 4.31Envelope = 0.762
    • Time = 1Value = 6.2Envelope = 0.875
    1. Squash设置为一个数字序列,其中粒子在其生命周期内略微拉长并伴随着变化的窗口。
    • Time = 0Value = -0.075Envelope = 0.263
    • Time = 1Value = -0.413Envelope = 0.412
    1. ZOffset设置为1,使得纹理稍微偏移火山口。
    2. Lifetime设置为1.5, 2,以随机设置每个粒子的生命周期为1.5到2秒。
    3. Rate设置为0.37,每3秒发出一个粒子。
    4. RotSpeed设置为-20, 20,以在每个粒子之间随机发出-20到20度的方向。
    5. Speed设置为2,每个粒子以每秒2个stud的速度发出。
    6. SpreadAngle设置为5, 5,以沿X和Z轴中发出粒子。
    7. FlipbookLayout设置为Grid8x8以在64帧的持续时间内动画化纹理。
    8. FlipbookMode设置为Oneshot,以确保动画仅在其生命周期内播放一次。
    9. Drag设置为0.5,使粒子以指数衰退的方式减速。
    10. LightEmission设置为0.1,使粒子稍微变亮。
    11. LightInfluence设置为0.25,以显著减少环境光对粒子颜色的影响。
  6. 复制DenseSplashes,然后在Properties窗口中修改以下属性,以为额外的岩浆喷溅提供变动。

    1. Name设置为DenseSplashes
    2. Texture设置为rbxassetid://17363669906,以呈现看起来像稠密喷溅的粒子。
    3. Size设置为一个数字序列,其中粒子在生命周期内增大并伴随着变化的窗口。
    • Time = 0Value = 5.75Envelope = 0.762
    • Time = 1Value = 7.37Envelope = 0.875
    1. Squash设置为一个数字序列,其中粒子在其生命周期内略微拉长且伴随变化的窗口。
    • Time = 0Value = 0Envelope = 0.225
    • Time = 1Value = -0.262Envelope = 0.15
    1. Rate设置为0.289,以每四分之一秒发出一个粒子。
  7. 用额外的喷溅填充火山口。

    1. SplashingLava中插入一个ParticleEmitter,然后将发射器重命名为SplashFill

    2. 选择SplashFill,然后在Properties窗口中,

      1. Texture设置为rbxassetid://17082061238,以呈现看起来像较轻的细腻喷溅的粒子。
      2. Orientation设置为FacingCameraWorldUp,使粒子面向相机,但仅在垂直向上的世界Y轴上旋转。
      3. Color设置为255, 152, 33,以将粒子染成橙色调。
      4. Size设置为一个数字序列,其中粒子在其生命周期内增大并伴随着变化的窗口。
      • Time = 0Value = 1.25Envelope = 0.388
      • Time = 1Value = 6.38Envelope = 0.563
      1. Transparency设置为一个数字序列,其中粒子开始时透明,在其生命周期中变得不透明,然后在生命周期结束时再次变得透明。
      • Time = 0Value = 1Envelope = 0
      • Time = 0.19Value = 0Envelope = 0
      • Time = 0.795Value = 0Envelope = 0
      • Time = 1Value = 1Envelope = 0
      1. ZOffset设置为1,使得纹理稍微偏移火山口。
      2. Lifetime设置为1.5,以将每个粒子的生命周期设置为1.5秒。
      3. Rate设置为8,以每8秒发出一个粒子。
      4. Rotation设置为0, 360,随机将每个粒子在半圆中取向。
      5. RotSpeed设置为-50, 50,以在每个粒子之间随机发出-50到50度的方向。
      6. Speed设置为12, 20,以随机发出每个粒子在12到20个stud之间的速度。
      7. SpreadAngle设置为45, 45,以在X和Z轴上发出粒子。
      8. Acceleration设置为0, -25, 0,以模拟重力并将粒子拉回下方。
      9. Drag设置为1,使粒子以指数衰退的方式减速。
      10. LightEmission设置为1,使粒子显著变亮。
      11. LightInfluence设置为0以防止环境光影响粒子的颜色。
      12. Brightness设置为8,以扩展发射器发出的光。

岩浆流

岩浆流是火山喷发期间从火山口喷出并流过地表的岩浆团。当岩浆由于暴露于空气而冷却时,它会固化并变成固体岩石,创造新的陆地。

为了模拟这一过程,样本将多个Beam对象层叠在一起,使用无缝纹理和属性配置来模仿岩浆在离火山口越来越远时冷却的行为特征:

  • 底部层呈现从温暖到冷却颜色的平坦色,以传达岩浆开始下降温度的状态,例如明亮的红色到深红色。
  • 中层呈现一种黑色纹理,看起来像是黑色的地壳,间隙处露出下面熠熠生辉的岩浆。
  • 顶部层以较慢的速率渲染与中层相同的纹理,翻转爪子和相反的属性设置。这确保了纹理在渲染的同一方向上永远没有机会完全对齐,这会让玩家很容易发现不真实的纹理重复。
底部层
中层
顶部层

三层Beam对象的叠加营造出视差效果,使岩浆看上去具有深度和体积,从而各层岩浆以不同的速度流动,即使它们只是三张2D图像。这让玩家知道峡谷内部有一种动荡感,无论是在岩浆表面还是下方。

表示流动岩浆上方地壳的2D纹理。
地壳纹理 = rbxassetid://17023930265

要在样本火山岛 - 完成放置文件中重现从火山口流出的岩浆:

  1. Explorer窗口中,在Workspace中创建一个文件夹以包含所有流动岩浆对象,然后将文件夹重命名为FlowingMagma

  2. 将一个block零件插入FlowingMagma文件夹,然后将其重命名为MagmaRiverBeam

  3. MagmaRiverBeam稍微移动到火山口的边缘下方。

    火山的倾斜从上到下的视图,块状部件突出显示。
  4. 为所有从火山口流动的岩浆光束配置附加物,以使用渲染其纹理。

    1. 将一个附加物插入MagmaRiverBeam,然后旋转该附加物,直到黄色可视化辅助指向火山口。
    2. 将另一个附加物插入MagmaRiverBeam,将其位置指向裂缝的分叉,然后旋转该附加物,直到黄色可视化辅助指向地下。
    火山的倾斜从上到下的视图,两个附加可视化辅助突出显示。
  5. MagmaRiverBeam中插入一个Beam,然后将其重命名为Magma

  6. 将该零件的附加物分配给Magma

    1. Explorer窗口中,选中Magma
    2. Properties窗口中,
      1. Attachment0设置为火山口边缘的附加物。
      2. Attachment1设置为裂缝分叉处的附加物。该光束在两个附加物之间渲染其默认纹理。
    火山的倾斜从上到下的视图,两块部件在附加物之间渲染默认光束纹理。
  7. 自定义光束的视觉外观,使其看起来像流动的岩浆。

    1. Explorer窗口中,确保Magma依然被选中。

    2. Properties窗口中,

      1. Width0设置为50,以使纹理从开始渲染的轴宽度增加。
      2. Width1设置为50,以在其与裂缝的汇合处扩宽纹理。
      3. CurveSize0设置为-50,以向外弯曲纹理,远离裂缝的底部。
      4. CurveSize1设置为5,以向内弯曲纹理,进入裂缝的分叉。
      5. Color设置为一个颜色序列,开始时为鲜红色,随后在光束的生命周期内变为暗红色,以模拟岩浆的冷却。
      • Time = 0RGB Value = 255, 51, 0
      • Time = 0.5RGB Value = 211, 39, 0
      • Time = 1RGB Value = 118, 24, 0
      1. Transparency设置为一个数字序列,允许岩浆在附加点之间更具生动性。
      • Time = 0Value = 1
      • Time = 0.0916Value = 0
      • Time = 0.867Value = 0
      • Time = 0.941Value = 0.725
      • Time = 1Value = 1
      1. LightEmission设置为1,以显著提亮光束。
      2. LightInfluence设置为0,以防止环境光影响光束的颜色。
      3. Brightness设置为8,以扩展光束发出的光。
  8. MagmaRiverBeam中插入另一个Beam,重命名为Crust1,然后使用第6步中的相同过程将该部件的附加物分配给Crust1

  9. 自定义光束的视觉外观,使其看起来像熔岩上方的地壳。

    1. Explorer窗口中,确保Crust1依然被选中。

    2. Properties窗口中,

      1. Texture设置为rbxassetid://17023930265,以渲染看起来像流动地壳的新纹理。
      2. Width0设置为35,以使纹理从开始渲染的轴宽度增加。
      3. Width1设置为25,以在它与分叉相遇时扩宽纹理。
      4. TextureSpeed设置为0.01,以显著放慢纹理的流动。
      5. TextureLength设置为3,以稍微拉长纹理的长度。
      6. CurveSize0设置为-50,以使纹理远离裂缝的底部。
      7. CurveSize1设置为5,使得纹理向裂缝的分叉处弯曲。
      8. Color设置为83, 83, 83,以将光束染成灰色。
      9. Transparency设置为一个数字序列,允许地壳在附加点之间更具生动性。
      • Time = 0Value = 1
      • Time = 0.22Value = 0
      • Time = 0.85Value = 0
      • Time = 1Value = 1
      1. ZOffset设置为1,使得纹理稍微偏移火山口。
  10. 复制Crust1,将其重命名为Crust2,然后在Properties窗口中,

    1. Attachment0设置为分叉处的附加物。
    2. Attachment1设置为火山口边缘的附加物。
    3. Width0设置为25,以使纹理从开始渲染的轴宽度增加。
    4. Width1设置为35,以在其与裂缝分叉之处相遇时扩宽纹理。
    5. TextureSpeed设置为-0.008,以显著放慢纹理的流动。
    6. TextureLength设置为2,以稍微拉伸纹理的长度。
    7. CurveSize0设置为-5,以使纹理远离裂缝的底部。
    8. CurveSize1设置为50,以使纹理向裂缝的分叉处弯曲。
    9. ZOffset设置为2,将纹理与其他地壳保持一定的偏移。
  11. (可选) 使用相同的过程,在裂缝分叉周围创建更多光束,以分流岩浆。请确保调整属性以放慢纹理速度,并模拟随着温度降低而变暗的岩浆。

烟雾柱

从火山口发出的烟雾柱向大气中释放温暖的高压气体、蒸汽和火山灰。这种火山排放的混合物在现实世界中可以看到几英里,因此火山设计通常将大型烟雾柱作为3D空间中的一个重要兴趣点。

样本使用ParticleEmitter对象发出粒子,显得像薄烟蒸汽,随着上升而改变色彩,而不是发出浓厚的火山灰烟雾,留作爆炸性喷发的即时反响。这项技术实现了两个目标:

  • 它打破了背景火山口的轮廓,在火山喷发周围产生更多视觉兴趣。
  • 它使得烟雾看起来如同接受环境中的光源,同时仍在发出暗色朦胧感,似乎烟雾正在燃烧从空气中释放的不纯物质,随后又变成像夜空一样的灰色。
表示从火山口上升的烟雾的2D纹理。
烟雾纹理 = rbxassetid://16830667309

要在样本火山岛 - 完成放置文件中重现火山口的烟雾柱:

  1. Caldera文件夹中插入一个block部件,然后将其重命名为SmokePlume。1. 将 SmokePlume 放置在火山口下方,然后将其缩放到大约与火山口表面积相等的大小。

    火山的侧面角度图,火山口下方的方块部分被高亮显示。
  2. ParticleEmitter 插入到 SmokePlume 中,然后将发射器重命名为 Smoke

  3. 选择 Smoke,然后在 Properties 窗口中,

    1. Texture 设置为 rbxassetid://16830673704 以呈现出像浓烟一样的颗粒。
    2. Color 设置为一个颜色序列,使颗粒模拟从火山口到天空的环境光照,颜色依次为黑色、浅桃色,然后变成灰色。
    • Time = 0, RGB Value = 0, 0, 0
    • Time = 0.374, RGB Value = 195, 104, 76
    • Time = 0.469, RGB Value = 225, 121, 86
    • Time = 0.709, RGB Value = 111, 111, 111
    • Time = 1, RGB Value = 113, 113, 113
    1. Transparency 设置为一个数字序列,使颗粒开始时透明,在生命早期完全不透明,然后在生命结束时再次变得透明。
    • Time = 0, Value = 1
    • Time = 0.0622, Value = 0
    • Time = 0.845, Value = 0
    • Time = 0, Value = 1
    1. ZOffset 设置为 -10 以将纹理偏移至更接近火山口的顶部。
    2. Lifetime 设置为 50, 60,以随机设置每个颗粒的生命期在 50 到 60 秒之间。
    3. Rate 设置为 0.3,以每 3 秒左右发射一个颗粒。
    4. Rotation 设置为 -360, 360,以随机定向每个颗粒成一个圆形。
    5. RotSpeed 设置为 -5, 5,以随机发射每个颗粒的旋转速度在 -5 到 5 度之间。
    6. SpreadAngle 设置为 5, 5,以在 X 和 Z 轴上以小角度发射颗粒。
    7. Acceleration 设置为 0, 7, 0,以模拟向上的力量并将颗粒拉向天空。
    8. Drag 设置为 1,以使颗粒以指数衰减的方式失去速度。
    9. 启用 WindAffectsDrag,使环境中的风推动烟雾。
    10. LightEmission 设置为 0.1,以略微增强颗粒的亮度。
    11. LightInfluence 设置为 0.06,以显著减少环境光对颗粒颜色的影响。
  4. 命令栏 中输入以下字符串,以在每个颗粒的生命期内将其大小从 40 增加到 100 studs,并有一个小的变化范围:


    workspace.Caldera.SmokePlume.Smoke.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,40,5), NumberSequenceKeypoint.new(1,100,15)}
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。