Пусть нам необходимо показать поверхность, изобилующую мелкими неровностями. Можно попытаться создать полигональную модель, аппроксимирующую все видимые детали рельефа, вплоть до мельчайших бугорков, ямок, трещин и т. п. Однако это может потребовать такого количества треугольников, которое не в состоянии поддержать компьютерная система.
Для визуализации таких поверхностей часто используется следующий метод. Общие очертания поверхности моделируются полигонами, а имитация мелких деталей рельефа производится с помощью текстур.
Рассмотрим один из популярных в настоящее время методов рельефного текстурирова-ния — DOT3. Согласно этому методу, каждый тексел текстуры хранит координаты вектора нормали для соответствующей точки поверхности (рис. 8.9).
Почему лучше использовать карту нормалей, а не само изображение в виде текстуры? Потому что, это дает возможность создавать иллюзию игры света и тени при смене ракурса показа и возможном движении источников света, и даже при деформациях поверхности. Обычная текстура это обеспечить не в состоянии — она представляет изображение, сделанное только для одного ракурса показа и фиксированного положения источников света.
Рис. 8.9. Пимер имитации микрорельефа методом DOT3 Bump Mapping
Для хранения координат нормалей удобно использовать 24-битный растровый графический формат файлов — тут каждая тройка RGB будет представлять тройку координат UVN. Координаты UVN описывают векторы нормалей в так называемой касательной или тангенциальной системе координат (рис. 8.10).
Рис. 8.10. Используемые системы координат
У системы координат UVN оси U и N лежат в плоскости текстуры, они параллельны осям текстурных координат ХT и YT, а ось N является нормалью к поверхности. Пусть задан вектор направления света L. Тогда, при расчете цвета пиксела поверхности, например, для диффузной модели отражения, можно использовать скалярное произведение векторов L и Nbump:
Цвет точки = (собственный цвет поверхности) x DOT3(L, Nbump)
где DОТ — часто используемое в англоязычной литературе обозначение для скалярного произведения (bot product) векторов (отсюда и название DОТЗ Витр Маррing).
Очевидно, что для корректного вычисления результата необходимо использовать в скалярном произведении одну и ту же систему координат для векторов L и Nbump . Для этого нужно привести вектор Nbump систему координат, описывающую вектор L (обычно это мировые координаты). А можно наоборот, выразить вектор L в системе координат UVN.