Шейдеры с сохранением данных в текстурах
Если компонент 2 отрицательный, расчеты будут несколько иные. Значение t вычисляется таким же образом, как и в предыдущем случае, но значение 5 масштабируется и сдвигается так, что оказывается в диапазоне [0,75, 1,25]. Впоследствии эти значения можно будет использовать непосредственно, так как для текстуры установлен режим GL_REPEAT. Значения s, лежащие в промежутке от 1,0 до 1,25, будут отображаться на s, находящиеся в промежутке от 0 до 0,25 в настоящей текстуре (трюк, упомянутый ранее). Таким образом, доступ к текстуре в целом будет организован правильно, в зависимости от направления отражения. Можно сравнивать s с 1,0 и, если его значение больше 1,0, вычитать из него 1,0, но для этого нужно . будет выполнять дополнительные операции, что повлияет на производительность. Используя трюк режима повтора, можно оставить эти вычисления для аппаратного обеспечения.
Все, что нужно сделать с установленными значениями индекса, - найти нужное значение в текстурной карте. Основное значение диффузно отраженного цвета вычисляется умножением интенсивности освещения на BaseColor. Для создания эффекта керамики это значение смешивается со значением на карте среды. Затем добавлением значения прозрачности 1,0 создается vec4 и окончательный цвет фрагмента передается для дальнейшей обработки. Окончательный результат показан на цветном рис. 8. На изображении видны ветки деревьев на спине и задней части трицератопса. В этом примере использовались цвет (0,4, 0,4, 1,0) (то есть светло-синий) и коэффициент смешивания 0,8 (то есть 80 % рассеянного цвета, 20 % значения из текстурной карты среды).
Пример наложения карты среды на зеркальную поверхность и добавление процедурных «шишечек» показан па цветном рис. 9.
10.5. Полиномное отображение текстуры с BRDF-данными Чтобы моделировать более реалистичные поверхности, нужно выйти за пределы простой модели освещения/отражения, встроенной в OpenGL и предполагающей, что все поверхности имеют зеркальные свойства отражения. С некоторого времени исследователи в области компьютерной графики выполняют рендеринг изображений с помощью более реалистичной модели отражения, которая называется функция распределения двунаправленного отражения, или BRDF'. Эта модель для вычисления отражения от поверхности учитывает и направление падающего освещения, и направление отраженного освещения. Углы возвышения и азимута этих векторов направления используются для вычисления относительного количества отраженного света (модель из стандартной функциональности OpenGL учитывает только угол возвышения). Эта модель может использоваться для рендеринга поверхностей со свойством анизотропного отражения (поверхности не инвариантны в отражении света при вращении). Для измерения BRDF-реальных поверхностей были придуманы специальные инструменты. Измерения BRDF можно диск-ретизировать, чтобы создавать текстурные карты для воспроизведения функции