
GodotEngineを使った3Dゲームの作り方メモです
平面のプレートにモノを置くのは簡単なんですが
ぐにゃぐにゃの地形にそって草をおいたり木を生やそうと思うと
手で置いていくのはたいへんですよね
そこで、今回は草木を生やすアドオン
spatial_gardenerを紹介します
アドオンや素材をダウンロードしよう
まずはここからアドオンをダウンロードしましょう。
ブログ書いてる時点ではv1.3.0が最新です
つぎに植物のモデルも用意しましょう。
好きなモデルを用意して下さい。
(草木家のモデルここにまとめてます)
ここではCC0モデルの神様quaterniusさんのサイトから
プラットフォーマーの素材に入っている木を使います。
Downloadボタンをクリックすると

Googleドライブの共有が開くので
ここから必要な素材をダウンロードします。
Natureフォルダだけでもいいですが使いやすい素材なので
全部ダウンロードしておいてもいいと思います。

これで素材の準備はOKです
プロジェクトにアドオンや素材をインポートしよう
プロジェクトを作り地面やプレイヤー、ライト、カメラを配置しましょう。
キャラの追加はこちらの記事で
キャラの移動とカメラはこちらの記事で確認できます。
今回はサンプルなので
キャラクターはカプセルメッシュにしました

つぎに、プロジェクトフォルダを開き
先程ダウンロードした「godot_spatial_gardener」の中の
「addons」フォルダをコピーします

3Dモデルを入れておくフォルダを作り(ここではmodelという名前にしました)
ダウンロードした草木などのモデルをコピーします

また、アドオンを使う時にブラシを保存するフォルダ「work_dir」と
tresファイルを保存するためのフォルダ「plant」
も一緒に作っておきましょう。
こんなかんじのフォルダ構成になりました。

3D素材を使ってみよう
gltfファイルはドラッグするだけで配置することができます。modelフォルダにある家のモデルを地面にドラッグしてみましょう。
すぐに配置することができました。

再生して家に衝突すると
当たり判定がなく、埋まってしまいました。

配置したあとでもgltfファイルの設定を変更することができます。
ファイルシステムの中から家のモデルをダブルクリックすると
詳細画面が開きます。

メッシュを選択し、物理をオンにします。
コリジョンの形をShapeTypeから選ぶことができます。
ここではモデルに沿った形の「Trimesh」を選びました。
最後に編集画面の下にある「再インポート」を押せば修正されます。
実行してみると、家に当たり判定ができましたね

草はやし用のtresファイルを作るよ
もしtresファイルの簡単な作り方があったらぜひ教えてほしいのですがわからないので独自の方法でやります。
まずtresファイルを作りたいbush.glftファイルを右クリックし
「新しい継承シーン」をクリックします。

すると新しいシーンとしてgltfファイルが開きます。
メッシュを選択し、右側のmeshの横にある矢印をクリック
開いたメニューの中から「ユニーク化」を選びます。

ユニーク化すると、保存が選べるようになります。

保存をクリックして、リソースを保存しましょう。
bushという名前にし「plant」フォルダに保存しました。

tresファイルが保存できたら、新規継承シーンは不要になりますので
保存せずに閉じてOKです。
同じようにtree.gltfファイルからもtresファイルを作りたいですが
こちらには当たり判定をつけたいので
まずはダブルクリックして、家と同じ要領で当たり判定をつけましょう

こちらもモデルにピッタリ沿ったコライダーがいいので
Trimeshを選択しました。「再インポート」して適用しましょう。
つぎにtree.gltfを右クリックして
草と同じようにtresファイルを保存しましょう。

草ファイルは当たり判定がいらなかったので
シーンは保存しなかったんですが
木のほうは当たり判定がほしいのでシーンを保存します。
「tree.tscn」という名前にしました
つぎに「Tree」を右クリックし
「継承をクリア」して、tree.gltfとは無関係なシーンにします。

必要なファイルは「StaticBody3D」と「CollisionShape3D」だけです。
StaticBody3Dを右クリックして「シーンのルートにする」をクリックします。

StaticBody3Dがルートになったら
いらないノードを削除します。
3Dノードの「Tree」とメッシュノードの「Tree2」を削除します

こんな感じで、コライダーだけのスケスケ状態になっていればOK!

これで草木の準備はOKです
アドオンを使ってみよう
アドオンを使うには、そのアドオンを有効にしなければいけません。上部メニューの「プロジェクト」から「プロジェクト設定」を開きます。

プロジェクト設定ウィンドウの
「プラグイン」のタブを開くと
アドオンフォルダ内にあるアドオンの一覧が表示されます。
SpatialGardenerをステータスを有効にしましょう。

草を生やしたいシーンのルートノード(今回はMainノード)に
ノードを新規作成で追加しましょう。
検索窓に「gar」と入力すると、Gardenerが見つかると思います。
(ない場合はアドオンが有効になっていない)

メインシーンにGardenerが追加されました。
Gardenerの子ノードはすべて必要なので削除しないように注意です
Gardenerの作業フォルダを設定しましょう。
FileManagementの
Garden Working Directry のフォルダアイコンをクリックします

フォルダを選ぶ画面が開きます。
予め作っておいた「work_dir」をえらびましょう。
(フォルダの名前や場所はどこでもOK)

作業フォルダが決まると
ブラシ設定ができるようになります。
Plantsの中にある「+」マークをクリックしましょう。

Plantsの下に「メッシュ」の項目が出てきました。
LOD Variantsの「+」マークをクリックしましょう。

「Green~LOD」と書かれたところに「tree.tres」をドラッグします

LOD Variantsは複数のLODを登録することができます。
LOD0はカメラの距離が近い時に表示されるハイポリゴンのモデル
LOD1は中距離、LOD2は遠距離に表示されるモデルなので
徐々にローポリにしていく…みたいなことができます。
(アドオンの置いてある場所に解説やチュートリアルが用意されています)
今回はもともとローポリなので一つだけでいきますね。
Plantsエリアにある木のブラシにチェックを入れて
はやしたい場所をマウスの左クリックを押しながらなぞると木がおけます

でも、家の上に木が置けてしまいました。
消しゴムで消すこともできますが
ペイントできる場所をレイヤーで指定することもできます
gardenerのインスペクターの
「Gardening Colision Mask」が1になっていると思いますが
1を消して、2をオンにしましょう。
これでレイヤー2にだけペイントできるようになりました

地面にだけ塗りたいので地面のレイヤーを変更します
GroundのColision Layerを2をオンに
プレイヤーが地面に立てなくなると困るので
PlayerのCollision Maskは1と2の両方をオンにします

(地面のレイヤーが1と2両方オンなら、プレイヤーのマスクは1だけでもOK)
これで家にはペイントされなくなりました。
でも木に当たり判定がないので埋まってしまいます。

ブラシの詳細設定
当たり判定や、ブラシの密度、木の大きさなどを設定してみましょう。木のブラシを選択し「メッシュ」にある木をクリックします
「Spawned Node3D」にコライダーだけのシーン「tree.tscn」をドラッグします

ドラッグすると、木のまわりにうっすらと
コライダーのワクがみえるようになりましたね
これで木にめり込まなくなりました

さて、木がかなり密集してしまっているのと
木の大きさが同じなのでバラバラの大きさにしてみましょう。
木のブラシの詳細にある
「Density」が密度で、数が少ないほど密度が薄くなります。
「スケール」が大きさ
「ScaleType」を「Uniform」にしておくと
形を保ったままスケールを変更できます。
xyzの値を 0.5 - 1 のように入力しておくと
0.5から1のあいだでランダムにしてくれます

新規Plantsを追加して、bushを配置してみましょう
密度が100の場合はこれくらい

密度1000だとこれくらいになります

ブラシには4つのタブがあり

「ペイント」選択したブラシで塗る
「Erase」選択したブラシで塗った部分を消す
「Single」クリックしたところに1つだけ置く
「Reapply」すでに置いたものを新規ブラシ設定で上書き
ができます
大きさ1の木を置いたあとで
ブラシを0.5 から 1のランダムにし
Reapplyで塗り直すと、元あった木がランダムな大きさになるのがわかります。

ブラシには「サイズ」や「強さ」が設定できるので
一気に塗りたいときはサイズを大きくするといいですね。
さいごに法線に沿ったブラシの作り方です
通常ナナメになった部分に草をはやすと、草が上を向いてしまいます

坂にそって草をはやしたいときは
「Up Vector」という項目の
Primary Up VectorとSecondary Up Vectorを「Normal」にします。
すると完全に坂の法線に沿った形ではえるようになります

PrimaryをNomarlに SecondaryをWorld Yにして
Up Vector Blendingの割合を変えると(図では0.5)
上の角度と、法線の角度をブレンドした方向にはえてくれます

デカめの草とかはブレンドするほうが自然にみえるかもしれません
今回はローポリで試しましたが
公式のチュートリアルをやるととてもきれいなワールドができるので
(アドオンのdemoの中から見れます)
そちらも合わせてチェックしてみてください

コメント