Що таке затінення рампи або освітлення?


14

Що таке затінення рампи або освітлення і як це працює? Чи відрізняється він від затінення тонів або це одне і те ж поняття? Як по-різному обчислюється окулярність для затінення рампи проти блін-фонга чи ламберта?

Відповіді:


21

У традиційному затіненні Бліна / Фонга ви обчислюєте дифузний термін для пікселя, вимірюючи косинус кута між нормальним на поверхні та напрямком світла. Отже, у цьому випадку простий шейдер виглядатиме приблизно так:

float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    return max(0.0, Dot(lightDir, normal));
}

У затіненні рампи ідея полягає в модулюванні коефіцієнта розсіювання за допомогою 1D текстури пошуку. Залежно від того, що ви вкладаєте в цю текстуру, ви можете створювати різні ефекти. Отже, наша шейдерна функція для обчислення дифузного коефіцієнта стає:

texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    // Map value from [-1, 1] to [0, 1]
    float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
    return tex1D(rampTex, rampCoord);
}

Наприклад, якщо ми хотіли реалізувати шейдер для комірок, то, що ми могли б зробити, це генерувати текстуру рампи, яка імітує ступінчату функцію:

введіть тут опис зображення

Можна використовувати одну і ту ж ідею для створення різних ефектів і для дзеркального освітлення. Затінення "Ramp" насправді стосується лише ідеї модулювання значення затінення текстурою.

РЕДАКТУВАННЯ : Team Fortress 2 використовує шейдер для пандусів у візуалізації. Ви можете ознайомитися з деталями у цьому документі:

http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf

Дивіться під Розділом 5, у підрозділі під назвою "Функція дифузної деформації"


1
Чудова відповідь! Пояснення різниці освітлення між дифузним та рамним освітленням саме те, що я шукав. Я також вдячний за коментар щодо поняття затінення рампи загалом. Як додатковий бік, чи можете ви розмістити приклад зображення з гри, яка використовує цю концепцію?
StampyTurtle

@Stampyturtle Я оновив свою відповідь прикладом.
Мокоша
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.