プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
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の他のパラメータを一通りサポートする予定です。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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