5

私は初心者のピクセル シェーダー ライターであり、いくつかの問題に直面しています。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 を正規化する必要がありますか?

インデックスを使用する前に正規化する必要がありますか?

代わりにサンプリングする必要がありますか?

私はここで正しい道を進んでいますか?

助けていただければ幸いです、ありがとう!

4

2 に答える 2

0

あなたは間違いなく正しい軌道に乗っています。ただし、Valmond が述べたように、pixelValue の値は [0..1] の範囲になります。

LUTはどのように設定されていますか?最初の軸は変換される値だと思いますが、2番目の軸は何ですか? それがわかったら、コードで解決策を提供できます。

于 2011-11-29T06:33:23.873 に答える