Глубина буфера только показывает синий цвет

Я пытаюсь реализовать рендеринг Light Prepass в RenderMonkey. Пока что при проходе Normal+Depth кажется, что обычный буфер получает правильный результат, но буфер Depth показывает только один цвет. Как я могу проверить, правильный ли мой буфер глубины? Ссылка для скачивания рабочей области: http://www.mediafire.com/?jq3jmantyxw

1 ответ

Светло-синий на самом деле значения RGB 0.0, 1.0, 1.0, Поскольку глубина (обычно) - это один канал, представляющий Z, при выборке из текстуры он возвращается в первый канал, красный. Пропущенные каналы зеленого, синего и альфа будут заменены на 1.0.

Ваша ссылка для скачивания не работает, так как я подозреваю, что прошло уже 2 года.

Вы должны убедиться, что ваш пиксельный шейдер возвращает оба COLOR0 а также COLOR1 семантика (обратите внимание, что глубина float4 несмотря на то, что выходные данные являются текстурой одного канала):

struct PS_OUT { float4 color : COLOR0; float4 depth : COLOR1; };

PS_OUT ps_main( PS_INPUT Input )
{
    PS_OUT Output;
    // your color shader here
    Output.color = myFinalColor;
    Output.depth = myFinalDepth;  // e.g. Input.posz / Input.posw from your vertex shader
    return Output;
}

В зависимости от настроек вашей камеры, вы можете получить что-то вроде:

Другие вопросы по тегам