DirectXのシェーダ(HLSL)における、整数テクスチャと浮動小数テクスチャの挙動が、
気になったので調査した。
忘れないようにまとめる。
『整数テクスチャについての調査』
結果:・シェーダー内において、整数テクスチャは、0から1までの値しか扱えなかった。
・シェーダ内で整数テクスチャにtex2D関数でテクスチャのピクセルにアクセスした場合、
戻り値として帰ってくるピクセルの値は、0から1.0fの値であった。
(整数テクスチャに格納されている0から255の値を0.0fから1.0fの値で扱うということである。)
・アプリケーション側からテクスチャの内容にアクセスすると、
内容には0から1の値が入っているのではなく、0から255の値の整数値が入っていた。
・[D3DFMT_〜〜]は、[D3DFMT_上位ビット〜下位ビット] という表記になっている。
まとめ:・整数テクスチャは、0から255までの整数値を記憶するものである。
・シェーダー内で見た場合とアプリケーション側で見た場合で扱う値が変わる。ちょこっとややこしいので注意!!
・シェーダー内でピクセルの値を見ると、ピクセルの値は0から1.0fとなる。
(シェーダー内では、整数テクスチャのピクセル値0から255の値を0から1.0fの値として扱うことになる。)
・アプリケーション側でピクセルの値を見ると、ピクセルの値は0から255となる。
・シェーダー内で、1.0fより大きい値をいれても、1.0fとして扱われる。
『浮動小数テクスチャについての調査』
結果:・シェーダー内において、浮動小数テクスチャは、指定したフォーマットの精度で表せる値が扱えた。
D3DFMT_A32B32G32R32Fなら、各色、32bitで表せる値が扱える。
・シェーダ内で浮動小数テクスチャにtex2D関数でテクスチャのピクセルにアクセスした場合、
戻り値として帰ってくるピクセルの値は、指定したフォーマットの精度で表せる値であった。
・アプリケーション側からテクスチャの内容にアクセスすると、
内容には指定したフォーマットの精度で表せる浮動小数値が入っていた。
シェーダー内で格納した値と等しかったということである。
・[D3DFMT_〜〜]は、[D3DFMT_上位ビット〜下位ビット] という表記になっている。
まとめ:・浮動小数テクスチャは、指定したフォーマットの精度で表せる浮動小数値を記憶するものである。
・シェーダー内で見た場合とアプリケーション側で見た場合において、扱う値は同じ。
(整数テクスチャのような、0から255の値を0から1.0fの値として扱うことはない。)
まとめからわかること:・浮動小数テクスチャは、シェーダー内、アプリケーション側に関わらず、整数テクスチャのように、
値が変換されることはない。そのため、ポリゴンに貼るなどして、浮動小数テクスチャを
画面に表示する場合、シェーダー内で浮動小数テクスチャの内容を0から1.0fに直して、
色を出力する必要がある。(HDR処理の時とか。)
・浮動小数テクスチャを使えば、シェーダー内の演算結果を保存して、見ることができる。
theme : プログラミング
genre : コンピュータ