はじめに
Houdiniで道路を作成し、道路の脇にモデルを配置させるものを遊びで作ってみました。
今回はこれの作り方を解説します。
作ったものについて
カーブラインを変更すると、道路の形状と建物の配置が変化します。
環境
Houdini Apprentice 17.5.173
1.道路の作成
STEP1. センターラインの作成
STEP2. センターラインに幅を持たせる
PolyExpand2D
ノードを使用して、ラインを水平に広げて幅を持たせます。
STEP3. センターライン厚みを持たせる
PolyExtrude
ノードを使用して、センターラインに厚みを持たせます。
押し出した側面を別のPolyExtrude
ノード側で押し出す用途に使いたいので、
SideGroup
のチェックをONにて押し出した面の側面にグループを付与しておきます。
前面と背面にはセンターライン用のマテリアルをアタッチしたいので、FrontGroup
とBackGroup
にもチェックをいれておきます。
STEP4. 側面を押し出す
Step3で作った PolyExtrude
ノードに PolyExtrude
ノードを接続します。
今回はStep3の側面を押し出したいので、Step3にて側面として割り当てておいたグループ extrudeSide
を入力します。
押し出した部分には道路用マテリアルを割り当てたいので、Front Group
と Side Group
にチェックを入れておきます。
最後に、法線計算を行うNormalノードを接続しておきます。
STEP5. 道路用のマテリアル作成
次に道路に割り当てるマテリアルを作成していきます。
道路のノードと同じ場所に MaterialNetwork
ノードを作成します。
MaterialNetwork
ノードの中に入り、Principled Shader
ノードを2つ作成します。
片方はノード名を road_surface
にし、BaseColor
をグレーにします。
もう片方はノード名を road_centerline
にして、BaseColor
をオレンジ色にします。
以上でマテリアルの作成は完了です。 次にこれらのマテリアルを道路に割り当てていきます。
STEP6. 道路にマテリアルを割り当てる
STEP4で作成したNormal
ノードに Material
ノードを接続します。
Material
ノードではどのグループがどのマテリアルを参照するかを設定します。
2. モデルを配置する
STEP0. 配置用のモデルの用意
今回は下記URLのモデル(.fbx)を使用させていただきました。
https://free3d.com/ja/3d-model/watch-tower-made-of-wood-94934.html
fbxデータの.rarをダウンロードし、これを展開すると中に
wooden watch tower2_61.fbx というファイルがあるので今回はこれを使用します。
STEP1. モデルを読み込む(Houdini)
File
ノードを使ってStep0で用意したFBXデータをロードします。
STEP2. モデルを原点に合わせる
Step2でロードしたモデルですが、Y方向にすこし浮いています。
これは都合が悪いので原点にぴったり合わせます。
まずは Transform
ノードを File
ノードに接続し、TranslateのYの部分に以下を入力します。
-bbox("../file1", D_YMIN)

ヒント : -bbox("../file1", D_YMIN)の意味
bbox
は「バウンディングボックスを取得する」という意味になります。
そして、bbox("../file1", D_YMIN)
は file1
ノードのバウンディングボックスのY座標の 最小値を取得 するという意味になります。
マイナスをつけて -bbox("../file1", D_YMIN)
とすることでバウンディングボックスの下の部分がY=0の部分にフィットするようになります。
STEP3. モデルを小さくする
Transform
ノードをSTEP3のrecenter
に接続し、UniformScale
を0.1
にします。
STEP1~STEP3で作成したノードの全体は以下のようになっています。
STEP4. モデル配置用のベースライン作成
道路を作るときに作成したCurve
にPolyExpand
ノードを接続します。
PolyExpand2D
ノードの Offset
を1
に設定します。
STEP5. モデル配置用のポイント作成
次にベースライン上にポイントを並べていきます。
PolyExpand2D
ノードにResample
ノードを接続します。
Resample
ノードはLength
を2
に設定してポイント同士の間隔を2にします。
次に、このポイントにモデルをコピーして並べていきます。
ヒント: ポイント表示のON/OFF
Sceneウィンドウの右側にあるメニューの丸ポチアイコンをクリックすることでポイントのON/OFFを切り替えることができます。
STEP6. モデルをポイント上にコピーする
CopyToPoints
ノードを作成し、左側のコネクタにはモデルを接続。
右側にはSTEP5.で作成したResample
ノードを接続します。`
STEP7. モデルの向きを修正する
モデルが横を向いてしまいましたが、これはコピー先のポイントの 法線が正しく設定されていない ことによって起きている問題です。
これを修正するため、今回はPolyFrame
ノードを使ってポイント上に法線情報を設定します。
PolyExpand2D
ノードと Resample
ノードの間に PolyFrame
ノードを挟みます。
モデルの接線(Tangent
)を Nアトリビュートとして保存するということをやっています。 NアトリビュートはHoudini上では法線情報として扱われます。
PolyFrame
で法線情報を設定すると、以下のようにモデルが上を向くようになります。
STEP8. 道路とモデルを合成する
最後に、Merge
ノードを利用して道路とモデル群を合成して完成となります。
完成
カーブを編集すると道路と建物が自動で配置されるようになりました。