サムネ

GodotEngineを使った3Dゲームの作り方メモです

平面のプレートにモノを置くのは簡単なんですが
ぐにゃぐにゃの地形にそって草をおいたり木を生やそうと思うと
手で置いていくのはたいへんですよね

そこで、今回は草木を生やすアドオン
spatial_gardenerを紹介します

↓↓続きを読む↓↓ をご覧ください 
 
にほんブログ村 IT技術ブログ ゲーム開発へ

アドオンや素材をダウンロードしよう

まずはここからアドオンをダウンロードしましょう。
pgp_859
ブログ書いてる時点ではv1.3.0が最新です

つぎに植物のモデルも用意しましょう。
好きなモデルを用意して下さい。
草木家のモデルここにまとめてます


ここではCC0モデルの神様quaterniusさんのサイトから
プラットフォーマーの素材に入っている木を使います。
Downloadボタンをクリックすると
pgp_860
Googleドライブの共有が開くので
ここから必要な素材をダウンロードします。
Natureフォルダだけでもいいですが使いやすい素材なので
全部ダウンロードしておいてもいいと思います。
pgp_861
これで素材の準備はOKです

プロジェクトにアドオンや素材をインポートしよう

プロジェクトを作り
地面やプレイヤー、ライト、カメラを配置しましょう。
キャラの追加はこちらの記事
キャラの移動とカメラはこちらの記事で確認できます。

今回はサンプルなので
キャラクターはカプセルメッシュにしました
pgp_823
つぎに、プロジェクトフォルダを開き
先程ダウンロードした「godot_spatial_gardener」の中の
「addons」フォルダをコピーします
pgp_824
3Dモデルを入れておくフォルダを作り(ここではmodelという名前にしました)
ダウンロードした草木などのモデルをコピーします
pgp_826
また、アドオンを使う時にブラシを保存するフォルダ「work_dir」と
tresファイルを保存するためのフォルダ「plant」
も一緒に作っておきましょう。

こんなかんじのフォルダ構成になりました。
pgp_862

3D素材を使ってみよう

gltfファイルはドラッグするだけで配置することができます。
modelフォルダにある家のモデルを地面にドラッグしてみましょう。
すぐに配置することができました。
pgp_827
再生して家に衝突すると
当たり判定がなく、埋まってしまいました。
pgp_828
配置したあとでもgltfファイルの設定を変更することができます。
ファイルシステムの中から家のモデルをダブルクリックすると
詳細画面が開きます。
pgp_829
メッシュを選択し、物理をオンにします。
コリジョンの形をShapeTypeから選ぶことができます。
ここではモデルに沿った形の「Trimesh」を選びました。

最後に編集画面の下にある「再インポート」を押せば修正されます。

実行してみると、家に当たり判定ができましたね
pgp_830

草はやし用のtresファイルを作るよ

もしtresファイルの簡単な作り方があったらぜひ教えてほしいのですが
わからないので独自の方法でやります。

まずtresファイルを作りたいbush.glftファイルを右クリックし
「新しい継承シーン」をクリックします。
pgp_831

すると新しいシーンとしてgltfファイルが開きます。
メッシュを選択し、右側のmeshの横にある矢印をクリック
開いたメニューの中から「ユニーク化」を選びます。
pgp_832
ユニーク化すると、保存が選べるようになります。
pgp_864
保存をクリックして、リソースを保存しましょう。
bushという名前にし「plant」フォルダに保存しました。
pgp_833
tresファイルが保存できたら、新規継承シーンは不要になりますので
保存せずに閉じてOKです。

同じようにtree.gltfファイルからもtresファイルを作りたいですが
こちらには当たり判定をつけたいので
まずはダブルクリックして、家と同じ要領で当たり判定をつけましょう
pgp_834
こちらもモデルにピッタリ沿ったコライダーがいいので
Trimeshを選択しました。「再インポート」して適用しましょう。

つぎにtree.gltfを右クリックして
草と同じようにtresファイルを保存しましょう。
pgp_835

草ファイルは当たり判定がいらなかったので
シーンは保存しなかったんですが
木のほうは当たり判定がほしいのでシーンを保存します。
「tree.tscn」という名前にしました

つぎに「Tree」を右クリックし
「継承をクリア」
して、tree.gltfとは無関係なシーンにします。
pgp_846

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

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

こんな感じで、コライダーだけのスケスケ状態になっていればOK!
pgp_849
これで草木の準備はOKです

アドオンを使ってみよう

アドオンを使うには、そのアドオンを有効にしなければいけません。
上部メニューの「プロジェクト」から「プロジェクト設定」を開きます。
pgp_836
プロジェクト設定ウィンドウの
「プラグイン」のタブを開くと
アドオンフォルダ内にあるアドオンの一覧が表示されます。
SpatialGardenerをステータスを有効にしましょう。
pgp_837

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

メインシーンにGardenerが追加されました。
Gardenerの子ノードはすべて必要なので削除しないように注意です

Gardenerの作業フォルダを設定しましょう。
FileManagementの
Garden Working Directry のフォルダアイコン
をクリックします
pgp_839
フォルダを選ぶ画面が開きます。
予め作っておいた「work_dir」をえらびましょう。
(フォルダの名前や場所はどこでもOK)
pgp_840

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

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

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

LOD Variantsは複数のLODを登録することができます。
LOD0はカメラの距離が近い時に表示されるハイポリゴンのモデル
LOD1は中距離、LOD2は遠距離に表示されるモデルなので
徐々にローポリにしていく…みたいなことができます。
(アドオンの置いてある場所に解説やチュートリアルが用意されています)

今回はもともとローポリなので一つだけでいきますね。
Plantsエリアにある木のブラシにチェックを入れて
はやしたい場所をマウスの左クリックを押しながらなぞると木がおけます
pgp_844
でも、家の上に木が置けてしまいました。
消しゴムで消すこともできますが
ペイントできる場所をレイヤーで指定することもできます

gardenerのインスペクターの
「Gardening Colision Mask」が1になっていると思いますが
1を消して、2をオンにしましょう。
これでレイヤー2にだけペイントできるようになりました
pgp_819

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

これで家にはペイントされなくなりました。
でも木に当たり判定がないので埋まってしまいます。
pgp_854

ブラシの詳細設定

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

これで木にめり込まなくなりました
pgp_853

さて、木がかなり密集してしまっているのと
木の大きさが同じなのでバラバラの大きさにしてみましょう。

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

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

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


ブラシには4つのタブがあり
pgp_867
「ペイント」選択したブラシで塗る
「Erase」選択したブラシで塗った部分を消す
「Single」クリックしたところに1つだけ置く
「Reapply」すでに置いたものを新規ブラシ設定で上書き

ができます

大きさ1の木を置いたあとで
ブラシを0.5 から 1のランダムにし
Reapplyで塗り直すと、元あった木がランダムな大きさになるのがわかります。
pgp_852

ブラシには「サイズ」や「強さ」が設定できるので
一気に塗りたいときはサイズを大きくするといいですね。

さいごに法線に沿ったブラシの作り方です
通常ナナメになった部分に草をはやすと、草が上を向いてしまいます
pgp_868

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

PrimaryをNomarlに SecondaryをWorld Yにして
Up Vector Blendingの割合を変えると(図では0.5)
上の角度と、法線の角度をブレンドした方向にはえてくれます
pgp_870
デカめの草とかはブレンドするほうが自然にみえるかもしれません

今回はローポリで試しましたが
公式のチュートリアルをやるととてもきれいなワールドができるので
(アドオンのdemoの中から見れます)
そちらも合わせてチェックしてみてください
Videotogif