Houdini Height Map

Houdini Height Map

テクスチャのカラーチャネルをheight mapとして使用する方法を紹介。

使用バージョン: Houdini FX 14.0.165 (13でも可能)

参考シーンファイルへのリンクは一番下にあり。

  1. Houdiniを起動。
  2. Create シェルフから Gridを実行。Enter キーを押して確定。
    • ネットワークビューには "grid_object1" というノードが出来る。
  3. ダブルクリックなり 'i' キーを押して中に入る。
    • 中には、"grid1" というノードが存在している。
  4. Rows と Columns の値をそれぞれ 100 などにして分割数を増やす。
  5. grid1 の出力から UV Texture ノードを作成。
    • 設定はデフォルトのままでよい。(OrthographicとY-axis)。
    • MMBで grid1 をクリックすると Point アトリビュートとして P (position=位置)が一つあるのが確認できるが、uvtexture1 ノードでは、Pにuv が追加されているのがわかる。
  6. uvtexture1 の出力から Attribute from Map ノードを作成。
    • デフォルトテクスチャが表示されビューポートでは次のように表示される。
    • これは面に対してテクスチャマップが行われているのではなく、各頂点がテクスチャからのカラー情報を受け取っている。
    • よって、grid1に戻り、Rows と Columns を10などに下げれば次のようになる。
    • Geometry Spreadsheet (14、Houdini 13ではDetails View) で見れば、Cd (Color diffuse) というアトリビュートが r, g, b の配列で各頂点にアサインされているのがわかる。
  7. Rows と Columns を動かしたのであれば元の値(100)に戻し、attribfrommap1 ノードの Texture Map を別の画像に置き換える。 をクリックしてファイルブラウザを開き、左側のリストから $HFS/houdini/pic ディレクトリを選択、Mandril.pic を指定。

    Mandril.picをアサインすると以下のようになる。
  8. attribfrommap1 ノードの出力から point ノードを追加。
    • このノードによって各点(point)の操作が可能になる。
  9. point1 ノードの Position の $TY となっている部分を、 $TY + $CR (red: 赤チャネル)と置き換える。
    • これは各ポイントのYの値に、Cd[r]の値を追加していることになる。
    • $TY + $CG (緑)。
    • $TY + $CB (青)。
    • $TY + $CR + $CG + $CB (すべて追加)。
    • さらに式を追加して輝度計算などをしてもよいが演算に時間がかかるようになる。これを回避するにはVEXを用いるがこれはまた別の機会に。
  10. attribfrommap1 ノードと point1 ノードの間に Smooth ノードを作成し挿入する。
  11. Apply To: を Point Position から Color に変更。
    • これによりノイズの少ない滑らかなハイトマップ処理になる。
    • Smoothing Iterations の値で滑らかさを調整する。
  12. こうして作成された形状を出力したい場合は、最下流のノード (point1) の上で RMB->Save Geometry... を実行することで .obj などで出力することも可能。おしまい。

おまけ (2015-04-07)

  • Point ノードで記述された箇所は Point Wrangle ノードを使って書き換えることも可能。Point Wrangle を使った方が速い(マルチスレッド)。
  • Point ノードで $TY + $CR としたエクスプレッションは、
    @P.y += @Cd.x;
    とする。同様に、 $TY + $CR + $CG +$CB
    は、
    @P.y += @Cd.x + @Cd.y + @Cd.z;
    となる。

    また、lerp というリニア補間の式を組み合わせて、滑らかにすることも可能。
    @P.y = lerp (@P.y, (@Cd.x + @Cd.y + @Cd.z), .5);
    最後の 0.5 を0 と 1 の間の別の値で置き換えれば、違う補間が可能。

まとめ

  • 単純なUVのアサインはUV Textureノードを使用。uv[u,v,w]が入力ジオメトリにアサインされる。
  • 頂点へのカラーのアサインは Attrib from Map を使用。Cd[r,g,b]が入力ジオメトリにアサインされる。
  • 点の単純移動には Point ノードを使用。座標値とRGB値を組み合わせることが出来る。
  • Point Wrangle を使うとマルチスレッドで高速に処理できる。Point Wrangle/VEX に関する説明はまた別の機会に。

参考シーンファイル:

0 件のコメント:

コメントを投稿