使用 VFX 創建火山噴發

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

A 火山是地殼內的一個火口,因為岩漿和溶解氣體內部壓力而噴出熔岩和煙霧。體驗通常包括挑戰性的遊戲區域中的火山,例如玩家必須在熔岩和熔融岩石的危險與獲得貴重資源、首領戰鬥場或隨火山週期性噴發而動態變化的環境之間取得平衡的地方。

使用 Volcano Island - Start .rbxl 檔案作為起點,以及 Volcano Island - Complete 作為參考,本教程展示了如何使用自定義照明和 VFX 物件將環境轉變為火山噴發,並提供實際物理行為的指導,包括:

  • 將參考素材分解為具有獨特視覺和行為特徵的單獨組件。
  • 配置表面波紋以模仿熱流體上升到表面並擾動火口表面。
  • 配置火花以模仿熔岩快速冷卻的熔石零件上升到大氣中。
  • 配置從火口濺出並流動的熔岩,以模擬各種熔岩粘稠度狀態。
  • 配置煙霧柱以模擬升向天空的有害雜質,吸引玩家的注意。
您可以用來完成本教程的起始火山地形。
火山島 - 開始
您將在本教程結束時創建的完整火山和 VFX 物件。
火山島 - 完整

分解參考

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

冰島火山噴發的遠景。

分解正在噴發的火山為單獨的組件是有用的,以便您可以計畫如何利用不同的 VFX 物件來模擬其真實世界的對應物。為了演示,本教程將樣本火山分解為五個獨特的組件:

  • 表面波紋 – 火口表面上小的熔岩波。
  • 火花 – 從火口上升到空中的小而輕的熔融岩石片。
  • 熔岩濺出 – 由於火山內部壓力而從火口爆發出的稀薄熔融岩石。
  • 熔岩流 – 從火口流出、粘稠的熔融岩石。
  • 煙霧柱 – 從火口上升的溫暖、滾滾而上的氣體。
所有五個組件突出的火山噴發參考。
樣本火山噴發,帶有相同的五個組件,以便比較參考圖像與最終結果。

接下來的部分對不同設計決策和技術進行深入分析,您可以利用這些設計決策重建這些組件中的每一個。在審查這些決策並對不同的照明、ParticleEmitterBeam 屬性進行實驗時,您將學會如何利用照明和 VFX 解決自己體驗的獨特環境需求。

配置照明

要使環境元素成為您體驗中的一個關注點,重要的是要增加它與整體環境的對比度,以便它突出顯示為玩家應該探索的東西。例如,為了吸引玩家進入火口,您可以配置照明源,使火山的熔岩看起來在其餘黑暗的環境中發光,成為唯一的光源。

Studio 提供了兩種高級類型的照明源,您可以利用這種技術:

  • 全局照明 - 為整個戶外環境產生照明。
  • 局部照明 - 產生您在體驗中放置的位置周圍的照明。

本教程的這一部分教您如何利用這兩種類型的照明源,使火山噴發成為場景中最重要的關注點,以及為您的環境敘事創造戲劇效果。為了說明,請查看沒有自定義照明的同一最終火山,感覺在其他愉快環境中是個低調的危險,而帶有自定義照明的火山則感覺在黑暗、憂鬱的環境中是一種危險的存在。

帶有預設光源的完整樣本火山噴發版本。
使用預設光源
帶有自定義光源的完整樣本火山噴發版本。
使用自定義光源

局部照明

局部照明是您體驗中的當地 光源 的光亮,例如 SpotLightSurfaceLightPointLight 物件。對於您的火山來說,添加局部照明是重要的,因為雖然您可以對 ParticleEmitterBeam 紋理應用亮度,但它們不能單獨為峽谷填充足夠的光,來真實地模擬火口及其流動的熔岩將如何在現實世界中照亮環境。

沒有局部照明的完整樣本火山噴發版本。
沒有局部照明
帶有局部照明的完整樣本火山噴發版本。
帶有局部照明

在本教程中,最好首先配置您的局部照明再配置全局照明,因為如果沒有局部光源,您不能看到 3D 空間以配置您的 VFX 物件。然而,常見工作流程要求您在局部和全局照明上同時迭代,以查看您對 VFX 物件的更改效果,因此對於您自己的體驗的設計要求,保持靈活是重要的。

要重建樣本 Volcano Island - Complete 呈現檔案中的火山局部照明:

  1. Explorer 窗口中,在 Workspace 中創建一個 Folder 以包含所有局部光源物件,然後將該文件夾重命名為 LocalLighting

  2. LocalLighting 文件夾中插入三個 block 部件,然後分別將其重命名為 LightCalderaLightMagmaLightOutflow

  3. 將部件移動到可以照亮整個火山的位置。

    1. LightCaldera 移到火口和懸崖之間的中心。
    2. LightMagma 移到火口和熔漿流出物之間的裂縫中心。
    3. LightOutflow 移至略高於流出物分叉為兩股的地方。
    火山的前視圖,顯示三個部件在火山的山谷中定位。
  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 以使這些塊不可見。

    火山的前視圖,顯示該火山谷中有橙色照明。

全局照明

全局照明是來自經驗中的太陽或月亮的光亮。通過調整 Lighting 服務及其子後期處理效果對象中的幾個關鍵默認屬性,您可以顯著改變全球光對玩家的顯示方式,以及它如何與您在體驗中放置的任何其他物體交互,包括 ParticleEmitterBeam 紋理。

例如,為了確保後續教程中產生流動熔岩效果的 Beam 紋理能夠發光,您必須配置 BloomEffect 屬性來誇大照明,就像相機查看亮光一樣。同樣,為了在夜間模擬更現實的顏色,您還必須調整效果的屬性,以使整個環境的飽和度降低。

沒有輝光的完整樣本火山噴發版本。
沒有輝光
帶有輝光的完整樣本火山噴發版本。
帶有輝光

要重建樣本 Volcano Island - Complete 檔案中的全局照明:

  1. Explorer 窗口中,選擇 Lighting 服務,然後在 Properties 窗口中,

    1. Ambient 設定為 133, 152, 176 以在整個戶外環境上設置淺灰色調。
    2. Brightness 設定為 2 以使全局光源稍微昏暗一些。
    3. ColorShift_Top 設定為 207, 178, 72 以對向全局光源面向的表面反射的光進行黃色調設置。
    4. LightingStyle 設定為 逼真 以利用 Roblox 最先進的照明技術。
    5. ClockTime 設定為 4.3 以將時計設定為大約凌晨4:15。
    6. GeographicLatitude 設定為 199 以修改月亮的位置。
    7. ExposureCompensation 設定為 -1 以使環境暴露於月光的一半。
    火山的前視圖,顯示黑暗的戶外照明。
  2. Explorer 窗口中,選擇 Lighting 服務的 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 物件。在您遵循這些指導來準確重建樣本 Volcano Island .rbxl 檔案中的最終環境時,觀察每一步是如何一起工作以為環境增添角色、運動和亮度。

表面波紋

表面波紋是由於內部岩漿和加壓氣體從地殼底部上升而在火口表面流動的小熔岩波。這種視覺現象傳達了現實世界中的對流物理過程,或者當熱流體上升到表面時,流體內部的運動,並增加了您場景的現實感。

表面波紋為玩家提供了對火山噴發狀態的寶貴洞察。例如,如果岩漿和氣體以足夠的力量向上移動以擾動火口上方熔岩的狀態並導致其翻滾,玩家可以推斷火山正在活躍噴發,裡面充滿了沸騰的岩漿,因此他們應該在這個遊戲區域周圍多加小心。

沒有表面波紋的火口上方的俯視圖。
沒有表面波紋
帶有表面波紋

為了演示這一過程,樣本使用一個 ParticleEmitter 物件,該物件略低於火口的基底,以發出平坦的、明亮的粒子,這些粒子在暗色背景上慢慢擴張和收縮。這使得粒子能夠模仿熔岩流暢而持續翻滾的行為,這類似於自然中元素的真實運動方式。

代表由翻滾熔岩產生的表面波紋的 2D 紋理。
泡沫波紋紋理 = rbxassetid://16811365086

要在樣本 Volcano Island - Complete 檔案中重建火口上方的表面波紋:

  1. Explorer 窗口中,在 Workspace 中創建一個 Folder 以容納所有火口物件,然後將該文件夾重命名為 Caldera

  2. 創建一個背景,以為表面波紋提供高對比度背景。

    1. Caldera 文件夾中插入一個 block 部件,然後將其重命名為 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 以每秒發射每個粒子1/10的stud。

      11. LightEmission 設定為 1 以顯著增強粒子的亮度。

      12. LightInfluence 設定為 0,以阻止環境光影響粒子的顏色。

      13. Brightness 設定為 15 以縮放發射器發出的光。

火花

火花是從火口爆發出的小而輕的熔融岩石,隨著上升到大氣中快速釋放熱量。類似於表面波紋,火花表明地殼下的內部壓力正向上施加,導致熱元素破裂熔岩表面張力以釋放壓力。

樣本通過使用 ParticleEmitter 物件模擬這一過程以發射具有運動模糊的粒子,這些粒子的紋理是烘焙進去的。隨著粒子上升並達到其壽命的末端,發射器將粒子壓縮成 1:1 的比例,將粒子重新形成為圓圈。這一技術使得粒子在從火口迅速移動後,再慢慢消散到天空中的感覺得以實現。

代表從火口噴發的火花的 2D 紋理。
火花紋理 = rbxassetid://17581858560

此外,隨著粒子上升,它們的顏色、透明度和大小也會變化以反映其溫度的變化。例如,粒子在生命的初期是大型棕色粒子,但很快轉變為小型橙色,再到栗色。這一策略還有暗示性地映射了峽谷中的光線,提高了玩家對環境的沉浸感。

要重建樣本 Volcano Island - Complete 檔案中火口表面發光的火花:

  1. Caldera 文件夾中插入一個 cylinder 部件,然後將其重命名為 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 studs 之間。
    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 物件來表示這一過程,利用 翻頁動畫 在每個粒子壽命中動畫化其紋理。第一個粒子發射器發射看起來像密集、高粘性濺出物的粒子,重而厚,使它們慢慢再流下火山。相反地,第二個粒子發射器發射看起來像網狀、低粘性的濺出物,輕而薄,導致它們迅速上升和下降。

代表密集濺出物紋理的 2D 紋理。
密集濺出紋理 = rbxassetid:/17363669906
代表網狀濺出物紋理的 2D 紋理。
網狀濺出紋理 = rbxassetid://17363668312

每個粒子發射器都在 64 幀中動畫化其紋理,以模擬平滑、逼真的物理行為。儘管您可以僅使用一個粒子發射器,但動畫重複將變得明顯,這會破壞玩家的沉浸感,因為他們每次都會看到完全相同的動畫。然而,當兩個粒子動畫化翻頁動畫時,擁有略微不同的自定義屬性,將更難發現重複。

樣本還提供了一個 ParticleEmitter 物件,該物件發射看起來像泡沫濺出物的粒子,以表示更輕的網狀濺出物。這一技術使空間充滿動態運動,進一步隱藏了翻頁動畫的重複性。作為額外的好處,如果您的體驗還包含 水流創建 的瀑布,則可以重複使用相同的紋理來實現不同的遊戲區域,從而節省内存並提高低端設備的性能。

代表泡沫濺出物的 2D 紋理。
網狀紋理 = rbxassetid://17082061238

要重建樣本 Volcano Island - Complete 檔案中火口上方的熔岩濺出物:

  1. Caldera 文件夾中插入一個 cylinder 部件,然後將其重命名為 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 studs。
    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 以每 4 分之一秒發射一個粒子。
  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 studs 之間。
      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

要重建範例 火山島 - 完整 檔案中的 caldera 流動熔岩:

  1. Explorer 窗口中,創建一個 FolderWorkspace 內以包含所有流動熔岩物件,然後將文件夾重新命名為 FlowingMagma

  2. 將一個 block 部件插入 FlowingMagma 文件夾,然後將其重新命名為 MagmaRiverBeam

  3. MagmaRiverBeam 移動到 caldera 邊緣的稍微下方。

    火山的傾斜俯瞰圖,突出顯示一個塊部件。
  4. 配置所有從 caldera 流出的熔岩光束的附件,以用來渲染他們的紋理。

    1. MagmaRiverBeam 中插入一個附件,然後旋轉附件直到黃色視覺指示器指向 caldera。
    2. MagmaRiverBeam 中插入另一個附件,將其定位在裂縫的分叉處,然後旋轉附件直到黃色視覺指示器指向地面。
    火山的傾斜俯瞰圖,突出顯示兩個附件視覺指示器。
  5. MagmaRiverBeam 中插入一個 Beam,然後將其重新命名為 Magma

  6. 將部件的附件分配給 Magma

    1. Explorer 窗口中,選擇 Magma
    2. Properties 窗口,
      1. Attachment0 設置為位於 caldera 邊緣的附件。
      2. Attachment1 設置為位於裂縫分叉處的附件。光束在這兩個附件之間渲染其預設紋理。
    火山的傾斜俯瞰圖,兩個塊部件在附件之間渲染預設光束紋理。
  7. 自訂光束的視覺外觀,使其看起來像流動的熔岩。

    1. Explorer 窗口中,確認 Magma 仍然被選中。

    2. Properties 窗口,

      1. Width0 設置為 50,使紋理從開始渲染的軸變寬。
      2. Width1 設置為 50,在達到裂縫的分叉時使紋理變寬。
      3. CurveSize0 設置為 -50,使紋理從裂縫的地面上彎曲。
      4. CurveSize1 設置為 5,使紋理彎曲進入裂縫的分叉。
      5. Color 設置為從亮紅色到暗紅色的顏色序列,以模擬熔岩冷卻的過程。
      • Time = 0, RGB Value = 255, 51, 0
      • Time = 0.5, RGB Value = 211, 39, 0
      • Time = 1, RGB Value = 118, 24, 0
      1. 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
      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. 將顏色設置為 83, 83, 83,以給光束上色為灰色。
      9. Transparency 設置為一個數字序列,使地殼在附件點之間更加生動。
      • Time = 0, Value = 1
      • Time = 0.22, Value = 0
      • Time = 0.85, Value = 0
      • Time = 1, Value = 1
      1. ZOffset 設置為 1,使紋理稍微遠離 caldera。
  10. 複製 Crust1,將其重新命名為 Crust2,然後在 Properties 窗口中,

    1. Attachment0 設置為裂縫的分叉處的附件。
    2. Attachment1 設置為 caldera 邊緣的附件。
    3. Width0 設置為 25,使紋理從開始渲染的軸變寬。
    4. Width1 設置為 35,在達到裂縫的分叉時使紋理變寬。
    5. TextureSpeed 設置為 -0.008,顯著減慢紋理的流動速度。
    6. TextureLength 設置為 2,略微拉回紋理的長度。
    7. CurveSize0 設置為 -5,使紋理從裂縫的地面上彎曲。
    8. CurveSize1 設置為 50,使紋理彎曲進入裂縫的分叉。
    9. ZOffset 設置為 2,使紋理避開另一個地殼。
  11. (可選) 使用相同的過程,在裂縫的分叉周圍創建更多的光束以分流熔岩。請確保調整屬性以減慢紋理,模擬隨著冷卻而顏色變深的熔岩。

煙霧

來自 caldera 的 煙霧 噴流將溫暖的壓力氣體、蒸汽和火山灰釋放到大氣中。這種火山排放的混合物在現實世界中可以見到幾英里,因此火山設計通常包含大型煙霧噴流,成為 3D 空間中的重要景點。

範例使用 ParticleEmitter 物件來釋放看起來像薄煙霧的顆粒,而不是在爆炸性噴發後立即看到的濃厚火山煙霧。這種技術實現了兩個目標:

  • 打破背景火口的輪廓,為火山噴發周圍創造更多的視覺興趣。
  • 使煙霧看起來像是接受來自環境的光,同時仍然釋放出暗淡的存在,彷彿煙霧正在燃燒雜質,然後像夜空一樣變成灰色。
代表從 caldera 上升的煙霧的 2D 紋理。
煙霧紋理 = rbxassetid://16830667309

要重建範例 火山島 - 完整 檔案中的 caldera 煙霧噴流:

  1. Caldera 文件夾中插入一個 block 部件,然後將其重新命名為 SmokePlume

  2. SmokePlume 置於 caldera 之下,然後將其縮放到大約與 caldera 表面面積相等的大小。

    火山的傾斜側視圖,突出顯示 caldera 下方的塊部件。
  3. SmokePlume 中插入一個 ParticleEmitter,然後將發射器重新命名為 Smoke

  4. 選擇 Smoke,然後在 Properties 窗口中,

    1. Texture 設置為 rbxassetid://16830673704,以渲染看起來像濃厚煙霧的顆粒。
    2. Color 設置為顏色序列,其中顆粒模擬從 caldera 到天空環境中的照明,顏色從黑色開始,變為淺桃色,然後變為灰色。
    • 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.9378, Value = 1
    1. ZOffset 設置為 -10,使紋理更靠近 caldera 的頂部。
    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,顯著減少環境光對顆粒顏色的影響。
  5. Command Bar 中,輸入以下字符串以在每個顆粒的生命週期中將其大小從 40 擴展到 100 studs,並有一個小的變化範圍:


    workspace.Caldera.SmokePlume.Smoke.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,40,5), NumberSequenceKeypoint.new(1,100,15)}