Я начинающий автор пиксельных шейдеров, и у меня возникли некоторые проблемы. Я хочу взять 256x256 16-битное входное изображение (DXGI_FORMAT_R16_UINT) и пропустить его через текстуру просмотра 256x256 (DXGI_FORMAT_R8_UNORM), чтобы преобразовать его в 8-битный выход 256x256.
К сожалению, мне кажется, что у меня много проблем, и кажется, что вывод всегда ограничен черным или белым.
Кроме того, я не уверен, какие форматы 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;
}
Должен ли я нормализовать pixelValue, прежде чем пытаться превратить его в двумерный индекс?
Должен ли я нормализовать индекс перед его использованием?
Должен ли я вместо этого делать выборку?
Я даже на правильном пути здесь?
Буду признателен за ЛЮБУЮ помощь, спасибо!