// Вычисление полинома для красного цеета 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 - ABCtms) * ABCscale:

DEFcoef = (texture2D(DEFgrn, TexCoord).rgb - DEFbias) * DEFscale:

// Вычисление полинома для зеленого цвета ptvec.g = ABCcoef[0] * Du * Du +

ABCcoef[l] * Dv * Dv +

ABCcoef[2] * Du * Dv +

DEFcoef[0] * Du +

DEFcoef[l] * Dv +

DEFcoef[2]:

// Чтение коэффициентов для синего цвета

// и применение коэффициентов масштабирования и сдвига

ABCcoef = (texture2DСАВСЫu. TexCoord).rgb - ABCbias) * ABCscale;

DEFcoef = Ctexture2D(DEFblu. TexCoord).rgb - DEFbias) * DEFscale:

// Вычисление полинома для синего цвета ptvec.b = ABCcoef[0] * Du * Du +

ABCcoef[1] * Dv * Dv +

ABCcoef[2] * Du * Dv +

DEFcoefCO] * Du +

DEFcoef[1] * Dv +

DEFcoef[2];

// Умножение результата на коэффициент освещения ptvec *- texturelD(Lighttexture. LdotN).rgb;

// Занесение результата в переменную gl_FragColor gl_FragColor = vec4 (ptvec. 1.0):

}

Этот шейдер относительно прост для читателя, усвоившего предыдущие три раздела. Значения компонентов s и t переменной TexCoord являются двухмерными параметризациями вектора приращения. Эти значения используются для поиска по текстуре с коэффициентами и получения коэффициентов Л, В, С, D, Е и F. BRDF РТМ сохраняется как многоуровневая текстура, и, так как смещение по многоуровневой текстуре не задано, просто используется вычисленный уровень детализации. С помощью векторных операций шесть коэффициентов масштабируются и сдвигаются по значениям, заданным приложениям в виде uniform-переменных.

Такие преобразованные коэффициенты, как и Du и Dv, подставляются в биквадратный полином, чтобы вычислить красную составляющую поверхности. Этот процесс повторяется для зеленой и красной составляющих. Коэффициент освещения вычисляется обращением к ID-текстуре освещения по косинусу угла между направлением освещения и нормалью поверхности. Этот коэффициент освещения умножается на полиномиальный вектор, затем добавляется значение прозрачности 1,0, в результате чего получается окончательный цвет фрагмента.

Цветной рис. 11 демонстрирует, как BRDF РТМ-шейдеры выполнили рендеринг тора, используя текстуру для автомобильного покрытия под названием Mystique Lacquer. Основной цвет этой краски - черный, но зеркальное отражение в основном белого и красно-коричневого цветов с освещенной стороны и синеватого цвета - с противоположной. При вращении объекта или источника освещения приведенные шейдеры будут правильно вычислять сдвиг цветов.


⇐ вернуться назад | | далее ⇒