locked
複数のテクスチャを使用したXファイルの表示について RRS feed

  • 質問

  • カスタムシェーダを使用して「二枚以上のテクスチャファイルを使用しているXファイル」を表示をしようとしています。

     

    1枚の場合はDrawの表示の時にEffectParameterを使ってtexture2Dを割り当てシェーダ内で受け取り

    座標情報→sampler_state→表示

     

    といった流れで実装しておりました。

     

     

    ふと二枚のテクスチャを持ったデータをカスタムシェーダで表示しようとしてつまっております。

     

    モデルの今表示しているパーツがどのテクスチャを参照しているのか?を知る方法から分からないために前に進めないのだと思うのですが、ご教授よろしくお願いします。

     

    2008年10月4日 21:43

回答

  •  

    実装できたので自己レスしておきます。

     

    結論としてはコンテントパイプラインで読み込み時にテクスチャをエフェクトに割り振り、その後からは触れない

    ということで解決しました。

     

    自分としては法線MAPも質問の時した形で対応させたかったのですがこれもコンテントパイプのほうでやらなくてはいけないようですね

     

    Xファイルに法線MAPを加えることが出来なかった場合(出力ソフトの仕様になどで)、複数のテクスチャを持ったXファイルに法線MAPを各々に割り当てるためにはどのような手段を踏むのか知りたいです。

     

     

    2008年10月6日 0:54
  • 複数、単数に限らずテクスチャをシェーダー内で使うときに必要なものとして、どのテクスチャをどのシェーダーのどのサンプラーに割り当てて、どのテクスチャ座標を使うのかという情報があります。

    残念ながら、そういったところまでサポートしてくれる3Dモデリングツールが少ないのが現状なのですが、
    これをサポートしているツール、例えば3ds studio MAX上でシェーダーをマテリアルとして使うと、上記の情報をXファイルとして書き出すようになっており、コンテントパイプライン上でもこれをサポートしているのでカスタムプロセッサを書く必要もなく、そのまま実行時に使うことができます。

    そうじゃない場合は、上記の情報をどこかで生成して、カスタムプロセッサ内で処理するか、そのままその情報を実行時に読み込んで使う二種類の方法があります。


    コンテントパイプライン上でテクスチャ情報をシェーダーに追加する方法は以下のサンプルが参考になると思います。
    http://creators.xna.com/en-us/sample/normalmapping


    具体的にはコンテントパイプライン内で以下の様にしてテクスチャを追加すると

    Code Snippet

    EffectMaterialContent.Textures.Add( "シェーダー内のテクスチャパラメータ名", テクスチャ);


    実行時にこのテクスチャは指定されたシェーダー内のテクスチャパラメーターに設定されるようになります。
    2008年10月7日 2:27
  • ありがとうございます。

     

    提案していただいた方法にて無事、実装できました。

    私の環境に3dsMaxが無いのが少し悔やまれましたが自前で名前を管理するようにして対応したいと思います。

     

    2008年10月7日 6:57

すべての返信

  •  

    実装できたので自己レスしておきます。

     

    結論としてはコンテントパイプラインで読み込み時にテクスチャをエフェクトに割り振り、その後からは触れない

    ということで解決しました。

     

    自分としては法線MAPも質問の時した形で対応させたかったのですがこれもコンテントパイプのほうでやらなくてはいけないようですね

     

    Xファイルに法線MAPを加えることが出来なかった場合(出力ソフトの仕様になどで)、複数のテクスチャを持ったXファイルに法線MAPを各々に割り当てるためにはどのような手段を踏むのか知りたいです。

     

     

    2008年10月6日 0:54
  • 複数、単数に限らずテクスチャをシェーダー内で使うときに必要なものとして、どのテクスチャをどのシェーダーのどのサンプラーに割り当てて、どのテクスチャ座標を使うのかという情報があります。

    残念ながら、そういったところまでサポートしてくれる3Dモデリングツールが少ないのが現状なのですが、
    これをサポートしているツール、例えば3ds studio MAX上でシェーダーをマテリアルとして使うと、上記の情報をXファイルとして書き出すようになっており、コンテントパイプライン上でもこれをサポートしているのでカスタムプロセッサを書く必要もなく、そのまま実行時に使うことができます。

    そうじゃない場合は、上記の情報をどこかで生成して、カスタムプロセッサ内で処理するか、そのままその情報を実行時に読み込んで使う二種類の方法があります。


    コンテントパイプライン上でテクスチャ情報をシェーダーに追加する方法は以下のサンプルが参考になると思います。
    http://creators.xna.com/en-us/sample/normalmapping


    具体的にはコンテントパイプライン内で以下の様にしてテクスチャを追加すると

    Code Snippet

    EffectMaterialContent.Textures.Add( "シェーダー内のテクスチャパラメータ名", テクスチャ);


    実行時にこのテクスチャは指定されたシェーダー内のテクスチャパラメーターに設定されるようになります。
    2008年10月7日 2:27
  • ありがとうございます。

     

    提案していただいた方法にて無事、実装できました。

    私の環境に3dsMaxが無いのが少し悔やまれましたが自前で名前を管理するようにして対応したいと思います。

     

    2008年10月7日 6:57