toonshading smoke


ここではスモークなど、ボリュームにトゥーンシェーダをアサインする方法を紹介する。

使用したバージョン: 15.0.439 および 15.5.632
シーンファイルへのリンクは一番下にあり。

1. Pyro Smoke の作成

初めに、もとになる煙を作成する。

  1. Create シェルフから Sphere を作成 (Torus でも Box でも何でも良い)。
  2. 作成したオブジェクトを選択したまま、Pyro シェルフから Billowy Smoke を実行。
  3. 最終フレームを、120フレームなり、60フレームなり、自分の根気に合わせて調整、最終フレームまで走らせて止める。
  4. 最終フレームでのビューポートで Spacebar+G を押し、スモーク全体が見えるようにする。
  5. Lights and Cameras シェルフの Camera ツールを Ctrl キーを押しながら、実行。
      /obj/cam1 が出来、現在のビューがレンダリングビューとなる。
  6. cam1 の View タブに行き、Resolution を 1024 x 1024 ないし、512 x 512 など正方形にする。
  7. 同じく Ctrl キーを押しながら、 Distant Light を作成、煙に陰影がでるようにする。
      /obj/distantlight1が出来る。
  8. ライトを作成したあとは、ビューを cam1 に戻す。
  9. シーンを保存、$HIP の位置を決め、キャッシュ、レンダリング画像が保存される場所を設定する。
これで元になるシーンが完成。これをもとに以下の作業を行なっていく。

2. Pyro ボリュームのメッシュ化準備

  1. ネットワークビューで /obj/pyro_import の中に入る。
  2. import_pyrofields を MMB クリック。2番目の段に 7 Points, 7 Primitives, 7 Vertices, 7 Volumes とあることがわかる。
      Fields タブ以下をみると、
      • density
      • vel
      • vel
      • rest
      • rest2
      • temperature
      • heat
      • fuel
      の7つのアトリビュートがインポートされているのが確認できる。ただし、メッシュを生成するのに必要なのは density (密度) のみ。
  3. import_pyrofields の出力から TAB->Delete を作成。
    1. Group 右脇の ▽ から @density を選択
    2. Operation を Delete Non-Selected とする
  4. 出来た delete1 ノード上で MMB をクリックすれば、今度は 1 Volumes となっているのがわかる。
      上記の操作により7つあったボリュームデータを Density を残して残りは削除した。
  5. Material Palette で Toon Color Shader を /shop にドラッグ&ドロップ。
      こちらの要領。Toon Outline Shader は今回は使わない。
  6. ネットワークビューで /obj で pyro_import を選択、Material タブで /shop/tooncolorshader をマテリアルとして設定、Render View でレンダリングを実行。
      すると全体が Low Color (影の色) だけになってしっているのがわかる。トゥーンシェーダを使うのであれば、ボリュームをメッシュ化する必要があるということ。

      上記は60フレーム目
次にメッシュ化の方法を二つ紹介する。

3-1. 通常メッシュ化 (Convert Volume)

  1. delete1 の出力から TAB->Convert Volume を実行。
      convertvolume1 が出来る。
  2. Isovalue の値を 0 (デフォルト) から上げて行くと、メッシュがスモークの形に生成される。
  3. Detail Level を 1 (デフォルト) から2 にすれば、分割が細かくなる。
      3以上にしていけばさらに細かくなるがメモリと要相談。
  4. これで出来たメッシュはポリゴンなので、Smooth をかけたり、Attribute VOP などを使ってノイズを加えたりすることが可能。

3-2. OpenVDB を使ったメッシュ化

  1. delete1 の出力から TAB->Convert VDB を実行。
      convertvdb1が出来る。
  2. convertvdb1 で
    1. Convert to を VDB に
    2. VDB Class を Convert Fog To SDF に
  3. Fog Isovalue で全体の大きさを調整。
  4. convertvdb1 の出力から再び TAB->Convert VDB を実行。
      convertvdb2が出来る。
  5. convertvdb2 の Convert to を Polygons に
  6. Convert VDB を使った方が一般的に丸みを帯びた形状になる。これで出来たメッシュもポリゴンなので、Smooth をかけたり、Attribute VOP などを使ってノイズを加えたりすることが可能。

まとめ

  • ボリュームにToon Color Shaderをアサインする前にメッシュ化する必要がある。
  • 煙ボリュームのメッシュ化は Density (密度) ボリュームのみを使って行なう。
    • 上記のようにDelete ノードを使って不要なボリュームを削除しても良いし
    • import_pyrofields ノードの Fields 以下で不要なデータのトグルをオフにして読み込まないようにしても良い。
  • メッシュ化、それ以外にもパーティクルをトゥーンシェーディング調にレンダリングする方法はいろいろありそうだが、それはまた別の機会に。
  • 関連項目:
  • シーンファイル: toon_smoke_final.zip (94KB)

0 件のコメント:

コメントを投稿