Чтение и Запись в текстуры в HLSL 5.0 (отложенное затенение)

Я пытаюсь добиться отложенного затенения в DirectX 11, C ++. Мне удалось создать G-Buffer и отобразить на нем свою сцену (проверено с помощью «GPU PerfStudio»). У меня трудности с финальной стадией освещения. Я не могу читать текстуры (Diffuse, Normal, Specular), используя возвращенные координаты SV_Position.

Это пиксельный шейдер, используемый для визуализации света в виде фигур.

Texture2D<float4> Diffuse   : register( t0 );
Texture2D<float4> Normal    : register( t1 );
Texture2D<float4> Position  : register( t2 );

cbuffer MaterialBuffer : register( b1 )
{
float4 ambient;
float4 diffuse;
float4 specular;
}
//--------------------------------------------------------------------------------------
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 PosVS:   POSITION;
float4 Color : COLOR0;
float4 normal : NORMAL;
};

float4 main(VS_OUTPUT input) : SV_TARGET
{

//return Diffuse[screenPosition.xy]+Normal[screenPosition.xy]+Position[screenPosition.xy];
//return float4(1.0f, 1.0f, 1.0f, 1.0f);
//--------------------------------------------------------------------------------------
//Problematic line
float4 b=Diffuse.Load(int3(input.Pos.xy,0));
//--------------------------------------------------------------------------------------
return b;
}

Я проверил с помощью «GPU PerfStudio» входные текстуры правильно связаны.

Приведенный выше код возвращает цвет, который я использовал, чтобы очистить текстуру. (Из моей отладки я обнаружил, что его возвращаемое значение в позиции пикселя 0,0)

Если я заменю проблемную строку на: —

float4 b=Diffuse.Load(int3(350,300,0));

Затем он отображает значение в 350,300 пикселей с правильной формой света.

Спасибо

0

Решение

Вы пробовали с флагом отладки D3D11_CREATE_DEVICE_DEBUG на создание устройства и посмотрел выходной журнал. Вы можете столкнуться с несоответствием подписи между этапами Vertex и Pixel. Это объяснило бы, почему семантика sv_position не ведет себя правильно.

0

Другие решения

Я решил проблему. Я использовал тот же z-буфер для рендеринга геометрии света, который я использовал ранее для G-буфера.

Благодарю за ваш ответ.

0

По вопросам рекламы [email protected]