Xファイルの内のモーション(アニメーション)情報について
久っさびさに自作ゲームの事を書く事になりますねw
といっても、開発の進捗というよりも、「私はこんな感じで作ってますよ」的な事だったりします。(^^ゞ
先日、Karu_gamoさんのブログでモデルアニメーション(モーション)の話が出て、Karu_gamoさんとコメントのやりとりをした所、Karu_gamoさん作の自機のモーションデータは、私の軽く10倍のボリュームになっているという話で、「やっぱりKaru_gamoさんは凄いや!」と思い、「私のチープで(´・ω・`)なゲームのキャラって、今はこんななんですよw」という少し自虐ネタ…というか、「話のタネに聴いてくださいな。」みたいな感じで書いてみようかと思いました。
このブログのコメントは知り合いの方以外は殆んど無いものの、掲載しているサンプルの総ダウンロードは数千回も行われているので、「みんなゲームを作ってみたいんだ。」という事だけは分っており、「そーいう人向けにもちょっと書いてみようかな。」と思いました。
内容は以前の開発記事のお浚いにも少しなっているので、自分のログとしても良いと思いました。
それではダラダラと書いみてみましょう。(^^)
といっても、開発の進捗というよりも、「私はこんな感じで作ってますよ」的な事だったりします。(^^ゞ
先日、Karu_gamoさんのブログでモデルアニメーション(モーション)の話が出て、Karu_gamoさんとコメントのやりとりをした所、Karu_gamoさん作の自機のモーションデータは、私の軽く10倍のボリュームになっているという話で、「やっぱりKaru_gamoさんは凄いや!」と思い、「私のチープで(´・ω・`)なゲームのキャラって、今はこんななんですよw」という少し自虐ネタ…というか、「話のタネに聴いてくださいな。」みたいな感じで書いてみようかと思いました。
このブログのコメントは知り合いの方以外は殆んど無いものの、掲載しているサンプルの総ダウンロードは数千回も行われているので、「みんなゲームを作ってみたいんだ。」という事だけは分っており、「そーいう人向けにもちょっと書いてみようかな。」と思いました。
内容は以前の開発記事のお浚いにも少しなっているので、自分のログとしても良いと思いました。
それではダラダラと書いみてみましょう。(^^)
【モデルデータの選定】
私がXNAを用いて作っているゲームのモデルデータはXファイル(のテキスト形式)を採用しています。
これはXNAが「Xファイルの読み込みをデフォルトでサポートしている」という事と、「将来、フリーウェアのみでモデルの開発+モーションを付けるとしたら、編集し易いXファイルの開発が良いかも。」という事からXファイルに決定しました。
(ちなみにXNAはXファイルの読み込み、及び表示を行う機構は備えていますが、モデルのアニメーションを行う機構は現時点では備えていません。有志によるライブラリを用いるか自作する必要があります)
【モデルデータの作成】
モデルデータはMetasequoiaを用いて作成しています。このソフトはフリーで使用できる国産のソフトではトップレベルに位置するもので、且つ、他のソフトとの連係も非常に取りやすい事から使用しています。
また、フリーウェア版ではXファイルでの出力が行えるという事も選定の一つです。
しかし、フリーウェア版はUVの機能が使用できないので、まずはユーザ登録していないシェアウェア版にてUV付けまで行い、これをMetasequoiaファイルの形式で保存し、その後フリーウェア版にて読み込ませ、これをXファイルにて出力しています。
正直、こんなセコイ流れで開発しないでシェアウェア版を購入して、それで開発すれば良いのですが、私のポリシーとして「無料で開発を行ったという実績が欲しい」というのがあるので、このような流れとなっています。その気になればBlenderを筆頭に、他のソフトを使う選択肢もあるのですが、使ってみて「やっぱりMetasequoiaが良いな」という結果に落ち着いています。

Metasequoiaは本当に素晴しいソフトですね
【モーションの作成】
モデルができたら、いよいよモーション(アニメーション)の作成です。
作成したMetasequoiaのデータをRokDeBone2を用いてモーション付けを行います。
走るモーションのようなモーションのループを行うモーションを作成する場合は、一番最後のフレームが一番最初のフレームに戻っても違和感の無いように作成しました。
私はこの辺りのスキルが全く見につかず、今年の頭にKaru_gamoさんとファミレスで初会合した時には、このモーションを見せるのがとても恥しかった想い出があります(^^ゞ
でもまぁ、少しずつ使っていって、将来は少しは見れるものにできると良いかな…と思っています。
将来を見据えれば、時間はまだまだ一杯ありますしね。(^^)
作成の流れは、モデルデータにボーンを仕込み、これをボーンデータとして出力しておき、これにモーションを付けます。
1つ目のモーションができたら、このモーションに名前を付けてから、Xファイル形式でファイル出力をして、モデルデータ+モーション(アニメーション)データ付きのXファイルのできあがりです。これをマスターのデータとして行きます。
[これから使うデータ]
・モデルデータ(Metasequoia形式)
・ボーンデータ(RokDeBoneのボーンデータ形式)
・モデルデータにモーションを付けたXファイル(Xファイル形式{テキスト})
ゲームとしては、このモーションを付けたXファイルを使用する事になります。

ボーンとモーションを付けるのに最高なフリーウェアRokDeBone2
【モーションを繋ぐ】
再びモデルデータから別のモーションを作成する作業を行います。
RokDeBone2よりモデルデータとボーンデータを読み込み、再び初期のモデル状態からモーションを作成し、モーションに名前を付けてXファイルを出力します。
ここで、出力したXファイルの中のモーション(アニメーション)情報を検索し、アニメーションデータのみを抜き出して、マスターのXファイルの末尾に結合します。
ゲームとしては、モデルデータと、ボーンデータ、モーションデータを分離して管理するので(正確にはスキン情報や、スキンウェイト等の様々なデータ)、モーションデータを末尾に付けても問題無いようになっています。(Xファイルはテンプレート&データオブジェクトで情報を管理しているので、これに従って繋いている感じです)

"AnimationSet"というデータオブジェクトをまとめてマスターとなるXファイルの末尾に繋ぎます
【モーションを確認する】
繋いだXファイルがちゃんと組込めているか、MeshViewで確認します。このMeshViewは、過去のDirectX SDKに付属されていたプログラムで、現在は違うビューアに差し替えられてしまいました。しかも方向性が変ってしまったビューアに…
このため、私は昔のDirectX SDKを別口でインストールしています。まぁ、DirectXはCOMでできているので、上書きしようがインターフェースのバージョンさえ適切になっていれば、問題無い話だったりします。開発環境によっては、MeshViewだけ抜き出したりもしました。
このMeshViewには、Xファイル内の各アニメーションを表示する素晴らしい機能があり、これを用いて埋め込んだ複数のモーションを確認しています。
私が現時点で自機(プレイヤー)に設けたモーションには、以下のものがあります。(現在は11種類)
・停止(息使いのようなモーション)
・歩行
・走る
・ジャンプ
・上攻撃
・下攻撃
・防御(上側と下側兼用)
・Z注目時のサイドステップ
・高い所から落ちた際のダメージ
・振り向き(イベント用)
・死亡モーション

MeshViewで各アニメーションを確認
"Animation"メニューの中の"Animations"にて一覧が表示されます
とまぁ、こんな感じです。これで約 2 万行のテキストファイルになっています。
興味があればダウンロードをどうぞ。
SampleActionGame3D Playerモデル
(Xファイル テキスト形式 (38,734バイト))
実際のモーションファイルの解析方法や、XNAの場合のインポーターの実装方法の話は真面目に書くと本が書けてしまう位、一杯書く事があるので、今は割愛ということで。
とりあえずそれを自前で実装すると、下のようなプレイヤーのアニメーションが実施できると言う感じです。
【サンプルのステージを紹介】
この動画は、以前紹介したステージ13です。結構自機が動きまわっているので、サンプル紹介としてはもってこいだったりします。
このような作業を黙々とやって実現するのはとても大変ですが、動いた時の感動はひとしおですね。
最近は違う事に興味が行ってしまっているので、自作ゲームの開発はすっかりご無沙汰になってしまいましたが、とりあえず「知識だけは持っている」ので、そのうち興味のベクトルが戻ってきたら再開する事でしょう。まぁ、いつになるかは不明ですけどねw
道具と知識と空想が揃っている分には、別に古いも新しいも関係ないので、「何かを産み出したい」と思う事が重要ですよね。
大風呂敷を広げずに、自分のスキルにあった楽しい開発を淡々と進められる事が一つのゲームを作りあげるためのコツだと思います。
私がXNAを用いて作っているゲームのモデルデータはXファイル(のテキスト形式)を採用しています。
これはXNAが「Xファイルの読み込みをデフォルトでサポートしている」という事と、「将来、フリーウェアのみでモデルの開発+モーションを付けるとしたら、編集し易いXファイルの開発が良いかも。」という事からXファイルに決定しました。
(ちなみにXNAはXファイルの読み込み、及び表示を行う機構は備えていますが、モデルのアニメーションを行う機構は現時点では備えていません。有志によるライブラリを用いるか自作する必要があります)
【モデルデータの作成】
モデルデータはMetasequoiaを用いて作成しています。このソフトはフリーで使用できる国産のソフトではトップレベルに位置するもので、且つ、他のソフトとの連係も非常に取りやすい事から使用しています。
また、フリーウェア版ではXファイルでの出力が行えるという事も選定の一つです。
しかし、フリーウェア版はUVの機能が使用できないので、まずはユーザ登録していないシェアウェア版にてUV付けまで行い、これをMetasequoiaファイルの形式で保存し、その後フリーウェア版にて読み込ませ、これをXファイルにて出力しています。
正直、こんなセコイ流れで開発しないでシェアウェア版を購入して、それで開発すれば良いのですが、私のポリシーとして「無料で開発を行ったという実績が欲しい」というのがあるので、このような流れとなっています。その気になればBlenderを筆頭に、他のソフトを使う選択肢もあるのですが、使ってみて「やっぱりMetasequoiaが良いな」という結果に落ち着いています。

Metasequoiaは本当に素晴しいソフトですね
【モーションの作成】
モデルができたら、いよいよモーション(アニメーション)の作成です。
作成したMetasequoiaのデータをRokDeBone2を用いてモーション付けを行います。
走るモーションのようなモーションのループを行うモーションを作成する場合は、一番最後のフレームが一番最初のフレームに戻っても違和感の無いように作成しました。
私はこの辺りのスキルが全く見につかず、今年の頭にKaru_gamoさんとファミレスで初会合した時には、このモーションを見せるのがとても恥しかった想い出があります(^^ゞ
でもまぁ、少しずつ使っていって、将来は少しは見れるものにできると良いかな…と思っています。
将来を見据えれば、時間はまだまだ一杯ありますしね。(^^)
作成の流れは、モデルデータにボーンを仕込み、これをボーンデータとして出力しておき、これにモーションを付けます。
1つ目のモーションができたら、このモーションに名前を付けてから、Xファイル形式でファイル出力をして、モデルデータ+モーション(アニメーション)データ付きのXファイルのできあがりです。これをマスターのデータとして行きます。
[これから使うデータ]
・モデルデータ(Metasequoia形式)
・ボーンデータ(RokDeBoneのボーンデータ形式)
・モデルデータにモーションを付けたXファイル(Xファイル形式{テキスト})
ゲームとしては、このモーションを付けたXファイルを使用する事になります。

ボーンとモーションを付けるのに最高なフリーウェアRokDeBone2
【モーションを繋ぐ】
再びモデルデータから別のモーションを作成する作業を行います。
RokDeBone2よりモデルデータとボーンデータを読み込み、再び初期のモデル状態からモーションを作成し、モーションに名前を付けてXファイルを出力します。
ここで、出力したXファイルの中のモーション(アニメーション)情報を検索し、アニメーションデータのみを抜き出して、マスターのXファイルの末尾に結合します。
ゲームとしては、モデルデータと、ボーンデータ、モーションデータを分離して管理するので(正確にはスキン情報や、スキンウェイト等の様々なデータ)、モーションデータを末尾に付けても問題無いようになっています。(Xファイルはテンプレート&データオブジェクトで情報を管理しているので、これに従って繋いている感じです)

"AnimationSet"というデータオブジェクトをまとめてマスターとなるXファイルの末尾に繋ぎます
【モーションを確認する】
繋いだXファイルがちゃんと組込めているか、MeshViewで確認します。このMeshViewは、過去のDirectX SDKに付属されていたプログラムで、現在は違うビューアに差し替えられてしまいました。しかも方向性が変ってしまったビューアに…
このため、私は昔のDirectX SDKを別口でインストールしています。まぁ、DirectXはCOMでできているので、上書きしようがインターフェースのバージョンさえ適切になっていれば、問題無い話だったりします。開発環境によっては、MeshViewだけ抜き出したりもしました。
このMeshViewには、Xファイル内の各アニメーションを表示する素晴らしい機能があり、これを用いて埋め込んだ複数のモーションを確認しています。
私が現時点で自機(プレイヤー)に設けたモーションには、以下のものがあります。(現在は11種類)
・停止(息使いのようなモーション)
・歩行
・走る
・ジャンプ
・上攻撃
・下攻撃
・防御(上側と下側兼用)
・Z注目時のサイドステップ
・高い所から落ちた際のダメージ
・振り向き(イベント用)
・死亡モーション

MeshViewで各アニメーションを確認
"Animation"メニューの中の"Animations"にて一覧が表示されます
とまぁ、こんな感じです。これで約 2 万行のテキストファイルになっています。
興味があればダウンロードをどうぞ。
(Xファイル テキスト形式 (38,734バイト))
実際のモーションファイルの解析方法や、XNAの場合のインポーターの実装方法の話は真面目に書くと本が書けてしまう位、一杯書く事があるので、今は割愛ということで。
とりあえずそれを自前で実装すると、下のようなプレイヤーのアニメーションが実施できると言う感じです。
【サンプルのステージを紹介】
この動画は、以前紹介したステージ13です。結構自機が動きまわっているので、サンプル紹介としてはもってこいだったりします。
このような作業を黙々とやって実現するのはとても大変ですが、動いた時の感動はひとしおですね。
最近は違う事に興味が行ってしまっているので、自作ゲームの開発はすっかりご無沙汰になってしまいましたが、とりあえず「知識だけは持っている」ので、そのうち興味のベクトルが戻ってきたら再開する事でしょう。まぁ、いつになるかは不明ですけどねw
道具と知識と空想が揃っている分には、別に古いも新しいも関係ないので、「何かを産み出したい」と思う事が重要ですよね。
大風呂敷を広げずに、自分のスキルにあった楽しい開発を淡々と進められる事が一つのゲームを作りあげるためのコツだと思います。
コメント
コメントの投稿