2014年4月12日土曜日

3D落書き : Blenderで簡単炎表現

Blenderには炎をシミュレーションする機能があります。 リアルな炎を作ろうとしたらパラメータの設定とか色々苦労しそうですが、落書きに使う程度ならちょっとした設定でできます。 それを使って描いた落書きがこちら。

bokete.jpにお題として投稿してみました。 興味がある方はどうぞ。


DAZ Studioで人体モデルにポーズを付けてBlenderで炎追加&レンダリングです。 こちらのサイトを参考にして描きました。

Blenderで炎をシミュレーションする方法について、備忘録代わりのメモを書いたので投稿します。 参考サイトでは広範囲を扱っている代わりに端折ってる記述が多いので、それを補いつつ、自分の使った部分だけを説明。 試した環境は次の通りです。

  • Windows7 home 64bit
  • Blender 2.70
  • DAZ Studio 4.6

説明はUIをカスタマイズしていないBlenderが対象です。


まずはBlenderを立ち上げて初期データにある立方体をDeleteキーなどで消します。 レンダラーはデフォルトのBlenderレンダーです。

炎の発生源となるメッシュを何でもいいから追加。 この例では参考サイトに倣って平面にしましょう。

説明し易いように名前を変えておきます。 右上のアウトライナーパネルで追加した平面をダブルクリック。 「炎発生源」という名前に変更しました。

3Dビューのオブジェクトメニューからクイックエフェクト - クイック煙を選択。 Smoke Domainが追加されます。 また、炎発生源のオブジェクトには物理演算の煙フローが追加されています。

この例で扱いたいのは炎だけなんですが、Blenderでは炎と煙はセットで物理シミュレーションされます。 炎だけにしたいときでもまずクイック煙を追加して、後で煙の要素を消します。

追加されたSmoke Domainは炎と煙の広がる範囲となります。 こういう制限がないと煙が無限に発生し無限に広がり、その分計算量も増えていきます。 それを防ぐため、炎と煙の広がる範囲を決めています。

炎発生源とSmoke Domainの2つのオブジェクトのパラメータを設定していきます。 まずは炎発生源のオブジェクトを選択し、プロパティパネルの物理演算、煙セクションでフロータイプを火炎に変更。

その下の「煙のフローの詳細設定」セクションも設定しますが、順番的に後回しです。

Smoke Domainの設定をするのでオブジェクトを選択。 プロパティパネルの物理演算で煙の炎セクションを開きます。

パラメータの意味は次の通りです。

  • 反応
    • 速度 : 燃料を表す粒子が燃えて光を出す速さ? 数値が大きいほど燃料が速く燃えるので火柱になる前に燃え尽き、炎は小さくなります。 遅いほど燃料の粒子が熱で上昇したあとに燃えるので、炎は大きくなります。
    • 煙 : 煙の量。 炎発生源のフロータイプで煙の文字がなくても、デフォルトの設定だと多少は煙は出ます。 煙を全く出さないなら0にしましょう。
    • 渦度 : 炎が渦上に揺れ動く度合い。
  • 温度
    • 発火点 : 燃料を表す粒子が発火する温度。シミュレーションの進み方も変わるし、炎の色にも関わります。
    • 最大 : 炎の最大温度。

ここでは、とりあえず煙の量だけゼロにしましょう。

次に、Smoke Domainのマテリアルを設定します。 プロパティパネルを確認するとデフォルトで「Smoke Domain Material」というのが用意されています。

この例は簡単な炎のシミュレーションということで、最低限のパラメータのみ設定します。 とりあえず計算精度セクションを見ましょう。 そこのステップサイズの値を小さくすれば炎の画質をよくできます。 計算精度のセクション名は英語だとIntegration(積分)です。 シミュレーションのどこかに数値積分が使われていて、その精度の設定だと思われます。 どんな数値積分が使われているか分かりませんが、すごく小さくすればすごくよくなるという物でもありません。 小さくすると計算時間も増えるので、絵の目的に合わせた値を吟味しましょう。

計算精度セクションの下にオプションのセクションがあります。 そこのレイトレースのチェックを外します。 これはSmoke Domainオブジェクトの影がレンダリングされるのを防ぐためです。

今までの設定でどういう炎になるのか見てみましょう。 下のタイムラインパネルでカーソル位置を0または1にしてから再生ボタンを押すとシミュレーションが始まります。 (シミュレーションが実行されるのは初回、またはパラメータ変更後です。 それ以降は前回のシミュレーション結果の再生になります。)

こんな風になりました。

炎が均一に発生しているせいで揺らめきとかムラとかがありません。 これじゃおかしいので炎の発生にムラを出しましょう。

炎の発生にムラを出すには炎発生源オブジェクトのプロパティパネルの物理演算、「煙のフローの詳細設定」セクションでテクスチャを使用するといいようです。 色ムラのあるテクスチャを用意すると、明るい部分ほど炎が発生し易くなります。 このテクスチャをアニメーションさせれば炎に揺らめきが生じます。

まずはテクスチャの用意。 炎発生源オブジェクトを選択し、テクスチャの項目に移動。 TexDrawの下に新規テクスチャを追加します。 TexDrawってのが何なのかは分かりませんが、マテリアルに属しないテクスチャを作るときはこうするみたいです。

TexDrawが出てこない場合、上の図中のBrushの真上にアイコンが並んでいるので、そこから市松模様のアイコン(赤丸で囲ってあります)を選びます。 で、新規ボタンをクリック。 説明し易いように名前を変えておきましょう。 直接日本語が入力できなかったのでテキストエディタで「炎発生パターン」と書いてからコピー&ペーストしました。

テクスチャに使うのはそれっぽければ動画でも何でもいいのですが、ここでは参考サイトで使っているテクスチャを簡略化したものにしました。 というわけで、テクスチャのタイプはクラウドのままです。 で、色セクションのコントラストを2倍にします。 参考サイトはカラーランプの設定を細かくやってるけど、この例ではこれだけ。

テクスチャができたら物理演算、「煙のフローの詳細設定」セクションでさっき追加したテクスチャを選択します。

そのままではテクスチャはアニメーションしないのでオフセットの数値を動かしましょう。 アニメーションの説明は参考サイトに丸投げするとして、ここでは操作の概要だけ説明します。 タイムラインパネルで現在のフレームを1にして、プロパティパネルの「煙のフローの詳細設定」セクションのオフセットがゼロなのを確認して右クリック。

こんなメニューが出るので「キーフレームを挿入」をクリックします。

オフセットの項目がアニメーションに使われる目印として、テキストボックスの色が変わります。

同じように、最後のフレームでもオフセットの値を入力してキーフレームを挿入します。 この例では250フレームでのオフセットを5にしました。

ここではアニメーションの区間とか炎発生源オブジェクトのサイズなどがデフォルトなのでこんな値ですが、実際に使う値は色々試しながらアニメーションさせていい値を探しましょう。

試しにここまでに書いたパラメータを色々変えてレンダリングしたらこんな感じになりました。 (重いので201~250の奇数フレーム抜粋)

まぁ、それっぽいかな?

上のレンダリング結果を見て分かるように、このままだと炎発生源オブジェクトが墨のような見た目でレンダリングされてしまいます。 邪魔ですよね? 消しましょう。

やり方は単純に炎発生源オブジェクトにマテリアルを追加して、透過セクションのパラメータを設定するだけです。

セクション自体のチェックボックスをチェックして、アルファとスペキュラをゼロにします。

これで炎発生源オブジェクトは見えなくなりました。

最後に、炎の色を設定します。 Smoke Domainのテクスチャで炎の色を変えられます。 Smoke DomainにはデフォルトでSmoke DensityとFlameのテクスチャが用意されています。 このテクスチャが見つからないときはマテリアルのパネルで「Smoke Domain Material」を選びましょう。 Flameの色セクションを変更すると炎の色を変えることができます。

カラーランプの説明は面倒なので、これも参考サイトに丸投げ。 色々端折って必要な部分だけ説明を書きます。

下の図のこれでカラーストップを選択できます。

これをクリックすると色を選択できます。

黄色い炎にしたかったらカラーストップ1をオレンジ、カラーストップ2を黄色にするとか、ガスの青い炎にしたかったらカラーストップ1を濃い青、カラーストップ2を明るい青にして全体的にやや透けるようなアルファ値にするとか調整しましょう。

炎の色を変更しても3Dビューのシェーディングがソリッドのままだと反映されないので注意。 色を確認するなら、実際にレンダリングをしましょう。

炎の色を変えると、レンダリングしても炎が出なくなる事がありました。 Blenderが不安定なせいかもしれないし、計算量のせいかもしれません。 そんな場合はベイクすればレンダリングできました。 ベイクするには、まず.blendファイルの保存をする必要があります。 そしてSmoke Domainオブジェクトの物理演算プロパティ、煙のキャッシュセクションでベイクボタンを押します。

ベイクの処理には時間がかかります。 できることなら炎の色はそれ以外の設定での試行錯誤を終えてから決めた方がいいかもしれません。