GodotEngineのHTML5出力(1)


どうやらHTML5出力を行うと、ビルボードとパーティクルの描画が行われないようです…というわけで、前回のデモをHTML5で生成するのを諦めて、別のデモを作成してみました。

 アインハルトさん128個!

「アインハルトさんダイスき」

ベンチマークを兼ねていますのでかなり重い動作となります。特に携帯などから実行するとバッテリの消費が激しくなってしまうと思われますので、実行の際は気をつけてください

http://www.mizunagi-works.com/gadgets/web_demo01/diceKI/index.html

 

GodotEngineのデモ(2)


なんとなく作成したシューティングゲームらしきデモですが、もう少しまともに作りかえてみました。

GodotEngineのデモ(1)


ゲームのデモと言えば、シューティング…というのは昔の話かもしれませんが。

練習としてちょっとしたデモを作成してみました。

GodotEngineの機能としては、

  • 自弾と敵本体のInstance生成
  • RigidBodyによる接触判定
  • Particleによる爆発表現
  • Singletonによるスコア値計算

といったものを使用しています。

モデルデータの作成にはMagicaVoxelを使用しました。

.

ソースコードはGitHubに置いておきました。

.

Godot用のツールを更新しました


GodotEngine向けにCOLLADAから直接tscnファイルを生成するツールを更新しました。

collada2tres https://github.com/MizunagiKB/collada2tres

以前のものは単にMeshをtres形式で出力するだけだったのですが、個別に読み込ませるのが手間だったのでシーン全体を読み込ませる様に変更しました。

GodotEngineはCOLLADAファイル経由でデータを読み込む仕組みになっていますが、変換処理部をすっとばして直接tscnファイルを生成します。

tscnファイルはGodotEngineのscnファイルをテキストで表現したものですので、少しでも内部仕様に沿っていない情報が含まれると、GodotEngine本体が異常終了する場合がある為、あまり利用する機会はないかも。

Colladaフォーマットについて


ここ一週間前後、GodotEngineで使用する為にColladaフォーマットを調べていました。

Colladaは現在Khronos groupが保守をしているXML形式のデータフォーマットで、色々なソフトウェアでサポートされているのですが、形状以外の出力はあまり積極的な対応がされていない様です。(とはいっても高価なソフトウェアを試しているわけではありませんが…)

自分が調べた範囲でのColladaのサポート状況

Cheetah3D 6.3.2

読み込み

実装されていない。

書き出し

MacOSXのプレビューにアニメーション付きで表示される。

メッシュ(形状データ)

出力される。

スキン(ボーン)

出力される。

モーフ(頂点アニメーション)

出力されない。

Blender 2.78

読み込み

メッシュ、スキン、モーフ、全て読み込める。

書き出し

名称に日本語を使用している場合は、UserInterfaceを日本語表示にしておく必要がある。

XMLの出力時に適切なエスケープがされていない箇所があるため、名称に「”」「<」「>」といった文字が含まれると破損したXMLファイルが生成されてしまう。(Shape Keysで確認)

メッシュ(形状データ)

出力される。

スキン(ボーン)

出力される。

モーフ(頂点アニメーション)

出力される。

Metasequoia 4.5.9

読み込み

日本語を使用していると文字化けが発生する。文字化けは自分が書き出したColladaファイルにおいても発生する。

書き出し

メッシュ(形状データ)

出力される。

スキン(ボーン)

出力されない。

モーフ(頂点アニメーション)

個別の形状データとして出力されてしまう。

結果

文字コードの問題かもしれませんが、読み込みについてはどのソフトウェアもまともに実装出来ていない(自分が書き出したものを読み込む事が出来ない)感じがします。Collada自体の仕様が煩雑なためかもしれませんが、もうすこしまともに読めて欲しい…

自分が使ってみた、上記のソフトウェアの中ではBlenderが一番まともに入出力が行えました。

個人的にはCheetah3Dがモーフ出力に対応してくれると嬉しかったり。

GodotEngineでMorphを行う方法


結果を先に書いてしまうと、GodotEngineはMorph(いわゆる頂点アニメーション)を行う機能自体は実装されているのですが、仕様上の制限とバグのため、利用するには幾つかの工夫が必要です。

GodotEngineは現在Version3が開発中ですので、そちら側で修正される可能性もありますので、2系で頑張っている人向けです。(なんだかPythonみたい…)

 Morphの例1

 Morphの例2

上記のモデルデータはMilboxが公開している九十九みるを使用しています。

GDScript側からの制御は簡単で、あらかじめ設定されているパラメータをset関数で設定すると、元の頂点と変更先の頂点の値をブレンディングしてくれます。

関連情報 https://godotengine.org/qa/528/where-get_morph_target-set_morph_target-amount-functions

この辺りはマニュアルに詳しく触れられていないのですが、set関数とget関数はnodeの属性を設定するための関数です。GodotEngineのエディタ上に表示されているパラメータをGDScriptから変更するために使用します。(今回の例では、MeshInstanceに存在するモーフターゲットを設定しています。)

 GUI上に表示されているMorph一覧

データの作成方法

操作する事は簡単なのですが、最大の問題はどのようにデータを作成するかという点です。

GodotEngineを使用している方でしたら、何らかのソフトウェアからCollada形式でエクスポートする事になるはずですが、どうも幾つか不具合がある様で、Morph付きでモデルデータを読み込むことが出来なかったり、読み込むことが出来ても動作しなかったりします。(参考情報 https://github.com/godotengine/godot/issues/7668

調べてみたところ、Morph機能自体は正常に動作しているのですがSkeleton機能を同時に使用する場合に正しく動作しない事が判明しました。また、オフィシャルが提供しているCollada形式のエクスポーターも正しく動作していないようです。

少なくともMorph機能自体は動作しているため、データさえ作成出来ればGodot上でさせられるます。

Colladaを介さずにGodotEngineにデータを渡す

Colladaを使用するとColladaファイル + GodotEngine側のColladaローダーを経由する為、この経路上に問題があると正しくGodotEngine側にデータを送り込む事が出来ません。

幸いな事にGodotEngineは自身のデータを「バイナリ」と「テキスト」のどちらでも読み書き出来る様になっている為、テキスト形式を使用してGodotEngineに直接送り込む事にします。

とりあえず作成したツール

そんなわけでcollada形式からtres形式に変換可能なツールを作成しました。

collada2tres https://github.com/MizunagiKB/collada2tres

補足)

GodotEngine標準のColladaローダーではScene形式で保存されるのですが、こちらはMeshファイルとして保存されます。そのためSkeleton部分の生成がされません。(ボーンの割り当てと頂点ウエイトについては埋め込まれます。)

Morph可能なデータの制限

軽く確認したところでは、Morph可能なデータは対象のSurfacesが一つだけとなっている必要があります。作成済みのモデルを分解するのはかなり面倒なのでcollada2tresでは、-mでマテリアルを指定する事が出来る様になっています。

.

実際の動作確認用サンプル

GitHubに置きました。

WindowsとMacOSX用のバイナリも置いてあります。(初めてGitHubのリリース機能を使ってみました)

https://github.com/MizunagiKB/tsukumo_face

 こんな感じのデモです。

デモの内容と関係ありませんが、描画は平行投影で行なっています。(その方がかわいく描画されるから…)

Godotのアプリケーションフォルダ構成


Godotでアプリケーションを開発する際にどういったフォルダ構成にするのが適切なのかを考えてみたり。

Godotの場合、要素を大きくわけると大体以下のような感じ

「scene」

Godotの基本構成要素。扱い方によって1ステージ、2ステージになったり、プレイヤーキャラクター等の要素になったりする。つまり、シーンだったりノードになったりする。

「script」

GDScript本体。sceneに付随していたりキャラクターの制御がゲーム進行用に独立して存在したりする。

「image」

画像

「sound」

音声

「other」

その他アプリに必要なテキストやバイナリ

最初は単純に要素毎のフォルダを用意しようと思っていたけど、scene自体が綺麗に分離出来なかったりする為、結局作成するアプリケーション単位に用意する方が都合が良さそう。

コードとデータを分離するとしたら

こんな感じ?

GodotEngineに再入門


以前にも使用したGodotEngineを再び使いはじめました。

 

この記事を書いている自転では、既に3.0alphaがリポジトリに上がっていますが、ひとまずは2.1.3stableを使用しています。

Twitterではたまにツイートしていたのですが、試しに下のような物を作成してみました。

 素材はふちゃきちを使用。

ジョイントが仕込まれているモデルを読み込んで、Kinectから制御(上の例ではMacOSX上で動作させているため、Kinect情報を一旦json化したものを再生)しています。

 

GodotEngineを使ってみる(2)


昨年のリリース以降遊ぶ時間が無かったのですが、少し遊んでみました。

まず手始めに知りたかったのは、シーンの切替方法。

一番簡単な方法としては、Autoloadチュートリアル(wikiだとtutorial=singletons)に記載されている方法。

  • プロジェクト設定にある、Autoloadを使用して、事前にスクリプトを読み込んでおく。
  • スクリプト内に関数を用意しておく。
  • シーンを切り替える際は、スクリプトを呼び出すことで

任意のスクリプトから切り替えたいシーンファイルを呼び出し。

この方法だと、リソースの読込が完了するまで固まってしまいます。

「読み込み中」といった表示を行う場合には

https://github.com/okamstudio/godot/wiki/Background%20loading

を参考にすると良さそう。

 

このページへのリンクやツイートによる共有はご自由にどうぞ