8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Houdini】道路に沿ってモデルを配置させてみた

Posted at

はじめに

Houdiniで道路を作成し、道路の脇にモデルを配置させるものを遊びで作ってみました。
今回はこれの作り方を解説します。
image.png

作ったものについて

カーブラインを変更すると、道路の形状と建物の配置が変化します。
1.gif

環境

Houdini Apprentice 17.5.173

1.道路の作成

カーブをベースに簡易的な道路を作成してみます。
image.png

STEP1. センターラインの作成

Curveノードを使用してカーブを作成します。
image.png

image.png

STEP2. センターラインに幅を持たせる

PolyExpand2D ノードを使用して、ラインを水平に広げて幅を持たせます。
image.png

image.png

STEP3. センターライン厚みを持たせる

PolyExtrude ノードを使用して、センターラインに厚みを持たせます。

押し出した側面を別のPolyExtrude ノード側で押し出す用途に使いたいので、
SideGroup のチェックをONにて押し出した面の側面にグループを付与しておきます。

前面と背面にはセンターライン用のマテリアルをアタッチしたいので、FrontGroupBackGroup にもチェックをいれておきます。

image.png

image.png

STEP4. 側面を押し出す

Step3で作った PolyExtrude ノードに PolyExtrude ノードを接続します。
今回はStep3の側面を押し出したいので、Step3にて側面として割り当てておいたグループ extrudeSide を入力します。
押し出した部分には道路用マテリアルを割り当てたいので、Front GroupSide Group にチェックを入れておきます。

image.png

image.png

最後に、法線計算を行うNormalノードを接続しておきます。
image.png

STEP5. 道路用のマテリアル作成

次に道路に割り当てるマテリアルを作成していきます。
道路のノードと同じ場所に MaterialNetwork ノードを作成します。
image.png

MaterialNetwork ノードの中に入り、Principled Shader ノードを2つ作成します。
片方はノード名を road_surface にし、BaseColor をグレーにします。
image.png

もう片方はノード名を road_centerline にして、BaseColor をオレンジ色にします。
image.png

以上でマテリアルの作成は完了です。 次にこれらのマテリアルを道路に割り当てていきます。

STEP6. 道路にマテリアルを割り当てる

STEP4で作成したNormal ノードに Material ノードを接続します。
image.png

image.png

Material ノードではどのグループがどのマテリアルを参照するかを設定します。
image.png

image.png

設定が終わると道路は以下のような見た目になります。
image.png

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データをロードします。
image.png

image.png

STEP2. モデルを原点に合わせる

Step2でロードしたモデルですが、Y方向にすこし浮いています。

これは都合が悪いので原点にぴったり合わせます。

まずは Transform ノードを File ノードに接続し、TranslateのYの部分に以下を入力します。

-bbox("../file1", D_YMIN)

ぴったり合うようになりました。
image.png

ヒント : -bbox("../file1", D_YMIN)の意味

bbox は「バウンディングボックスを取得する」という意味になります。

そして、bbox("../file1", D_YMIN)file1 ノードのバウンディングボックスのY座標の 最小値を取得 するという意味になります。

マイナスをつけて -bbox("../file1", D_YMIN) とすることでバウンディングボックスの下の部分がY=0の部分にフィットするようになります。

STEP3. モデルを小さくする

TransformノードをSTEP3のrecenterに接続し、UniformScale0.1 にします。
image.png

STEP1~STEP3で作成したノードの全体は以下のようになっています。
image.png

STEP4. モデル配置用のベースライン作成

道路を作るときに作成したCurvePolyExpandノードを接続します。
image.png

PolyExpand2D ノードの Offset1に設定します。
image.png

image.png

STEP5. モデル配置用のポイント作成

次にベースライン上にポイントを並べていきます。

PolyExpand2DノードにResample ノードを接続します。
image.png

ResampleノードはLength2 に設定してポイント同士の間隔を2にします。

image.png

ポイントが並びました。
image.png

次に、このポイントにモデルをコピーして並べていきます。

ヒント: ポイント表示のON/OFF

Sceneウィンドウの右側にあるメニューの丸ポチアイコンをクリックすることでポイントのON/OFFを切り替えることができます。
image.png

STEP6. モデルをポイント上にコピーする

CopyToPoints ノードを作成し、左側のコネクタにはモデルを接続。
右側にはSTEP5.で作成したResample ノードを接続します。`
image.png

モデルがポイント上へコピーされて以下のようになります。
image.png

STEP7. モデルの向きを修正する

モデルが横を向いてしまいましたが、これはコピー先のポイントの 法線が正しく設定されていない ことによって起きている問題です。

これを修正するため、今回はPolyFrameノードを使ってポイント上に法線情報を設定します。

PolyExpand2D ノードと Resample ノードの間に PolyFrame ノードを挟みます。
image.png

PolyFrame ノードは以下のように設定します。
image.png

モデルの接線(Tangent)を Nアトリビュートとして保存するということをやっています。 NアトリビュートはHoudini上では法線情報として扱われます。

PolyFrame で法線情報を設定すると、以下のようにモデルが上を向くようになります。
image.png

STEP8. 道路とモデルを合成する

最後に、Merge ノードを利用して道路とモデル群を合成して完成となります。
image.png

image.png

完成

カーブを編集すると道路と建物が自動で配置されるようになりました。
2.gif

ノード全体

ノード全体は以下のようになります。
image.png

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?