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

1. 容器の設定と、煙を描画する設定

■環境を設定する。

物理シミュレーションは、結果をキャッシュファイルにどんどん保存していきます。
RAMディスクのある環境であれば、負荷の軽減とパフォーマンスアップのために、RAMディスク上で作業することを強く推奨します。

キャッシュファイルは.blendファイルと同じフォルダ内に作られます。.blendをRAMディスク上に置くと書き込みパフォーマンスが上がりますが、ただし、最後に普通のディスク上に保存するのを忘れると悲惨なので気をつけましょう。
(設定を弄ってキャッシュだけをRAMディスク上に書き込むこともできます。)

■Domainになる箱を作る。

まずは煙を充満させるための箱をつくります。名前は何でも良いのですが、Blenderと共通の用語を使った方がわかりやすいので、名前をDomainとしておきます。(領域という意味)

(四角以外の形状だとどうなるかは未確認)
シミュレーションをする容器がこの箱であるということを設定するために、箱の物理シミュレーションの設定をSmokeにして、Domainを選択します。
Domainにすると煙の計算ができるようになりますが、まだ中身の煙は表示されません。マテリアル設定をします。

マテリアルの名前は Volume とでもしておきます。通常の設定の Surface (物体の表面の見た目の設定)ではなく中身を表示するための Volume に設定します。

■その他のオブジェクトの設定をする。

この状態だと、灰色の煙がDomainの中に充満している状態になるはずです。床やその他のオブジェクトを配置して、レンダリングして様子を確認してみましょう。
サンプルの図のオブジェクトにはでこぼこなどつけてあります。

あらっ、なんということでしょうか、煙はありますが Domain の箱がまったく光を通していないようです。

これは、Domain の設定を急いで調整しなければ…と思いがちですが、実は影を落とされる側の床や球が、簡易的な影の計算をする設定になっているために起きています。

これは、「一度でも物体の表面を光が通過したら影」という判定をしていて、Domainのように光を通す物体を通ってくる光を扱えていません。
そのため、煙の影が落ちる可能性のある物体側のマテリアル設定の Shadow … だいぶ下の方にあります … の設定の

Recieve Transparent (透明な物体からの影を受ける)

を有効にします。
3. これで、半透明な影が落ちるようになりました。

…ってことはしかし大量にマテリアルのあるシーンで煙を使おうとすると、
全部設定を変えないといけない…?

■Domainの透明はz-transparencyで。

Volumeに設定されたマテリアルの透明に関する設定にはz-transparencyとRaytraceがあります。



語感から、Raytraceの方が正確で、z-transparencyはz-bufferみたいな高速化のための誤魔化しをしているのかなーと思いきや、どうやら半透明がらみの問題はz-transparencyの方が少ないようです。

自分が遭遇したのは、Raytraceの設定にすると、Domainの向こうのマテリアルにNormal Mappingをしていると、光が届かない(もしくはノーマルの計算が変)というものです。(2.67時でも確認)

なんとなくRaytraceの仕組みを考えると、Domainの表面と、オブジェクトの表面のどちらの設定からノーマルの計算をするか、とかが変になっているような気がするが…

この他、半透明とRaytraceにはいくつか問題が発生するようなことが検索すると見つかります。英語だから詳細はわからんですが、とりあえずz-transparencyにしておくのが良さそうです。

■テクスチャの設定。

テクスチャを設定します。VolumeTexなど適当な名前をつけて、Typeを Voxel Data にします。

次に、Voxel Data の Domain Object を、箱のオブジェクト名(今回はDomain)にします。また、Source を Smoke(煙)にしておきます。

これで、Domainの中で煙シミュレーションをすると、煙の濃さに応じた濃度で表示ができるようになります。
SourceをHeatにすることで、煙の温度に応じた表現もできます。また、Source を Flame (炎)にすると、炎部分の表示になります。
次にテクスチャ Influence (影響) を Density(濃度) に設定します。
その他、Emission (発光) や Reflection (散乱) などへ影響させるようにもできますが、煙の場合はまずは濃度へ影響させるようにするのが基本でしょう。

現在マテリアルの基本濃度の設定が1なので、箱の中に煙が充満しています。
Blend: の設定を Multiply (掛け合わせ)にすることで、煙の濃度が0のところが0、1のところが1というようにちゃんと濃淡のある表示がされます。
逆に、マテリアルの基本濃度を0に設定しておいて、テクスチャのBlend: を Add(加算)にすることでも、同じことになります。

これで、容器の設定と、描画の設定ができたので、煙シミュレーションを実行してみましょう。

inserted by FC2 system