Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

細長ゴルドーをBlenderで作ってみた! [ カービィ Geometry Node ]

Cylinder-Gorudo

 3月に発売を控えた、カービィの新作ゲーム星のカービィ ディスカバリーのPVに登場し、ちょいと話題になった細長いゴルドーBlenderでササっと簡単に作ってみました。Blender 2.9から登場し、3.0にて更なる進化を遂げた新機能Geometry Nodeを利用してトゲを生やしています。

 

 ゴルドーとはカービィ作品ではお馴染みの敵キャラで、トゲトゲが付いた球体にカワイイ目が付いたお邪魔キャラ。今回、初の正式3Dカービィ作品ということで、それに対応する形で細長くなったようです。

 

 話を戻しますが、Blenderのデフォルト・プロジェクトとなるGeneralプロジェクトにはGeometry Nodeタブが準備されているので、そこを開けば、ジオメトリー・ノードを簡単に使い始めることが出来ます。

 

Geometry Node

 Geometry node(ジオメトリー・ノード)は、ノードを繋げることでメッシュを生成したり、コントロールしたりすることのできる機能です。

 地面に草木を生やしたり、飴の周りに砂糖をまぶすといったことは、以前ならパーティクル機能を利用して表現していましたが、この機能によって、より分かりやすく簡単に行えるようになりました。

 

ゴルドーの体を準備しよう

Cylinder_VertexGroup

 今回は鉄棒の表面にトゲを生やすということで、まずはシリンダーを追加し、角をBevel処理して丸めます。

 そして、ゴルドーの目をつける場所にはトゲを生やしたくないので、それ以外の面をVertex GroupにWeightを1.0として登録します。グループ名は"Body"としました。これで準備は完了です。

 

Geometry_Node_Editor

 次にジオメトリー・ノード・タブを開きます。画面下部にあるのがジオメトリーノード・エディター(上画像)です。対象となるオブジェクトを選択した状態で、newと書かれた+ボタンを押し、新しいジオメトリー・ノードを作成します。

 

Vertex Groupを入力として使いたい

GeometryNode_Group Input&Output

 ジオメトリー・ノードには、それぞれグループ入力とグループ出力が準備されています。そこに自分の使いたい入出力を追加できるので、先ほど準備したVertex Groupを利用するために、Boolean値の入力を設定します。

※3.2にて、named attributeノードが導入され、ノードエディター内で直接Vertex Groupの値が使えるようになりました。

Adding New Input to Group inputs

 以前はノードの変数入力欄にVertex Group名を直接書き込めたのですが、3.0でその機能は無くなってしまい、このようにInputとして追加する形になったようです。今後また変わるかもしれません。(※前述の通り、named attributeノードを使い、Vertex Groupを選択し、distribute points on facesノードのselectionに繋げば、記事と同様の処理を行えます。)

GeometryNode_Modifier

 ジオメトリー・ノードを作成すると、ModifierプロパティにGeometry Nodeが表示され、設定した入力もそこに示されます。

 先ほど追加した入力は、Boolean値なのでデフォルトでは"0"と表示されていますが、横の十字のアイコンを押すと、上画面のように各パラメータが表示され、選択することができます。Vertex Groupは一番下のBodyなのでそれを選択します。

 これでジオメトリー・ノード上で、Vertex Groupをパラメータとして使うことが出来るようになりました。

 

表面上にトゲを生成する

Geometry Node_NeedlesOnCylinder

 ジオメトリー・ノードでは座標点のことをPoint(ポイント)と呼び、そこにメッシュを生成することになります。

 Distribute Points on Facesというノードがあり、つまり、表面上にポイントを配布する、という機能なのですが、そこにSelection端子があるので、InputsからVertex Groupを繋げます。すると、Vertex GroupでBodyグループとして指定した面でのみ、このノードでポイントが作られることになります。

 ここからInstance on Points、つまりポイント上に(メッシュを)生成する、という機能のノードに繋ぎ、primitive meshとして用意されているConeメッシュをinstance端子に繋ぎます。

 

 Set Materialノードでマテリアルを設定し、Translate Instancesノードで位置を調整すると・・・細長ゴルドーの完成です!

Cylinder-Gorudo

 Distribute Points on Facesでのポイント配布方式は、Random(ランダム)Poisson(ポアソン) diskと二種類の方式があり、ほどよくオブジェクトを離して設置したい時はPoisson diskを使います。

 

まとめ!

 というわけで、本物と直に比べるとパチモン感あふれるモノが出来てしまいましたが、細長ゴルドーをジオメトリー・ノードを使って再現することが出来ました。

 

 今回の初の3Dとなるカービィ新作は、『星の泉の物語』で育った自分としても、かなり興味深いタイトルとなっているので、是非とも遊びたいなと思います!