プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
傳士仁
傅士仁
荊州の要地公安城を守備していたが、失火や後方支援の失態を責められて関羽に恐れを抱き、虞翻の説得を受けて呉に降伏した。正史では士人との記述が多い。



◎要調査

前回「スケールを調整すると歪みが矯正できる」と書きました。実際、初期表示はこれで直るのですが、表示をリセットする(パッドのLeftStickを押す)と、歪んだ状態になります。

こう書くと「モデルが悪いんじゃないの?」と思われるかもしれませんが、実は他のサンプルや自作モデルも最初からこんな感じでした。

ロボット初期表示   ロボット初期表示アニメ
ロボットの初期表示(左図)とアニメ(右図)

ロボットリセット表示   ロボットをリセットしてからアニメ
ロボットのリセット表示(左図)とカメラ後退してアニメ(右図)

…改めて静止画で見ると、リセット後カメラを後退すると明らかに異常ですね(^^;

私のPC環境では、3D画像が崩れたり歪んだりするのは日常茶飯事だったので、感覚がマヒして「こういうもの(これが当たり前)」だと思ってました(笑)

ちなみに、リセット状態に合わせてスケールを調整すると、リセット状態の表示は正常になりますが、逆に初期表示が歪んでしまいます。



◎混乱に拍車

リセット表示時の歪みを修正しようと思ってプログラムを見ると、初期表示時と同じ値をセットしています。同じ値をセットしてるのに、何故表示状態が変わるのか?しかも歪んだり直ったりするのか?

この謎が私の混乱に拍車をかけ、「Softimageのカメラは理解不能」という認識に繋がりました。



◎シーンファイルのソース

原因追求にあれこれ迷走しましたが、結論から言うと「シーンデータファイル(Scene_Data.xsi)のソースを何にするか?」で変わります。


パターンA
・ロボットのシーン(articulated_robot.scn)内のscene_dataを
 Scene_Data.xsiとして出力しXNAに渡す

パターンAの表示結果:
ロボット初期表示   ロボットリセット表示
・初期表示(左図)とリセット表示(右図)で
 カメラ位置が異なる (前述通り)


パターンB
・パターンAの行為をしない(デフォルト)

・オリジナルのScene_Data.xsiをXNAで使用する
 (上書きコピーする等)

・Scene_Data.scn内のScene_Dataを
 Scene_Data.xsiとして出力しXNAに渡す

パターンBの表示結果:
ロボットリセット表示   ロボットリセット表示
・初期表示(左図)とリセット表示(右図)で
 カメラ位置が同じ


つまり、パターンAの行為をすると、初期表示はまともに表示されるようになりますが、リセットすると元の歪み状態になります。一方、何もしないパターンBの状態では、初期表示とリセット表示は同じ状態(歪んだ状態)のままです。


ロボットのシーンは、モデルを指定せずにPublishするとシーンファイルも同時に出力できるので、てっきりScene_Data.scnを呼び出すor包括してるのかと思ってましたが、完全に別モノで別の値だったのですね。
ロボットシーンでPublish



◎座標値の確認

シーンファイルのソースによって現象が異なることは判明しましたが、シーンファイルの違いが何故表示状態の違いに結び付くのか、内部的な原因がまだ判明してません。

そこでPositionとInterestの値を画面に表示して確認します。

パターンA初期表示:
Position={X:1.464061 Y:49.10268 Z:76.35174}
Interest={X:0.472899 Y:25.18247 Z:2.518248}

パターンAリセット表示:
Position={X:0 Y:2 Z:20}
Interest={X:0 Y:0 Z:0}
(コードでセットした固定値)

パターンB初期表示:
(同上)

パターンBリセット表示:
(同上)

パターンA初期表示の時だけ、固定値と異なる値がセットされています。これはロボットシーン内のカメラ座標でした。
(エクスプローラでScene_Root>scene_data>Camera_Root配下にあるCameraかCamera_Interestを選択し、画面右側Transformのt(移動)を選択すると値が確認できます)
カメラ座標値を確認する


さらに、パターンBのScene_Data.scnのカメラ座標を確認すると、コードでセットした固定値と同じ値でした。

「ああ~そういうことだったのね~!」
この結果を見て、私はようやく全てを納得した気になりました。



◎オリジナルカメラとデフォルトカメラ

モデルを製作しXNAで表示する場合、「Softimageでオリジナルのカメラを作って利用したい」というケースと、「カメラを自前で用意するのは面倒だからカメラはデフォルトでいい」というケースがあります。
前者はパターンA、後者はパターンBでやれば良いわけです。


パターンA(オリジナルカメラ方式)の注意点としては、プログラムを改造しない限り、モデルの階層下にカメラを内包することはできなさそうだ、ということ。少なくとも、ロボットサンプルは別ファイルにしてますね。

でも、XNAViewerはシーンファイルを1つしか取り込まないので、このままでは複数のモデルに別々のカメラを用意することができません。ロボットのシーンファイル内ではカメラが調節済みなのに、デフォルトではパターンBが採用され、ロボットの初期表示がおかしいのはこのためでしょう。


パターンB(デフォルトカメラ方式)の注意点としては、モデルのスケールや座標をうまく調節してカメラ座標{X:0 Y:2 Z:20}と注視点{X:0 Y:0 Z:0}の間に納まるように配置する必要がある、ということです。

だからスケールが合わないと歪むんですね。ようやく納得できましたよ~!www



◎リセットについて

私はこれまで「パッドのLeftStickを押す操作」を「リセット(初期状態に戻す)操作」と認識していたのでそのように記述しましたが、こうして見ると、リセットというよりも「固定カメラに切り替える操作」と言った方が正しいかもしれません。

「そういう仕様だ」と言われたらそれまでなんですが、もし私が仕様書を書くとしたら、初期表示状態に戻るよう、オリジナルカメラ座標を優先的にセットしたと思います。

…文句があるなら自分で改造しろよ(一人ツッコミ)



◎次回予告

ようやく謎が1つ解けたって感じですね。これでSoftimageのカメラ制御はバッチリ!のつもりです(笑)

最近活動時間が少なくて、アニメの方はあまり進んでません。モデリングのように一括変換できなさそうなので、1から作り直しです。ふぅ~。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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