И наконец, вычисляется окончательное значение освещения. Это значение - косинус угла между нормалью поверхности и направлением освещения, он тоже
10.5. Полиномное отображение текстуры с BRDF-данными щриводится к диапазону [0, 1], так как потом будет использоваться в качестве текстурной координаты для обращения к 1 D-текстуре, чтобы получить коэффициент -освещения.
10.5.3. Фрагментный шейдер
Фрагментный шейдер, иллюстрирующий метод рендеринга BRDF РТМ, приведен в листинге 10.8.
Листинг 10.8. Фрагментный шейдер для рендеринга с помощью полиномных текстур
//
// Фрагментный шейдер РТМ от Брэда Риттера. Hewlett-Packard. // и Рэнди Роста. 3Dlabs. //
// « 3Dlabs. Inc. и Hewlett-Packard. L.P.. 2003. // опубликовано с разрешений компаний //
uniform sampler2D ABCred: // - О
uniform sampler2D DEFred: // = 1
uniform sampler2D ABCgrn: // = 2
uniform sampler2D DEFgrn: // = 3
uniform sampler2D ABCblu; // = 4
uniform sampler2D DEFblu; // = 5
uniform samplerlD Lighttexture: // = 6
uniform vec3 ABCscale. ABCbias.:
uniform vec3 DEFscale. DEFbias;
varying float Du; // передает вычисленное значение l*tPrime
varying float Dv; // передает вычисленное значение L*pPrime
varying float LciotN: // передает вычисленное значение L*Norrhal
varying vec2 TexCoord: // передает текстурные координаты s и t
void main(void) {
vec3 ABCcoef. DEFcoef: vec3. ptvec:
// Чтение коэффициентов для красного цвета // и применение коэффициентов масштабирования и сдвига ABCcoef = (texture2D(ABCred. TexCoord).rgb - ABCbias) * ABCscale: DEFcoef = (texture20(DEFred. TexCoord).rgb - DEFbias) * DEFscale;
// Вычисление полинома для красного цвета ptvec.г = ABCcoef[0] * Du * Du + ABCcoef[1] * Dv * Dv + ABCcoef[2] * Du * Ov + DEFcoef[0] * Du + DEFcoef[l] * Dv + DEFcoef[2]:
// Чтение коэффициентов для зеленого цвета
// и применение коэффициентов' масштабирования и сдвига продолжение
Шейдеры с сохранением данных в текстурах
Листинг 10.8 (продолжение)
ABCcoef = (texture2D(ABCgrn. TexCoord).rgb - ABCbias) * ABCscale: DEFcoef = (textLire2D(0EFgrn. TexCoord). rgb - DEFbias) * DEFscale: