Game Dev Explosion Looping

このページでは Game Development Toolset の VFX Samples の一つである Explosion Looping について紹介する。Game Development Toolset のダウンロードとインストールに関してはこちらを参照。

使用したバージョン: Houdini FX 15.5.532

はじめに

このアセットの元になっている考え方は Peter Quint 氏の Loop Flame というビデオ (12分9秒、英語) だと思われる。これを見ると、このアセットの仕組みがよりわかり易い。

1. シーン概要

  1. Houdini 起動後、ビューポートにカーソルがある状態で TAB キーを押しメニューを表示。 Game Development VFX Samples から Explosion Looping を選択。Enter キーを押して確定。
      原点にアセットが展開され、ネットワークビューには、ExplosionLooping1 ノードができる。
  2. ビューポート内右上、黄色で "no cam" と書いてあるところをクリック、表示されるメニューから ExplosionLooping1/CAMERA を選択。
      ビューが Pyro Smoke に正体する状態になる。

      黄色い線は ExplosionLooping1 ノードを選択している時に表示される。
  3. Network View パネルの ExplosionLooping1 ノード上で RMB->Allow Editing of Contents を実行。
      ノードの表記文字が水色から赤に変わり、ノードがアンロックされたことがわかる。これで中身の変更が可能になった。
  4. ダブルクリック、Enter キー、I キーのいずれかでノード内に入る。
      中には7つのノードとSticky Noteがひとつある。

      次の項でこれらのノードを簡単に紹介していく。

2. ノード概要

ExplosionLooping1 ノード内には以下のノードがある。通常は /out (ROP) /shop (SHOP), /img (COP) に書かれるものが、この HDA ノードの中にそれぞれのタイプの Network Manager として作成されている。

  1. FUEL_SOURCE
    • Pyro シミュレーションは簡単に言うと燃料と温度の定義を組み合わせることでシミュレーションを行っている。ここは、Pyro シミュレーションが使う燃料を定義している部分。元の形状 (sphere) に燃料フィールド(ボリューム) を追加している。
  2. SIMULATION (DOP ネットワーク)
    • シェルフなどからPyro を作った際に AutoDopNetwork という名付けられるノード名を変更しているだけ。この中に Pyro シミュレーションを実際に演算するノードネットワークが存在する。
    • この中の resize_container ノードがバイパスされ無効化されていることに注意。これによりPyro ボリュームのブレンドシェイプが可能になる。
  3. VISUALIZATION
    • SIMULATION で生成されたボリュームデータを取り込み、TIMESHIFTを二通り加えて、その二つをブレンドシェイプでブレンドして継ぎ目をなくしている。
  4. CAMERA
    • Pyro に正体しているカメラ。
    • View タブの Resolution でレンダリング解像度を設定する。
  5. RENDERING (ROP ネットワーク)
    • レンダリングの設定ノード RENDER_FRAMES ノードが中にある。
  6. SHADERS (SHOP ネットワーク)
    • Pyro シミュレーションがレンダリングされる時に使われるマテリアルノード (pyro1) が中にある。
  7. COMPOSITING (COPネットワーク)
    • レンダリングした画像を読み込んでテクスチャシートを作るための画像合成ネットワーク。

3. 手早く試すには

Pyro シミュレーションは時間がかかる。レンダリングも必ずしも速くないが、シミュレーションをキャッシュすることで、他の操作の合間にシミュレーションが走ることを軽減できる。なお、同じことは異なるノード経由やこれ以外の方法でも可能。

  1. 現状のシーンをファイルに保存して $HIP を確定、キャッシュファイル、画像ファイルの出力先が自分の希望の場所になるようにする。
  2. /obj/ExplosionLooping1/VISUALIZATION/import_pyrofields を選択。
  3. Save to File タブをクリック、その下左にあるSave To Disk ボタンをクリックして、Pyro シミュレーションデータを一度すべてディスクに書き出す。

    これでシミュレーション結果がキャッシュファイルとして書き出された
    (240フレームすべて書き出すと 923MB ディスク消費)。
  4. キャッシュを書き出したら、一番上の Load from Disk トグルをオンにする。

    これでキャッシュファイルから読み込むだけになり、操作中のシミュレーション演算時間を削減できる。ただし、シミュレーションの設定を変更した場合は、ここの操作を繰り返す必要がある。
  5. import_pyrofields ノードに表示フラグを設定して、Render View を開き、Render ボタンをクリック後、タイムラインをスクラブすれば、各フレーム約1秒前後でレンダリングが出来るようになる。
  6. import_pyrofields ノードの出力からVolume Visualization ノードを作成、表示フラグをこのノード (volumevisualization1) に設定。
    • Diffuse Field に heat を指定。
    • その下の Presets (赤線部) を Black Body に設定。
  7. 240 フレーム再生すると以下の通り。

    Volume Visualization での色設定はマテリアルとリンクしていないので、プレビュー用として割り切る。

4. ループの設定

ループの設定も VISUALIZATION ノードの中で設定されている。import_pyrofields ノードから 2通りの timeshift ノードにデータが渡され、その二つをブレンドシェイプでブレンドして継ぎ目をなくしている。

ここでは、その流れを紹介する。

  1. timeshift1
    • Time Shift ノードは、入力データを時間軸で編集するためのノード。Frame パラメータには以下のように設定されている。
      $F%64+64
      • $F は整数のフレーム番号。
      • % は剰余演算詞 (余りを求める)。
      • $F%64 は1, 2, 3, ..., 63, 64, 65, 66 というフレーム番号に対して、1, 2, 3, ..., 63, 0, 1, 2, ... という結果を返す。
      • +64 と64が加算されるので、最終的には、65, 66, 67, ..., 127, 64, 65, 66, ... というフレーム番号が返されることとなる。この 64 が追加されている理由は、発生時の炎はループにならないから多少のバッファを設ける必要があるため。
    • 再生すると下の通りでループされていない。

      よってもう一つとブレンドする必要がある。
  2. timeshift2
    • timeshift2 の Frame パラメータには以下のように設定されている。
      ($F+32)%64+64
      • ($F+32)%64 となっていることで、1, 2, 3, ..., 63, 64, 65, 66 というフレーム番号に対して、33, 34, 35, ..., 32, 0, 1, 2, ... という結果を返す。
      • +64 と64が加算されるので、最終的には、97, 98, 99, ..., 96, 64, 65, 66, ... というフレーム番号が返されることとなる。ここで追加された 64 は timeshift1 と同じ理由。
  3. blendshape
    • Blend Shape ノードは、入力ノードをブレンドするノード。
    • まず、"Blend Voxel Data" がオンになっていて、ボリュームデータのブレンドを可能にしている。
    • 下の方にある blend1 のラベル部分を Shift クリックすると指定されているアニメーションをグラフで見ることが出来る。

      この状態では最初の1回しかブレンドの影響が効かない。
    • ここでは既にされているので実行しないが、blend1 ラベルの上で、RMB->Motion FX->Cycle を実行することで、一度のアニメーション設定を繰り返すことが出来る。 この結果出来ているのが、motionfx ノード。
volumevisualization1 ノードを blendshape1 の出力につなぎ、再生すると以下の通りループされていることがわかる。。

レンダリング結果はこのページの一番上の通り。レンダリング、スプライトシート作成に関しては別の explosion で紹介(予定) こちら

0 件のコメント:

コメントを投稿