Данные об изображении, захваченные этим устройством, - основа для создания РТМ настоящей текстуры материала (например, автомобильного покрытия). Эти виды РТМ имеют четыре степени свободы. Две из них используются для представления изменяемых в пространстве характеристик материала и контролируются двухмерными текстурными координатами. Другие две степени свободы нужны для представления направления освещения. Это две независимые переменные биквадратного полинома.
BRDF РТМ немного отличается от описанного метода. Она используется для моделирования однородных материалов, которые не изменяются в пространстве. BRDF РТМ использует две степени свободы для представления направления освещения и еще две - для представления направления обзора. Параметризованное направление освещения (Lu, Lv) используется для независимых переменных биквадратного полинома, а параметризованное направление обзора (Vu, Vv) - для координат двухмерной текстуры.
Рис. 10.3. Устройство для захвата изображений материала для создания полиномных карт текстур (© Hewlett-Packard, 2003, воспроизведено с разрешения компании)
Не существует простой параметризации, которая хорошо подходит для всех BRDF-материалов. Для дальнейшей детализации (улучшения качества) нужна Повторная параметризация векторов освещения и обзора как векторов половины угла и приращения (HuJIv) и (Du,Dv). В шейдерах BRDF РТМ, обсуждаемых в следующем разделе, Ни и Hv представлены в виде независимых переменных биквадратного полинома, a Du и Dv - в виде координат двухмерной текстуры. В основном в вершинном шейдере вычисляются (Ни, Hv) и (Du, Dv).
BRDF РТМ может быть создана как методом LRGB, так и методом RGB. Пример, приведенный далее, демонстрирует рендеринг с использованием RGB BRDF РТМ. В примере использованы 8-битные текстуры RGBA, так как формат файла РТМ, разработанный компанией HP, основан именно на таком формате текстуры.
10.5.1. Подготовка приложения
Чтобы выполнить рендеринг BRDF-поверхностей с использованием приведенных в примере шейдеров, приложение должно установить значения нескольких uniform-перемеиных. Вершинному шейдеру нужно передать значения, описывающие направление обзора (бесконечно удаленный зритель) и координаты простого источника освещения (точечный источник освещения). Фрагментпому шейдеру требуются значения для масштабирования и смещения шести полиномных коэффициентов. (Эти значения уже были предварительно масштабированы при создании РТМ для сохранения точности, а теперь нужно их масштабировать снова с помощью коэффициентов масштабирования и смещения для данного РТМ.)
Приложение должно передать для каждой вершины четыре атрибута. Два из них - стандартные атрибуты OpenGL: gl_Vertex (координаты) и gl_Normal (нормаль). Другие два - тангенциальный вектор и вектор бинормали, которые должны быть вычислены приложением. Нужно передавать их в OpenGL либо с помощью функции gl VertexAttribARB, либо через произвольный массив вершин. Адрес этих произвольных атрибутов можно присоединить к нужным атрибутам в вершинном шейдере с помощью функции gl Bi ndAttri bLocati onARB. Например, если выбрать для значения тангенса адрес атрибута 3, а для значений бинормали - адрес атрибута 4, то присоединение будет происходить таким способом: