Houdini Height Map
テクスチャのカラーチャネルをheight mapとして使用する方法を紹介。
使用バージョン: Houdini FX 14.0.165 (13でも可能)
参考シーンファイルへのリンクは一番下にあり。
- Houdiniを起動。
- Create シェルフから Gridを実行。Enter キーを押して確定。
- ネットワークビューには "grid_object1" というノードが出来る。
- ダブルクリックなり 'i' キーを押して中に入る。
- 中には、"grid1" というノードが存在している。
- Rows と Columns の値をそれぞれ 100 などにして分割数を増やす。
- grid1 の出力から UV Texture ノードを作成。
- 設定はデフォルトのままでよい。(OrthographicとY-axis)。
- MMBで grid1 をクリックすると Point アトリビュートとして P (position=位置)が一つあるのが確認できるが、uvtexture1 ノードでは、Pにuv が追加されているのがわかる。
- uvtexture1 の出力から Attribute from Map ノードを作成。
- Rows と Columns を動かしたのであれば元の値(100)に戻し、attribfrommap1 ノードの Texture Map を別の画像に置き換える。 をクリックしてファイルブラウザを開き、左側のリストから $HFS/houdini/pic ディレクトリを選択、Mandril.pic を指定。
Mandril.picをアサインすると以下のようになる。 - attribfrommap1 ノードの出力から point ノードを追加。
- point1 ノードの Position の $TY となっている部分を、 $TY + $CR (red: 赤チャネル)と置き換える。
- attribfrommap1 ノードと point1 ノードの間に Smooth ノードを作成し挿入する。
- Apply To: を Point Position から Color に変更。
- こうして作成された形状を出力したい場合は、最下流のノード (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 に関する説明はまた別の機会に。
参考シーンファイル:
- heightmap_v13.hip (118KB)
0 件のコメント:
コメントを投稿