私は初心者のピクセル シェーダー ライターであり、いくつかの問題に直面しています。256x256、16 ビットの入力 (DXGI_FORMAT_R16_UINT) 画像を取得し、それを 256x256 のルックアップ テクスチャ (DXGI_FORMAT_R8_UNORM) に渡して、256x256 の 8 ビット出力に変換したいと考えています。
残念ながら、私は多くの問題に直面しているようで、出力は常に黒または白に固定されているようです。
また、どの DXGI 形式を使用すればよいか、また、どのデータ型が各形式に対応しているかもわかりません。
// Global Variables
Texture2D<uint> imgTexture : register( t0 );
Texture2D lutTexture : register( t1 );
SamplerState SampleType : register( s0 );
// Structures
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD0;
};
// Pixel Shader
float4 PS( PS_INPUT input) : SV_Target
{
uint pixelValue = imgTexture[input.Tex];
uint2 index = { pixelValue / 256, pixelValue % 256 };
// uint row = pixelValue / 256;
// uint col = pixelValue % 256;
float4 output = lutTexture[index];
output.g = output.r;
output.b = output.r;
output.a = 1.0f;
return output;
}
2D インデックスに変換する前に、pixelValue を正規化する必要がありますか?
インデックスを使用する前に正規化する必要がありますか?
代わりにサンプリングする必要がありますか?
私はここで正しい道を進んでいますか?
助けていただければ幸いです、ありがとう!