Blenderでお手軽に炎と煙を出すシミュレーションをし、黒体放射の色を使った炎マテリアルを作ります。見た目だけは本物っぽくするって感じです。
Blenderの物理演算のFluidは流体(液体・気体)シミュレーションができる機能ですが、きちんと動きや燃え方を制御しようと思うと難しいです。最低限の設定で見た目リアルっぽい炎を出すところから始めてみるのはどうでしょうか。
この記事は、Blenderの物理演算Fluidで煙・炎を出してマテリアルをつける方法について書いた初心者~中級者向けの記事です。
難易度
※Blender4.4で作業しています。4以上ならあまり変化はないと思いますが、旧バージョンだと設定が異なっているかもしれませんので注意してください。
シミュレーションを始める準備
炎、煙の発生源のオブジェクトとしてUV Sphereを追加します。
画面上部のObjectタブからメニューを開き、
Quick Effects > Quick Smoke
をクリックします。

自動で物理演算設定をつけてくれるQuick Smoke
Quick Smokeを1クリックするだけで、
- Smoke Domain
その物質の周りに出る炎・煙の演算をする領域 - Smoke Domainのマテリアル
煙や炎につけるマテリアルのノード(簡易的なもの) - 物理演算
簡易的な煙が出る基礎的な設定をつけたもの
などをつけてくれます。これだけで簡易的な煙が出ます。
DomainとFlow
物理演算の設定のトップにFluidのTypeがあります。今回使う以下の二つが自動的に設定されます。
- Domain(ドメイン)
流体シミュレーションが起きる“箱”のような領域 - Flow(フロー)
煙や水などを出す発生源

Timelineの再生を押すと煙が出るシミュレーションが再生されます。
右図はレンダーエンジンをCyclesにしたもの。(レンダリングビューとソリッドビューなど、ビューポートによって見た目が異なるので注意してください)
※今回は見た目をちょっとリアルにしたいのでCyclesを使います。

デフォルトのSmoke Domainは小さくて、すぐ煙が天井に届いてストップしてしまうので、8~10倍くらいに大きくします。(煙がおかしくなった場合はタイムラインを1に戻してください)
煙や炎は上昇していくので、Flow(球)が下側にくるようDomainの位置を調整してください。(いつでもDomainの大きさは調整できるので適当でいいです)

シミュレーションの設定
PhysicsプロパティのFluidの設定を変更して、炎と煙を少しリアルに調整していきます。
FlowとDomainそれぞれ設定項目があります。
Flow(炎・煙が出る球体)の設定
炎が出るようにする
UV Sphereを選択して、PhysicsプロパティのFluidの設定を変更していきます。
❶Settings > Flow Typeを
Fire + Smokeにすると炎が出るようになります
❷Initial Velocityにチェックして、Initial Zを5に増やします。
火の勢い、煙が上昇していく速度を増加させます。

※マテリアルがちゃんとついてないのでSolidビューでしか炎は見えません。
Domain(領域)の設定
Domainも同様に選択して、Physicsプロパティで設定を変更していきます。
❶Resolution Divisions を 100に上げる
全体の解像度が上がります。炎や煙がリアルに細かく表現されますが計算が重くなります。(PCが動かないという方は50など徐々に上げましょう)

❷Adaptive Domainにチェック
ドメインを煙などが出ている部分だけにしてくれるので無駄な計算が減ります。(ドメインサイズまでしか広がりません)

❸Gas > Noiseにチェック
炎や煙が細かくなります。

❹Fire > Reaction Speed 0.2に下げる
値が小さいほど炎のサイズが大きくなります。

煙の形が対称的になっているのが不自然なので、炎のサイズを変えることで自然になります。

ベイク
PCが重くて再生に時間がかかるようになるときは、一回シミュレーションをベイクすると、何回でもすぐ再生できるようになります。
Cache > Type をAllにするとベイクできるようになります。
Bake Allのボタンでベイクがスタートし、画面下部で作業のパーセンテージが出てくるので、終わるまで設定を変更したりしないでください。

Frame Start, Endでどこからどこまでベイクするか設定できます。最初はEndを100くらいにしてベイクしてみるとどのくらいのスピードでベイクされるかわかります。
物理演算の設定やドメインの変更などした場合はFree Allでキャッシュデータを削除し、もう一回ベイクをやり直してください。

PCのスペックによってはかなり重くなって、ベイクしても再生が遅かったりします。自分のPCでも遅いです。そして、いろいろ操作してるうちにバグったのか、炎がおかしくなったり、煙が下の方にでてきたりします。そういうときはオブジェクトを消してもう一回やり直すとか、それでもダメなときはもう新しいファイルからやり直してみた方がよいかもしれません…。
マテリアルをつける前の準備
マテリアルを付ける前にライト、レンダリング設定などを調整します。
- レンダーエンジンをCyclesにする
- ライト(Sun)を追加:Strengthを5程度にする
- HDRI背景画像などを設定する
- View TransformをFilmicにする
炎の黄色い光が、Agxのままだと白く飛んでしまうので、Filmicにするのが大切です。

Lookは色を設定するときに決めていきます

マテリアルを設定する
Domainを選択し、マテリアルシェーダーのエディタを開くと、すでにPrincipled BSDFノードがついています。
他にもVolume Infoノードを使うので出しておいてください。
このVolume Infoノードは、物理演算の設定で入力した値を元にDensity(密度)などを出力しているノードです。このシミュレーションした炎や煙のデータを出してくれている便利なノードです。

Volume Infoノードから出ている値について
Volume Infoノードの情報を利用して色をつけていくんですが、それぞれどんなデータを出力しているのか見ていきます。
Emission Colorをオレンジ色にし、Emission Strengthに各出力をつなげて、どの領域に色がつくか見てみます。

- Colorは色情報なので飛ばします。
- Densityは中心から周辺に向かって値が小さくなっています。全体に色がつきます。
- Flameは炎が出ている場所だけ色をつけてくれます。
- Temperatureは温度が高い場所から低い場所へ1~0の数値が出力されています。

Color
Colorにも出力はあります。
例えば、Flow(球)のSmoke Colorを変化させ、Volume InfoノードのColorをColor, Color Attributeの両方につけると、煙に色がつきます。
物理演算の設定を構うことになるので、色を変更するごとにベイクしなければならず、全く便利ではないので使用しません。
ただ単にPrincipled VolumeのColorで煙の色を好きな色に変更します。普通の煙ならグレーです。

DomainにもSmoke Colorの設定がありますが、ほぼ変化しなかったです。
ノード設定
下図のように設定します。
(これが絶対に正しいのではなく、自分なりのやり方です。)
Attributeとついているところは基本的にVolume Infoノードからの値を使える場所です。(値の名前がすでに入力されているところはすでにその値が入っていますが、わかりやすさのためつないでいます。)

❶Color…煙の色、グレーにします。
❷Color Attribute…上記で書いていますが、カラーの属性値を使えますがあまり便利じゃないので使いません。
❸Density…1.5にします。ボリュームの密度を調整できます。
❹Density Attribute…Volume InfoからのDensity情報を使います。周辺に行くほど密度が薄くなっていく効果が出ます

❺Anisotropy…光が散乱反射する方向を変更できますが、デフォルトでOK
❻Absorption Color…光が吸収されたあとの色。若干煙に色がつきます。暗い赤にします。
➐Emission Strength…温度の強さによって光らせたいのでVolume InfoのTemperature出力をつなぎます。
Float Curveで右上の値を少し調整すると白い部分が小さくなり、コントラストが上がります。下図は本物の火ですが、黄色から赤へのコントラストに近くなるよう調節しています。


❽Emission Color…炎の色にしたいのでVolume Infoの温度からBlackbodyノードで色を取得します。
例えば0~10000だと右図のような色が出ます。今回は火なので温度低めで1500をかけています。

❾Blackbody Intensity…黒体放射の強さで、物理的に正確にするには1を設定します。➓Blackbody Tint…黒体放射に少し色をつけることができます。今回はつけません
⓫Temperature…黒体放射の温度をケルビンで表します。赤い炎は温度が低めなので1000KそのままでOKです(Emissionが強いので今回はあまり見えない)
⓬Temperature Attribute…Volume InfoのTemperatureをつなぎます。(Emissionが強いので今回はあまり見えない)
View TransformをFilmicにして、LookをHigh Contrastにしたのが右側の画像です。
動画にする場合、かなりレンダリングに時間がかかるのでサンプル数を下げたり、ノイズ閾値を上げたり、工夫してレンダリング時間を短縮することができます。

まとめ
どちらかというとマテリアル設定の方が難しいことをした気がするのですが、物理演算も重くて何度もやってみるというのが難しかったかもしれません。
マテリアル設定では、Principled Volumeが設定項目が多いことと、黒体放射を使うところがあまりやったことがなくて大変でした。色を自分で設定しなくても、何度ぐらいの炎かを設定することでリアルな色を出してくれるのは便利です。
煙の量や炎の量、スピードなど物理演算の設定で調節できますので、いろいろいじって自分なりのいい感じの炎を作ってみてください。