Что такое Ramp Shading или Lighting?

14

Что такое затенение или освещение рампы и как оно работает? Это отличается от Toon Shading или это та же концепция? Как по-разному рассчитывается зеркальность для затенения рампы по сравнению с блинн-фонгом или ламбертом?

StampyTurtle
источник

Ответы:

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));
}

В режиме линейного затенения идея состоит в том, чтобы модулировать коэффициент диффузии с помощью 1-мерной текстуры поиска. В зависимости от того, что вы положили в эту текстуру, вы можете создавать различные эффекты. Следовательно, наша функция шейдера для вычисления коэффициента диффузии становится:

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);
}

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

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

Вы можете использовать ту же идею для создания различных эффектов и для зеркального освещения. Затенение «линейного изменения» в действительности относится только к идее модуляции значения затенения с помощью текстуры.

РЕДАКТИРОВАТЬ : Team Fortress 2 использует рамповый шейдер при рендеринге. Вы можете проверить детали в этом документе:

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

Посмотрите в Разделе 5 подраздел «Диффузная деформация».

Mokosha
источник
1
Отличный ответ! Объяснение разницы в освещении между рассеянным и рамповым освещением именно то, что я искал. Я также благодарен за комментарий о том, какова концепция затенения рампы в целом. Кроме того, не могли бы вы опубликовать пример изображения из игры, которая использует эту концепцию?
StampyTurtle
@ Stampyturtle Я обновил свой ответ с примером.
Мокоша