一个 火山 是地壳内的一个火口,由于来自岩浆和溶解气体的内部压力而喷出熔岩和烟雾。游戏中经常在具有挑战性的游戏区域中包含火山,例如玩家必须在熔岩和熔融岩石的危险与宝贵资源、首领战斗场地或随着火山周期性喷发而动态变化的环境之间取得平衡的地点。
使用 火山岛 - 开始 .rbxl 文件作为起点,并以 火山岛 - 完成 作为参考,本教程向您展示如何将环境转变为火山喷发,使用自定义照明和 VFX 对象来表示现实世界的物理行为,包括以下指导:
- 将参考材料分解为具有不同视觉和行为特征的单独组件。
- 配置表面波纹以模拟热流体上升到表面并扰动火口表面。
- 配置火星以模拟快速冷却的熔融岩石碎片在上升到大气中时的行为。
- 配置从火口溅出并流动的熔岩,以模拟各种类型的熔岩粘度状态。
- 配置烟雾柱以模拟上升到天空中的有害杂质,吸引玩家的注意。


分解参考
为了创建可信的火山,在设计过程中参考现实世界的火山喷发是很重要的,因为这使您能够将主题分解为具有不同视觉和行为特征的单独组件。例如,示例 火山岛 - 完成 游戏参考了冰岛的火山喷发,以指导与火口及其周围地形相关的所有纹理和 VFX 设计决策。

将喷发的火山分解为单独的组件是有用的,这样您就可以计划如何利用不同的 VFX 对象来模仿它们的现实世界对应物。为了演示,本教程将示例火山分解为五个独特的组件:
- 表面波纹 – 火口表面上小的熔岩波。
- 火星 – 从火口上升到天空的小而轻的熔融岩石碎片。
- 熔岩溅出 – 由于火山内部压力而从火口喷出的稀薄熔融岩石。
- 熔岩流 – 从火口流出的粘稠熔融岩石。
- 烟雾柱 – 从火口上升到天空的温暖、翻滚的气体。


以下部分提供了对您可以使用的不同设计决策和技术的深入分析,以重现这些组件。随着您审查这些决策并尝试各种照明、ParticleEmitter 和 Beam 属性,您将学习如何利用照明和 VFX 来解决您自己游戏的独特环境需求。
配置照明
为了使环境元素在您的游戏中成为一个关注点,重要的是要增加其与整体环境的对比度,以便它作为玩家应该探索的东西而突出。例如,为了吸引玩家进入火口,您可以配置照明源,使火山的熔岩在其他黑暗环境中看起来像是唯一的光源。
Studio 提供了两种高级类型的照明源,您可以使用这些源来实现此技术:
- 全局照明 - 为整个户外环境产生照明。
- 局部照明 - 在您放置它们的游戏中产生周围的照明。
本教程的这一部分教您如何利用这两种类型的照明源,使您的火山喷发成为场景中最重要的关注点,并为您的环境叙事创造戏剧性的效果。为了说明,回顾一下没有自定义照明的最终火山在其他愉快环境中感觉像是一个不显眼的危险,而带有自定义照明的火山在黑暗、忧郁的环境中感觉像是一个危险的存在。


局部照明
局部照明是您游戏中局部 光源 的发光,例如 SpotLight、SurfaceLight 和 PointLight 对象。局部照明对于您的火山来说是重要的,因为虽然您可以为 ParticleEmitter 和 Beam 纹理应用亮度,但它们无法单独为峡谷提供足够的光线,以真实地模拟火口及其流动的熔岩如何照亮现实世界中的环境。


在本教程中,建议您在全局照明之前配置局部照明,因为没有局部光源,您无法看到 3D 空间以配置您的 VFX 对象。然而,常见的工作流程要求您同时迭代局部和全局照明,以查看更改对 VFX 对象的影响,因此灵活应对您自己游戏的设计需求是很重要的。
要在示例 火山岛 - 完成 地方文件中重现火山的局部照明:
在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有局部光源对象,然后将文件夹重命名为 LocalLighting。
在 LocalLighting 文件夹中插入三个 块 部件,然后分别将它们重命名为 LightCaldera、LightMagma 和 LightOutflow。
将部件移动到可以照亮整个火山的位置。
- 将 LightCaldera 移动到火口和悬崖之间的中心位置。
- 将 LightMagma 移动到火口和熔岩流之间的裂缝中心。
- 将 LightOutflow 移动到稍微高于流出分叉成两条流的地方。

在每个部件中插入一个 Pointlight。

选择 LightCaldera 的 PointLight 子项,然后在 属性 窗口中,
- 将 亮度 设置为 15 以使光源更亮。
- 将 颜色 设置为 255, 85, 0 以将光线染成深橙色。
- 将 范围 设置为 60 以照亮整个火口区域。

选择 LightMagma 和 LightOutflow 的 PointLight 子项,然后在 属性 窗口中,
- 将 亮度 设置为 2 以使光源稍微亮一些。
- 将 颜色 设置为 255, 81, 0 以将光线染成橙色。
- 将 范围 设置为 50 以照亮裂缝和流出区域。

在 资源管理器 窗口中,选择 LocalLighting 文件夹中的所有块部件,然后在 属性 窗口中,将 透明度 设置为 1 以使块不可见。

全局照明
全局照明是游戏中来自太阳或月亮的发光。通过调整 Lighting 服务及其子后处理效果对象中的几个关键默认属性,您可以显著改变全局光在玩家眼中的外观,以及它与您在游戏中放置的任何其他对象(包括 ParticleEmitter 和 Beam 纹理)的交互方式。
例如,为了确保在本教程后面产生流动熔岩效果的 Beam 纹理能够发光,您必须配置 BloomEffect 属性以夸大光线,就像相机观察明亮的光源一样。类似地,为了在夜间模拟更真实的颜色,您还必须调整效果的属性以使整体环境的饱和度降低。


要在示例 火山岛 - 完成 地方文件中重现全局照明:
在 资源管理器 窗口中,选择 Lighting 服务,然后在 属性 窗口中,
- 将 环境光 设置为 133, 152, 176 以在整个户外环境中设置浅灰色调。
- 将 亮度 设置为 2 以使全局光源稍微暗一些。
- 将 ColorShift_Top 设置为 207, 178, 72 以设置反射来自全局光源的表面的光的黄色调。
- 将 LightingStyle 设置为 真实 以利用 Roblox 最先进的照明技术。
- 将 ClockTime 设置为 4.3 以将时间设置为大约凌晨 4 点 15 分。
- 将 GeographicLatitude 设置为 199 以修改月亮的位置。
- 将 ExposureCompensation 设置为 -1 以将环境暴露于月亮的曝光量的一半。

在 资源管理器 窗口中,选择 Lighting 服务的 Bloom 子项,然后在 属性 窗口中,
- 将 强度 设置为 0.75 以稍微降低环境中的所有颜色。
- 将 大小 设置为 80 以创建更宽的辉光效果。
- 将 阈值 设置为 0.85 以允许环境中的更多颜色发光。

在 资源管理器 窗口中,插入一个 ColorCorrection 对象到 Lighting 服务中,然后在 属性 窗口中,
- 将 亮度 设置为 0.017 以稍微改变像素的颜色。
- 将 对比度 设置为 0.25 以在环境中产生更强的明暗对比。
- 将 饱和度 设置为 -0.15 以降低环境中的颜色饱和度。
- 将 TintColor 设置为 255, 214, 143 以将像素染成浅黄色调。

- 可选在天空中提供间接光。
- 在 资源管理器 窗口中,插入一个 Clouds 对象到 Terrain 服务中。
- 选择 Clouds 对象,然后在 属性 窗口中,
- 将 覆盖 设置为 1 以提供完全的云层覆盖。
- 将 密度 设置为 0.08 以使云层覆盖不那么密集。
- 将 颜色 设置为 136, 143, 152 以将云层覆盖染成浅灰色调。

配置火山
现在您的局部和全局照明配置已完成,是时候配置与实际火山及其周围地形相关的所有 VFX 对象了。当您按照这些说明逐步重现示例 火山岛 .rbxl 文件中的最终环境时,请观察每个步骤如何协同工作,为环境增添特征、运动和光亮。
表面波纹
表面波纹 是由于内部岩浆和加压气体从地壳下方向上移动而在火口表面上流动的小熔岩波。这种视觉现象传达了对流的现实世界物理过程,或者说在流体中更热的流体上升到表面时的运动,它增加了您场景的真实感。
表面波纹为玩家提供了有关火山喷发状态的宝贵见解。例如,如果岩浆和气体以足够的力量向上移动以扰动火口上方熔岩的状态并导致其翻滚,玩家可以推断出火山正在积极喷发,熔岩在沸腾,因此他们应该在这个游戏区域附近保持谨慎。

为了演示这个过程,示例使用了一个 ParticleEmitter 对象,稍微位于火口底部,发出平坦、明亮的粒子,这些粒子在黑暗背景上缓慢扩展和收缩。这使得粒子能够模拟熔岩平滑而持续翻滚的行为,类似于自然界中元素的真实运动方式。

要在示例 火山岛 - 完成 地方文件中重现火口上的表面波纹:
在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有火口对象,然后将文件夹重命名为 Caldera。
创建一个背景以提供表面波纹的高对比度背景。
在 Caldera 文件夹中插入一个 块 部件,然后将其重命名为 Backdrop。
定位和缩放 Backdrop,使其稍微超出火口的完整表面区域。由于其靠近火口的局部光源,该部件看起来像是发光的。

选择 Backdrop,在 属性 窗口中,
将 颜色 设置为 0, 0, 0 以使块变为黑色。
将 材质 设置为 Foil 以为背景提供纹理。

创建波纹效果。
- 复制 Backdrop,将其重命名为 MagmaRipples,然后将其缩放到火口的表面区域。
- 选择 MagmaRipples,在 属性 窗口中,将 透明度 设置为 1 以使块不可见。
- 在 MagmaRipples 中插入一个 ParticleEmitter,然后将发射器重命名为 Ripples。
- 选择 Ripples,在 属性 窗口中,
将 纹理 设置为 rbxassetid://16829556885 以渲染看起来像泡沫波纹的粒子。
将 方向 设置为 VelocityPerpendicular 以垂直于其运动方向发出粒子。
将 颜色 设置为一个颜色序列,其中粒子是棕色的,变为明亮的红色,然后变为深红色。
- 点击 颜色 属性,然后点击 ⋯ 按钮。将显示一个颜色序列弹出窗口。

颜色序列底部轴上的每个三角形都是一个 关键点,确定粒子生命周期中该点的属性颜色值。
- 在颜色序列中设置以下时间和值属性:
- 时间 = 0,RGB 值 = 130, 53, 2
- 时间 = 0.5,RGB 值 = 224, 37, 0
- 时间 = 1,RGB 值 = 147, 5, 0

将 大小 设置为一个数字序列,其中粒子在生命周期中向中间增大,然后在返回到原始大小时有一个小的变化窗口。
- 点击 大小 属性,然后点击 ⋯ 按钮。将显示一个数字序列弹出窗口。默认情况下,图形是一条直线,图像从左到右保持相同大小。

数字序列开始和结束时的每个方块都是一个 关键点,确定从左到右的纹理在该点的大小值。
在数字序列中设置以下时间和值属性:
- 时间 = 0,值 = 4.81,包络 = 0.438
- 时间 = 0.341,值 = 8.75,包络 = 0.48
- 时间 = 0.497,值 = 9.38,包络 = 0.5
- 时间 = 0.644,值 = 8.75,包络 = 0.48
- 时间 = 1,值 = 4.81,包络 = 0.438

将 透明度 设置为一个数字序列,其中粒子开始时透明,在生命周期中间变得更加不透明,然后在生命周期结束时再次变得透明。
点击 透明度 属性,然后点击 ⋯ 按钮。
在数字序列中设置以下时间和值属性:
- 时间 = 0,值 = 1,包络 = 0
- 时间 = 0.3,值 = 0.387,包络 = 0.0375
- 时间 = 0.5,值 = 0.269,包络 = 0.0812
- 时间 = 0.7,值 = 0.381,包络 = 0.05
- 时间 = 0,值 = 1,包络 = 0

将 ZOffset 设置为 -2 以使纹理稍微偏离火口。
将 生命周期 设置为 5, 8 以随机设置每个粒子的生命周期在 5 到 8 秒之间。
将 速率 设置为 12 以每秒发出 12 个粒子。
将 旋转 设置为 -360, 360 以随机定向每个粒子。
将 速度 设置为 0.01 以每秒发出每个粒子十分之一的单位。
将 光发射 设置为 1 以显著增强粒子的亮度。
将 光影响 设置为 0 以防止环境光影响粒子的颜色。
将 亮度 设置为 15 以缩放发射器发出的光。
火星
火星 是从火口喷出的轻小熔融岩石碎片,迅速释放热量并上升到大气中。与表面波纹类似,火星表明地壳下方的内部压力正在向上施加,导致热元素打破熔岩的表面张力以释放压力。
示例通过使用一个 ParticleEmitter 对象来模拟这个过程,该对象发出带有运动模糊的粒子,这种模糊是嵌入纹理中的。当粒子上升并达到其生命周期的末尾时,发射器将粒子压缩为 1:1 的比例,以将粒子重新形成为圆形。这种技术使粒子看起来像是在快速移动,当它们从火口喷出时,然后在消散到天空中时减速。

此外,随着粒子的上升,它们的颜色、不透明度和大小会发生变化,以反映它们的温度变化。例如,它们在生命周期开始时是大棕色粒子,但很快转变为小橙色,然后是深红色。这种策略还有一个好处,即微妙地反射峡谷中的光线,增加玩家在环境中的沉浸感。
要在示例 火山岛 - 完成 地方文件中重现火口表面的发光火星:
在 Caldera 文件夹中插入一个 圆柱 部件,然后将其重命名为 GlowingEmbers。
将 GlowingEmbers 定位在表面波纹上方,然后缩放它,直到填满火口的内部。由于其靠近火口的局部光源,该部件看起来像是发光的。

选择 GlowingEmbers,然后在 属性 窗口中,将 透明度 设置为 1 以使圆柱不可见。
在 GlowingEmbers 中插入一个 ParticleEmitter,然后将发射器重命名为 Embers。
选择 Embers,然后在 属性 窗口中,
- 将 纹理 设置为 rbxassetid://17581858560 以渲染看起来像水平和垂直的细长椭圆的粒子。
- 将 方向 设置为 VelocityParallel 以平行于其运动方向发出粒子。
- 将 颜色 设置为一个颜色序列,其中粒子是棕色的,变为橙色,然后变为深红色。
- 时间 = 0,RGB 值 = 130, 53, 2
- 时间 = 0.5,RGB 值 = 224, 82, 0
- 时间 = 1,RGB 值 = 147, 5, 0

- 将 大小 设置为一个数字序列,其中粒子在生命周期中缓慢减小。
- 时间 = 0,值 = 0.313,包络 = 0.1
- 时间 = 1,值 = 0,包络 = 0

- 将 压缩 设置为一个数字序列,其中粒子在生命周期中间稍微拉长。
- 时间 = 0,值 = -3,包络 = 0
- 时间 = 0.323,值 = -0.188,包络 = 0
- 时间 = 1,值 = -0.5,包络 = 0

- 将 透明度 设置为一个数字序列,其中粒子随机改变其不透明度,以模拟火星在上升时发光。实际值并不重要,只要它们在生命周期中变化很大即可。

- 将 ZOffset 设置为 1 以使纹理稍微偏离火口。
- 将 生命周期 设置为 1, 5 以随机设置每个粒子的生命周期在 1 到 5 秒之间。
- 将 速度 设置为 5, 8 以随机发出每个粒子在 5 到 8 单位之间。
- 将 SpreadAngle 设置为 180, 180 以在 X 和 Z 轴上发出粒子。
- 将 加速度 设置为 0, 10, 0 以模拟向上的力量并将粒子拉向天空。
- 将 阻力 设置为 0.8 以使粒子以指数衰减的方式失去速度。
- 将 光发射 设置为 1 以显著增强粒子的亮度。
- 将 光影响 设置为 0 以防止环境光影响粒子的颜色。
- 将 亮度 设置为 20 以缩放发射器发出的光。
熔岩溅出
熔岩溅出 是由于内部岩浆和加压气体施加足够的力量打破火口上方熔岩的表面张力而向上喷出的稀薄熔融岩石。这一火山的核心组成部分是判断火山不再处于休眠状态并正在积极喷发的最常见迹象之一。
示例通过两个 ParticleEmitter 对象来表示这个过程,这些对象利用 翻转书 在粒子生命周期内动画化每个粒子的纹理。第一个粒子发射器发出看起来像稠密、高粘度的溅出物的粒子,这些粒子沉重而厚实,导致它们缓慢上升和下降到火山中。相反,第二个粒子发射器发出看起来像网状、低粘度的溅出物的粒子,这些粒子轻而薄,导致它们快速上升和下降。


每个粒子发射器在 64 帧内动画化其纹理,以模拟平滑、逼真的物理行为。虽然您可以只使用一个粒子发射器,但动画的重复性将变得明显,并打破玩家的沉浸感,因为他们每次都会看到完全相同的动画。然而,当两个粒子以略微不同的自定义属性动画化翻转书时,发现重复性就变得更加困难。
示例还提供了一个 ParticleEmitter 对象,该对象发出看起来像气泡溅出的粒子,以表示更轻的网状溅出物。这种技术为空间填充动态运动,并进一步隐藏翻转书动画的重复性。作为额外的好处,如果您的游戏还包括来自 创建瀑布 的瀑布,您可以在不同的游戏区域重复使用相同的纹理,从而节省内存并提高低端设备的性能。

要在示例 火山岛 - 完成 地方文件中重现火口表面的喷溅熔岩:
在 Caldera 文件夹中插入一个 圆柱 部件,然后将其重命名为 SplashingLava。
将 SplashingLava 定位在表面波纹上方,然后缩放它,直到覆盖您希望熔岩溅出的火口中间。由于其靠近火口的局部光源,该部件看起来像是发光的。

选择 SplashingLava,然后在 属性 窗口中,将 透明度 设置为 1 以使圆柱不可见。
在 SplashingLava 中插入一个 ParticleEmitter,然后将发射器重命名为 WebbySplashes。
选择 WebbySplashes,然后在 属性 窗口中,
- 将 纹理 设置为 rbxassetid://17363668312 以渲染看起来像网状溅出的粒子。
- 将 方向 设置为 FacingCameraWorldUp 以使粒子面向相机,但仅在垂直向上的世界 Y 轴上旋转。
- 将 颜色 设置为 255, 152, 79 以将粒子染成浅橙色。
- 将 大小 设置为一个数字序列,其中粒子在生命周期中增大,带有变化窗口。
- 时间 = 0,值 = 4.31,包络 = 0.762
- 时间 = 1,值 = 6.2,包络 = 0.875

- 将 压缩 设置为一个数字序列,其中粒子在生命周期中稍微拉长,带有变化窗口。
- 时间 = 0,值 = -0.075,包络 = 0.263
- 时间 = 1,值 = -0.413,包络 = 0.412

- 将 ZOffset 设置为 1 以使纹理稍微偏离火口。
- 将 生命周期 设置为 1.5, 2 以随机设置每个粒子的生命周期在 1.5 到 2 秒之间。
- 将 速率 设置为 0.37 以每 3 秒发出一个粒子。
- 将 旋转速度 设置为 -20, 20 以随机发出每个粒子在 -20 到 20 度之间。
- 将 速度 设置为 2 以每秒发出每个粒子 2 单位。
- 将 SpreadAngle 设置为 5, 5 以在 X 和 Z 轴上发出粒子。
- 将 FlipbookLayout 设置为 Grid8x8 以在 64 帧的持续时间内动画化纹理。
- 将 FlipbookMode 设置为 Oneshot 以确保动画在其生命周期内仅播放一次。
- 将 阻力 设置为 0.5 以使粒子以指数衰减的方式失去速度。
- 将 光发射 设置为 0.1 以稍微增强粒子的亮度。
- 将 光影响 设置为 0.25 以显著减少环境光对粒子颜色的影响。
复制 DenseSplashes,然后在 属性 窗口中,修改以下属性以为额外的熔岩溅出提供变化。
- 将 名称 设置为 DenseSplashes。
- 将 纹理 设置为 rbxassetid://17363669906 以渲染看起来像稠密溅出的粒子。
- 将 大小 设置为一个数字序列,其中粒子在生命周期中增大,带有变化窗口。
- 时间 = 0,值 = 5.75,包络 = 0.762
- 时间 = 1,值 = 7.37,包络 = 0.875

- 将 压缩 设置为一个数字序列,其中粒子在生命周期中稍微拉长,带有变化窗口。
- 时间 = 0,值 = 0,包络 = 0.225
- 时间 = 1,值 = -0.262,包络 = 0.15

- 将 速率 设置为 0.289 以每四分之一秒发出一个粒子。
用额外的溅出填充火口。
在 SplashingLava 中插入一个 ParticleEmitter,然后将发射器重命名为 SplashFill。
选择 SplashFill,然后在 属性 窗口中,
- 将 纹理 设置为 rbxassetid://17082061238 以渲染看起来像更轻的网状溅出的粒子。
- 将 方向 设置为 FacingCameraWorldUp 以使粒子面向相机,但仅在垂直向上的世界 Y 轴上旋转。
- 将 颜色 设置为 255, 152, 33 以将粒子染成橙色。
- 将 大小 设置为一个数字序列,其中粒子在生命周期中增大,带有变化窗口。
- 时间 = 0,值 = 1.25,包络 = 0.388
- 时间 = 1,值 = 6.38,包络 = 0.563

- 将 透明度 设置为一个数字序列,其中粒子开始时透明,变得不透明,然后在生命周期结束时再次变得透明。
- 时间 = 0,值 = 1,包络 = 0
- 时间 = 0.19,值 = 0,包络 = 0
- 时间 = 0.795,值 = 0,包络 = 0
- 时间 = 1,值 = 1,包络 = 0

- 将 ZOffset 设置为 1 以使纹理稍微偏离火口。
- 将 生命周期 设置为 1.5 以将每个粒子的生命周期设置为 1.5 秒。
- 将 速率 设置为 8 以每 8 秒发出一个粒子。
- 将 旋转 设置为 0, 360 以随机定向每个粒子在半圆内。
- 将 旋转速度 设置为 -50, 50 以随机发出每个粒子在 -50 到 50 度之间。
- 将 速度 设置为 12, 20 以随机发出每个粒子在 12 到 20 单位之间。
- 将 SpreadAngle 设置为 45, 45 以在 X 和 Z 轴上发出粒子。
- 将 加速度 设置为 0, -25, 0 以模拟重力并将粒子拉回。
- 将 阻力 设置为 1 以使粒子以指数衰减的方式失去速度。
- 将 光发射 设置为 1 以显著增强粒子的亮度。
- 将 光影响 设置为 0 以防止环境光影响粒子的颜色。
- 将 亮度 设置为 8 以缩放发射器发出的光。
熔岩流
熔岩流 是在火山喷发期间从火口喷出并渗出到地表的熔岩团。随着熔岩因暴露在空气中而冷却,它会固化并转变为固体岩石,形成新的陆地。
为了模拟这个过程,示例在彼此之上分层多个 Beam 对象,使用无缝纹理和属性配置来模拟熔岩在离火口更远的地方冷却时的行为特征:
- 底层 渲染一种平坦的颜色,从温暖的颜色转变为冷色,以传达熔岩开始降低温度的信号,例如从明亮的红色到深红色。
- 中间层 渲染一种黑色纹理,看起来像是有孔的黑色外壳,露出下面发光的熔岩。
- 顶层 渲染与中间层相同的纹理,但以较慢的速度、翻转的附加物和相反的属性配置。这确保纹理在渲染时不会有机会完全对齐,从而使玩家容易发现不真实的纹理重复。



分层三个 Beam 对象创建了视差的错觉,使熔岩看起来具有深度和体积,尽管它们只是三张 2D 图像。这让玩家知道峡谷内有一种动荡感,无论是在熔岩表面上还是下面。

要在示例 火山岛 - 完成 地方文件中重现火口的流动熔岩:
在 资源管理器 窗口中,在 工作区 中创建一个 文件夹 来包含所有流动熔岩对象,然后将文件夹重命名为 FlowingMagma。
在 FlowingMagma 文件夹中插入一个 块 部件,然后将其重命名为 MagmaRiverBeam。
将 MagmaRiverBeam 移动到火口边缘下方。

配置所有流动熔岩光束的附加物,以用于渲染其纹理。
- 在 MagmaRiverBeam 中插入一个附加物,然后旋转附加物,直到黄色可视辅助指向火口。
- 在 MagmaRiverBeam 中插入另一个附加物,将其定位在裂缝的分叉处,然后旋转附加物,直到黄色可视辅助指向地下。

在 MagmaRiverBeam 中插入一个 Beam,然后将其重命名为 Magma。
将部件的附加物分配给 Magma。
- 在 资源管理器 窗口中,选择 Magma。
- 在 属性 窗口中,
- 将 Attachment0 设置为火口边缘的附加物。
- 将 Attachment1 设置为裂缝分叉处的附加物。光束在两个附加物之间渲染其默认纹理。

自定义光束的视觉外观,使其看起来像流动的熔岩。
在 资源管理器 窗口中,确保 Magma 仍然被选中。
在 属性 窗口中,
- 将 Width0 设置为 50 以从开始渲染的轴宽化纹理。
- 将 Width1 设置为 50 以在与裂缝的分叉处相遇时宽化纹理。
- 将 CurveSize0 设置为 -50 以使纹理远离裂缝底部弯曲。
- 将 CurveSize1 设置为 5 以使纹理弯曲到裂缝的分叉处。
- 将 颜色 设置为一个颜色序列,该序列在光束的生命周期内从明亮的红色变为深红色,以模拟熔岩冷却。
- 时间 = 0,RGB 值 = 255, 51, 0
- 时间 = 0.5,RGB 值 = 211, 39, 0
- 时间 = 1,RGB 值 = 118, 24, 0

- 将 透明度 设置为一个数字序列,使熔岩在附加物之间更具活力。
- 时间 = 0,值 = 1
- 时间 = 0.0916,值 = 0
- 时间 = 0.867,值 = 0
- 时间 = 0.941,值 = 0.725
- 时间 = 1,值 = 1

- 将 光发射 设置为 1 以显著增强光束的亮度。
- 将 光影响 设置为 0 以防止环境光影响光束的颜色。
- 将 亮度 设置为 8 以缩放光束发出的光。
在 MagmaRiverBeam 中插入另一个 Beam,将其重命名为 Crust1,然后使用与第 6 步相同的过程将部件的附加物分配给 Crust1。
自定义光束的视觉外观,使其看起来像熔岩上方的外壳。
在 资源管理器 窗口中,确保 Crust1 仍然被选中。
在 属性 窗口中,
- 将 纹理 设置为 rbxassetid://17023930265 以渲染看起来像流动外壳的新纹理。
- 将 Width0 设置为 35 以从开始渲染的轴宽化纹理。
- 将 Width1 设置为 25 以在与裂缝的分叉处相遇时宽化纹理。
- 将 TextureSpeed 设置为 0.01 以显著减慢纹理的流动。
- 将 TextureLength 设置为 3 以稍微拉伸纹理的长度。
- 将 CurveSize0 设置为 -50 以使纹理远离裂缝底部弯曲。
- 将 CurveSize1 设置为 5 以使纹理弯曲到裂缝的分叉处。
- 将 颜色 设置为 83, 83, 83 以将光束染成灰色。
- 将 透明度 设置为一个数字序列,使外壳在附加物之间更具活力。
- 时间 = 0,值 = 1
- 时间 = 0.22,值 = 0
- 时间 = 0.85,值 = 0
- 时间 = 1,值 = 1

- 将 ZOffset 设置为 1 以使纹理稍微偏离火口。
复制 Crust1,将其重命名为 Crust2,然后在 属性 窗口中,
- 将 Attachment0 设置为裂缝分叉处的附加物。
- 将 Attachment1 设置为火口边缘的附加物。
- 将 Width0 设置为 25 以从开始渲染的轴宽化纹理。
- 将 Width1 设置为 35 以在与裂缝的分叉处相遇时宽化纹理。
- 将 TextureSpeed 设置为 -0.008 以显著减慢纹理的流动。
- 将 TextureLength 设置为 2 以稍微拉伸纹理的长度。
- 将 CurveSize0 设置为 -5 以使纹理远离裂缝底部弯曲。
- 将 CurveSize1 设置为 50 以使纹理弯曲到裂缝的分叉处。
- 将 ZOffset 设置为 2 以使纹理与其他外壳分开。
- 可选使用相同的过程,在裂缝的分叉周围创建更多光束以分流熔岩。确保调整属性以减慢纹理并模拟随着温度降低而颜色变暗的熔岩。
烟雾柱
烟雾柱 从火口中排放温暖的加压气体、蒸汽和火山灰到大气中。这种火山排放的混合物在现实世界中可以看到数英里,因此火山设计通常会将大型烟雾柱作为 3D 空间中的一个重要关注点。
示例并不是发出厚重的火山灰烟雾,而是使用一个 ParticleEmitter 对象发出看起来像薄烟蒸汽的粒子,这些粒子在上升时会改变颜色。这种技术实现了两个目标:
- 它打破了背景火口的轮廓,创造了更多的视觉兴趣。
- 它使烟雾看起来像是接受来自环境的光,同时仍然发出一种黑暗的存在,仿佛烟雾正在将杂质燃烧到空气中,然后变成像夜空一样的灰色。

要在示例 火山岛 - 完成 地方文件中重现火口的烟雾柱:
在 Caldera 文件夹中插入一个 块 部件,然后将其重命名为 SmokePlume。
将 SmokePlume 定位在火口下方,然后将其缩放到大约与火口表面区域相同的大小。

在 SmokePlume 中插入一个 ParticleEmitter,然后将发射器重命名为 Smoke。
选择 Smoke,然后在 属性 窗口中,
- 将 纹理 设置为 rbxassetid://16830673704 以渲染看起来像厚烟的粒子。1. 将 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

- 将 Transparency 设置为一个数字序列,其中粒子开始时透明,在生命周期早期变为完全不透明,然后在生命周期结束时再次变为透明。
- Time = 0, Value = 1
- Time = 0.0622, Value = 0
- Time = 0.845, Value = 0
- Time = 0, Value = 1

- 将 ZOffset 设置为 -10,以将纹理偏移到更靠近火山口的顶部。
- 将 Lifetime 设置为 50, 60,以随机设置每个粒子的生命周期在 50 到 60 秒之间。
- 将 Rate 设置为 0.3,以每 3 秒左右发射一个粒子。
- 将 Rotation 设置为 -360, 360,以随机定向每个粒子在一个圆圈中。
- 将 RotSpeed 设置为 -5, 5,以随机发射每个粒子在每秒 -5 到 5 度之间。
- 将 SpreadAngle 设置为 5, 5,以在 X 和 Z 轴上以小角度发射粒子。
- 将 Acceleration 设置为 0, 7, 0,以模拟向上的力并将粒子拉向天空。
- 将 Drag 设置为 1,使粒子以指数衰减的方式失去速度。
- 启用 WindAffectsDrag,使环境中的风推动烟雾。
- 将 LightEmission 设置为 0.1,以稍微亮化粒子。
- 将 LightInfluence 设置为 0.06,以显著减少环境光对粒子颜色的影响。
在 Command Bar 中输入以下字符串,以在每个粒子的生命周期内将其大小从 40 增加到 100 studs,并有小幅度的变化:
workspace.Caldera.SmokePlume.Smoke.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,40,5), NumberSequenceKeypoint.new(1,100,15)}