2017-09-26

terrain split export


Houdini の HeightField ツールを使って作成した地形をスプリットした後、一つにまとめて FBX で出力方法を紹介する。


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

1. 元のシーンの作成


  1. HeightField を作成
  2. それに HeightField Noise を追加、Perlin ノイズタイプに変更。
  3. さらに HeightField Erode を追加、60フレーム目程度まで走らせる。
  4. さらに Timeshift を追加し、Frame パラメータにあるエクスプレッションを削除してフレームを固定。
    詳細はこちらの#1 (元シーンの作成)。

2. タイル状にスプリット

作成した HeightField をタイル状にスプリットするには、Height Field Split ノードを使用する。
  1. ネットワークの最下流にある timeshift1 の出力から Height Field Time Split を作成。
      HeightField_timesplit1 ができる。
  2. Tile Count の値はデフォルトでは 4x4 で、これだと16枚にスプリットされることになる。ここでは 3x3 にし 9 枚にする。
  3. Tile Number のスライダを動かすと、スプリットされた個別のタイルを見ることが出来る。

    なお、カウントは 0 から始まっていることに留意。

3. ポリゴン変換および FBX 出力


  1. HeightField をポリゴンに変換するには、Convert HeightField ノードを使う。
    1. heightfield_tilesplit1 の出力から TAB->Convert HeightField を実行。Convert To は Polygon のまま。
        2D ボリュームである Heightfield がポリゴンに変換される。
    2. Bake Point Colors をオンにすれば、Houdiniでの表示に合わせて頂点カラーが付加される。
  2. このポリゴンを FBX で簡単に出力するには、GameDevROP FBX Output を使用する。 ツールインストール後、convertheightfield1 の出力から TAB->SOP FBX ROP を実行、ファイル名など必要な設定を行い Render ボタンを押せば、ファイルが出力される。
      ただし、この状態ではタイル一枚ずつで、heightfield_tilesplit1 の Tile Number を自分で出力のたびに変更しなければならず、また全部を一度に出すことが非常に困難。

4. ループ操作

タイル状に分割した地形をまとめて出力するには、For Each Loop ノードを使う。
  1. ネットワークエディタ上で TAB->For Each Loop を実行。
      これにより foreach_begin1 と foreach_end1の二つによるノードブロックが出来る。
  2. 次の要領で heightfield_split1 と convertheightfield1 が作成した For Each ループブロックの中に入るようにする。
    1. timeshift1 の出力を foreach_begin1 の入力に接続。
    2. foreach_begin1 の出力を heightfield_tilesplit1 の入力に接続。
    3. convertheightfield1 の出力を foreach_end1 の入力に接続。
    4. foreach_end1 の出力を sop_fbx_rop1 の入力に接続。
    ここまでで、こういう状態だが未だ終わりではない。
  3. foreach_begin1を選択。
    1. Method を Fetch Input にする。
    2. Create meta Import Node ボタンをクリックする。
        foreach_begin1_metadata1 というの Metadata ノードができる。このノードを MMB クリックして情報を見て、iteration, ivalue, numiterations と value の4つの Detail 整数アトリビュートがあることに留意する。
  4. foreach_end1 を選択。
    1. Iteration Method を By Count にする。
    2. Gather Method は Merge Each Iteration (デフォルト) のまま。
    3. By Count にすることで出来た Iterations を 9 にする (3x3 の場合)。
    4. Start Value を 0 にする。
  5. heightfield_tilesplit1 を選択。
    1. ノード名横のギアアイコンをクリックし表示されるメニューから Add Spare Input を実行。
        Spare Input 0 というパラメータが追加された。
    2. Spare Input 0 の一番右にある '+' アイコンクリック、Choose Operator ウィンドウで foreach_begin1_metadata1 を選択、Accept をクリックして確定。
    3. Tile Number パラメータに
      detail(-1, "ivalue", 0)
      とエクスプレッションを入力する。
    ここまで正しく実行されれば以下の通り。

    Tile の間の筋は heightfield_tilesplit1 の Voxel Padding が 0 だから。これを 1 にすれば埋まる。
      最終的なループネットワークはこんな感じ。

      metadata ノードから tile split ノードに破線でつながっているのがわかる。
  6. ネットワーク最下流の sop_fbx_rop1 で再び Render ボタンをクリックすれば出力される。Maya に FBX で持っていくと次の通り。

    Maya で頂点カラーを表示するには、アトリビュートエディタでシェイプノードの Mesh Component Display 以下の Display Colors をオンにする。

シーンファイル

h16_terrain_water.zip (102KB)
  • water_begin.hip: #2 直前までのファイル
  • water_points.hip: 最後まで行ったファイル


作成: 2017-09-26

5 件のコメント:

  1. houdiniの勉強を始めてこちらのページを見つけました。
    情報が豊富で大変参考になりそうですが、残念ながらシーンファイルがダウンロードできなっているようです。
    ダウンロードできるようにしてもらえると嬉しいです。よろしくお願いいたします。

    返信削除
    返信
    1. システム障害のようです。復旧まで時間がかかるかもしれません。しばらくお待ちください。ktaki@sidefx.com にメールアドレスを送っていただければ、そのメールアドレスにシーンファイルを送付できます。

      削除
  2. ありがとうございます。
    復旧する予定があるようでしたらそれを待たせていただきます。

    返信削除
    返信
    1. 思ったより早く復旧しました。ダウンロードできるように再度なりました。宜しくお願いいたします。

      削除
    2. ダウンロードできましたー。ありがとうございました。

      削除