プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
真恋姫無双(乙女大乱)
真・恋姫無双 ~乙女大乱~
三国志の登場人物がほぼ全員女性として登場する。アニメシリーズとしては第三期にあたる。地方テレビやAT-Xなどで放映中。



◎メイン画面の表示モード

メイン画面は「一人称視点」「トップビュー」の2つの表示モードを任意に切り替えられるようにするつもりです。一人称視点モードは、主人公武将の状況に応じてカメラが自動的に移動します。

トップビューモードは、上空から地面を見下ろしたような画面です。表示位置や縮尺(カメラと地面の距離)などを任意に変更できます。(カメラ角度は後日検討)

このモードで全体マップを確認できるので、全体マップ専用画面(小画面)は設けないかもしれません。(後日検討)

尚、演出シーンなどでカメラが自動的に動くことはあります。



◎履歴表示

メイン画面の表示モードとは別に、履歴表示のオン/オフ等を制御できるようにします。履歴表示をオンにすると、履歴に記録された部隊がトップビュー画面上に半透明で表示されます。(トップビューモードのみ表示。一人称視点モードでは表示されない)

この履歴画面のイメージを作成したいのですが、履歴には各軍部隊の様子が記録されるので、先に旗手ユニットを作成して、旗手ユニットが持つ旗の色で敵味方の区別が付くようにしましょう。



◎旗手アニメ作成方法

どうせ旗手を作るなら、旗手の歩行や旗がはためくアニメを作成し、そのままメイン画面に実装したいものです。ですが、旗がパタパタとはためくアニメはどのように作れば良いのでしょうか?

旗の事だけ考えると、旗のアニメ画像を数枚用意して切り替えるのが一番シンプルと思いますが、今のメイン画面はユニット全体のアニメ画像をUVアニメ方式で表示しているので、XNAで旗画像のみ差し替えるようなマネは出来ません。

そこで、Softimageで旗手ユニットを作成し、ポリゴンを動かして旗がはためくアニメを作成します。このアニメの連画をツールで取得し、他のユニットと同様にXNAでUVアニメ表示します。



◎旗画像の作成

イベントCGの旗を参考に、旗の画像イメージを作成しました。

旗01

魏は青、呉は赤、蜀は緑で作成します。字は潰れて判別できないことが多いでしょうが、色でなんとなく分かればOKでしょう。



◎旗ポリゴンの作成

槍兵歩行モデルを流用して、旗手モデルを作成します。まずはポリゴンを取得して旗ポリゴンを作成しました。

旗手01

旗ポリゴンをBiped_Shadow配下に移動し、前述の旗画像を張り付けて、棒状の部分は槍と同じマテリアルに設定しました。DirectX用シェーダに設定したので、Softimage上では一色で表示されています。

本来は、Softimage上の表示モードを切り替えて見た目を確認できるはずなのですが、私のPCでは画像乱れまくったり強制終了したりでまともに表示されません。(昔からそんな感じです)

というわけで、見た目や設定が正しいか否か、Softimage上では確認できません。XNAに出力して表示すると…旗ポリゴンは全く表示されませんでした。(槍兵のみ正常表示)

うへ~やな感じ…(ー_ー;



◎エンベロープ設定

とりあえず、旗ポリゴンのエンベロープを設定すると、槍兵の動きに連動して旗ポリゴンも動くようになりました。

旗手02

しかしまだXNAで旗は全く表示されません。



◎クラスタデータの作成

いろいろ調べて特に気になったのは、槍兵のようなXNA表示可能モデルはClustersの下にクラスタデータがあるのですが、旗ポリゴンの下にはこれが無い点です。

クラスタデータの例
Clusters配下の「Arm1」がクラスタデータの例

槍兵モデルの時は、メタセコイアモデルをツールでコンバートしたら自動的にクラスタデータが存在しました。XNAで表示する際には、このクラスタデータが必要かも?(確かそんな記憶が…??)

ところが、オブジェクトやポリゴンを選択して「EDIT>クラスタの作成」としたくても、コマンドが選択不可状態です。一体どうすればクラスが作成できるのか調べると、Uキー(ショートカット)を利用してポリゴンの一面を選択すると出来ることがわかりました。

これだけ機能が沢山あるのに、ショートカットにしか存在しない機能もあったりして、分かり難くて不親切な所がSoftimageの欠点ですね。正直言うと、心の中の一部でSoftimage敬遠してます。だからなかなか覚えられないのかもしれませんが…(苦笑)

というわけで、旗ポリゴンにクラスタを追加すると、ようやくXNAで棒が表示されました。

旗手03   旗手04

棒がやたら長いのは、最初の棒ポリゴン取得時に長くしすぎたためです。Softimage上では調整したのですが、XNA表示時は旗のスキンアニメは無視されたようです。ちなみに、この状態でも位置情報や回転情報(非スキンアニメ)は反映されるらしく、旗の向きは回転します(棒の回転は反映されません)。



◎ボーン作成

旗ポリゴンの移動回転(トランスフォームなど)が一部しか反映されないのは、スキンアニメ情報が反映されないからでしょう。シェーダを個別に設定すれば、旗だけ非スキンアニメにできるかもしれませんが、人物モデルがスキンアニメなので、旗ポリゴンもスキンアニメにします。

ちなみに、本番ゲーム上では全てUVアニメになるので、スキン/非スキンによるレスポンスの影響はありません。

旗ポリゴンをスキンアニメ化するために、ボーンを作成します。「作成 > スケルトン > 2Dチェインの描画」で2Dチェインを作成し、Transform等を旗ポリゴンの棒に合わせます。(この時、XYZが反映されない時は、個別に設定すると上手くいくことがあります)

2Dチェインの場所が確定したら、旗ポリゴンを選択して「デフォーム > エンベロープ > エンベロープの設定」でエンベロープを設定します。これで、2Dチェインを動かすと旗ポリゴンが移動するようになりました。

その後、Scene_Root直下のroot(今作成した2Dチェイン)の名称を変更し、Biped_Shadow→GlobalSRTの下の適当な場所に移動しました。Softimage上では、手の動きに連動して旗ポリゴンが移動します。

これでOKかと思ったら、XNA上では全く動きません。
あれ?まだ何かあったっけ?

昔の記事(こちらこちら)を読み直すと、「リグでボーン作成→Rig作成用スクリプト実行→シャドウリグへのボーン追加」の手順でやってました。なるほどねぇ。



◎エラーの発生と対処

XNAで表示できる目途が立ったので、ボーンとポリゴンを作りなおしました。

旗手05

旗を分割してパタパタを可能としました。旗がXNAでどのように表示されるか確認しようとしたら、Softimageランタイムのコードでエラーが発生しました。

指定されたキャストは有効ではありません。

原因を調べると、スクリプトで作成したボーンをシャドウリグに追加する際に、リグとシャドウリグの階層構造が違うことを気付かずそのまま追加したことが原因だったようです。

スクリプトで作成されたボーンを1つ削除してシャドウリグの階層構造を整理すると、エラーは解消されました。

しかし、XNAでは追加した旗が全くアニメしません。
いい加減動いてくれ~!!



◎次回予告

というわけで、15時間かけてまだXNAで表示出来ません。
メタセコイア&RockDeBone2なら2時間で出来そうなことなのに…。

Softimageを使うと毎回苦戦を強いられますが、その理由は

「XNAで使えるボーン数が少ない→ボーン数を節約するためにシャドウリグを利用→階層構造や連携設定が複雑化→少しでも間違えるとXNAで表示されない」

というわけで、XNAのボーン数が全ての元凶です。XNAの新バージョンがボーン数増えてないか調べてみようかなぁ…。

6月になったので、とりあえず次回は「5月の総括と6月の目標」です。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

XNAのModelクラスに依存している場合、ボーンの最大数は“エフェクトパラメータ数の上限”(←モデルインスタンシングで使ったあれですね)で決まるはずなので、XNAのバージョンというよりはシェーダのバージョンや描画デバイスの能力で決まることになります。

Softimageの場合はランタイムがあるということで、XNA用のクラスライブラリがあるのだと思いますが、結局それがModelクラスの派生か何かじゃなかったでしたっけ?

問題はライブラリ?

>エフェクトパラメータ数の上限
それはつまり、コンテンツプロセッサがモデルデータを読み込む際に、定数レジスタをどのように割り当てるかで上限が決まる、という認識で良いでしょうか?

てっきりXNA本体の制限かと思ってましたが、データを読み込むランタイムライブラリの制限だったとは…。ちなみに、Softimageランタイムのボーン数上限は58です。


>XNA用のクラスライブラリ
仰る通り、データはModelクラスの派生に格納されます。なので、データが格納された後は改造可能です。

問題はデータ形式やコンテントインポーター、プロセッサが全てオリジナルなので、ここで制限されると手を出すのは難しそうな気がします。

※念のため、私は“Softimageランタイム”という言葉をXNAで呼び出せるC#のライブラリという意味で用いています。合ってます?

58行列×4レジスタ=232、SM2.0の下限は255でしたね。と言うか、アニメの再生をライブラリに頼っている以上、それを再生するためのエフェクトファイルも用意されているんじゃないでしょうか。定数レジスタの割り振りはそこで決まるはずです。で、ボーンの上限を決める要因は他に見当たらない気がします。

ひにけにXNAでもボーンの数を増やす記事はありましたし、少なくともXNAそのものの制約ではないと思います。Softimageランタイムに、何らかのカスタマイズ方法が用意されていないでしょうか?

※あとすみません、Modelクラスはsealedでしたね…(汗)。

問題はエフェクトファイル?

>Softimageランタイム
私の場合は、Softimageの.xsiデータをXNAで表示するための部品の総称(インポータ、プロセッサ、ライブラリ、エフェクトファイル、XNA側の拡張Modelクラス等含む)として呼んでました。わかりにくくてすみません。

>エフェクトファイル
中身を確認したら、最大ボーン数を58に制限している箇所がありました。なるほど、これがネックでボーン数が制限されていたのですね。

他の部品の制限有無は不明ですが、もしここだけであればボーン数を増やすことが可能かもしれませんね。

>Modelクラスはsealed
それで拡張Modelクラスが(継承ではなく)独自クラスに標準Modelクラスを追加する方式で実装されていたのですね。

とりあえず、ひにけにXNAの記事を読んでみます。ありがとうございました。

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。