ContentProcessorでタンジェントを作成するとモデルが破損する場合があるのですが

Jawab ContentProcessorでタンジェントを作成するとモデルが破損する場合があるのですが

  • 2009年7月1日 6:06
     
     

    ノーマルマップを使用したくContentProcessorでタンジェントを作成したのですが
    ほとんどのモデルは問題なく通過するのですが一部のモデルを通すとモデルデータが壊れてしまいます。破損したデータを表示しようとすると無限ループに入るのか帰ってこず、破損データを読み込んだだけで他の正常なデータすらも表示できない状態になってしまいます。

    一つのモデルに複数のマテリアルを使い、さらに多くのテクスチャーを張るとおきてしまいます。試しているモデルでは2つのマテリアルを張り、各マテリアルには画像2枚、ノーマルマップ2枚、スペキュラマップ2枚を張ってあります。

    どなたか同じような症例の方はおられないでしょうか? 又ファイルを添付できればよかったのですができないようなので・・・どなたかご助言いただければ幸いです、よろしくお願いします。

すべての返信

  • 2009年7月1日 18:32
     
     

    無限ループに陥っている状態のコールスタックをあげてもらえないでしょうか?
    こちらの方でも同じ状況を再現したいので、問題のあるモデルをアップローダーかウェブサイトにアップしてもらえないでしょうか?


    XNA Framework Developer
  • 2009年7月2日 2:46
     
     
    返信ありがとうございます。
    コールスタックは取得方法がよく解らないのですが

    http://www1.axfc.net/uploader/Sc/so/13885.zip
    こちらにサンプルをアップしましたので試していただければ幸いです。
    よろしくお願いします。
  • 2009年7月2日 4:58
     
     回答済み
    XNA GS 3.1上でテストしてみましたが、問題無く変換、表示されます。
    気になるのはテクスチャ座標が12個もあり、使用しているテクスチャも9つあるので同時に指定できるTextureの最大数の8個を越えている辺りです。

    コールスタックは無限ループに入っていると思われる状況でブレイクし、デバッグ/ウィンドウ/コールスタックで表示できます。

    XNA Framework Developer
    • 回答としてマーク DODONGA 2009年7月2日 8:03
    •  
  • 2009年7月2日 8:03
     
     

    テクスチャーの最大数だったのでしょうか、マテリアル単位でメッシュパーツに分離されるので
    1メッシュパーツでは6枚使用を想定してあったのですが。
    タンジェントを作成して無い状態ではメッシュ全体で12枚使用したデータでも問題なく表示はされたのですが、やはりどこか無理がかかっていたのでしょうか。

    データをMAYAで作っていたのですがマテリアル単位にカットするMELを作成することで1メッシュでの使用枚数を6枚に抑えるように変更したところ表示されるようになりました。

    ご返答ありがとうございました。

  • 2009年7月2日 17:18
     
     
    もうひとつ、頂点宣言の数が17個あり、頂点シェーダーで使える入力パラメーター数の最大数である16個を越えているのも原因かもしれません。テクスチャ数に関してはコンテントパイプライン内でチェックすることはできませんが(用途が限定できない)、頂点宣言数に関しては警告メッセージを出すようにした方が良いですね。

    XNA Framework Developer