プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
槍兵再作成10
BasicEffectマテリアル設定をXNA側でカスタムエフェクトに差し替えた。今回の改修でマテリアル設定はカンペキ??



◎現状調査と改修計画

こちらの手法でBasicEffectパラメータ全リストを確認したら、前回の一覧と一緒でした。今回はこれらを一通りサポートします。

まずはSoftimage付属HLSLのグローバル変数を抜粋し、BasicEffectパラメータ一覧と比較しながら、どのパラメータをどの変数に受け渡すべきか検討しましょう。

Softimage付属HLSLグローバル変数抜粋(暫定版)

BasicEffectパラメータの例(PDF)

Softimage付属HLSLではフォグ/アルファ(透明度)/EmissiveColor(発行光源)がサポートされていないようです。BasicEffectのソースを参考にすれば機能実装可能かもしれませんが、当面不要なので今回はパスします。

では、‘対応状況’が空白の項目を埋めていきましょう。



◎ライトの設定

DiffuseColorは前回実装したので、同様にAmbientLightColor/SpecularColor/SpecularPowerを追加します。この辺は問題無いですね。

続いてDirLight0~2を受け渡そうとしたら、エラーになりました。最初は配列受け渡しミスかと思ったのですが、HLSLを改めて見直すと、xsi_lightdef9.hlslはピクセルシェーダでインクルードされており、中身はxsi_lightlist9.hlslで以下のようにセットされています。

string SasBindAddress = "Sas.PointLights[0].Position";

どうやら、シーンファイルに定義したライト設定がSoftimageランタイム経由で受け渡されて来るようです。下手にいじる必要は無さそうですね。



◎テクスチャ不在

その後ワールド座標等も一応受け渡して、改修作業は一段落しました。しかし、見た目が全然変わりません。テクスチャが無い部分の色が、Softimageと違います。何でかな~?

槍兵再作成07

そもそもSoftimageで指定した色はDiffuseColorなのか?と確認したら、やはりDiffuseColorでした。さらに、その値は描画時に至るまで確実に受け渡されていることを確認しました。にも拘わらず、見た目に反映されない理由がわかりません。

もしかして、DirLight0~2が必要なのか?しかしオリジナルマテリアルの値を調べると全て0でした。やはりこれはシーンファイル参照でDiffuseColorとは無関係ですね。

…そんなこんなで原因調査に悩みまくりましたが、HLSLを見ると、DiffuseColor算出時にテクスチャサンプラを使用してました。

つまり、テクスチャ不在マテリアルのBasicEffectパラメータはnullなので、正常なテクスチャサンプラがセットされず、色計算がおかしくなっていたのでした。原因が判明すれば、対処は簡単です(コードは後述)。

ちなみに、試行錯誤中はコードを5倍ぐらい記述しましたが、最後はかなりスマートになりました。もっと短時間でここまで出来たら言うことないのですが…まだまだスキル不足ですね(汗)



◎チラチラします

色の問題は解決しましたが、エフェクトに関してはもう一つ問題があります。静止画だとわかりませんが、実際にはライトが光速移動しているらしく、テカリ(光の反射による光沢)が遷移ループして、チラチラします。

ライトだけ簡易アニメしているのでしょうか?しかしSoftimageのモデル内ライトやシーン内のライト&カメラ、いずれも固定です。そもそも、Playback state(アニメ開始終了フラグ)をFalseにしてもチラつくので、Softimageのアクションとは無関係ですね。う~ん…。



◎チラチラ解消

他のモデルの表示状態を確認すると、テストモデルが左半身だけチラチラします。メッシュやマテリアル設定に左右の区切りは無かったはずだけど…念のためシーンファイルを確認すると、エクスプローラ階層上にメッシュが存在しません。ノードが存在しないのにSoftimage上でアニメするって、どーゆーこと??

(上記に関しては、テストモデルのシーンファイルを無意識のうちに壊してしまったようで、PublishしたらXNAで読み込めなくなってました。)

他にもScene_Data.xsiを調べたりで原因調査に時間がかかりましたが、結局これもテクスチャサンプラの問題でした。Softimge付属HLSLは、albedoMapの他にAmbientMapとNormalMapも渡す必要があったのですが、これを渡してなかったのでチラチラしてました。

NormalMapが無いと反射光がおかしいのはわかりますが、なんでチラチラした(フレームによって変化した)んですかね?…理屈はよくわかりませんが、直すのはカンタンです。

BasicEffectをカスタムエフェクトに差し替える

槍兵再作成09   槍兵再作成10
Phong.fx(左図)とLambert.fx(右図)

問題のチラチラは解決しました。
右側のLambertがシブめでいい感じですね。
Phongはテカりすぎですが、値の調整は可能です。

ついでにコードを改善し、エフェクトは一個所で切り替え可能としました(Phong.fxはセマンティクスのみ追加しました)。

従来はSoftimageでマテリアル設定を数十か所変更する必要がありましたが、凄くカンタンになりました。この方式なら自作エフェクトへの切り替えも容易ですね^^



◎動かない!?

これでマテリアルはカンペキ!

…と思ったら、いつのまにか動かなくなってました。
今回の改修は自信あるので、これが原因ではないと思うのですが…。

実は以前からこの現象は頻繁に発生してました。原因は不明で、Softimageでマテリアルやアクションを付け直すと復活したりしなかったり…。全てシャドウリグ関連の不具合(シャドウリグをXNA向けに設定しきれていない)だと考えるようにしていたのですが、シャドウリグをやめてもこの現象は発生するようです。

今回はアクションを付け直しても動かないので、先日のテストモデルを1から作り直して試すと…これも動かず。何故だ~!!



◎原因判明

リグモデルは、ボーンを直接動かさずにコントローラだけ動かした方が綺麗なモーションになります。

注:コントローラ情報はXNAに渡されないらしく、ボーンとコントローラを併用するとXNAではおかしくなることが多い。

しかしコントローラのみ動かした場合、(Softimage上はコントローラに連動してボーンが動くのに)XNAアニメとしてPublishする際にアニメデータが更新されないようです(アニメーションマネージャのUpdate Action Clipを押してもダメ)。

…これってPublish機能のバグじゃないの??お陰でXNA連携開始当初からさんざん悩まされましたよ(泣)


ちなみに、どこか1箇所でもボーンを直接動かしてからUpdate Action Clipを押すと、他のコントローラアニメもXNAで動くようになります。なので、適当なボーンを少しだけ動かすとこの問題は回避できます。

テストモデル再作成   槍兵再作成11

アニメフレームの途中の補完がおかしい部分もあります(腕など)が、これは多分プログラムの問題ではなくて、エンベロープウエイト設定やモーション作成(IK/FK併用)をきちんとやれば綺麗になると思います。



◎マテリアル変更テスト

全ての問題点が解消したので、マテリアル変更テストを行います。SoftimageのPreset Managerを開いて、適当なマテリアルサンプルをドラッグ&ドロップで適用します。

プリセットマネージャ

…って、エラーになりますね。この操作はあまりやったことないんでSoftimageのルールがよくわかりません。

どうやら、クラスタ化されたメッシュに直接ドラッグ&ドロップはできないらしく、エクスプローラ上のマテリアルにドラッグ&ドロップすると適用できるようです。(スクリプトの都合でエラーになることもある)

クラスタ配下のマテリアルにドラッグ&ドロップする   槍兵再作成12

腕、鎧、靴の3箇所のマテリアルを変更してPublishすると…。

槍兵再作成13

腕の色は反映されましたが、鎧の色はSoftimageと少し違うように見えます。靴の色は変わってないような…?

マテリアル設定を確認すると、設定変更前と変更後でパラメータがかなり変わってました。

マテリアル設定変更前   マテリアル設定変更後
マテリアル設定変更前(左図)と変更後(右図)

つまり、マテリアルの種類によっては、それに見合ったカスタムエフェクトを個別に用意してパラメータを引き継がないとXNAでうまく再現されない、というわけですね。こればかりは仕方無いので諦めましょう。


最後に、Softimage上で従来のカラーパラメータ値を変更した際に、XNAへ適用されるか確認します。

テスト結果反映(PDF)

エフェクトパラメータ変更テスト01   エフェクトパラメータ変更テスト02

DiffuseColorやSpecularColorが正常に反映されて、Softimageと同じ色がXNAに反映されました。Phong、Lambert共にOKです。



◎次回予告

プログラム改修は今回で一段落です。

次回はボーン追加、エンベロープウエイト設定、モーション作成を行います。

スポンサーサイト

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
三国群英伝ONLINE
三国群英伝Online
基本プレイ無料の三国志オンラインRPG。魏・呉・蜀のいずれかに加盟し、戦友と兵を率いて蜂起、版図拡大を目指す。2D仕様なので低スペックPCでも大規模戦闘可能。



◎槍兵モデル再作成

ボーン数上限を倍にすることができたので、今回は槍兵モデルの再作成を行います。(シャドウリグ方式をやめて通常方式にします)

全体の流れは以下の通り。(詳細は後述)

槍兵再作成01

1.モデルデータの準備
  →メタセコイアからSoftimageにモデルデータを変換する

2.ガイドの作成
  →作成>キャラクタ>二足ガイド
  →モデルに合わせてガイドを調整する
   →コントローラの状態は保存されないので
    リグ作成まで一気に行うこと

3.リグの作成
  →作成>キャラクタ>二足ガイドからリグ作成
  →パラメータはデフォルト(シャドウリグなし)

4.XNAモデルへの変換
  →XNA Game Studio>Convert to XNA Model
  →メッシュモデルをBiped階層下に移動

5.エンベロープの設定
  →デフォーム>エンベロープ>エンベロープの設定
  →Biped階層下のenvelope_group(骨のグループ)を
   マウス中クリックで選択、右クリックで完了

6.アニメーションの登録
  →XNA Game Studio>Manage Animation
  →Newボタンを押す
  →アニメーションを作成する
  →Update Action Clipボタンを押す

7.マテリアルの設定
  →不要?

8.ファイルの出力
  →XNA Game Studio>Publish Models

9.XNAでスキンアニメ再生



◎ガイドの調整

以前はスケールのみ合わせたのですが、今回は足腰や腕、指などのコントローラ位置も調整し、胴長短足体系に合わせました。

槍兵再作成02

以前は掌の向きを合わせるためにリグの掌を回転させたのですが、今回はガイドの掌を回転させて調整しました。また、ガイドの指を3本削りたかったのですが、コントローラは消せてもボーンは消せなかったので諦めました。


指の関節1つ1つに至るまで細かく調整した後、ファイルを保存。ガイドベースでリグを作成したら親指の間接が若干ズレてたので、ファイルをロードしてやり直そうとすると…全体サイズは保存時の状態ですが、各コントローラは初期状態に戻ってしまいました。どうやらガイドの各コントローラの状態は保存されないようです。

…ええっ!?そんな馬鹿な!?

しかし何度試しても再現します。
これってバグじゃないの!?

猛暑を耐えて頑張ったのに…いとあはれ(T-T)



◎マテリアル設定不要?

従来はDirectX9向けマテリアル設定をしないとXNAでは表示されませんでしたが、試しにマテリアル設定せずに前回のXNAViewerで表示したら…そのまま表示できました。

槍兵再作成03

しかし、動きません!!

原因を調べると、マテリアルのエフェクトがBasicEffectとなってました。XNAでは、Softimage付属HLSLのSkinnedテクニックを使用しないとスキンアニメしません。



◎対処方針検討

BasicEffectからカスタムエフェクトに変更する方法は2通り考えられます。

A案:SoftimageでDirectX9向けマテリアル設定を行う
   →従来方式

B案:XNAの描画プログラムを書き換える
   (カスタムエフェクトにすり替える)
   →Softimageでの設定は不要になる
   →エフェクトが増える度にプログラム改修が必要?

一般的に考えると、コンテンツが一元管理できるA案の方が良さそうですが、全クラスタの各マテリアルについていちいち‘DirectX9向けマテリアル設定’と‘Softimage向けマテリアル設定’を二重設定しないと、Softimage上では一色状態になってしまいます。

本来は、Softimageのウィンドウ表示モードをリアルタイムシェーダ>DirectX9とすれば表示状態を確認できるはずですが、実際には描画が化けたりツールが落ちたりすることが多く、この機能は使えません。

槍兵テクスチャ表示
Softimage向けマテリアル設定省略時

A案

・マテリアル設定が面倒

・色のイメージが確認できない(色修正がとてもやりにくい)

・モデルの形状がわかりにくい(モーション作成がやりにくい)

はっきり言って、やる気激減です(ー_ー;


現実問題として、A案よりB案の方がはるかにマシだよなぁ…というわけで、B案にチャレンジ!!



◎まずはお試し

とりあえずエフェクトを強引に差し替えてみました。

槍兵再作成04

真っ黒ですが、とりあえず動きました!

…ん?よく見ると腕の動き(途中フレームの補完)がSoftimage上と少し違うかも?

真っ黒でよくわからないので、まず色を付けないといけませんね。



◎エフェクトパラメータを引き継ぎたい

真っ黒なのは、本来受け渡されるはずのエフェクトパラメータが受け渡されていないからです。きちんと受け渡せば、色が着くはずです(たぶん)。

しかしその実装はかなり難しそうです。例えば、
myEffect.Parameters = part.Effect.Parameters;
これが可能であれば話は簡単ですが、Effect.Parametersは読み取り専用なのでエラーになります。

ではどうすれば良いのでしょうか?
丁度Softimageランタイムがこの処理を行うので、コードを拝見すると…難解すぎて解析する気になれません(爆)

どうやら、パラメータの型が不定だったり例外パラメータ対応等のためにコードが複雑化したようですが、今はとりあえず画像とライトだけ引き継いで色が付くか確認したいので、もっと簡単な方法を探りましょう。



◎実装

現在のエフェクト状態を確認すると、BasicEffectが多いようです。

BasicEffectパラメータの例(PDF形式)

上記パラメータのうち、とりあえずテクスチャとディフューズカラーだけ引き継げば最低限の色が着きそうな気がします。

パラメータ値を取得して自前のカスタムエフェクトに追加したいのですが、ParameterClassはHLSL向けの形式なので、XNAでどのGetメソッドを使用すべきかはっきりしません。他にもあいまいなことが多く、しばらく試行錯誤しましたが、以下のようにすると受け渡しが出来るようです。

if (part.Effect.Parameters[j].Name == "BasicTexture")
{
  Texture2D texture = part.Effect.Parameters[j].GetValueTexture2D();
  if (texture != null)
    myEffect.Parameters["AlbedoMap"].SetValue(texture);
}

AlbedoMapは、HLSL側のパラメータ名です。Softimage付属HLSLは3つの画像ファイルを受け取りますが、多分このパラメータがメイン画像に当たります。

槍兵再作成05

うむむ…。

各マテリアルにそれぞれテクスチャパラメータを引き継いだつもりなのに、全身に目玉テクスチャが反映されているようです。

これは、カスタムエフェクトのインスタンスを1つだけ用意して使いまわしたことが原因です。インスタンスはマテリアルの数だけ用意しないといけませんね。

槍兵再作成06

やりました!
テクスチャが反映されてカラーで動きましたよ~!

まだ色やライトが少し変ですが、この調子で他のパラメータも引き継げば直ると思います。

尚、モデルのエフェクトがBasicEffect以外だったら従来通りとしたので、従来モデル(XNA向けマテリアル設定済モデル:ロボットやキャプテン、前回テストモデルなど)は従来通り動きます。この様子なら、BasicEffectだけサポートすればOKでしょう。



◎まとめ

今回の改修で、Softimage編集作業が改善できる目処が立ちました。

・XNA向けマテリアル設定が不要

・Softimage上で色の状態を確認しながら編集可能

Softimageでドラッグ&ドロップで色付けしてそのままXNAで動かせるなんて夢のようです!(笑)



◎次回予告

ボーン数も増えたし、最近調子いいですね~!^^

次回は、今回の続きでBasicEffectの他のパラメータを一通りサポートする予定です。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
三国志遊戯
三国志遊戯
無料の三国志シミュレーションゲーム。IE必須。兵士を連れて部隊を組み他のプレイヤーと合戦する。三国志登場武将のほか、自作武将も登録可能。



◎改修のポイント

今回は、前々回作成したテストプログラムを改修して、通常PCでのボーン数制限を増やします。これが出来れば、Softimageで標準取得したリグを(シャドウリグ無しで)XNAで動かすことが出来るようになり、モデルを修正する度に試行錯誤していた時間が大幅に短縮できます。

ボーン数:58 → 116ぐらい

プログラミングの視点から改修のポイントを表現すると、ボーンの回転/平行移動をマトリックス型からクォータニオン型+Vector3型に変更することによって、定数レジスタ使用数を半分程度にします。



◎HLSLの改修

私はXNAViewerのコードの全容は把握していないので、この改修が可能なのかまだ不明です。本来はプログラム全体をチェックして改修可否を判断すべきですが、面倒なのでシェーダ(HLSL)からチェックと改修に着手します。

…シェーダが改修できれば多分大丈夫(汗)


SoftimageのHLSLは複数に分かれていますが、まず改修すべきはxsi_defaultvs.hlslですね。

#define MaxBones 58
float4x4 Bones[MaxBones];


これを

// 最大ボーン数
#define MaxBones 108 // 暫定

// ボーンの回転部分
float4 BoneRotations[MaxBones];
// ボーンの平行移動部分
float3 BoneTranslations[MaxBones];

に置き換える所からスタートです。
(最大ボーン数は最後に確認します)

クォータニオンヘルパーメソッドをコピペで追加し、頂点シェーダ内のBones[]を改修します(一個所)。

XNAViewerのxsi_defaultvs.hlsl(改修版)

…うん?これで終わり??

一応他のHLSLファイルもざっとチェックしましたが、多分これでOKです。幸先良いスタートですね!



◎改修不可能?

出力側であるシェーダの改修は完了しました。あとは入力側を改修できれば、中間プログラムは何とかなるでしょう。

QuatSkinningSampleでは、シェーダの他に、本体/ランタイム/コンテントパイプラインを改修しています。入力はコンテントパイプラインに該当しますが、問題は「XNAViewerにコンテントパイプラインプロジェクトは存在しない」という点です。

モデルのコンテンツプロセッサ属性には‘Crosswalk Model Processor’と指定されているので、カスタムプロセッサであることは間違いありません。

Contentの参照設定から‘Softimage.XWImporter’を削除すると、このプロセッサが候補一覧から消えるので、恐らく‘Softimage.XWImporter.dll’ファイルがコンテントパイプラインの実体です。しかしこのファイルのソースコードは非公開です。

つまり「XNAViewerのコンテントパイプラインは改修不可能」ということです。



◎改修対象は?

コンテントパイプラインは改修不可能ですが、必要な全てのデータはメインプログラムで受け取っているので、メインプログラム内でデータ型変換を行うことが出来れば、当初目的を果たせるかもしれません。

例えば、CrosswalkModel.Tagの中のアニメデータであるXSIAnimationDataクラスを流用してNewXSIAnimationDataクラスを作成し、こちらをクォータニオン方式に改造します。LoadContent()の中で、データロード直後にXSIAnimationData型からNewXSIAnimationData型にデータ変換できればOKです。

そこで、XNAViewerのXSIAnimationDataクラスと、QuatSkinningSampleのSkinningDataクラスのフィールドを比較してみました。

○SkinningDataクラスのフィールド
IDictionary animationClipsValue;
IList bindPoseValue;
IList inverseBindPoseValue;
IList skeletonHierarchyValue;


○XSIAnimationDataクラスのフィールド
#if XBOX
#else
    public AnimationContentDictionary AnimationContentDictionary;
#endif
    public Dictionary RuntimeAnimationContentDictionary;
    public List BoneNames;
    public List BoneInvBindPoses;
    public Matrix[] BoneTransforms;
    public List Bones;
    public String Header1;
    public String Header2;
    public String Header3;


うーん…違いすぎて、改修対称がよくわかりません。BoneInvBindPosesとBoneTransformsをQuatTransform型にすれば良いのでしょうか?単純に型変換するだけではダメそうな気がするなぁ…Bonesもこのまま放置で良いのか不安だし…ブツブツ。



◎下流から探る

改修対象を上流(入力)側から絞り込めなかったので、下流(出力)側から探ることにします。

シェーダのBones[MaxBones]に渡す部分をチェックすると、DrawModel()の中の
effect.Parameters["Bones"].SetValue(bones);
でした。つまり、bonesをMatrix型からQuatTransform型に変更すれば良いわけです。

…あれ?もしかして、これだけやればOKかも?

この手法は、Draw()が毎回呼び出される度に型変換を行うので、描画速度が遅延します。モデル数が増えたら遅延しまくりでゲームにならないかもしれません。

でも、三国志軍記ではこのライブラリは使用しない(連画取得ツールでのみ使用する)ので、描画速度を気にする必要はありません。だから、これだけ改修すればOKです。



◎メインプログラムの改修

というわけで改修して実行しました。

ボーン数増加テスト07

あれ?上下逆だし、アニメしません。失敗です。


上下逆はワールド座標の問題かと思ったのですが、そうではなくて、if文を修正したら直りました。

XNAViewerのGame1.csのDrawModel()の改修箇所

ボーン数増加テスト08

動きました!

ロボットやキャプテンもきちんと表示されますしアニメもOKです。但し、槍兵モデルは何も表示されません。多分階層の問題でしょう。


ちなみに、サブPCで動作確認しようとしたら、OSが起動しませんでした。引っ越しの影響かもしれませんが、ちょっとショック…(T-T)



◎まとめ

○改修箇所(2箇所)

・シェーダ(xsi_defaultvs.hlsl)
 →共通インクルードファイルなので全モデルに適用される

・Game1.cs内のDrawModel()


○特記事項

・改修は簡単だが、Draw()呼び出し毎に全ボーンDecomposeするので描画処理が遅い。

・描画速度を向上させたい場合は、XSIAnimationDataのBoneTransformsをQuatTransform型に変更する必要がある(今回は省略)。


○その他

・XNAViewerでワールド座標を指定する場合は、Draw()内のDrawModel()の直前で以下のように記述する。
// ワールド座標変換行列を指定する
Models[CurrentModel].CrosswalkModel.Bones[0].Transform = Matrix.CreateTranslation(0, -10, 0);



◎次回予告

事前の準備や勉強にやたら時間かかりましたが、改修は意外とあっさり出来ましたね。いつもこれぐらいスマートにいくといいなぁ(苦笑)

今後は下記事項を進めます。

・サブPC再構築&動作確認
・今回記事をHPにまとめる
・連画取得ツール改修
・旗手モデル作成
・槍兵モデル再作成

順番は未定なので、次回は上記事項のいずれかを実施する予定です。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
三国志~豪傑伝~
三国志~豪傑伝~
三国志演義を題材にした基本料金無料のMMORPG。専用クエストをクリアすると、初期には選べなかった英雄たちをプレイヤーキャラクターとして扱えるようになる。強化・合成システムや爆血システムなどもある。



◎クォータニオンの勉強

今回はひにけにXNAの記事を参考に、ボーン数制限を増やすための勉強をします。

その1:クォータニオンってなに?

その2:クォータニオンの使い方

その3:クォータニオンの使いどころ

クォータニオンはまだ不慣れですが、とりあえず記事の内容(クォータニオンの使い方)は理解しました。



◎実装への道のり

その4:クォータニオンでスキンアニメーション

この記事はSkinningSampleを前提としていますが、私はこれまでACL等を使用してきたので、このサンプルの使用経験がありません。

まずはこのサンプルを解析して理解し、ボーン数制限を増やす手法を修得し、さらにSoftimageランタイムで同様に実装する必要があります。



◎サンプル解析

というわけで、クォータニオン版のSkinned Modelサンプルを解析しました。

QuatSkinningSample 解析メモ

個人的なメモです。他者への解説用ではありませんのであしからず。


勉強になった点を幾つかピックアップします。

・コンテントプロセッサ内では、Dictionary(TKey, TValue)クラスの操作が多いので、後日参考になりそう。

・ContentBuildLogger.LogWarning()でコンテンツのインポーターまたはプロセッサからの警告メッセージを出力可能とのこと。

こちらの記事を再読して、今更ながらサンプルプロジェクトが本体/コンテントパイプライン/ランタイムの3つに分かれている理由を理解しました。



◎疑問点

コンテントパイプライン(SkinnedModelProcessor.cs)の最後の処理
/// 全てのマテリアルがスキンモデル用のエフェクトを使うように変更する
この処理により、エフェクトファイル複数使用不可となりますね?

このままだと、モデルを複数追加した場合でも、SkinnedModel.fxに全てのマテリアルを記述しなければならないような…モデルが多いゲームに不向きでは??



◎後記

Skinned Modelサンプルはいずれ解析せねばと思っていましたが、今回は日本語コメント版を解析できたので良かったです。^^

全体の5割はすぐに理解できましたが、4割はいろいろ調べて理解しました。1割は未だ意味不明ですが、今回の本題ではないのでこれ以上追求しません。

余談ですが、ソースを解析して、Xbox360コントローラの左右ボタンがアナログだということに初めて気付きました。

我ながらアホと言うかマヌケというか…(^_^;



◎次回予告

サンプル解析及びボーン数制限を増やす手法を勉強しました。次回はこの手法をSoftimageランタイムに適用します。

…適用できるといいなぁ(汗)

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
SEKIHEKI
SEKIHEKI
基本プレイ無料の三国志MMORPG。移動戦闘や回避、ガードまで行えるアクション性の高いオンラインゲーム。



◎見た目の修正

えらく間が空いてしまいましたが、前々回の続きです。

手先の位置が左右に伸びすぎな状態を直すべく、ボーンを加工したりエンベロープを着脱したりエンベロープウエイトを個別に調整したり…延々と試行錯誤を続けた結果、ようやく直りました。

1.腕のコントロール(Biped.LArmEff)を選択

2.タイムラインを先頭に合わせる

3.必要に応じて初期ポーズを付ける

4.「Transform>すべての変換をフリーズ」

5.「Transform>ニュートラルポーズの設定」

6.「Transform>すべての変換をリセット」
  →sが1、rとtが0であることを確認

7.キー設定を付け直す
  1.タイムラインをキー設定済みに合わせる
  2.「Transform>すべての変換をリセット」
  3.r(回転)を選択、kでキーを確定
  4.t(移動)を選択、kでキーを確定
  ※繰り返し

8.「XNA Game Studio>Manage Animation」
  New Actionを選択しUpdate Action Clipを押す

9.PublishしてXNAで動かす

ボーン数増加テスト06

やっとXNAでまともにアニメしました!

引っ越しでカンが鈍ったためか、試行錯誤にどえりゃ~時間かかりました(爆)



◎補足

今回得られた教訓(注意点)は下記2点です。

・標準取得のリグ&メッシュを流用する場合、エンベロープ設定後に「ニュートラルポーズ/すべての変換をフリーズ」の再設定が必要

・「ニュートラルポーズ/すべての変換をフリーズ」を設定する場合、Update Action Clipを押す必要がある

特に後者が要注意ですね。従来方式だと、アクションを付ける(キーの追加更新)だけならUpdate Action Clipを押す必要はなかったので、すっかり忘れてました。



◎準備完了

ここまでは準備段階でした。ここからがようやく本題です。

このモデルのボーン数は108です。

私のメインPCは特殊仕様なので、xsi_defaultvs.hlslの
#define MaxBones 58
58を108に変えるだけで動きました。

しかしこのままだと通常のPCでは動かないでしょう。定数レジスタ256以下でボーン数108以上をサポートできるように改修する必要があります。



◎次回予告

準備に時間かかってしまいましたが、次回からようやく本題に入ります。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
熱血三国
熱血三国
基本プレイ無料の三国志戦略シミュレーションゲーム。城内建設などは他のWebゲームと同様。史実武将は900人以上登場する。開戦時間に合わせて部隊を参照すると、プレイヤーが部隊への細かい指示を送ることができる。



◎6月の目標達成度

・活動時間月100時間以上

実績:40h(達成率:40%)

 (中間目標:6/15迄に50h以上)

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


・旗手作成(16h)

実績:17hでボーン増加テスト中(達成率:50%)


・履歴画面イメージ作成(8h)
・企画見直し(20h)
・年間目標/スケジュール作成(24h)

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


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

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


急に引っ越しが決まったため、後半は全然活動できませんでした。
(注:目標値は引っ越ししない前提でした)



◎作業時間分析

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


○良かった点
・1周目のペースは目標通りであった

○悪かった点
・月間作業時間は過去最悪


2週目以降(特に後半)は急に引っ越しが決まって(荷造りや手配等のため)殆ど作業できませんでしたが、これは仕方無いでしょう。

むしろ、大きなトラブルも無く6月中に旧宅明け渡しまで完遂したので、自分ではかなり頑張ったと思います。
(後半は正直へろへろでしたw)



◎ボーン数増加について

Softimage&XNA連携でボーン数上限を増やすべく試行中です。引っ越しのため進捗は遅れてしまいましたが、これに成功したらシャドウリグ方式をやめてモデルを作り直すつもりです。

上手くいけばモデリング(含XNA連携)の開発試行時間が大幅に短縮できるので、是非成功させたいですね。



◎引っ越し関連作業

引っ越し関連作業をざっと挙げるとこんな感じです。

・決済/新宅引き渡し
・荷造り/搬出/移送/搬入/開梱/整理
・清掃/旧宅明け渡し
・電気/ガス/上水道/下水道の停止/清算/開始
・処分(PC8台、モニタ8台、古本800冊、洗濯機、コンロ等)
・調達(照明/洗濯機/エアコン/レコーダー等)
・工事(カーテンレール取付、キャスター交換等)
・立会(エアコン工事/アンテナ工事/NW工事等)
・挨拶(手土産調達/近所挨拶/周知連絡)

予算低減のため、洗濯機以外の家具は全て旧宅から引き継いで、新調は極力控えたのですが、それでも結構大変でした。

地デジ対策を例に挙げると、アンテナ/ケーブルTV/フレッツTVの三択についてそれぞれメリットやデメリット、費用、注意点、部品から宅内配線に至るまで調査検討に丸二日、レコーダー選定調査検討(BD/DVD、ダビング、W録、HDD増設、操作性、価格等)に丸一日、アンテナ工事手配/立会、レコーダー手配/設置配線/設定に一日程度かかりました。(事前調査をかなり徹底させたので、実作業はわりと短時間でした)

地デジ対策だけで4日もかかったわけですが、エアコンやNW、洗濯機、照明、カーテンなど、それぞれまともに調査検討すると結構大変です。というか段ボール50箱相当の荷物を移送/処分するだけで死にそうでしたw



◎進捗状況チェック

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



◎7月の目標

・活動時間月132時間以上
 (中間目標:6/15迄に60h以上)

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

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

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

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

・企画見直し(20h)

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

ちょっとバテ気味ですし、片付けも終わっていないので、前半は若干ペースを落とします。後半は徐々にペースを上げていきます。



◎次回予告

次回は前回の続きです。

しばらく更新が滞っておりましたが、徐々にペースを戻していきますのでよろしくお願いします。

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

| BLOG TOP |

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