【Houdini】プロシージャルモデリング入門 ボロノイ分割とUV展開

はじめに

Houdiniを利用して、板ポリゴンに丸石を敷き詰める方法を解説します。

正方形の板ポリを利用した場合は以下のような正方形の丸石の床になります。

正方形の板ポリゴンから作成した丸石の床

正方形の板ポリゴンから作成した丸石の床

 

星形の板ポリを利用した場合は以下のような星形の丸石の床になります。

星形の板ポリゴンから作成した丸石の床

星形の板ポリゴンから作成した丸石の床

この記事で得られるノウハウ

・Houdiniを利用して床に丸石を敷き詰める方法

・Houdiniでの簡単なUV展開

前回の記事

丸石の床の作成手順

板ポリゴンの用意(Gridノード)

まずは丸石を敷き詰めたい板ポリゴン床を用意します。

今回はGridノード(正方形の板ポリゴン)を利用します。

Gridノードを作成

Gridノードを作成


Gridノードで作成した正方形メッシュ

Gridノードで作成した正方形メッシュ

 

板を分割する(VoronoiFracture)

次に、ボロノイ分割と呼ばれるアルゴリズムを利用してこの板を分割します。

ボロノイ分割についての説明は割愛しますが、以下のように板を分割することをボロノイ分割と呼びます。

ボロノイ分割した板

ボロノイ分割した板

分割の中心点を用意(Scatterノード)

板を分割するためには、分割の中心となる点群が必要となります。

Scatterノードを利用して点群を作成します。

ScatterをGridに接続

ScatterをGridに接続


Scatterノードで作成した点群

Scatterノードで作成した点群

 

点群を利用して板をボロノイ分割する(Voronoi Fractureノード)

次にVoronoi Fractureノードを利用して板を分割します。 

Voronoi Fractureノードの左側の入力には板ポリゴン(Gridノード)を、右側の入力には点群(Scatterノード)を接続します。

Voronoi Fractureノードの作成

Voronoi Fractureノードの作成


ボロノイ分割した板

ボロノイ分割した板

 

板が分割されましたが、まだ丸石とは言えない状態です。

補足 : ワイヤー表示

Sceneビューにマウスカーソルを乗せた状態でShift + Wを押すとモデルをワイヤー表示することができます。]

もう一度Shift + W を押すと元に戻ります。

石を丸くする(Resampleノード)

これから作成する丸石

これから作成する丸石

 

Voronoi FractureにResampleノードを接続して、分割後のパーツをサンプリングしなおすという加工を加えます。

Resampleノードを接続

Resampleノードを接続


Resampleの結果

Resampleの結果

ここで、さらにResampleを適用して石を丸くします。

Resampleノードを接続

Resampleノードを接続


Resampleの適用結果

Resampleの適用結果

 

石に厚みをつける(PolyExtrudeノード)

ResampleノードにPolyExtrudeノードを接続し、石に厚みを付けます。

PolyExtrudeノードを接続

PolyExtrudeノードを接続


PolyExtrudeの適用結果

PolyExtrudeの適用結果

 

UV展開(UV Textureノード)

最後に、UV展開します。

UV Textureノードを接続

UV Textureノードを接続

UV Quick Shadeノードを接続してUVを表示すると以下のようになっています。

UV Quick ShadeでUVを確認

UV Quick ShadeでUVを確認

以上で丸石の床は完成となります。

 

OBJファイル出力(ROP Geometryノード)

ROP Geometryノードを利用することでOBJファイルを出力することができます。

Output Fileの部分にobjファイルパスを入力し、Save to Disk ボタンを押すことでobjファイルがエクスポートされます。

ROP Geometryノードを利用してOBJファイルをエクスポート

ROP Geometryノードを利用してOBJファイルをエクスポート

出力したOBJファイルをUnityのシーンに持ってくると、以下のような見た目になります。

Unity上での丸石の表示

Unity上での丸石の表示

マテリアルを整理する

OBJファイルをUnity上で表示するとマテリアルが二つになってしまっています。

Houdini上でGroupを設定することでこれを回避することができます。

マテリアルが複数存在している

マテリアルが複数存在している

 

先ほど作成したVoronoi Fractureノードを見てみるとGroupを作成するような設定になっているため、これを解除します。

Interior GroupとExterior Groupのチェックを外しましょう。

Voronoi Fractureノードの設定を変更

Voronoi Fractureノードの設定を変更

 

この状態でOBJをエクスポートするとマテリアルがdefaultのみになります。

マテリアルが1つになっていることが確認できる

マテリアルが1つになっていることが確認できる

UnityからSTYLYにプレファブをアップロードする方法

作成したプレファブをSTYLYにアップロードする方法は、以下のマニュアルを参照してください。

おまけ: 円形の床を作ってみる

これまではGridノードを使って正方形の丸石の床を作りましたが、GridノードをCircleノードに置き換えると円形の丸石の床になります。

円形の丸石の床

円形の丸石の床

CircleノードはGridノードと法線が反対方向を向いているため、ここではReverseノードを使って法線を反転させています。

CircleノードにReverseノードを接続

CircleノードにReverseノードを接続

 

おまけ2: 星形の床を作ってみる

以下のような星形の床の作り方を紹介します。

星形の床

星形の床

星形の作り方

Circleノードを使って正10角形を作成し、偶数番目の頂点を小さくすることで星形をつくることができます。

星形の床を作るノード全体

星形の床を作るノード全体

 

Circleノードの設定(正10角形を作成)

CircleノードのDivision に 10を設定することで、正10角形になります。

Circleノードの設定を変更

Circleノードの設定を変更

 

結果

結果

 

Group by Rangeノードの設定(偶数番目の点を選択する)

偶数番目のポイントにグループgroup1を割り当てます。

CircleノードにGroup by Rangeノードを接続

CircleノードにGroup by Rangeノードを接続


結果

結果

 

Transformノードの設定(選択した偶数番目の点を小さくする)

Transformノードを利用して偶数番目の点に0.5倍のスケーリングをかけます。

Transformノードを利用して拡大・縮小を行う

Transformノードを利用して拡大・縮小を行う


結果

結果

 

星形の床の完成

UV TextureノードのDisplayフラグをONにすることで、以下のような星形の丸石の床が表示されます。

DisplayフラグをONにすると結果を表示できる

DisplayフラグをONにすると結果を表示できる


結果

結果