Какова цель нормализованного буфера глубины и как мне это сделать? - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу иметь свой собственный проход глубины.

Вершинный шейдер:

#include "../ConstantBuffers/ViewConstantBuffer.hlsli"
struct VertexShaderInput {
    float3 Position: POSITION0;
    half2 UV: TEXCOORD0;
};
struct VertexShaderOutput {
    float4 Position: SV_POSITION;
    half2 UV: TEXCOORD;
};

VertexShaderOutput vs(VertexShaderInput input){
    VertexShaderOutput output;
    output.Position = mul(float4(input.Position, 1.0f), viewProjection);
    output.UV = input.UV;
    return output;
}

Пиксельный шейдер:

struct PixelShaderInput {
    float4 Position: SV_POSITION;
    half2 UV: TEXCOORD;
};

struct PixelShaderOutput {
    half4 Color : SV_Target;
    float Depth : SV_Depth;
};
PixelShaderOutput ps(PixelShaderInput input)
{
    PixelShaderOutput output;
    output.Depth = input.Position.z; // Divide by w here???
    output.Color = half4(input.UV.x, input.UV.y, 0,1);
    return output;
}

Я понимаю, что в настоящее время я ставлю Z Поместите в буфер глубины. Буфер глубины правильно отображает значения. Они варьируются от NearPlane до FarPlane, в зависимости от того, как я настроил перспективу. (и, таким образом, мой буфер глубины полностью белый, если я действительно не близок к чему-либо)
Мой вопрос:

В большинстве игровых движков буфер глубины кажется нормализованным (то есть буфер глубины не превышает [0 -1]) какова цель этого и как мне это сделать?

...