-Blenderで煙シミュレーションをするときの手順と注意点-

3. 応用

粒子からの煙

ポリゴンからではなく粒子から煙を放出することができます。
Emitter オブジェクトに粒子系を設定して、Emitter から粒子が出てくるようにします。

系の名前をとりあえず SmokeParticle とでもしておきます。
Flow Source を Particle System として、SmokeParticle を選択します。
Emitterを横向きに配置して粒子を放出すると、そこから煙が出てきます。
ある程度勢いよく粒子が噴出するように、Velocity 設定の Normal を4程度にしました。

粒子から煙が立ち昇っているのがわかります。
煙の発生密度が少し薄いですが、それらの調整はパーティクルの数などで調整が行えます。
色を調整すれば、寒い日にパイプからお湯が噴出するときの湯気みたいなものに使えそうです。

貧弱な納豆ミサイル

粒子から煙を放出することから、粒子をミサイルに見立てて、煙の帯を残してミサイルが飛ぶいわゆる納豆ミサイルが実現できます。
しかし、満足のいくような表現までもってくるのはなかなか調整は難しそうで…

粒子は、他のオブジェクトの形状で表示するということができます。
(というか2.8系では純粋な点としてのパーティクルは表示できず、他のオブジェクトの形状を表示するのが標準の表示法になります)

y軸方向を向いた円筒を作成してミサイルに見立て、左の図のようにミサイルから煙が出るようにしてみます。
先の例のように大量に(1000個も)放出するのも変なので、
粒子数(Number)を減らし、斜め上を向いたEmitterから数十個のミサイルを放出させます。
ミサイルのひな型として、まず邪魔にならない場所に円筒を配置します。
ここでは名前を Missile にしました。

粒子として表示するときは基準が y 軸方向なので、編集で y 軸方向を向くようなメッシュ構造にしておきます。
また、打ち出したミサイルがDomainをうまく通過するように Emitter の位置や角度を調整します。
Emitter の粒子設定の Render 設定から、Object として表示するように選択します。
Object 設定でどのオブジェクトで表示するかで Missile を選択するることで、粒子として Missile が表示されます。

スケール(拡大縮小)の設定で表示サイズを変えることができます。
初期値だと0.05倍で随分小さくなります。
ひな型を大きく作って縮小表示するか、ひな型を等倍で作っておいてスケールを1にするか、どちらかが通常の設定になるでしょう。
粒子の速度方向を向くようにするには Particle の設定の Rotation(回転)の設定をする必要があります。
Dynamic(動的)にチェックをして Velocity/Hair (速度/ヘアー) を選択して、粒子の速度方向を向くようにします。
これでシミュレーションを実行すると、ミサイルが通過した点に煙が配置されるわけですが…
ミサイルの移動速度が早いと、フレームが進む間にミサイルが大きく移動するので、
煙が出現する位置が飛び飛びになります。

あらー、シミュレーションのボックスの精度が丸見えで、これはどうしてくれようかという状態です。
Emitter の設定で、Sampling Substeps の値を大きくすると、
ミサイル粒子が移動するときに、フレームとフレームの間を補間して煙を出してくれるので、煙が滑らかにつながってくれます。
Substep 設定をした場合としない場合の比較です。
高速移動時にはSubstepの設定が必要なことが明らかです。

2.8系列になってからしばらくの間、流体のSubstep関係が機能しなくなっていたのですが、
2.82になって完全復活したようです。

動画作例

シミュレーションを用いた動画作成時の注意点ですが、
現時点(2.82)では、2.79時点よりもプレビューで行ったシミュレーションがレンダリング時にも同一の結果になるかどうかは、若干安定性が落ちるようです。
(プレビューで見たものと、レンダリングだと違う絵になるということがあります)

シミュレーションをベイクしてしまえばプレビューとレンダリングで違いがなくなるので、ベイクしておくことが推奨です。
シミュレーションが複数走っている場合も、
どれかの設定で、Bake All Dynamics(全物理演算をベイク)すれば大丈夫です。
先ほどのミサイルからの煙にInitial Velocity(初期速度)を付けて、噴出に勢いをつけてみます。
Initial Velocity にチェックをすと、煙の発生源の速度にしたがった初期速度を持つようになります。

Domain の形状や粒子の数や速度、煙の濃さを調整します。
Initial Velocity(初期速度)をマイナス1.5にして、逆方向に煙を噴出するようにしました。
だいぶ勢いよく煙を噴出するミサイルになりました。
Emitter 側の Flow Type (フロータイプ)の設定を、Smoke のみではなく Fire + Smoke にすると、温度と炎部分の計算もなされます。
この作例を作る際に手間取ったのですが、
炎はある程度以上のサイズで生成しないとすぐに消えてしまうようです。
粒子からの発生だと、そのままだと1ボクセルの炎になってしまうので、ある程度大きなサイズを設定しておきます。
また、初速をある程度以上大きくすると、炎がすぐに掻き消えてしまうようです。
この作成は、初速を0にして作成しました。

この例で使ったシェーダーは次のようになっています。


Volume Info の Flame のソケットから、炎の領域が0から1までの変数として得られます。
それを使って、Mix ノードで煙シェーダーと、炎シェーダーを混ぜました。

炎ノード内の Temperature(温度) と、Blackbody Intensity(黒体の強度)で発光の程度を調整していますが、
ここの設定はあくまで黒体による発光の強度のみに反映するようで、色は Blackbody Tint(黒体のチント)で指定するようです。
Blackbody Tint の色を設定しないと、炎の部分は白く光ります。

さらに発展として、黒体放射の色を得る Blackbody(黒体)ノードと Attribute(属性)ノードの temperature などを利用して温度に応じた色を設定すれば、
よりリアルな色合いを得ることができるでしょう。

※)この作例を作った2.82の時点では、煙と違って炎の部分は subframe の設定がうまく効いていないように見えます。
(ミサイルの軌跡にそって飛び飛びの炎の塊が並ぶようになってしまっています)
今後、炎も subframe を設定すれば滑らかに繋がるように改善されていくことを期待しましょう…

その他いくつかの設定

炎を含むシミュレーションと、それを表示するシェーダーがあるので、立ち上がる炎をもとに関連した設定をいくつか見てみます。

ミサイルを飛ばすようなEmitterから、また板から出てくる煙に戻し、タイプを Fire + Smoke にしました。
Emitter 側の設定の Fuel (燃料)は文字通り煙と一緒に生まれる炎の量を決定します。

そのほか、Initial Temperature (初期温度)を負の値にすると、(ドライアイスの様に)冷たく下に落ちる煙が表現できます。
Fuel が 1 の場合です。
比較的静かに炎が立ち上っています。
記事を書くために試したのですが、冷たく下に落ちる煙を作れるのは Flow Type が煙の時だけで、炎があるときは冷たい煙にはならないようです。
冷たい炎は無いということでしょうか。
Fuel を 5 に設定しすると、炎が大きく立ち上りました。

(以前に煙シミュレーションで同様の変更を行った場合には、
単純に煙の中の炎の領域が大きくなっていただけですが、派手に燃え上がるようになっています。
燃料が燃えて発生する熱などが考慮されているのでしょうか?)
今までは煙は Domain からあふれるとそのまま消えてしまいました。
Domain の Border Collisions (ボーダーコリジョン)設定で、煙を閉じ込めることができます。
密閉した室内で火を焚いたようなことになります。
(今回は下面を開けておきましたが…)
そのほか、四方を覆って上下を開放すれば、煙突効果で良く燃えることになるでしょう…

inserted by FC2 system