Метод возмущения нормали
В векторе нормали к настоящей шероховатой поверхности и, следовательно, в направлении отражения есть небольшая случайная составляющая. На этой основе Блинн разработал метод возмущения нормали (Normal Mapping) для построения неровных поверхностей. Строится новая поверхность, которая выглядит шероховатой, путем внесения в направление нормали функции возмущения P(x,y):
,
где Q - поверхность,
- новая поверхность,
n - нормаль в т. (x,y).
В качестве P(x,y) можно использовать почти любую функцию, у которой существуют частные производные. Если узор не определяется аналитически, то функция возмущения записывается как двумерная таблица цветов с индексами x и y. Промежуточные значения вычисляются билинейной интерполяцией табличных величин, а производные вычисляются методом конечных разностей.
В то время как бампмаппинг всего лишь изменяет существующую нормаль для точек поверхности, нормалмаппинг полностью заменяет нормали при помощи выборки их значений из специально подготовленной карты нормалей (normal map). Эти карты обычно являются текстурами с сохраненными в них заранее просчитанными значениями нормалей, представленными в виде компонент цвета RGB, в отличие от 8-битных черно-белых карт высот в бампмаппинге.
В общем, как и бампмаппинг, это тоже "дешевый" метод для добавления детализации к моделям сравнительно низкой геометрической сложности, без использования большего количества реальной геометрии, только более продвинутый. Одно из наиболее интересных применений техники - существенное увеличение детализации низкополигональных моделей при помощи карт нормалей, полученных обработкой такой же модели высокой геометрической сложности. Карты нормалей содержат более подробное описание поверхности, по сравнению с бампмаппингом и позволяют представить более сложные формы.
|
|
|
Рис. 13.26
|
Карты нормалей предоставляют более эффективный способ для хранения подробных данных о поверхностях, по сравнению с простым использованием большого количества полигонов. Единственное серьезное их ограничение в том, что они не очень хорошо подходят для крупных деталей, ведь нормалмаппинг на самом деле не добавляет полигонов и не изменяет форму объекта, он только создает видимость этого. Это всего лишь симуляция деталей, на основе расчета освещения на пиксельном уровне. На крайних полигонах объекта и больших углах наклона поверхности это очень хорошо заметно. Поэтому наиболее разумный способ применения нормалмаппинга состоит в том, чтобы сделать низкополигональную модель достаточно детализированной для того, чтобы сохранялась основная форма объекта, и использовать карты нормалей для добавления более мелких деталей.
Карты нормалей обычно создаются на основе двух версий модели, низко- и высокополигональной. Низкополигональная модель состоит из минимума геометрии, основных форм объекта, а высокополигональная содержит все необходимое для максимальной детализации. Затем, при помощи специальных утилит они сравниваются друг с другом, разница рассчитывается и сохраняется в текстуре, называемой картой нормалей. При ее создании дополнительно можно использовать и bump map для очень мелких деталей, которые даже в высокополигональной модели не смоделировать (поры кожи, другие мелкие углубления).
Карты нормалей изначально были представлены в виде обычных RGB текстур, где компоненты цвета R, G и B (от 0 до 1) интерпретируются как координаты X, Y и Z. Каждый тексель в карте нормалей представлен как нормаль точки поверхности.
Замечание1: Эффект шероховатости зависит от масштаба изображаемого объекта. Если размер объекта в увеличивается в 2 раза, то величина вектора нормали увеличивается в 4 раза, а его возмущения — только в 2 раза. Это приведет к тому, что увеличенный объект будет казаться более гладким. Но масштаб фактуры не зависит на перспективном изображении от перемещения объекта в пространстве по направлению к т. зрения или от нее.
Замечание 2: Может появиться лестничный эффект, но можно воспользоваться способом усреднения по площади фактуры или методами устранения лестничного эффекта, основанными на предварительной фильтрации, что приведет к сглаживанию фактуры. Надо рассчитывать изображение с разрешением, большим, чем у дисплея, а затем отфильтровать или усреднить его и вывести с более низким разрешением экрана.
Дата добавления: 2016-07-18; просмотров: 2074;