プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵再作成39
再作成中の槍兵モデル
標準リグ方式をやめて、ボーンを1から作り直した。IKは使えないが、XNA連携上の問題は無さそうだ。



◎階層の基本構造

ボーンを1から作るにあたり、まず「何を参考に、どんな階層構造とするか?」を考える必要があります。

A案:階層の概観はロボットサンプル、
   中身は標準リグのような構造とする

B案:キャプテンサンプルのように平坦な階層とする

平坦なボーン階層というのは馴染みが無いので、A案でやってみます。

1 「取得>プリミティブ>ヌル」でヌルを追加

2 ヌルをモデル直下に移動し「DeformerRoot」に名称変更

3 「2Dチェインを描く」や「チェインにボーンを追加」などで
  (DeformerRootの下に)チェインやボーンを追加

チェインやボーンの作成に際し、気になる点が多々あるので、まずは大雑把に作成してXNAで動くかテストしましょう。



◎左右対称チェインの作成

腕や足などのボーンは左右対称です。ボーンの座標を細かく調整した後で、左右対象コピーが簡単に出来ると楽なんですが、可能でしょうか?

まず腕からやってみます。階層ツリーは編集の切り貼りで簡単に出来ました。問題はX座標の反転ですが、チェイン終点のX座標を反転したら、全てのボーンのX座標が反転しました。

しかし足を同様にやってみると、切り貼りした段階で向きや座標がおかしくなりました。足はいろいろ調整したので、その影響かもしれません。とりあえず手動で適当に修正します。

槍兵再作成34   槍兵再作成35

エンベロープやアニメなどを適当に付けると、XNAで無事に動きました。
とりあえず大雑把なテストとしては成功ですね^^



◎槍ボーン追加テスト

槍ボーンを追加して、両手で持てるか確認します。

槍兵再作成36   槍兵再作成37

前回ラストのような位置ズレはなさそうです。念のため両足も確認しましたが、問題無さそうでした。



◎気になるポイント

もう一度、気になるポイントを抑えながら細かく丁寧に作り直します。

・ボーンはわざと曲げた方が良いか?
 →IKで曲がる方向を決めるために曲げた方が良い

・チェインの繋ぎ目をどうするか?(後述)

・頂点は揃えるべきか?(後述)

・変な方向に曲がることが多い(後述)



◎チェインの繋ぎ目

前回ラストで、SoftimageとXNAの位置ズレが発覚しました。その原因として「チェインの繋ぎ目」を疑っています。

XNAのボーンは「次のボーンは、前のボーンの終点から連続している」ことを前提としています(多分?)。しかしSoftimageのチェインはその前提を関知しないので、上位ボーン終点と下位チェイン開始点の座標が一致しない場合「XNAでズレが生じるかもしれない」と考えたわけです。

上位ボーン終点と下位チェイン開始点の座標が一致しない場合

上図でボーンAの階層下にボーンCが存在する場合、ボーンA終点とボーンC開始点の座標が一致しないので、XNAでアニメする際に位置ズレが生じます。


この位置ズレの対策として、下記3案を考えました。

A案:座標の位置を合わせる
B案:コンストレイン機能で合わせる
C案:同一のチェインにまとめる

A案は、座標を1つ1つ手動で合わせるシンプルな手法です。微調整の際に、関連する全ての座標をいちいち変更するのはちょっと手間かもしれません。

B案は、下位座標を上位座標に連動するようセットしておきます。微調整は楽になりそうですが、設定を誤るとややこしいことになりそうです。

C案は、同一チェイン内のボーンとして座標を一致させます。極端な話、1つのチェインで全てのボーンを記述すればズレは生じません。但しIKはボーン全体に影響します。

C案はダメですね。上手く出来ればB案が良さげな気がしますが「上手く出来るならここまで苦戦しねーよ!」って一人ツッコミが入ったので、A案にしましょう。(^^;



◎複数の頂点を揃える

ボーンはわざと曲げた方がIKのために良いと確認しました。しかし背骨から頭部に向かう正中線ボーンのX座標は全て0にしないと心理的に落ち着きません。ロボットサンプルを確認すると、背骨や首骨等のX座標は全て0でした。やっぱりそうだよねぇw

しかし背骨から頭骨までボーンを一通り記述した後でX座標を0に修正すると、他の骨のX座標が自動的に変更されてしまい、全て0にするのは案外難しかったりします。ボーン作成時にグリッドとスナップを使って揃えられないかと思ったのですが、グリッドがXZ軸にあって上手くいきません。

ネットを調べると、こちらの記事に「複数の頂点を揃えるには?」との項目がありました。(昔読んだような…デジャブ?)

実際にやってみると、上手くいく場合と一部反映されない場合がありました。「おかしいな?」といろいろ試したら、マウス中ボタンで一括選択した場合と、シフトキーを押しながら複数選択した場合とで、結果が異なることが判明しました。

ガガーン!!

これはショックです。試行錯誤中は‘試す度に結果が異なる’ことで悩むことが多かったのですが、原因の大半はコレじゃないでしょうか?(爆)



◎チェインの構成

RokDeBone2の場合、手元のボーンを曲げると、その先のボーンもそのまま移動するだけです。しかしSoftimageの場合、手元のボーンを曲げるとその先のボーンも自動的に曲がることがあります。

これが狙い通りに曲がる場合と、あらぬ方向へ曲がる場合があるのですが、そのボーンを修正すると他のボーンもおかしくなって、容易に戻せなかったりします。この現象が頻発するようになったと思ったら、どうやらチェインの構成が悪かったようです。

例えば、正中線上の背、首、頭のボーンを1つのチェインでまとめてしまうと、この現象が頻発します。背骨で1つのチェイン、首骨と頭骨で1つのチェインにすると、わりと素直に曲がります。

チェインの構成はIKやFKに影響するので、よく考えろってことですね。ポイントとしては、別方向に曲がるボーンは別チェインにすべきもののようです。標準リグを参考に構成を見直します。



◎続・チェインの繋ぎ目

改めて考えると、前述の槍ボーンは離れてるのに位置ズレは無さそうでしたね?ロボットサンプルを確認すると、肩骨は胸骨から離れてました。「離れたチェインはXNAで位置ズレを起こす」という仮説は、的外れっぽいなぁ…。

でも、他のチェインの多くは上位チェインの終点座標からスタートしています。私もそうしたいのですが、ボーン記述後にいちいちXYZの各値をコピーしているので、ちょっと手間なんですよねぇ。もっと手軽な方法はないか探っても、長いチェインを記述して「ボーンでチェインを分割」で切断するぐらいしか見当たらないし…。

…待てよ?スナップ機能で合わせれば良いのでは?

スナップのターゲットを「すべてのオブジェクト」から「ヌル/チェイン」に変更したら上手くいきました。「すべてのオブジェクト」でチェインにスナップしないのはちょっと気に入らないのですが、まぁいいか…。



◎チェインルートの回転値

通常は、ボーンの回転値が(0, 90, 0)の場合、Y軸に垂直な直線を想像するでしょう。ところが、Softimageで適当なボーンにこの値を入力すると、斜め方向に直線が延びることが多いのです。

この謎はXNA連携のデバッグ難度を高める要因の1つだったのですが、今回その謎が解けました。チェインルート(開始点)の回転値が影響していたのです。チェインルートの回転値を(0, 0, 0)とすると、ボーンは予想方向に曲がりました。

困ったことに、「2Dチェインを描く」でボーンを描くと、チェインルートの回転初期値が適当な値になってしまい、これを(0, 0, 0)とすると描いたボーンが変な方向に曲がってしまいます。

以前はここでビビって元に戻していた(CTRL+Z)のですが、今回は全てのチェインルートの回転値を(0, 0, 0)とします。変な方向に曲がったのをいちいち修正するのは手間ですが、これで数値入力による制御が可能となります。どうせなら全てのボーンの回転値を整数で付け直すと、後で感覚的にわかりやすいですね。

しかしこんな面倒なこと、普通しないんだろうなぁ…と思ってロボットサンプルを確認したら、正数値のボーンが若干ありました。考え方としては、コレもアリってことか?w



◎左右対称チェインの作成(その2)

正中線ボーンのX座標を揃えたので、次は手足のボーンです。ヘルプや前述の記事に「対称ボタンを使え」とありましたので、今度はこの手法で記述します。

ふむ、確かに左右対称にボーンが描けますね。チェインルートの回転値をいちいち修正しているので、ありがたみは薄いですがw


…後で気付いたのですが「対称に複製」機能がありました。これを使うと、片側調整後に左右対称複製などが可能です。

これは便利でありがたいのですが、チェインルートの回転値が反転するので、(0,0,0)ではなくなってしまいます。動作には影響無いのですが、後でデバッグする際にわかりにくいかも…。

いずれにせよ、ボーン名称は1つ1つ手動で変更する必要があります。RockDeBone2はRとLを自動的に換えてくれましたが、さすがにあんな強引なことはしてくれません(笑)



◎とりあえず完成

ボーンが完成したので、再度エンベロープやアニメを大雑把に付けてテストします。

槍兵再作成38   槍兵再作成39

感触はまずまず良好で、XNA連携上の問題は無さそうです。


但し、難点が2点あります。

・IKは期待はずれな方向に曲がるので実質使えない
 →当面はFKオンリーで作成する

IKが使えないことはある程度覚悟してました。もっと研究すれば期待通りの方向に曲がると思いますが、今はそこまでする必要性を感じないので後日の課題とします。


・デフォルトポーズやニュートラルポーズが不完全

大半は一発で初期ポーズに戻りますが、個別選択してリセットしないと戻らないボーンが2本あります。また、よく見ると他のボーンも初期値と微妙に誤差があります。見た目に影響は無いのですが、気分的にはちょっとイマイチです。



◎次回予告

ボーンの構成/座標/角度などを丁寧に作り直したのですが、時間をかけたほどの効果は無かったかも(汗)

でも少しは勉強になったし、小ワザも幾つか覚えたので良しとしましょう。


次回はエンベロープウエイトの微調整とモーション作成です。

スポンサーサイト

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵再作成33
再作成中の槍兵モデル
足首の階層を修正し、表示崩れはなくなったが、頂点位置が微妙にズレるケースがあるようだ。



◎目玉の位置

HPの技術資料では、標準取得メッシュを利用して人体モデルをXNAで動かします。

しかしXNAでは目玉が別の場所に表示されて、どうしても表示位置を補正できなかったのですが(1年前から)、実はコンストレイン機能が働いていたらしく、「すべてのコンストレインの削除」としたら補正可能となりました。

さらに「ニュートラルポーズの解除」→「すべての変換をフリーズ」とすると、左目はOKで右目だけズレました。

右目の位置がおかしい

…何故右目だけ!?


その後もかなり苦戦しましたが、「すべての変換をフリーズ」で付与された右目メッシュのセンター位置を強引に補正するとXNAで正常に表示されました。

右目の位置を修正した   Softimageでは右目の位置がおかしい

ちなみに、右目メッシュ全体の位置を修正して「すべての変換をフリーズ」するとXNAで正常に表示されます(左図)が、その場合Softimageで右目位置がズレます(右図)。

気になる場合は、Softimageでセンター位置をずらすと(センター位置はXNAに反映されないので)どちらも正常な位置に表示されます。

…我ながら強引な回避策ですね(汗)



◎槍ボーン追加

右目の問題は一応ケリが着いた(?)ので、槍兵再作成の続きです。

1 「2Dチェインを描く」でボーン追加

2 ボーン位置微調整
  →「ニュートラルポーズの設定」
  →「すべての変換をフリーズ」

3 チェイン/ボーン名称変更

4 チェインをGlobalSRT階層のRForearmの下に移動

5 ボーンをenvelope_groupに追加

6 エンベロープ再設定

気になるのは、キャラクタキーセットを追加しなくてもXNAでちゃんと表示されるのか?という点ですが…。

槍兵再作成30

画像が崩れました。階層の位置を変えてキャラクタキーセットを追加してもダメ。中継ボーンを追加してもダメ。

以前はこれでうまくいったんだけどなぁ…手首の階層構造の修正が影響してるのか?



◎手だけじゃない

よく見ると、ボーンを追加した槍や右手は崩れずにアニメし、関係無い右足が崩れています。何故でしょうか?

…ハッ!?もしや!?

足首のコントローラは4つあって、普段は1つしか動かしてませんでした。試しに以前のモデルで他の3つを動かすと、XNAに反映されませんでした(形は崩れないが動かない)。

ガーン!!

これまで気付いてなかっただけで、実は足首も手首同様XNAと相性が悪かったのね(爆)




◎足首階層の修正

というわけで、足首から先の階層構造も手首同様に修正しました。ついでに槍ボーンも実装。

槍兵再作成31

足首付近の4つのコントローラが全て反映されました。

修正後、表示崩れは一切無くなって、安定感が出てきました。他人には理解できないと思いますが、アクション付けてXNAで崩れないという安心感は、大変快適です!www


HPの技術資料に目玉と足首階層の件を反映しました。



◎勘違いループ

槍ボーンを実装してみると、腕骨の先よりも掌骨の先に付けた方が良いことに気付いたので階層を修正。相対位置がずれるので、ニュートラルポーズの位置を付け直すためにアクションも作り直したのですが、XNAの表示は問題なし。

その後も、腕ボーンの長さを調節したり手のエンベロープウエイトを調整したりと細かく修正。腕を曲げてもクシャクシャにならず、掌を伸ばしても自然に見えたりと以前気になった点が改善できるようになりました。まぁ、連画に取り込んじゃえば大差無いので自己満足なんですけどねw

で、出来あがったアクションをXNAで動かすと、Softimageと槍の位置が微妙に違うような…?
よく調べると、槍ボーン一本では位置アニメがXNAで反映されないことが原因でした。
この勘違いこれで何度目だっての!(爆)

エラーにならず表示崩れず好きな座標に配置して回転アニメも可能だが、座標移動アニメのみ反映されない

スケール変更不可となったため、中継ボーンを入れても腕からの距離変更不可で意味無し。というわけで、槍位置変更アニメ無しという以前の結論に戻りました。



◎位置ズレの問題

待機姿勢から歩行開始までのモーションを作成しました。

槍兵再作成32   槍兵再作成33

Softimageでビシっと決めても、XNAで槍の位置がずれます。
槍ボーンの回転の問題か?
しかしよく見ると、腕の角度が微妙に異なる気もします。
うーん、どっちの問題??

さらに腕の模様を比較すると、SoftimageとXNAで模様の大きさの比率が異なります。模様が異なるだけなら良いのですが、頂点座標もズレてないか心配です。頂点座標が少しでもズレると、槍を両手で持てなくなります。



◎試行錯誤の輪廻

手足の階層を修正して画像は崩れなくなりましたが、今度は位置ズレです。

現象が生じるからには原因があるわけで、頑張れば解決できるとは思いますが、これが最後の問題という保障も無いので、いい加減ウンザリしてきました。この問題を解決しても、また別の問題が生じたり、いつの間にかSoftimageとXNAで違ってたりするかもしれません。

シャドウリグ方式をやめれば試行錯誤の輪廻から抜け出せると期待したのですが、結果的には抜け出せてないですね。そもそもリグやシャドウリグを使うのは

・ボーンを1から作るより楽
・コントローラを使うと滑らかなアニメが手軽に作りやすい

という理由だったわけですが、実際にメリットがあるのは歩行アニメ時の足コントローラぐらいです(手は細かく動かすのでコントローラ使えない)。

むしろXNA連携で苦労しまくりなので、コントローラは諦めて1からボーン作った方がはるかにマシですね。



◎次回予告

どうにも暑過ぎなのでしばらく夏休みを取得しました。その間に考えたのですが、そもそも公式ドキュメントには「リグを使え」とは一言も書かれていないので、公式ドキュメントに沿ってボーンを1から作り直すことにします。

ここまでやっといて残念ではありますが、全てがムダになるわけではないので、気を取り直して頑張りましょう。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵再作成28
再作成中の槍兵モデル
手首から先の階層構造を修正してXNAで可動可能とし、エンベロープウエイトを調整した。



◎ボーン追加

槍と着物の裾のボーンを追加します。

・中継ボーン不在の空中浮遊ボーンOK
 →但しGlobalSRT階層の構造は要注意

・Softimageのコンストレイン機能はXNAでは無効
 →ボーン階層による自動連動しかない??

最初は裾ボーンを腰骨の下に付けたのですが、XNAでは連動せずにNG。左右の裾ボーンはそれぞれ左右の大腿骨に付けるとして、問題は中央の裾ボーン。結局左右いずれかの大腿骨に付けて片側の連動は無視。うーんイマイチ…。

中継ボーン不要とわかったので、以前と同じボーン数で裾を2段階曲げることが可能になりました。但し着物メッシュの頂点座標が膝の位置からかなりずれていたので、あまり自然な感じにならない気がします。あまり意味が無いからボーン数減らすべきか?でも最大ボーン数増えたのに節約してもなぁ…うーむ。

決めかねたのでボーン1本と2本のパターンを両方作成。しかしXNAではどちらも表示が微妙に崩れます。やはり中継ボーンは必須なのか?

槍ボーンの方が構造がシンプルなので槍ボーンでいろいろ試したら、中継ボーン不在でも自在に動かせて表示も崩れず、槍ボーン自体は全く問題ありませんでした。



◎やっぱり駄目

槍ボーンのテスト中に気付いたのですが、手首から先のボーン(掌、指など)を動かしてもXNAに反映されません。

ガーン!!

RHandRootの移動先が悪いのか?しかし移動先をあちこち変えても上手くいきません。元の位置に戻すと…(表示が崩れる上に)手首から先のボーンは動かず。

最初からダメだったんかい!!

ちなみに、下半身はXNAでも足首まで自在に動きます。GrobalSRT階層内で足と腕の違いを確認すると、足チェインのRlegEffは通常のEffで、足首や足先のコントローラは別階層に存在し、腕チェインのRArmEffはコントローラ兼用です。

あれこれ試したのですが、

・ボーンを別のチェインに移動することはできない(チェインの移動は可)

・ボーンの下にチェインを移動するとXNAに反映されない

・XNAにはコンストレイン機能が反映されない

・コントローラをenvelope_groupに追加してエンベロープ再設定してもXNAでは無視される

・ボーン削除不可(後述)

Softimageのチェインやコントローラの概念がXNAには反映されないのがイタイです。はっきり言って「お手上げ」(ーー;



◎諦めが悪い性質(タチ)です

もうリグをやめてボーンを1から作ろうかと思いましたが、ここまでやってリグを諦めるのは何か悔しいですし、手首以外の胴体や下半身がもったいない気がします。手首から先のボーンを削除して作り直せればベストですが、ボーンは削除できないし…。

…いや、ちょっと待てよ?Softimageのボーンは削除できなくても、envelope_groupから削除すれば、XNA向けボーンから除外されるのでは?(後述)
元のボーンはhiddenグループに入れれば非表示に出来そうだし、これで疑似的に作り直しが出来るかも??

…で、手首コントローラ若しくは腕先にチェインを追加してみたのですが、

槍兵再作成22

やはり画像が崩れました。チェインを追加すると以前と同じ階層構造になるので、表示が崩れるのは当然かもしれません。

こうなったら手首コントローラは諦めて、腕チェインの中にボーンを追加しましょう。以前は腕が複数のチェインで分かれていたのですが、今度は1つのチェインに統合します。

槍兵再作成23

画像は直ったのですが、手首と肘が動きません。新ボーンの手首はともかく、既存ボーンの肘まで動かなくなるとは…。

その後、アクションキーを肩/肘/手首と付け直してUpdateActionClipボタンを押したら肩と肘は動きました。ボーンを追加したらチェイン全体のキーを全て付け直さないといけないのかもしれません。



◎キャラクターキーセット

どうしても新しい手首ボーンがXNAで動きません。完全に無視されてるなぁ…。

いや、エンベロープが崩れずに再現されてる以上、ボーン情報はきちんと渡されてると思います。渡されてないのは新ボーンのアニメ情報(トランスフォーム情報)でしょう。

…あれ?そういえばボーン追加や階層変更時にキャラクタキーセットって更新が必要だったっけ?でも、槍ボーン追加時は何もしなくても綺麗に動いたからやっぱり関係無いか?いや待て、アレはボーン一本だけだったから、アニメ情報じゃなくて基本情報を更新してたのかも?

デフォーマからキャラクターキーセットを取得してアクションを付け直すと…

槍兵再作成24

おお動いた!やっと手首から先が動きました!キャラクターキーセットを更新しなかったのが敗因だったのか~!
最近は意識してなかったので全然気付けなかった…。



◎確認

念のため、もう一度始めから作り直して確認すると、元の階層構造では、キャラクターキーセットを更新しても手首から先がおかしくなりました。

槍兵再作成25

デフォルトリグの階層とXNAが相性悪いというのは間違いないですね。では、手首から先のチェインを肘ボーンの先に移動してみましょう。

槍兵再作成26

手首から先もきちんと動きました。つまり、

・GlobalSRT階層を修正する
 →手首から先のチェインを肘ボーンの先に移動する

・キャラクターキーセットを取得する

上記2点を実施すれば‘デフォルトリグモデルをXNAで使える’ということです。(手首から先のボーン追加作業は不要)



◎着物の裾ボーンについて

ようやくベースのリグが落ち着いたので、裾ボーン追加について再検討します。

裾ボーンは「より自然に見せたい」というのもありますが、どちらかというと「内側の着物が外側にはみ出て見た目が悪くなるのを直したい」というのがそもそもの動機です。

しかし綺麗に直すには

・着物の裾をひざ下まで伸ばす
・ポリゴンを3段階以上に分割する
・ボーンを2段階以上に増やす

上記を実施した上で、ほぼ全てのアクションで裾ボーンの位置をかなり神経質に調整する必要があります。

しかしよく考えたら、メイン画面用のサンプルモデルで、しかも低解像度連画取得のためにそこまでする必要があるでしょうか?

というわけで、着物の裾ボーンもパス。ボーン数上限が増えたのに、槍兵ボーン数はどんどん減るなぁ(汗)



◎エンベロープウエイト調整

この段階では、アクションを付けると鎧が曲がったり、衣服の一部が鎧の上にはみ出したりします。

槍兵再作成27

これを直すために、まずメッシュ毎にエンベロープのデフォーマを個別指定します(エンベロープ再設定)。

エンベロープを付ける際に、親指の付け根ボーンが移動できずに悩んでいたのですが、hiddenグループからLThumbRootを削除したら編集可能となりました。また、指ボーン選択時にリターンキーでパラメータを表示し、一般の「長さ」を変更すると、ボーンの長さが調整できました。(スケール変更ではないのでXNAでも崩れません)

ボーンの初期ポーズを修正したら、右クリックでチェイン全体を選択し「ニュートラルポーズの設定」→「すべての変換をフリーズ」でポーズを記憶します。(ボーン単位で記憶すると後で不都合が生じるかも)

後で「すべての変換をリセット」とすると記憶したポーズに戻せますが、この操作はチェイン単位でまとめて戻すことはできません。

デフォーマの個別指定が完了すると、あちこちはみ出た映像が多少まともになります。しかしまだ不十分な箇所があるので、エンベロープウエイトを頂点単位で細かく調整します。

槍兵再作成28   槍兵再作成29

まだ一部はみ出ることがありますが、これでもかなりマシになったので、とりあえずこれでいきましょう。どうしても気になるようならまた検討します。



◎技術資料

最近身に付けた手法にようやく自信が持てるようになったので、技術資料をHPにUPしました。

XNA向けSoftimageモデルの最大ボーン数を増やす

SoftimageモデルのXNA向けマテリアル設定を改善する

Softimage Mod Tool と XNA の連携手順(その2:デフォルトモデルシャドウリグなし)


記事の執筆中に、分かった(と言うより忘れてた)ことがあります。

1つは、envelope_groupの中のボーンを削ればXNAに渡すボーン数が減ると予測したのですが、実際には減らない、ということ。昔も同じこと考えて試した記憶が…(苦笑)

1つは、Softimageはボーン削除可能ということ。ぐはっ!!ボーンの個別削除は不可能なれど、チェイン単位なら削除可能であることをすっかり忘れてました!(爆)

ならば、リグから不要ボーンを削除して58以下に減らすと、改修せずともXNAで動くのでは?…と考えて、実際に指先のチェイン(エンベロープ非設定)を削除してXNAでビルドすると、致命的エラーでVisualStudioごと落ちました。あらら…。

上手くやればXNAでも動くかもしれませんが、追求するとまたハマりそうなので、ボーン削除は先の課題とします。



◎次回予告

改めてHPの記事にまとめると、自分の勘違いに気付いて恥ずかしいやら呆れるやらw
でも色々気付けたのは良かったです^^

次回は槍ボーンの追加とアクション作成です。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
蒼天
蒼天
格闘ゲームのような操作性のオンラインRPG。政策はみんなで決める投票制。ストーリー重視のシナリオ戦、多彩な戦いが楽しめる地域戦、数百人のプレイヤーが同時に争う国境戦などがある。



◎7月の目標達成度

・活動時間月132時間以上

実績:102h(達成率:77%)

 (中間目標:7/15迄に60h以上)

実績:36h(達成率:60%)


・ボーン増加テスト(24h)

実績:25hでボーン増加及びテスト完了(達成率:100%)


・槍兵モデル再作成(16h)

実績:42hで槍兵モデル再作成中(達成率:50%)


・旗手モデル作成(24h)
・履歴画面イメージ作成(8h)
・企画見直し(20h)

実績:未着手(達成率:0%)


・ブログ更新/HP更新(40h)

実績:31hでブログ更新(達成率:77%)


ボーン増加やエフェクト設定改善には成功しましたが、作業時間が少なく、進捗が悪いです。槍兵モデル再作成でこれほど苦戦するとは思いませんでした(ーー;



◎作業時間分析

作業時間集計2010年7月(PDF形式)

○良かった点
・中盤はわりと良いペースだった
・ボーン増加はほぼ予定時間で達成した

○悪かった点
・序盤は引っ越し後の片付け等で作業できなかった
・終盤は猛暑と表示崩れの問題で作業時間伸び悩み


序盤は引っ越しでバテたのである程度は仕方ないのですが、10日で10時間は酷過ぎです(爆)
中盤は復活して成果も上がったのですが、後半はイマイチです。暑過ぎて頭がまわらず気力も萎えがち。

新宅は日当たり良すぎて2階は蒸し風呂状態なのに、終盤は冷房を入れなったのが進捗に影響したかもしれません。
思い返すと、日中は最高気温33度以上の日が続いたので、室内は35度ぐらいだったということですね。

…よく考えたら、サウナの中で開発して進捗が上がるわけないよなぁ(爆)



◎デフォルトリグとXNAの相性について

ボーン数を増やしてシャドウリグ方式をやめれば試行錯誤時間が減ると思ったのですが、実際にやってみると、デフォルトで取得できるリグもXNAと相性が悪く、試行錯誤しまくりです。特に手首から先の階層構造がXNAと相性が悪く、そのままでは使えません。

ここまでの経験から結論付けると、そもそもXNA向けモデルにデフォルトリグを活用するという方針自体が良くなかったと思います。

Softimageではコントローラ付きのリグが簡単に取得でき、これを使うと綺麗なアクションが作成しやすいのですが、XNAで動かなければ意味がありません。大人しくボーンを1から作るのが正解でしたね。

…この正解を得るのに1年以上かかってしまいました(哀)



◎進捗状況チェック

スケジュールは凍結中です。企画見直しが完了したら、スケジュールの見直しを行います



◎8月の目標

・活動時間月144時間以上
 (中間目標:8/15迄に72h以上)

・槍兵モデル再作成(44h)

・旗手モデル作成(24h)

・履歴画面イメージ作成(8h)

・企画見直し(20h)

・ブログ更新/HP更新(48h)

冷房解禁して進捗向上を図ります。健康と家計と地球環境には悪いのですが仕方ありませんw



◎次回予告

次回は前回の続きです。
まだまだ試行錯誤が続きそうな予感!(爆)

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵再作成21
再作成中の槍兵モデル
画像が乱れまくっていたが、サイズと階層の問題をクリアして、ようやくXNAでまともにアニメするようになったらしい。



◎ボーン追加

槍と着物の裾のボーンを追加します。

1.AnimationManagerでDefaultPoseを選択

2.2Dチェインを描いてボーンを作成する
  →サイズ調整不可のため、ボーンの長さに注意すること

3.作成したボーン階層をGlobalSRT階層下の
  最適な位置に移動する

4.移動したボーン階層の各ノードの名称と座標を調整する

5.移動したボーン階層のうち、ルートとEffを除くボーンを
  envelope_group直下にドラッグ&ドロップする

6.エンベロープを再設定する
  →コントローラをデフォーマに含めないよう注意すべき?

7.必要に応じてアクションを作成しPublishする

シャドウリグ方式をやめたので、手順は以前より少しシンプルになりました。



◎槍中継ボーンのサイズ

XNAではボーンはルートからツリー状に連結する必要があるため、槍ボーンは中継ボーンを含めて2本使用します。
この状態で槍を持つ位置を変える場合、中継ボーンのサイズ変更が自動的に発生します。

槍の下方を持つ場合   槍の中間を持つ場合

しかし、ボーン数増加改修に伴いサイズ変更機能が無くなったため、XNAでは表示がおかしくなってしまいます。スケール変更機能は不要と思っていたのですが、こんな所で無意識に使っていたのですね…。

槍のトランスフォーム座標を変えるだけで表現できないかと試してみたのですが、このボーン構造の場合、どうしてもスケール変更が発生するようです。どうしたものかなぁ…。

槍などの武器を兵士とは別モデルとして扱うようにすれば、武器の位置をプログラムで自在に制御できますが、手の位置や回転を把握しながら武器モデルを連動させるプログラムを組むのは面倒です。RPGのように武器を換装するゲームならともかく、今回は連画を取得したいだけなので、面倒なプログラムはなるべく避けたいものです。

待てよ?Softimage上で2つのモデルを連携動作させて、XNAで2つのモデルを同時再生すれば、改修せずとも武器の座標が連動するのでは?それでダメなら、槍を持つ位置をずらすアニメシーンをカット(削除)するとか(爆)

Softimageで一度追加したボーンは削除不可能なので、やり直しができません。どうしたものかなぁ…。



◎メッシュが消えた!?

よく考えたら、着物の裾ボーンやウエイト設定などの兵士共通事項を先に行った方が、他のモデルに流用しやすいですね。というわけで、先に着物の裾ボーンをやります。

着物の裾ボーンで難しいのは、階層上の配置場所とコンストレイン(連動)設定です。最初は腰の下に配置してコンストレインを設定したのですが、ボーンが動きません。左右それぞれの腿の下に配置したら動いたのですが、これだと階層下のボーンが自動的に連動しただけっぽいなぁ…。

コンストレインは一旦保留とし、ここでエンベロープを再設定してXNAで動きを確認すると…描画が乱れまくって見るに堪えない状態でした。

槍兵再作成14

いくら何でも崩れすぎなので原因を調べると、いつの間にかSoftimageの階層からkimono2のメッシュノードが無くなってました。

はや?メイン画面にメッシュは存在するのに、階層上にノード不在なんてことがあるのでしょうか?それともどこか深い階層に存在するのか?はたまたピンポイントで表示消去されたのか?

階層内を検索する方法がよくわからないので状況が掴めないのですが、メイン画面でメッシュ選択後にSelect>選択ボタンを押すと、Biped.kimono2階層が表示されたので、このメッシュノード階層をエクスプローラ上の全体階層にドラッグ&ドロップしたら元通りになりました。

ちなみに、Softimageエクスプローラで検索する際は「*kimono2*」みたいに記述しないとヒットしません(後で気付いた)。



◎envelope_groupの整理

階層構造は元通りになりましたが、以前から画像の乱れが気になっていたので、個々のメッシュ毎にエンベロープを再設定することにしました。

しかしenvelope_groupの下のボーンが多すぎて個別選択がやりにくいです。グループを新規作成して階層的にまとめられないか試してみましたが、グループ作成機能=リンク作成機能らしくて(?)、いまいち思い通りに整理できません。

ですが、試しているうちに「グループから削除」で不要なボーンをenvelope_groupから削除すれば良いことに気付きました。親指&中指以外は不要なので、不要指3本×指1本につき3ボーン×両手=18本をenvelope_groupから削除。

envelope_groupの中がすっきりした上に、XNA使用ボーン数も節約できました。



◎腕がおかしい

個々のメッシュ毎にエンベロープを再設定し、途中でXNAで表示確認すると画像が凄く乱れます。どうやらルートボーンから順番に設定しないと回転がうまく引き継がれない模様。

そこでルートボーンに近いメッシュから1つ1つ個別に設定していくと、腕以外は上手くできたのですが、腕のエンベロープを設定すると画像が乱れます。

槍兵再作成15

コントローラをデフォーマに含めたりenvelope_groupに入れると表示状態は変わりますが、SoftimageとXNAで腕の方向が正反対だったりしてなかなか上手くいきません。

結局、Arm1(腕メッシュ)は

1.腕コントローラのキーを全て削除する
2.DefaultPoseに戻す
3.腕ボーンに「ニュートラルポーズの設定」
  「すべての変換をフリーズ」
4.腕コントローラのキーを付け直す(モーション再作成)

上記のようにしてクリアな状態からモーションを再作成したら直りました。しかしArm2(手首メッシュ)はこれでも直らず、デフォーマからLHand(左手ボーン)を除いたら直りました。ちなみに、RHand(右手ボーン)はデフォーマに指定しても崩れません。謎すぎる…。



◎作り直し

一部のボーンをデフォーマから削除すると、今後のモーション作成に支障を来します。そもそも、XNAで表示が崩れるのは何故でしょうか?

ニュートラルポーズを使用したから?
リグをクォータニオンHLSLで動かしたから?

考えても結論が出ないので、思いきって1から作り直すことにしました。本来はメッシュに合わせてガイドを修正すべきですが、今回はガイドに合わせてメッシュを修正し、ニュートラルポーズは一切使用しません。

槍兵再作成16   槍兵再作成17

結論から言いますと、見ての通りXNAで動かすと崩れました。足元が少しだけ動いて、腕など上部に行くほど本来より大きく動きすぎるので、可動時の移動量にサイズが加味されていない気がします。

ちなみに、手はSoftimage上でオブジェクトのセンターを上にずらしてから回転させたのですが、XNAでは綺麗に反映されないようです。



◎原因はサイズ

試しにエンベロープを外してみると、(当然動きませんが)手も含めて綺麗に表示されます。つまり、メッシュの頂点データはきちんと渡されているが、ボーンアニメの座標計算は失敗した、ということです。

では何故失敗したのか?

槍兵モデルとSoftimageのガイドは大きさが異なるので、ガイド又はメッシュの全体サイズを変更する必要があります。以前はガイド、今回はメッシュの全体サイズを変更したのですが、クォータニオンHLSLは、サイズはサポート対象外です。

つまり‘モデルとガイドの大きさが異なること’が原因だったのです!

…それで延々と試行錯誤してたかと思うと、てめーのバカさ加減に愛想が尽きますね(>_<)



◎サイズの座標系

Softimageの座標系は、選択対称によって自動的に切り替わります。例えば、

・オブジェクト選択時:ビュー座標系
・s(サイズ)選択時:ローカル座標系
・r(回転)選択時:グローバル座標系

といった具合です。

01:オブジェクト選択時:ビュー座標系   02:s(サイズ)選択時はローカル座標系   03:r(回転)選択時はグローバル座標系

s(サイズ)を選択すると常に1と表示されるので、クォータニオンHLSLでも問題無いと思っていたのですが、r(回転)を選択してサイズの値を確認するとグローバル座標はルートのサイズ値を引き継いでました。

XNAのクォータニオンHLSLで動作させるためには、グローバル座標系でサイズを1にする必要があるので、全メッシュを選択して「すべての変換をフリーズ」とします。

槍兵再作成18   槍兵再作成19

サイズの問題は解消しました。しかし手首から先はおかしいですね。これは別の問題のようです。



◎GlobalSRT階層の修正

手首の位置にコントローラがあって、その先のボーンの位置情報が伝わっていないようです。コントローラをenvelope_groupに追加してエンベロープを再設定したりしましたが、どうにも上手くいきません。

GlobalSRT階層を見ると、手首から先のボーンは手首コントローラの下にありますが、そもそも手首コントローラが肘ボーンの先ではなく肩先に付いてます。これはXNA的には正しくない気がするのですが…でも、その肘ボーンは肩とは別の所から伸びてます。う~ん…。

これで何故腕がきちんと動くのか分かりませんが、とりあえず手首から先のボーンを肘の下に移動してエンベロープの再設定&アニメ再設定を行いました。

槍兵再作成20   槍兵再作成21

おお、直った!

デフォルトのリグ階層はXNAと合わない部分がある、ということですね。



◎次回予告

サイズと階層の2つの問題が重なっていたため、原因究明に時間かかってしまいました。シャドウリグ方式をやめたら試行錯誤時間減ると思ったのに、相変わらずです。トホホ…。

8月になったので、次回は「7月の総括と8月の目標」です。

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

| BLOG TOP |

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