プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
孟達
孟達
劉璋配下の将であったが、主君を見限り劉備入蜀に貢献した。荊州の戦いでは関羽の援軍要請を断り、蜀での立場が危うくなって魏に逃亡した。後に蜀への帰参を図るが司馬懿に見破られて急襲された。



◎調査

デフォルトで取得できる人体モデルにマテリアルを設定してXNAで動かすと、プログラムが起動しなくなりました。多分適当にやったマテリアル設定が悪いのでしょう。まずはデフォルトのマテリアル設定を確認して、何が悪かったのか原因を探ります。

Explorerで構造を確認すると、Biped→Character→Clustersの中には60を超えるクラスタが存在し、それぞれ「クラスタ表示色」が設定されていました。もしかして、これらを1つ1つDirectXシェーダーに置き換える必要があるのでしょうか?
しかしヘルプを読むと、これはSoftimage上で表示する際の色設定っぽいです。

さらに探っていくと、Hairクラスタの中にMaterial1が、left_eyeの階層下にMaterial3とMaterial4、right_eyeの階層下にMaterial5とMaterialが存在します。Material2が見当たりませんが、right_eye階層下のMaterialがソレに該当するのかもしれません。
Character配下のマテリアル   Material1のRenderTree   Material1のプロパティ

う~んちょっと複雑ですね。顔の表情テクスチャもここで貼り付けられているようです。ここは丁寧にDirectXシェーダーに置き換えないとダメなんでしょうね。



◎まずは目から

簡単そうな所から…というわけで、まず左目からやります。
Material3はテクスチャあり、Material4はテクスチャ無しです。

1.テクスチャをXNAのContentフォルダにコピーする

2.DirectXシェーダーを設定する

3.先程のテクスチャを指定する

ビルドするとエラーになりました。

Invalid texture. Face 0 is sized 150x148, but textures using DXT compressed formats must be multiples of four.

テクスチャ解像度が150×148なのがダメらしいですね。4の倍数にしないとまずいらしいので、テクスチャを148×148に削ると、ビルドエラーは出なくなりました。



◎エラー出まくり

メインPCで実行すると例のインデックスのエラー

System.InvalidOperationException: This device does not support 32-bit indices. Use IndexElementSize.SixteenBits or a type that has a size of two bytes.

が出るので、サブPCに持って行って実行すると…あれ?起動しません。ログを掃くように修正すると、このエラーが出てました。

System.ArgumentException: Device does not support multi-level texture width and height values that are not powers of 2.

つまり「テクスチャが2のn乗じゃないよエラー」です。あれ?サブPC(GeForceFX5200)もダメだったの?いつも先にメインPCで発覚して直しちゃうから、気付かなかっただけか…。

ここまでハード系のエラーが3連発、結局テクスチャを128×128に修正。初めからこうすりゃ良かったw
で、実行すると…やっぱり起動しません。今度は

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

というエラーになりました。よくわかりませんが、プログラムとデータの相性が悪いってことかもしれません。とりあえずTechniqueをスタティックに変えてみましたがダメでした。

あと何があるかなぁ…おや?Material4のdefault_surface_map_pngにいつの間にか画像が張り付いてますね?これが原因かなぁ…?むむ、やり直してみましたが現象変わらず。



◎エラーログと行番号

エラーログをよく見ると、行番号が記録されてました。この行の周辺が怪しいってことでしょうか?

尚、以下のようにすればVisualStudioエディタで行番号が表示できます。
(わかりにくかったので、参考までに記述しておきます)

1.ツール>オプション でダイアログを表示

2.「すべての設定を表示」にチェックを入れる

3.リスト内の テキストエディタ>すべての言語>全般 の
   表示>行番号 にチェックを入れる



◎一歩前進?

エラーログには596行と637行が記録されています。実際にエラーが発生する行はどちらでしょうか?

試しに596行をコメント化すると、598行と637行がエラーログに記録され、試しに637行をコメント化すると、596行と636行がエラーログに記録されました。

あれ?何でエラー行が遡るんですかね?普通はそれ以降の行がエラーになりそうですが…謎ですね。

とりあえず596行の直前に「isSkinned = false;」を入れてみると…おや?起動しましたよ?

左目だけマテリアル設定した

例のゴミのようなものが2つセットで移動してますが、拡大してよく見ると、片方は色が付いたようです。でも、プログラム修正した副作用なのか、モデルを切り替えることができません。う~ん、一歩前進と言えるか微妙ですね(^^;

ちなみに、「isSkinned = true;」としたら、以前のキャストエラーになりました。プログラムを辿って行くと、アニメデータとボーンデータが存在する場合にtrueとなるようです。



◎ボディのマテリアル設定

アニメデータとボーンデータがあるのに、マテリアルが不正だからエラーになっていると仮定した場合、全てのマテリアルを正しく設定すれば、正しく表示されるかもしれません。とりあえず、ボディのマテリアルを設定してみましょう。

ボディのマテリアルは、カラー、スペキュラ、バンプの3種類のテクスチャが接続されています。これをDirectXシェーダに置き換えるわけですが、正直自信無いんですよね…バンプはDirectXのNormalMapに該当すると思いますが、カラーはAlbedoMap、スペキュラはAmbientMapに該当するのかなぁ?

とりあえずNormalMapとAlbedoMapを設定し、「isSkinned = false;」として起動すると…ボディに色が付きました!

ボディにマテリアル設定した

但し、動きません。「isSkinned = false;」を外したり「isSkinned = true;」とするとエラーになります。AmbientMapを設定してもダメ。



◎動きました!

ここでしばらく悩んでいたのですが、キャラクタのボーン数がXNAの上限を超えていることを思い出しました。もしかして、ボーン数が多すぎてエラーになるのでは?だとすると、Biped_Shadowを利用する方式であればボーン数が制限値以内だから、正常に動くかも?

で、実際に試そうとしたら、Biped_ShadowにDirectXシェーダーでテクスチャを指定した所で Mod Tool が落ちました。このタイミングで落ちたのは初めてです。Shadowにマテリアル設定すること自体間違いなんでしょうか?本来そういうものじゃないしなぁ…。

とりあえずもう一度試してみると、今度は無事に設定できました。サブPCで起動すると…

Shadow_Animation

おお、動きました!サブPCのため動画でお見せできないのが残念ですが、人物モデルがスキンアニメしましたよ~!

でもマテリアル設定が反映されておらず、色は影のようになってますね。



◎緑の男

顔の部分を拡大表示してよく見ると、顔のテクスチャが反映されてました。ということは、マテリアルは一応反映されたようですね。でも何でこんなに暗いのかなぁ?

そういえば、いつの間にかキャプテンモデルも黒くなってしまったけど、もしかして同じ現象?だとすると、マテリアル設定が悪いというよりも、他の要因があるのかな?

…そういえば、このシェーダーはポイントライトが必要とありましたね。ひょっとして、ポイントライトが無いから、環境光以外は無視されて真っ暗ってこと?試しに、ポイントライトを置いてみましょう。

…う~ん、ダメですね。変化なし。試しにライトをモデルの階層下に移動してみます。

緑色で表示

おお、色が鮮明になりました!体色と顔のテクスチャがちゃんと反映されています。とりあえず成功ですね。

というわけで、ここまでの手順をHPにまとめました。手順を知りたい方はこちらの記事の(その3:デフォルトモデルシャドウリグ付き)を参照してください。



◎次回予告

やっと人物モデルがスキンアニメしました。LAGさんによると、Shadowを利用した方がボーン数の節約になるそうです。

しかしまだマテリアルやライトの設定が不完全なようで、体に影が付いておらず、緑一色です。次回はその辺を探ります。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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