火山は、地殻内のクレーターで、マグマや溶解したガスからの内部圧力によって溶岩や煙を噴出します。ゲームでは、プレイヤーが溶岩や溶岩の危険と貴重な資源、ボスバトルアリーナ、または火山が周期的に噴火することで動的に変化する環境の危険をバランスさせなければならない挑戦的なゲームプレイエリアに火山が含まれることがよくあります。
Volcano Island - Start .rbxlファイルを出発点として、Volcano Island - Completeを参照し、このチュートリアルでは、環境を火山の噴火に変える方法を示します。リアルな物理的挙動を表すカスタムライティングとVFXオブジェクトを含む、以下のガイダンスがあります。
- 参照資料を個々のコンポーネントに分解し、明確な視覚的および行動的特性を持たせる。
- 表面の波紋を設定して、熱い流体が表面に上昇し、カルデラの表面を乱す様子を模倣する。
- 溶岩がカルデラから飛び散り、さまざまなタイプの溶岩の粘度状態を模倣する。
- 煙の噴煙を設定して、プレイヤーの注意を引く厳しい不純物が空に上昇する様子を模倣する。


参照を分解する
信頼性のある火山を作成するためには、デザインプロセスで実際の火山の噴火を参照することが重要です。これにより、主題を明確な視覚的および行動的特性を持つ個々のコンポーネントに分解できます。たとえば、サンプルのVolcano Island - Completeゲームは、カルデラとその周囲の地形に関連するすべてのテクスチャとVFXデザインの決定を通知するためにアイスランドの火山の噴火を参照しています。

火山が噴火している様子を個々のコンポーネントに分解することは、さまざまなVFXオブジェクトを利用してそれらの実世界の対応物を模倣する方法を計画するのに役立ちます。このチュートリアルでは、サンプル火山を5つのユニークなコンポーネントに分解します。
- 表面の波紋 – カルデラの表面にある小さな溶岩の波。
- 火の粉 – カルデラから空に上昇する小さく軽い溶岩の破片。
- 溶岩の飛沫 – 火山内部の圧力によってカルデラから噴出する薄い溶岩。
- 溶岩の流れ – カルデラから流れ出る粘性のある溶岩。
- 煙の噴煙 – カルデラから空に上昇する温かい、膨らんだガス。


次のセクションでは、これらの各コンポーネントを再現するために使用できるさまざまなデザイン決定と技術の詳細な分析を提供します。これらの決定を確認し、さまざまなライティング、ParticleEmitter、およびBeamプロパティを実験することで、ライティングとVFXを利用して自分のゲームのユニークな環境要件を解決する方法を学びます。
ライティングを設定する
環境要素をゲーム内の興味のポイントにするためには、全体の環境に対してコントラストを高めて、プレイヤーが探索すべき何かとして際立たせることが重要です。たとえば、プレイヤーをカルデラに引き込むために、火山の溶岩が他の暗い環境の中で唯一の光源として輝いて見えるようにライティングソースを設定できます。
Studioは、この技術に使用できる2つの高レベルのライティングソースを提供します。
- グローバルライティング - 屋外環境全体のライティングを生成します。
- ローカルライティング - ゲーム内で配置した場所の周囲のライティングを生成します。
このチュートリアルのこのセクションでは、火山の噴火をシーン内で最も重要な興味のポイントにするために、両方のタイプのライティングソースを利用する方法を教え、環境ストーリーテリングのためにドラマチックな効果を作成します。たとえば、カスタムライティングなしの同じ最終火山が、他の明るい環境の中で目立たない危険のように感じられる一方で、カスタムライティングのある火山は、暗く憂鬱な環境の中で危険な存在のように感じられます。


ローカルライティング
ローカルライティングは、ゲーム内のローカル光源からの光です。たとえば、SpotLight、SurfaceLight、およびPointLightオブジェクトなどです。ローカルライティングは、火山に追加することが重要です。なぜなら、ParticleEmitterやBeamのテクスチャに明るさを適用できますが、カルデラとその流れる溶岩が実際の世界で環境を照らす方法をリアルにシミュレートするために、峡谷全体に十分な光を満たすことはできないからです。


このチュートリアルでは、ローカルライティングをグローバルライティングの前に設定することが役立ちます。なぜなら、ローカル光源がないと、VFXオブジェクトを設定するための3D空間を見ることができないからです。しかし、一般的なワークフローでは、VFXオブジェクトに対する変更の効果を見るために、ローカルとグローバルライティングの両方を同時に反復する必要があるため、自分のゲームのデザイン要件に柔軟であることが重要です。
サンプルのVolcano Island - Completeプレースファイルの火山のローカルライティングを再現するには:
Explorerウィンドウで、すべてのローカル光源オブジェクトを含むフォルダーをWorkspaceに作成し、フォルダーの名前をLocalLightingに変更します。
LocalLightingフォルダーに3つのブロックパーツを挿入し、それぞれの名前をLightCaldera、LightMagma、LightOutflowに変更します。
パーツを火山全体を照らす位置に移動します。
- LightCalderaをカルデラと崖の間の中心に移動します。
- LightMagmaをカルデラと溶岩流出の間の亀裂の中心に移動します。
- LightOutflowを流出が2つの流れに分かれる少し上に移動します。

各パーツに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ウィンドウで、LightingサービスのBloom子を選択し、Propertiesウィンドウで、
- Intensityを0.75に設定して、環境内のすべての色を少し暗くします。
- Sizeを80に設定して、より広いブルーム効果を作成します。
- Thresholdを0.85に設定して、環境内のより多くの色が輝くようにします。

Explorerウィンドウで、LightingサービスにColorCorrectionオブジェクトを挿入し、Propertiesウィンドウで、
- Brightnessを0.017に設定して、ピクセルの色をわずかにシフトします。
- Contrastを0.25に設定して、環境内の明るい色と暗い色の間にシャープなコントラストを作ります。
- Saturationを-0.15に設定して、環境内の色を脱色します。
- TintColorを255, 214, 143に設定して、ピクセルに明るい黄色の色合いを付けます。

- OPTIONAL空に雲を挿入して間接光を提供します。
- Explorerウィンドウで、TerrainサービスにCloudsオブジェクトを挿入します。
- Cloudsオブジェクトを選択し、Propertiesウィンドウで、
- Coverを1に設定して、空に完全な雲の覆いを提供します。
- Densityを0.08に設定して、雲の覆いを薄くします。
- Colorを136, 143, 152に設定して、雲の覆いに明るい灰色の色合いを設定します。

火山を設定する
ローカルライティングとグローバルライティングの設定が完了したので、実際の火山とその周囲の地形に関連するすべてのVFXオブジェクトを設定する時が来ました。サンプルのVolcano Island .rbxlファイル内で最終環境を正確に再現するこれらの指示に従うと、各ステップが環境にキャラクター、動き、明るさを追加するためにどのように連携しているかを観察できます。
表面の波紋
表面の波紋は、内部のマグマと圧力のかかったガスが地殻の下から上昇する結果として、カルデラの表面を流れる小さな溶岩の波です。この視覚現象は、対流の実世界の物理プロセス、つまり熱い流体が表面に上昇する際の流体内の動きを伝え、シーンのリアリズムを高めます。
表面の波紋は、プレイヤーに火山の噴火の状態に関する貴重な洞察を提供します。たとえば、マグマとガスが上昇する力が十分で、カルデラの上の溶岩の状態を乱している場合、プレイヤーは火山が沸騰するマグマで活発に噴火していると推測できるため、このゲームプレイエリアの周りで注意を払うべきです。

このプロセスを示すために、サンプルではカルデラの基部の少し下にParticleEmitterオブジェクトを使用して、暗い背景の上でゆっくりと拡大し収縮する平らで明るい粒子を放出します。これにより、粒子が自然の中で要素が動くリアルな方法に似た形で、滑らかで継続的に溶岩が攪拌される挙動を模倣できます。

サンプルのVolcano Island - Completeプレースファイルのカルデラの上に表面の波紋を再現するには:
Explorerウィンドウで、すべてのカルデラオブジェクトを含むフォルダーをWorkspaceに作成し、フォルダーの名前をCalderaに変更します。
表面の波紋のための高コントラストの背景を提供するバックドロップを作成します。
Calderaフォルダーにブロックパーツを挿入し、名前を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に設定して、1秒あたり12粒子を放出します。
Rotationを-360, 360に設定して、各粒子を円の中でランダムに向けます。
Speedを0.01に設定して、各粒子を1秒あたり0.1スタッド放出します。
LightEmissionを1に設定して、粒子を大幅に明るくします。
LightInfluenceを0に設定して、環境光が粒子の色に影響を与えないようにします。
Brightnessを15に設定して、エミッタから放出される光をスケールします。
火の粉
火の粉は、カルデラから噴出し、上昇する際に熱を急速に放出する小さく軽い溶岩の破片です。表面の波紋と同様に、火の粉は地殻の下の内部圧力が上昇していることを示し、熱い要素が溶岩の表面張力を破って圧力を解放しています。
サンプルでは、動きのブラーがテクスチャに焼き付けられた粒子を放出するためにParticleEmitterオブジェクトを使用してこのプロセスを模倣します。粒子が上昇し、ライフタイムの終わりに達すると、エミッタは粒子を1:1の比率に圧縮して円に再形成します。この技術により、粒子がカルデラから急速に移動し、空に消散する際に遅くなるように見えます。

さらに、粒子が上昇するにつれて、色、透明度、サイズが変化して温度の変化を反映します。たとえば、粒子はライフタイムの初めに大きな茶色の粒子として始まり、すぐに小さなオレンジ色、次にマルーン色の粒子に変わります。この戦略は、峡谷全体のライティングを微妙に反映し、プレイヤーの環境への没入感を高めるという利点もあります。
サンプルのVolcano Island - Completeプレースファイルのカルデラの表面から輝く火の粉を再現するには:
Calderaフォルダーにシリンダーパーツを挿入し、名前を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に設定して、エミッタから放出される光をスケールします。
溶岩の飛沫
溶岩の飛沫は、内部のマグマと圧力のかかったガスが溶岩の表面張力を破るのに十分な力を加え、火山から上に噴出する薄い溶岩のバーストです。この火山のコアコンポーネントは、火山がもはや休止状態ではなく、活発に噴火していることを判断するための最も一般的な兆候の1つです。
サンプルでは、2つのParticleEmitterオブジェクトを使用して、各粒子のテクスチャをライフタイムにわたってアニメーション化するためにフリップブックを利用しています。最初の粒子エミッタは、重くて濃厚な飛沫のように見える粒子を放出し、ゆっくりと上昇して火山に戻ります。対照的に、2番目の粒子エミッタは、軽くて薄いウェブ状の飛沫のように見える粒子を放出し、急速に上昇して火山に戻ります。


各粒子エミッタは、64フレームにわたってテクスチャをアニメーション化し、滑らかで生き生きとした物理的挙動を模倣します。1つの粒子エミッタだけを使用することもできますが、アニメーションの繰り返しが明らかになり、プレイヤーの没入感を損なうことになります。2つの粒子がわずかに異なるカスタムプロパティでフリップブックをアニメーション化すると、繰り返しを見つけるのがはるかに難しくなります。
サンプルでは、さらに軽いウェブ状の飛沫を表すために、粒子を放出するParticleEmitterオブジェクトも提供しています。この技術は、空間を動的な動きで満たし、フリップブックアニメーションの繰り返しをさらに隠します。さらに、ゲームにCreating Waterfallsからの滝が含まれている場合、異なるゲームプレイエリアのために同じテクスチャを2回再利用でき、メモリを節約し、低スペックデバイスでのパフォーマンスを向上させることができます。

サンプルのVolcano Island - Completeプレースファイルのカルデラの表面からの溶岩の飛沫を再現するには:
Calderaフォルダーにシリンダーパーツを挿入し、名前を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に設定して、アニメーションがライフタイム中に1回だけ再生されるようにします。
- 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に設定して、ほぼ毎秒1粒子を放出します。
カルデラに追加の飛沫を満たします。
SplashingLavaにParticleEmitterを挿入し、エミッタの名前をSplashFillに変更します。
SplashFillを選択し、Propertiesウィンドウで、
- Textureをrbxassetid://17082061238に設定して、軽いウェブ状の飛沫のように見える粒子を描画します。
- OrientationをFacingCameraWorldUpに設定して、カメラに向かって粒子を放出しますが、垂直の上向きのワールドY軸でのみ回転します。
- 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オブジェクトを重ねて、カルデラから遠くに移動する際の溶岩の冷却の行動特性を模倣します。
- 下層は、温かい色から冷たい色に変化する平坦な色を描画し、溶岩が温度を下げ始めていることを伝えます。たとえば、明るい赤から暗いマルーンに変わります。
- 中層は、穴のある暗い地殻のように見える黒いテクスチャを描画し、その下に光る溶岩を露出させます。
- 上層は、中層と同じテクスチャをより遅い速度で描画し、反転したアタッチメントと逆のプロパティ設定を持ちます。これにより、テクスチャが同じ方向で描画される際に完全に一致する機会がなくなり、プレイヤーが不自然なテクスチャの繰り返しを簡単に検出できなくなります。



3つのBeamオブジェクトを重ねることで、溶岩が異なる速度で流れているように見えるパララックスの錯覚を作り出します。これは、実際には3つの2D画像であるにもかかわらず、溶岩の表面上と下に乱流があることをプレイヤーに知らせます。

サンプルのVolcano Island - Completeプレースファイルのカルデラから流れる溶岩を再現するには:
Explorerウィンドウで、すべての流れる溶岩オブジェクトを含むフォルダーをWorkspaceに作成し、フォルダーの名前をFlowingMagmaに変更します。
FlowingMagmaフォルダーにブロックパーツを挿入し、名前をMagmaRiverBeamに変更します。
MagmaRiverBeamをカルデラの端の少し下に移動します。

カルデラから流れる溶岩ビームのテクスチャを描画するためにアタッチメントを設定します。
- MagmaRiverBeamにアタッチメントを挿入し、アタッチメントがカルデラを指すように回転させます。
- MagmaRiverBeamに別のアタッチメントを挿入し、亀裂の分岐に向けて配置し、アタッチメントが地面に向かうように回転させます。

MagmaRiverBeamにBeamを挿入し、名前をMagmaに変更します。
パーツのアタッチメントをMagmaに割り当てます。
- Explorerウィンドウで、Magmaを選択します。
- Propertiesウィンドウで、
- Attachment0をカルデラの端のアタッチメントに設定します。
- Attachment1を亀裂の分岐のアタッチメントに設定します。ビームは2つのアタッチメントの間にデフォルトのテクスチャを描画します。

ビームの視覚的外観をカスタマイズして、流れる溶岩のように見えるようにします。
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に変更し、アタッチメントを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- 時間 = 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 オブジェクトを使用して、上昇するにつれて色が変わる細い煙の蒸気のように見える粒子を放出します。この技術は2つの目標を達成します:
- 背景のクレーターのシルエットを分断し、火山の噴火の周りに視覚的な興味を生み出します。
- 煙が環境からの光を受け入れているように見えながら、煙が空気中の不純物を燃やしているかのように暗い存在感を放つことを可能にします。

サンプルの 火山島 - 完全版 プレースファイルから火口の煙の噴煙を再現するには:
Caldera フォルダに ブロック パーツを挿入し、名前を SmokePlume に変更します。
SmokePlume を火口の下に配置し、火口の表面積にほぼ合わせてスケールします。

SmokePlume に ParticleEmitter を挿入し、エミッターの名前を Smoke に変更します。
Smoke を選択し、プロパティ ウィンドウで、
- Texture を rbxassetid://16830673704 に設定して、厚い煙のように見える粒子をレンダリングします。
- Color を、粒子が火口から空に向かって環境の光をシミュレートする色のシーケンスに設定します。最初は黒、次に薄い桃色、最後に灰色になります。
- 時間 = 0, RGB 値 = 0, 0, 0
- 時間 = 0.374, RGB 値 = 195, 104, 76
- 時間 = 0.469, RGB 値 = 225, 121, 86
- 時間 = 0.709, RGB 値 = 111, 111, 111
- 時間 = 1, RGB 値 = 113, 113, 113

- Transparency を、粒子が透明から始まり、寿命の初期に完全に不透明になり、寿命の終わり近くで再び透明になる数値シーケンスに設定します。
- 時間 = 0, 値 = 1
- 時間 = 0.0622, 値 = 0
- 時間 = 0.845, 値 = 0
- 時間 = 0, 値 = 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スタッドに増加させます。わずかな変動のウィンドウを持たせます:
workspace.Caldera.SmokePlume.Smoke.Size = NumberSequence.new{NumberSequenceKeypoint.new(0,40,5), NumberSequenceKeypoint.new(1,100,15)}