Реализация сопоставления нормалей HLSL

Итак, хорошо. Я пытаюсь реализовать сопоставление нормалей в своем маленьком игровом движке, и я просто не могу заставить его работать.

Когда я делаю освещение только с нормалями для каждой вершины, все в порядке, но если я попытаюсь сделать это с помощью карты нормалей, все развалится.

Я знаю, что у меня есть правильные UV-развертки, потому что текстура выглядит хорошо, но я не знаю, что я делаю неправильно, когда дело доходит до текстуры карты нормалей.

Это часть моего кода в моем пиксельном шейдере (HLSL)....

    float3 NormalSample(float3 normalMapSample, float3 unitNormalW, float3 tangentW)
{
    //Uncompress each component from [0,1] to [-1,1]
    float3 normalT = 2.0f*normalMapSample - 1.0f;
    // Build orthonormal basis.
    float3 N = unitNormalW;
    float3 T = normalize(tangentW - dot(tangentW, N)*N);
    float3 B = cross(N, T);

    float3x3 TBN = float3x3(T, B, N);

    // Transform from tangent space to world space.
    float3 bumpedNormalW = mul(normalT, TBN);

    return bumpedNormalW;
}

Любые идеи о том, что я могу делать неправильно?


person Miguel    schedule 20.02.2013    source источник
comment
Код выглядит правильно. Убедитесь, что вы правильно вычислили нормаль и касательную. Также имейте в виду, что NormalSample возвращает нормаль в мировом пространстве, поэтому вы должны делать освещение в мировом пространстве. Что произойдет, если вы установите для normalMapSample фиксированное значение (0,5, 0,5, 1) вместо выборки текстуры?   -  person miloszmaki    schedule 20.02.2013
comment
Хорошо, на самом деле я реализую свое освещение, используя другую модель освещения, и буду сообщать об этом. Я думаю, что сейчас я делаю неправильно то, что неправильно преобразовываю векторы между касательным пространством, мировым пространством и модельным пространством.   -  person Miguel    schedule 21.02.2013


Ответы (1)


Хорошо, я исправил это. Я просто делал обычные вычисления в неправильном координатном пространстве. Чтобы было проще, я решил делать все в модельном пространстве. Это здорово выглядит. Жаль, что нельзя выкладывать скриншоты.

Еще раз спасибо Милошмяки....

person Miguel    schedule 21.02.2013