プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:XNA修得
ステンシルシャドウ09
投影行列の適用テスト
XNAViewerに投影行列を適用して、影が斜めに表示される状態になった。ワールド座標変換行列の渡し方にコツがあるらしい。



◎前回の補足

前回のACLステンシルシャドウは、下記A案で実装しました。

A案:モデル:複製、アニメーター:複製
B案:モデル:非複製、アニメーター:複製
C案:モデル:非複製、アニメーター:非複製

もしかしたら、B案C案でも動くかもしれません。
(やってみないとわかりません)

もし動くのであれば、C案が一番パフォーマンスが良さそうです。興味がある方は試してみてください。



◎投影行列の適用

さて、Softimageモデルへのステンシルシャドウ適用ですが、やはり最初の問題は投影行列の適用です。通常モデルやACLモデルで成功した投影行列を、再度適用してみましょう。

ステンシルシャドウ07

サンプルモデルなど複数のモデルで試したのですが、こんな感じでバラバラです。投影行列は正しいはずなのに、何が悪いのでしょうか?


私のXNAViewerは多少改造しているので、念のためXNAViewerを新規にセットアップして再度確認しました。

ステンシルシャドウ08

斜めに表示されて動きました。

…ということは、従来の改造のいずれかが投影行列の座標変換に悪影響をもたらしていた、ということです。ガーン!



◎原因判明

一番疑わしいのは、ボーン数増加改修です。「スケールを持つポーンアニメーションは非対応」という仕様ですが、ワールド座標変換行列のスケールはサポートするんじゃなかったっけ?

試しにスケールを変更して動かすと、スケールは変わらずにアニメだけ崩れました。ボーン数増加改修によって、ワールド座標変換行列のスケール変更が不可能な状態になっていた、というわけです。ガガーン!!!

改修後にスケール変更テストぐらいしとけって!!(>_<)


スケールに着目してソースコードをチェックすると、元のHLSL(Softimageランタイム付属HLSL)の特殊性に気付かなかったことが敗因でした。

このHLSLは、フローが2つに分岐します。スタティックのフローでは、エフェクトパラメータのワールド座標変換行列が反映されますが、スキンアニメのフローでは、エフェクトパラメータのワールド座標変換行列を無視します。

HLSLを改修せずにワールド座標変換行列を指定したい場合は、予め
Models[CurrentModel].CrosswalkModel.Root.Transform
にワールド座標変換行列をセットします。

つまり、ワールド座標変換行列をモデル情報の一部として受け渡す(エフェクトパラメータとしては渡されない)状態だったので、ボーン増加改修を行うと、ワールド座標変換行列のスケールも無視されることになった、というわけです。



◎旧方式に戻す

問題を解消するためには、ボーン増加改修を元に戻すか、ワールド座標変換行列の渡し方を変更する必要があります。リグ方式をやめたので、ボーン数を増やさなくても足りているのですが、問題が発覚したまま放置するのは気分が悪いですね…。

というわけで、ワールド座標変換行列の渡し方を昔の方式(こちらのB方式)に戻します。改修箇所が複数に及ぶ(しかもC#とHLSL両方)ので一度封印した方式ですが、ボーン増加改修を適用したい場合は仕方ありません。

ステンシルシャドウ09

スケールを含むSRTトランスレーションが正常に反映され、影がちゃんとアニメすることを確認しました。ようやく(ボーン増加改修済の状態で)投影行列が正常に反映されました。


それにしても、ランタイムシェーダの中途半端な設計思想がこんな所に影響するなんて…非スキンモデルのワールド座標変換行列はエフェクトパラメータで受け渡してるんだから、スキンモデルも同様に作って欲しかった(>_<)



◎次回予告

投影行列の適用に成功したので、次回は半透明とステンシルバッファです。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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