vop pyro smoke color

ここでは、Pyro シミュレーション時のスモークの色を VOP を元にしたランプパラメータで調整する方法を紹介する。

使用したビルド: 15.5.717
シーンファイルへのリンクは一番下にあり。

1. 元シーンの作成

Torus に対し Flames を追加。詳細はこちらの#1。

2. カラーボリュームの作成

pyro ボリュームからシェーダに直接データが渡るようにアトリビュートを追加する。

  1. pyro_import の中に入る。

      中には、import_pyrofields と import_pyro_visualization の二つのノードがあり、前者にレンダリングフラグ (紫) が、後者に表示フラグ (青) が設定されている。つまり、ビューポートには import_pyro_visualization の内容が表示されるが、レンダリング時には import_pyrofields の内容が使われる。
  2. import_pyrofields の出力から TAB->Delete を作成。delete1 が出来る。
    1. Group フィールド横のプルダウンリストから density を選択。
        @name=density
        という値がフィールドに設定される。
    2. Operation を Delete Non-Selected に設定する。
    3. Number タブ以下の Enable をオフにする。
    これにより、density (密度) 以外のデータが削除された。これがRGBの各要素になる。
  3. delete1 の出力から Merge ノードを作成 (merge1)。接続をさらに2度繰り返し、delete1 と merge1 の間の接続が合計3本となるようにする。

    これにより density を3度コピーしたことになる。
  4. merge1 の出力から Name ノードを作成 (name1)。
    1. Number of Naming を 3 に
    2. その下にできた3つの Group と Name のペアに以下のように入力する。
      • Group: 0
      • Name: Cd.x
      • Group: 1
      • Name: Cd.y
      • Group: 2
      • Name: Cd.z
      Cd は (Color diffuse) の略。x, y, z は、便宜上、RGB のこと。
  5. 一番上流の import_pyrofields の出力から Merge ノードをもう一つ作成 (merge2)。この merge2 に name1 の出力も接続する。

    こうすることにより、元データに Cd 三連値が追加されたことになる。

3. Volume VOP の追加

  1. VOP ノード作成する前に、/shop/flames マテリアルに行き、General タブ以下の Density Scale を 1 にする。
      以下の手順は Render ビューでレンダリングしながら行うと良い。
  2. 上の name1 の出力から Volume VOP ノードを作成。
  3. 併せて、volumevop1 にレンダリングフラグ (一番右の表示フラグを Ctrl クリック) を指定しておく。
  4. volumevop1 をダブルクリックするなり、'i' キーを押すなりして中に入る。
      中には、volumevopglobal1 と volumeoutput1 の二つのノードがある。VOP の構造の基本的な説明はこちら
  5. TAB-> Bind で Bind ノードを作成 (bind1)。
      Bind ノードは、グローバル変数リスト volumevopglobal1 にリストされていない値をこのノードの外から取って来るためのノード。
    1. Name を temperature
    2. Type は Float のまま
  6. TAB -> Bind Export ノードを作成 (bind2)。
      Bind Export ノードは、実は Bind ノードと同一ノードタイプで、Export パラメータが "When Input is Connected" と設定されているのが違い。つまり、入力が接続されていれば、値をノードの外に出す。つまり、volumevopoutput1 に設定されていないアトリビュート値を出力することが可能になる。Export を "Never" とすれば Bind ノードになる。
    1. Name を Cd
    2. Type は Color (color)
  7. bind1 と bind2 を接続。

      これから他のノードを接続していくが、これで temperature をこのノードの外 (つまりは name1 ノードから) 持ってきて、Cd (色)として出力することとなる。この volumevop1 にはレンダリングフラグが設定されているので、レンダリング時にそういう評価が起きる。
  8. TAB-> Ramp Parameter を実行。作成された ramp1 を bind1 と bind2 の間に挿入。
  9. ramp1 のランプウィジェットは一つ上の volumevop1 に露出されるので、'u' キーなどで上に上がり、ランプの色を変えてみる。

      レンダリング画像をくらべるとこんな感じ。

      左が元画像、右がランプで調整した画像。
  10. TAB->Fit Range を実行。できた fit1 を bind1 と ramp1 の間に挿入。
  11. Source Min と Source Max の値を調整してみる。
      このパラメータ二つでランプで設定した色の広がりを調整可能。
  12. ランプと併せて一緒に調整するのであれば、それぞれのスライダの右脇にあるギアアイコンをクリック、Promote Parameter を実行。
  13. 最終画像 (64フレーム目) はこちら。

シーンファイル:

2 件のコメント: