一個火山是地殼中的一個火山口,由於來自岩漿和溶解氣體的內部壓力而噴出熔岩和煙霧。體驗通常包含在具有挑戰性的遊戲區域中的火山,例如玩家必須在熔岩和熔融岩石危險的威脅與獲得寶貴資源、Boss 戰鬥場地或隨著火山週期性噴發而動態改變的環境之間取得平衡的地點。
使用 Volcano Island - Start .rbxl 文件作為起點,以及 Volcano Island - Complete 作為參考,本教程將向您展示如何通過自定義燈光和 VFX 物件將環境轉變為火山噴發,這些物件代表了現實世界的物理行為,包括以下指導:
- 將參考資料拆解成具有獨特視覺和行為特徵的獨立組件。
- 配置表面波紋以模仿熱流體上升到表面並干擾火山口的表面。
- 配置火星,以模仿迅速冷卻的熔融岩石片段,這些片段在升入大氣中時。
- 配置熔岩,讓其從火山口溅落並流出,以模仿各種熔岩黏度狀態。
- 配置煙霧雲,以模仿升入天空的有害雜質,吸引玩家的注意。


拆解參考
要創建可信的火山,在設計過程中參考現實世界的火山噴發非常重要,因為這使您能夠將主題拆解為各種具有獨特視覺和行為特徵的組件。例如,示例 Volcano Island - Complete 體驗參考了冰島的火山噴發,以指導所有與火山口及其周圍地形相關的紋理和 VFX 設計決策。

將噴發的火山拆解為獨立組件是有益的,以便您可以計劃如何利用不同的 VFX 物件來模仿它們的現實世界對應物。為了演示,本教程將示例火山拆解為五個獨特組件:
- 表面波紋 – 火山口表面上的小熔岩波。
- 火星 – 從火山口升入天空的小巧輕盈的熔融岩石片段。
- 熔岩濺射 – 由於火山內部壓力,從火山口噴出的稀薄熔融岩石。
- 熔岩流 – 從火山口流出的黏稠熔融岩石。
- 煙霧雲 – 從火山口中升入天空的溫暖、湧動的氣體。


接下來的各個部分提供了對不同設計決策和技術的深入分析,您可以利用這些,重新創建這些組件中的每一個。在審閱這些決策並對各種燈光、ParticleEmitter 和 Beam 屬性進行實驗時,您將學會如何利用燈光和 VFX 解決您自己體驗的獨特環境需求。
配置燈光
要使環境元素在您的體驗中成為關注點,增加它相對於整體環境的對比非常重要,以便它能夠脫穎而出,成為玩家應該探索的東西。例如,為了吸引玩家進入火山口,您可以配置您的燈光源,使火山的熔岩在整個黑暗環境中顯得發光,成為唯一的光源。
Studio 提供了兩種高層次燈光源,您可以用於這種技術:
- 全局燈光 - 為整個戶外環境生成燈光。
- 局部燈光 - 在您將其放置在體驗中的位置周圍生成燈光。
本教程的這一部分將教您如何利用這兩種類型的燈光源,使您的火山噴發成為場景中最重要的關注點,同時為您的環境故事講述創造戲劇性的效果。為了說明,請查看同一最終火山在沒有自定義燈光的情況下的感覺,這在其他愉快的環境中顯得是個不突兀的危險,而具有自定義燈光的火山在黑暗、憂鬱的環境中則顯得是一種危險的存在。


局部燈光
局部燈光是來自體驗中的局部 光源,例如 SpotLight、SurfaceLight 和 PointLight 物件的發光。對於火山來說,添加局部燈光是重要的,因為儘管您可以對 ParticleEmitter 和 Beam 紋理應用亮度,但單靠它們無法為峽谷提供足夠的光線,以真實地模擬火山口及其流動的熔岩在現實世界中將環境照亮的方式。


在本教程中,最好先配置局部燈光,再進行全局燈光,因為如果沒有局部光源,您無法看到配置 VFX 物件的 3D 空間。然而,常見的工作流程要求您同時迭代局部和全局燈光,以查看更改對 VFX 物件的影響,因此靈活適應您自己體驗的設計需求非常重要。
要重新創建示例 Volcano Island - Complete 地方文件的火山的局部燈光配置:
在 Explorer 窗口中,在 Workspace 中創建一個 Folder 以容納所有的局部光源物件,然後將該文件夾重命名為 LocalLighting。
在 LocalLighting 文件夾中插入三個 block 物件,然後分別將其重命名為 LightCaldera、LightMagma 和 LightOutflow。
將物件移動到可以為整個火山提供光照的位置。
- 將 LightCaldera 移動到火山口和懸崖之間的中央位置。
- 將 LightMagma 移動到火山口和熔岩流之間的裂縫中央。
- 將 LightOutflow 移動到稍微高於出流分叉成兩條水流的地方。

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

選擇 LightCaldera 的 PointLight,然後在 Properties 窗口中,
- 將 Brightness 設置為 15 以使光源更亮。
- 將 Color 設置為 255, 85, 0 以將光線染成深橙色。
- 將 Range 設置為 60 以照亮整個火山口區域。

選擇 LightMagma 和 LightOutflow 的 PointLight,然後在 Properties 窗口中,
- 將 Brightness 設置為 2 以使光源稍微亮一些。
- 將 Color 設置為 255, 81, 0 以將光線染成橙色。
- 將 Range 設置為 50 以照亮裂縫和出流區域。

在 Explorer 窗口中,選擇 LocalLighting 文件夾中的所有區塊,然後在 Properties 窗口中,將 Transparency 設置為 1 以使區塊隱形。

全局燈光
全局燈光是來自體驗中太陽或月亮的發光。通過調整 Lighting 服務中的幾個關鍵默認屬性及其子後處理效果物件,您可以徹底改變全局的光對玩家的外觀,以及它與您在體驗中放置的任何其他物件(包括 ParticleEmitter 和 Beam 紋理)之間的相互作用。
例如,為了確保後續教程中產生流動熔岩效果的 Beam 紋理能夠發光,您必須配置 BloomEffect 屬性,以誇大光源的亮度,就像相機在觀察明亮光源一樣。類似地,想要在夜間模擬更現實的顏色,您還必須調整效果的屬性,以去飽和整體環境的顏色。


要在示例 Volcano Island - Complete 地方文件中重新創建全局燈光:
在 Explorer 窗口中,選擇 Lighting 服務,然後在 Properties 窗口中,
- 將 Ambient 設置為 133, 152, 176,以在整個戶外環境中設置淡灰色的色調。
- 將 Brightness 設置為 2,以使全局光源稍微變暗。
- 將 ColorShift_Top 設置為 207, 178, 72,以將從面對全局光源的表面反射的光設置為黃色色調。
- 將 LightingStyle 設置為 Realistic,以利用 Roblox 最先進的照明技術。
- 將 ClockTime 設置為 4.3,以設置日間時間大約在凌晨 4 點 15 分。
- 將 GeographicLatitude 設置為 199,以調整月亮的位置。
- 將 ExposureCompensation 設置為 -1,以使環境暴露在月亮的亮度下減半。

在 Explorer 窗口中,選擇 Bloom 作為 Lighting 服務的子項目,然後在 Properties 窗口中,
- 將 Intensity 設置為 0.75,以稍微降低環境中的所有顏色的亮度。
- 將 Size 設置為 80,以創造更寬的 bloom 效果。
- 將 Threshold 設置為 0.85,以允許環境中的更多顏色發光。

在 Explorer 窗口中,插入一個 ColorCorrection 物件到 Lighting 服務中,然後在 Properties 窗口中,
- 將 Brightness 設置為 0.017,以稍微改變像素的顏色。
- 將 Contrast 設置為 0.25,以在環境中使亮色和暗色之間形成更銳利的對比。
- 將 Saturation 設置為 -0.15,以去飽和環境中的顏色。
- 將 TintColor 設置為 255, 214, 143,以將像素染成淺黃色的色調。

(可選) 在天空中提供間接光。
- 在 Explorer 窗口中,向 Terrain 服務中插入一個 Clouds 物件。
- 選擇 Clouds 物件,然後在 Properties 窗口中,
- 將 Cover 設置為 1,以提供全覆蓋的雲層。
- 將 Density 設置為 0.08,以使雲層變得不那麼稠密。
- 將 Color 設置為 136, 143, 152,以將雲層的顏色設置為淡灰色。

配置火山
現在您的局部和全局燈光配置完成了,是時候配置所有與實際火山及其周圍地形相關的 VFX 物件了。在按照這些指示精確重新創建示例 Volcano Island .rbxl 文件中的最終環境的過程中,觀察每一步如何協同工作以增添環境的特性、動態和亮度。
表面波紋
表面波紋是由於內部岩漿和受壓的氣體從地殼下方向上運動而在火山口表面流動的小熔岩波。這種視覺現象傳達了現實世界中對流的物理過程,或是當較熱的流體上升到表面時在流體內部的運動,它增添了您場景的真實感。
表面波紋為玩家提供了有關火山噴發狀態的有價值的見解。例如,如果岩漿和氣體以足夠的力量向上運動,打擾了火山口上方熔岩的狀態並導致其攪動,玩家可以推斷火山正在活躍噴發滾燙的岩漿,因此他們應該在這個遊戲區域小心行事。

為了演示這一過程,示例使用一個 ParticleEmitter 物件,位於火山口底部稍微下方,發出平坦、明亮的顆粒,這些顆粒在黑暗的背景上慢慢擴張和收縮。這使得顆粒能夠模擬熔岩順暢而持續攪動的行為,方式類似於自然界中元素運動的真實方法。

要在示例 Volcano Island - Complete 地方文件的火山口上重新創建表面波紋:
在 Explorer 窗口中,在 Workspace 中創建一個 Folder,以包含所有火山口物件,然後將該文件夾重命名為 Caldera。
創建一個背景,為表面波紋提供高對比度的背景。
在 Caldera 文件夾中插入一個 block 物件,然後將其重命名為 Backdrop。
定位和縮放 Backdrop,讓它稍微超出火山口的完整表面區域。這部分看起來在發光,因為它靠近火山口的局部光源。

選擇 Backdrop,然後在 Properties 窗口中,
將 Color 設置為 0, 0, 0 使其變成黑色。
將 Material 設置為 Foil 以為背景提供紋理。

創建波紋效果。
- 複製 Backdrop,將其重命名為 MagmaRipples,然後將其縮放至火山口的表面區域。
- 選擇 MagmaRipples,然後在 Properties 窗口中,將 Transparency 設置為 1 使該區塊隱形。
- 在 MagmaRipples 中插入一個 ParticleEmitter,然後將發射器重命名為 Ripples。
- 選擇 Ripples,然後在 Properties 窗口中,
將 Texture 設置為 rbxassetid://16829556885,以渲染看起來像波浪泡沫的顆粒。
將 Orientation 設置為 VelocityPerpendicular,以垂直於其運動方向發射顆粒。
將 Color 設置為顏色序列,其中顆粒是棕色,變成亮紅色,然後變成深紅色。
- 單擊 Color 屬性,然後單擊 ⋯ 按鈕。顏色序列彈出窗口顯示。

顏色序列底部每個三角形都是一個關鍵點,確定該顆粒生命週期該點的屬性顏色值。
- 設置顏色序列中的以下時間和數值屬性:
- Time = 0, RGB Value = 130, 53, 2
- Time = 0.5, RGB Value = 224, 37, 0
- Time = 1, RGB Value = 147, 5, 0

設置 Size 為一個數字序列,其中顆粒的尺寸在生命週期的中間增大,然後在返回到原始大小時具有小的變化範圍。
- 單擊 Size 屬性,然後單擊 ⋯ 按鈕。彈出一個數字序列窗口,默認情況下圖形是一條直線,圖片從左到右的大小不變。

每個數字序列開始和結束的正方形都是一個 關鍵點,決定了該紋理在左右的一個屬性的大小值。
設置數字序列中的以下時間和數值屬性:
- Time = 0, Value = 4.81, Envelope = 0.438
- Time = 0.341, Value = 8.75, Envelope = 0.48
- Time = 0.497, Value = 9.38, Envelope = 0.5
- Time = 0.644, Value = 8.75, Envelope = 0.48
- Time = 1, Value = 4.81, Envelope = 0.438

將 Transparency 設置為一個數字序列,其中顆粒開始為透明,在生命周期的中間變得更不透明,然後在生命週期結束時再次變透明。
單擊 Transparency 屬性,然後單擊 ⋯ 按鈕。
設置數字序列中的以下時間和數值屬性:
- Time = 0, Value = 1, Envelope = 0
- Time = 0.3, Value = 0.387, Envelope = 0.0375
- Time = 0.5, Value = 0.269, Envelope = 0.0812
- Time = 0.7, Value = 0.381, Envelope = 0.05
- Time = 0, Value = 1, Envelope = 0

將 ZOffset 設置為 -2,使紋理稍微遠離火山口。
將 Lifetime 設置為 5, 8,以隨機設置每個顆粒的生命週期在 5 到 8 秒之間。
將 Rate 設置為 12,以每秒發射 12 顆顆粒。
將 Rotation 設置為 -360, 360,以隨機地將每顆顆粒定位於圓圈中。
將 Speed 設置為 0.01,以每秒將每顆顆粒發射十分之一的碼。
將 LightEmission 設置為 1,以顯著增強顆粒的亮度。
將 LightInfluence 設置為 0,以防止環境光影響顆粒的顏色。
將 Brightness 設置為 15,以增加發射器發出的光。
火星
火星是從火山口噴出的輕盈小塊熔融岩石,隨著升入大氣而快速釋放熱量。與表面波紋相似,火星顯示了地殼下方的內部壓力向上推動,導致熱元素打破熔岩的表面張力以釋放壓力。
示例通過使用 ParticleEmitter 物件來模擬這一過程,發射具有運動模糊的顆粒,這種運動模糊已經嵌入到紋理中。隨著顆粒上升並達到其生命周期的結尾,發射器將顆粒壓縮為 1:1 比率,以重新形成圓形的顆粒。這種技術使得顆粒看起來在迅速移動時從火山口延伸出來,然後隨著它們在天空中擴散而減速。

另外,隨著顆粒的上升,它們會改變顏色、不透明度和大小,以反映其變化的溫度。例如,它們的生命周期開始時是大棕色顆粒,但很快變成小橙色,然後是深紅色。這種策略還有一個好處,即微妙地反映峽谷中的光照,增加玩家在環境中的沉浸感。
要在示例 Volcano Island - Complete 地方文件中重新創建火山口表面的發光火星:
在 Caldera 文件夾中插入一個 cylinder 部件,然後將其重命名為 GlowingEmbers。
將 GlowingEmbers 定位在表面波紋上方,然後縮放到填滿火山口內部。這部分看起來在發光,因為它靠近火山口的局部光源。

選擇 GlowingEmbers,然後在 Properties 窗口中,將 Transparency 設置為 1 以使圓柱體隱形。
在 GlowingEmbers 中插入一個 ParticleEmitter,然後將發射器重命名為 Embers。
選擇 Embers,然後在 Properties 窗口中,
- 將 Texture 設置為 rbxassetid://17581858560 ,以渲染看起來像橫向和縱向拉伸的顆粒。
- 將 Orientation 設置為 VelocityParallel,以平行於其運動方向發射顆粒。
- 將 Color 設置為顏色序列,其中顆粒是棕色,變成橙色,然後變成深紅色。
- Time = 0, RGB Value = 130, 53, 2
- Time = 0.5, RGB Value = 224, 82, 0
- Time = 1, RGB Value = 147, 5, 0

- 將 Size 設置為一個數字序列,其中顆粒在其整個生命周期中逐漸減小。
- Time = 0, Value = 0.313, Envelope = 0.1
- Time = 1, Value = 0, Envelope = 0

- 將 Squash 設置為一個數字序列,其中顆粒在其生命周期中稍微變長。
- Time = 0, Value = -3, Envelope = 0
- Time = 0.323, Value = -0.188, Envelope = 0
- Time = 1, Value = -0.5, Envelope = 0

- 將 Transparency 設置為一個數字序列,其中顆粒隨機改變其不透明度,以模擬火星在上升時發出光。實際數值並不重要,重要的是它們在生命週期中經常變化。

- 將 ZOffset 設置為 1,使紋理稍微遠離火山口。
- 將 Lifetime 設置為 1, 5,以隨機將每顆顆粒的生命週期設置在 1 到 5 秒之間。
- 將 Speed 設置為 5, 8,以隨機將每顆顆粒發射在 5 到 8 隻碼每秒之間。
- 將 SpreadAngle 設置為 180, 180,以在 X 和 Z 軸上發射顆粒。
- 將 Acceleration 設置為 0, 10, 0,以模擬向上的作用力,將顆粒拉向天空。
- 將 Drag 設置為 0.8,以使顆粒以指數衰減的方式減速。
- 將 LightEmission 設置為 1,以顯著增強顆粒的亮度。
- 將 LightInfluence 設置為 0,以防止環境光影響顆粒的顏色。
- 將 Brightness 設置為 20,以放大發射器發出的光。
熔岩濺射
熔岩濺射是薄薄的熔融岩石在火山內部證明活躍噴發的核心組件,因為內部岩漿和受壓氣體施加足夠的力量使熔岩表面張力被打破,向上噴發。這個過程的示例使用兩個 ParticleEmitter 物件,每個物件使用 flipbooks 在顆粒的生命周期內對每一個顆粒的紋理進行動畫。第一個發射器發射密集、高黏度的爾麻,它們沉重又厚,導致它們在火山內部緩慢地升起並下降。相反,第二個發射器發射輕盈、低黏度的爾麻,它們輕而薄,導致它們迅速升起並下降。


每個粒子發射器在其 64 幀的生命週期內動畫其紋理,以模擬平滑、真實的物理行為。雖然您可以只使用一個粒子發射器,但情況重複出的動畫會變得明顯,並且可能在您的玩家面前破壞身臨其境的感覺,因為他們每次都會看到相同的動畫。然而,當兩個粒子動畫 flipbooks 並且稍微有不同的定製屬性時,これは各自の再生が記録されないようにシミュレートされた状態を更加厚くする必要があります。
樣本還提供了一個 ParticleEmitter 物件,發射看起來像氣囊濺射的粒子,以代表甚至更輕的網狀濺射。這種技術為空間創造了充滿動態運動的效果,並進一步隱藏了 flipbook 動畫的重複性。作為額外 bonus,如果您的體驗中還包括來自 Creating Waterfalls 的瀑布,您可以將相同的紋理重複使用兩次以應用於不同的遊戲區域,從而節省内存並提高在低端設備上的性能。

要在示例 Volcano Island - Complete 地方文件中重新創建從火山口表面的濺射熔岩:
在 Caldera 文件夾中插入一個 cylinder 部件,然後將其重命名為 SplashingLava。
將 SplashingLava 定位在表面波紋上方,然後將其縮放到覆蓋您希望熔岩濺射的火山口中間。這部分看起來在發光,因為它靠近火山口的局部光源。

選擇 SplashingLava,然後在 Properties 窗口中,將 Transparency 設置為 1 以使圓柱體隱形。
在 SplashingLava 中插入一個 ParticleEmitter,然後將發射器重命名為 WebbySplashes。
選擇 WebbySplashes,然後在 Properties 窗口中,
- 將 Texture 設置為 rbxassetid://17363668312,以渲染看起來像網狀濺射的粒子。
- 將 Orientation 設置為 FacingCameraWorldUp,以依照攝影機發射顆粒,但僅在垂直向上的世界 Y 軸上旋轉。
- 將 Color 設置為 255, 152, 79,以將顆粒染成淺橙色。
- 將 Size 設置為一個數字序列,其中顆粒在其生命週期內逐漸增大,帶有變化範圍。
- Time = 0, Value = 4.31, Envelope = 0.762
- Time = 1, Value = 6.2, Envelope = 0.875

- 將 Squash 設置為一個數字序列,其中顆粒在其生命周期內稍微延長,帶有變化範圍。
- Time = 0, Value = -0.075, Envelope = 0.263
- Time = 1, Value = -0.413, Envelope = 0.412

- 將 ZOffset 設置為 1,使紋理稍微遠離火山口。
- 將 Lifetime 設置為 1.5, 2,以隨機設置每顆顆粒的生命週期在 1.5 到 2 秒之間。
- 將 Rate 設置為 0.37 以每 3 秒發射一個顆粒。
- 將 RotSpeed 設置為 -20, 20 以隨機發射每顆顆粒在 -20 到 20 度之間。
- 將 Speed 設置為 2,以將每顆顆粒每秒發射 2 隻碼。
- 將 SpreadAngle 設置為 5, 5,以在 X 和 Z 軸上發射顆粒。
- 將 FlipbookLayout 設置為 Grid8x8,以便於顆粒的紋理在 64 幀的持續時間內進行動畫。
- 將 FlipbookMode 設置為 Oneshot,以確保動畫在生命周期內僅播放一次。
- 將 Drag 設置為 0.5 以使顆粒以指數衰減的方式減速。
- 將 LightEmission 設置為 0.1 以稍微增強顆粒的亮度。
- 將 LightInfluence 設置為 0.25 以顯著減少環境光影響顆粒的顏色。
複製 DenseSplashes,然後在 Properties 窗口中,修改以下屬性以為額外的熔岩濺射提供變化。
- 將 Name 設置為 DenseSplashes。
- 將 Texture 設置為 rbxassetid://17363669906,以渲染看起來像密集濺射的粒子。
- 將 Size 設置為一個數字序列,其中顆粒在其生命週期內逐步增大。
- Time = 0, Value = 5.75, Envelope = 0.762
- Time = 1, Value = 7.37, Envelope = 0.875

- 將 Squash 設置為一個數字序列,其中顆粒在其生命周期內稍微延長,帶有變化範圍。
- Time = 0, Value = 0, Envelope = 0.225
- Time = 1, Value = -0.262, Envelope = 0.15

- 將 Rate 設置為 0.289,以幾乎每四分之一秒發射一顆顆粒。
用額外的噴濺填滿火山口。
在 SplashingLava 中插入一個 ParticleEmitter,然後將發射器重命名為 SplashFill。
選擇 SplashFill,然後在 Properties 窗口中,
- 將 Texture 設置為 rbxassetid://17082061238,以渲染看起來像更輕的網狀熔岩濺射的顆粒。
- 將 Orientation 設置為 FacingCameraWorldUp,以發射面朝攝像頭的顆粒,但僅在垂直方向上旋轉。
- 將 Color 設置為 255, 152, 33,以將顆粒染成橙色。
- 將 Size 設置為一個數字序列,其中顆粒在其生命週期內逐漸增大,帶有變化範圍。
- Time = 0, Value = 1.25, Envelope = 0.388
- Time = 1, Value = 6.38, Envelope = 0.563

- 將 Transparency 設置為一個數字序列,其中顆粒開始為透明,變得不透明,然後在生命週期結束時再次變得透明。
- Time = 0, Value = 1, Envelope = 0
- Time = 0.19, Value = 0, Envelope = 0
- Time = 0.795, Value = 0, Envelope = 0
- Time = 1, Value = 1, Envelope = 0

- 將 ZOffset 設置為 1,以使紋理稍微遠離火山口。
- 將 Lifetime 設置為 1.5,以設置每顆顆粒的生命週期為 1.5 秒。
- 將 Rate 設置為 8,以每 8 秒發射一顆顆粒。
- 將 Rotation 設置為 0, 360,以使每顆顆粒在半圈內隨機定位。
- 將 RotSpeed 設置為 -50, 50,以隨機嗜好秒速發射每顆顆粒在 -50 到 50 度之間。
- 將 Speed 設置為 12, 20,以隨機將每顆顆粒發射在 12 到 20 隻碼每秒之間。
- 將 SpreadAngle 設置為 45, 45,以使顆粒在 X 和 Z 軸上發射。
- 將 Acceleration 設置為 0, -25, 0,以模擬重力並將顆粒向下拉。
- 將 Drag 設置為 1,以使顆粒以指數衰減的方式減速。
- 將 LightEmission 設置為 1,以顯著增強顆粒的亮度。
- 將 LightInfluence 設置為 0,以防止環境光影響顆粒的顏色。
- 將 Brightness 設置為 8,以增加發射器發出的光。
熔岩流
熔岩流是從火山口噴出並沿地表流動的熔岩。隨著熔岩因暴露在空氣中而冷卻,變得固化並轉變為固體岩石,形成新的土地。
要模擬這個過程,示例將多個 Beam 物件層疊在一起,並使用無縫的紋理和屬性配置模擬熔岩隨著流動而冷卻的行為特徵:
- 底層 渲染一種平坦的顏色,從暖色變到冷色,以傳達熔岩開始降低溫度的過程,例如從亮紅色變為深紅色。
- 中間層 渲染一種黑色紋理,看起來像結皮的岩石,並有洞可以顯示下面的熔岩在發光。
- 頂層 渲染與中間層相同的紋理,但渲染速度較慢、翻轉附加物體並使用相反的屬性配置。這確保紋理不會在渲染時有完全對齊的機會,如果有這樣的情況,玩家就很容易檢測到不真實的紋理重複。



將三個 Beam 物件進行分層可以創造一種視差錯覺,使熔岩看起來有深度和體積的感覺,即使它們只是三個2D圖像。這讓玩家知道在熔岩的表面及其下方有一種湍流。

要在示例 Volcano Island - Complete 地方文件中重新創建從火山口流出的熔岩:
在 Explorer 窗口中,在 Workspace 中創建一個 Folder,以容納所有流動的熔岩物件,然後將該文件夾重命名為 FlowingMagma。
在 FlowingMagma 文件夾中插入一個 block 部件,然後將其重命名為 MagmaRiverBeam。
將 MagmaRiverBeam 移動到火山口邊緣稍微下面的位置。

配置熱流熔岩束用於渲染其紋理的附加物。
- 在 MagmaRiverBeam 中插入一個附加物,然後旋轉附加物,直到黃色視覺輔助標記指向火山口。
- 在 MagmaRiverBeam 中插入另一個附加物,將其定位於裂縫的分叉處,然後旋轉附加物,直到黃色視覺輔助標記指向地面。

在 MagmaRiverBeam 中插入一個 Beam,然後將其重命名為 Magma。
將該部件的附加物分配給 Magma。
- 在 Explorer 窗口中,選擇 Magma。
- 在 Properties 窗口中,
- 將 Attachment0 設置為位於火山口邊緣的附加物。
- 將 Attachment1 設置為位於分叉裂縫的附加物。此光束在兩個附加物之間渲染其默認紋理。

自定義光束的外觀,使其看起來像流動的熔岩。
在 Explorer 窗口中,確保 Magma 仍然被選中。
在 Properties 窗口中,
- 將 Width0 設置為 50,以擴大從渲染開始的軸的紋理。
- 將 Width1 設置為 50,以擴大到達分叉裂縫時的紋理。
- 將 CurveSize0 設置為 -50,以使紋理從裂縫的底部向外彎曲。
- 將 CurveSize1 設置為 5,以使紋理向裂縫的分叉彎曲。
- 將 Color 設置為一個顏色序列,從亮紅色開始,並在光束的生命週期內變為深紅色,用於模擬熔岩的冷卻。
- Time = 0, RGB Value = 255, 51, 0
- Time = 0.5, RGB Value = 211, 39, 0
- Time = 1, RGB Value = 118, 24, 0

- 將 Transparency 設置為數字序列,使熔岩在附加物之間更鮮明。
- Time = 0, Value = 1
- Time = 0.0916, Value = 0
- Time = 0.867, Value = 0
- Time = 0.941, Value = 0.725
- Time = 1, Value = 1

- 將 LightEmission 設置為 1,以顯著增強光束的亮度。
- 將 LightInfluence 設置為 0,以防止環境光影響光束的顏色。
- 將 Brightness 設置為 8,以放大光束所發出的光。
在 MagmaRiverBeam 中插入另一個 Beam,將其重命名為 Crust1,然後按照步驟 6 使用相同的過程連接部件的附加物。
自定義光束的外觀,使其看起來像流動熔岩上的結皮。
在 Explorer 窗口中,確認 Crust1 仍然被選中。
在 Properties 窗口中,
- 將 Texture 設置為 rbxassetid://17023930265,以渲染一種新紋理,看起來像流動的結皮。
- 將 Width0 設置為 35,以擴大從渲染開始的紋理。
- 將 Width1 設置為 25,以擴大到達分叉裂縫時的紋理。
- 將 TextureSpeed 設置為 0.01,以顯著減慢紋理的流動。
- 將 TextureLength 設置為 3,以稍微拉長紋理的長度。
- 將 CurveSize0 設置為 -50,以使紋理從裂縫的底部彎曲。
- 將 CurveSize1 設置為 5,以使紋理向裂縫的分叉彎曲。
- 將 Color 設置為 83, 83, 83,以將光束染成灰色。
- 將 Transparency 設置為數字序列,使結皮在附加物之間更鮮明。
- Time = 0, Value = 1
- Time = 0.22, Value = 0
- Time = 0.85, Value = 0
- Time = 1, Value = 1

- 將 ZOffset 設置為 1,以使紋理稍微偏離火山口。
複製 Crust1,將其重命名為 Crust2,然後在 Properties 窗口中,
- 將 Attachment0 設置為裂縫的分叉處的附加物。
- 將 Attachment1 設置為火山口邊緣的附加物。
- 將 Width0 設置為 25,以擴大從開始的紋理。
- 將 Width1 設置為 35,以擴大在分叉處的紋理。
- 將 TextureSpeed 設置為 -0.008,以顯著減慢紋理的流動。
- 將 TextureLength 設置為 2,以稍微未拉長紋理的長度。
- 將 CurveSize0 設置為 -5,以使紋理從裂縫的底部彎曲。
- 將 CurveSize1 設置為 50,以使紋理向裂縫的分叉彎曲。
- 將 ZOffset 設置為 2,以使紋理與其他結皮有些偏差。
(可選) 使用相同的過程,在裂縫的分叉周圍創建更多光束,以撒出熔岩。確保調整屬性以減緩紋理流動,並模擬隨著冷卻而顏色變得更暗的熔岩。
烏煙
煙霧雲來自火山口,向大氣中釋放溫暖的受壓氣體、蒸汽和火山灰。這種火山排放的混合物在現實世界中可以從幾英里之外看到,因此火山設計通常會加入大煙霧雲,使其成為 3D 空間中的重要關注點。
與發生爆炸性噴發後立即可見的濃厚火山煙霧不同,示例使用 ParticleEmitter 物件發射看起來像薄煙霧的顆粒,這些顆粒在上升時改變顏色。這種技術達到了兩個目的:
- 它打破了背景峽谷的輪廓,為火山噴發周圍創造了更多視覺趣味。
- 它使煙霧看起來像是接受了周圍環境的光,同時仍然放出黑暗的意味,彷彿煙霧正在將有害雜質燃燒到空氣中,然後變得灰色,如夜空一般。

要在示例 Volcano Island - Complete 地方文件中重新創建火山口的煙霧雲:
在 Caldera 文件夾中插入一個 block 部件,然後將其重命名為 SmokePlume。1. 將 SmokePlume 放置在火山口下方,然後將其縮放到大約火山口表面積的大小。

將 ParticleEmitter 插入 SmokePlume 中,然後將發射器重新命名為 Smoke。
選擇 Smoke,然後在 屬性 窗口中,
- 將 Texture 設置為 rbxassetid://16830673704 以渲染看起來像濃煙的粒子。
- 將 Color 設置為一個顏色序列,其中粒子模擬環境中的光照,從火山口延伸到天空,顏色從黑色開始,變為淡桃色,然後變為灰色。
- Time = 0,RGB 值 = 0, 0, 0
- Time = 0.374,RGB 值 = 195, 104, 76
- Time = 0.469,RGB 值 = 225, 121, 86
- Time = 0.709,RGB 值 = 111, 111, 111
- Time = 1,RGB 值 = 113, 113, 113

- 將 Transparency 設置為一個數字序列,其中粒子開始時透明,然後在其生命週期早期變得完全不透明,之後在生命終結時再次變回透明。
- Time = 0,Value = 1
- Time = 0.0622,Value = 0
- Time = 0.845,Value = 0
- Time = 1,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,顯著降低環境光對粒子顏色的影響。
在 指令欄 中,輸入以下字串以隨著粒子的生命週期將每個粒子的大小從 40 增加到 100 studs,並帶有小範圍的變化:
workspace.Caldera.SmokePlume.Smoke.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,40,5), NumberSequenceKeypoint.new(1,100,15)}