И наконец, вычисляется окончательное значение освещения. Это значение - косинус угла между нормалью поверхности и направлением освещения, он тоже

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:

⇐ Предыдущая| |Следующая ⇒