Рельефное текстурирование

Авторы: 
Илья Тисевич
В данной статье дается обзор алгоритмов повышения реалистичности синтеза изображений с помощью пиксельных программ ("шейдеров") и подробно описывается новый алгоритм рельефного текстурирования, позволяющий получать высококачественные изображений поверхностей с заданным рельефом.

Введение

Задолго до появления видеокарт с аппаратной поддержкой трехмерной графики, во времена программной экранизации (rendering), в основу трехмерной графики легла полигональная модель, являющаяся одной из наиболее адекватных и достаточно легких как в плане программно-аппаратной реализации, так и в плане понимания её программистом.

Тем не менее, сразу стали очевидны недостатки такой модели, такие как, например, неизбежный компромисс между качеством получаемого изображения и временем, требуемым на ее экранизацию в совокупности с размером необходимых данных. Перед программистом или, чаще, дизайнером стоит выбор между моделями с низким уровнем детализации, которые могут быть экранизированы достаточно быстро, и при этом занимают сравнительно мало места, но в то же время выглядят малореалистично, и моделями с высоким уровнем детализации и противоположными показателями скорости прорисовки, размера данных и уровня реализма.

Очевидным решением, призванным изменить ситуацию, стало применение текстур, что позволило поднять реалистичность изображений на качественно новый уровень при минимальных дополнительных вычислительных затратах. Большим преимуществом текстурирования является то, что при грамотном использовании очень небольшого количества изображений, а соответственно малом объеме дополнительных данных, можно радикально преобразить сцену, причем практически задаром.

С появлением аппаратных ускорителей трехмерная графика стала развиваться очень быстрыми темпами. Вместе с повышением производительности видеокарт разработчики уделяли немало внимания расширению их возможностей, предназначенных в первую очередь для реализации новых способов повышения реалистичности изображений.

Речь о наиболее популярных на данный момент методах пойдет далее. Все методы из рассмотренных ниже в той или иной мере используют дополнительные (ставшие, впрочем, стандартом de facto на сегодняшний день ) возможности видеокарт. Ни один из методов не изменяет полигональную модель, то есть все методы работает в двухмерном пространстве текстуры.

Наложение неровностей (bump-mapping)

Существует несколько разновидностей данного метода, тем не менее их общей задачей является вычисление освещенности пикселей полигона при помощи дополнительной информации о структуре имитируемой поверхности, исходя из положения в пространстве и ориентации полигона относительно источника (или источников ) света.

Наложение неровностей с помощью тиснения (emboss bump-mapping)


Рис. 1 

Метод основан на применении мультитекстурирования, где в качестве второй текстуры используется карта тиснения. При этом текстурные координаты карты тиснения изменяются в соответствии с положением источника света (точнее, в соответствии с положением полигона и его ориентацией относительно источника света, но поскольку данная формулировка является достаточно громоздкой, далее будет использоваться более короткий, хотя и менее информативный вариант).

Метод отличают минимальные затраты на дополнительные данные, поскольку в большинстве случаев карта тиснения сохраняется в альфа компоненте изображения текстуры. Вычислительные затраты настолько малы, что на современных видеокартах практически невозможно заметить падения скорости экранизации.

Значительными недостатками метода являются субъективно низкое качество получаемого изображения и достаточно грубая аппроксимация освещенности, являющаяся следствием использования одной единственной карты тиснения, параметры которой жестко заданы ядром свертки примененного фильтра тиснения.

Пример полигона, отрисованного с применением данного метода представлен на рисунке 1.

Также существуют модификации данного метода, такие как многопроходное (multipass) наложение неровностей с помощью тиснения и методы с несколькими картами тиснения, однако останавливаться на них не будем, так как ничего принципиально нового в них нет, и качество изображения по-прежнему оставляет желать лучшего.


Рис. 2.

Попиксельное наложение неровностей

Под этим названием подразумеваются как минимум два достаточно различающихся алгоритма, хотя в большинстве случаев имеется в виду метод, основанный на использовании карт нормалей (normal maps).

Попиксельное наложение неровностей с использованием карт нормалей

Для каждой текстуры создается карта нормалей, соответствующая набору нормалей имитируемой поверхности. С помощью этихнаборов нормалей освещенность каждого пикселя полигона вычисляется в соответствии с положением источника света.

По сравнению с тиснением данный метод позволяет получить гораздо более привлекательные в визуальном плане результаты при практически идентичных (для современных видеокарт) вычислительных затратах (рис. 2).

Объем дополнительных данных также невелик, но, в отличие от предыдущего алгоритма позволяет гибко менять освещенность, поскольку карты нормалей, очевидно, являются более универсальной структурой данных, чем карты тиснения.

Попиксельное наложение неровностей с использованием карт высоты

Метод отличается от предыдущего лишь тем, что вместо карт нормалей используются карты высот. Для каждой текстуры достаточно одной карты высот, которую можно разместить в альфа канале изображения.

По качеству изображения метод немного уступает наложению неровностей с использованием карт нормалей, тем не менее по прежнему намного превосходит тиснение.


Рис. 3.

Наложение неровностей с использованием пиксельных программ (shaders)

По сути, обычно это наложение неровностей с картами нормалей, реализованный в виде пиксельных программ. Однако использование программируемого графического конвейера вместо фиксированного , позволяет как угодно модифицировать любой из описанных выше алгоритмов, например реализовав произвольную модель освещения или используя комбинации предыдущих техник.

Использование пиксельных программ заметно сказывается на скорости работы, а если быть точнее, все зависит от сложности каждой конкретной пиксельной программы. Но, как правило, вычислительные затраты с лихвой окупаются высококачественным результирующим изображением и возможностью добавлять разнообразные эффекты и методики расчета освещенности. Пример полигона, экранизированного с использованием пиксельной программы с картами нормалей и немного модифицированной моделью освещения Фонга, приведен на рисунке 3.

Наложение параллакса (parallax mapping)


Рис. 4.

Данный алгоритм [1] совмещает в себе наложение неровностей ( обычно основанный на картах нормалей ) и метод модуляции текстурных координат для каждого пикселя полигона в соответствии с картой высот ( height map ) и вектором, получающимся при нормализации вектора соединяющего данный пиксель и мнимое положение камеры ( наблюдателя ). Метод реализуется с помощью пиксельной программы, и, соответственно, обладает огромным потенциалом для модификации.


Рис. 5. 

На рисунке 4 представлен классический пример экранизации с использованием наложения смещения Рисунок 5 позволяет сопоставить изображения с использованием наложения неровностей ( снизу ) и наложения смещения ( сверху ).

Этот метод значительно повышает реалистичность сцены при незначительно возросшими, по сравнению с наложением неровностей, вычислительными затратами.

Объем необходимых данных также невелик : к каждой текстуре цвета прилагается текстура с картой нормалей и картой высот в альфа слое изображения.

Наложение резкого параллакса (steep parallax mapping)


Рис.6.

Этот метод принадлежит к классу наиболее сложных алгоритмов, использующих принцип попиксельной трассировки лучей при помощи новейших возможностей графических ускорителей, таких как модель пиксельных программ 3.0. Этот алгоритм имеет много общего с алгоритмом рельефного текстурирования, о котором будет рассказано позже, а различия позволяют определить предпочтительные области применения каждого из алгоритмов. Использование адаптированной под пиксельную модель трассировки лучей позволяет достоверно воспроизводить самопересечение деталей имитируемого рельефа полигона, а также корректное проецирование теней.

На момент написания статьи подробной технической информации по алгоритму доступно не было, поскольку он находился в разработке. Известно лишь, что данный метод активно использует мип-мэппинг для аппроксимации отрезка, на котором необходимо производить трассировку. В этом, пожалуй, самое значительное отличие от алгоритма relief mapping rendering. Тем не менее, продемонстрированные рендеры, сделанные с помощью предварительной тестовой реализации ( рис. 6 ), позволяют судить о достаточно низком, пока, качестве результирующего изображения.

Рельефное тестурирование

 
Рис. 7

Пожалуй, это самый сложный из реализованных и документированных на данный момент 2D алгоритмов, позволяющих имитировать рельеф поверхности и работающих с достаточно высокой скоростью, что немаловажно для практического применения в интерактивных приложениях.


а)                                        б)


в)

Трассировка луча производится при помощи бинарного поиска на отрезке, отсекаемом от прямой, содержащей видовой вектор, ограничивающим параллелепипедом ( bounding box ), как показано на рисунке 8.а. Цифрами обозначены шаги поиска начиная с первого. Однако в некоторых случаях такой подход может приводить к неверным результатам ( рис. 8.б ). Чтобы избежать ошибок при бинарном поиске, сначала проводится линейный поиск с фиксированным шагом ( рис. 8.в ), целью которого является нахождение ближайшего фрагмента поверхности и ограничение области поиска бинарного алгоритма пройденным отрезком.


Рис.9 

Далее, для построения теней производится дополнительная трассировка луча из полученной точки в направлении вектора, соединяющего данную точку и источник света

Пример продемонстрирован на рисунке 9. Результирующее значение цвета пикселя вычисляется в соответствии с имплементированной моделью освещения при помощи текстуры цвета, карты нормалей для вычисления освещенности точки и информации о наличии тени, полученной в результате трассировки.


Рис. 10

Такой подход, помимо правильного восстановления визуального перекрытия деталей рельефа, позволяет вычислять глубину элементов имитируемой поверхности, что, в свою очередь, делает возможным полноценное использование буфера глубины ( рис. 10 ) и позволяет проводить корректное отсечение по всем заданным плоскостям отсечения.

Наличие второй карты глубины необходимо только в случае имитации замкнутых ограниченных объектов (поверхностей). В этом случае вторая карта глубины отражает расстояние от элементов поверхности до задней плоскости ограничивающего параллелепипеда. Это позволяет, например, оставлять полигон прозрачным в тех местах, где луч не пересекает мнимую поверхность, хотя такую прозрачность возможно реализовать и с использованием одной карты высоты при условии резервирования оного из значений как служебного, указывающего на то, что в данной точке имитируемого рельефа материя отсутствует.

 
Рис. 11

 


Рис. 12.

 

Пример двух карт глубин приведен на рисунке 11, на рисунке 12 представлены изображения, полученные при рендеринге полигонов с имитацией замкнутой поверхности :

a - ангел, одна карта глубины,

b - ангел, две карты глубины,

c - распятие, одна карта глубины,

d - распятие, две карты глубины.

Существующая реализация ориентирована на пиксельные программы версии 1.1 и пиксельные программы версии 2.x. Однако расширенные возможности пиксельных программ 3.0 позволяют существенно ускорить работу алгоритма, но, к сожалению, на данный момент графическими ускорителями с поддержкой шейдерной модели 3.0 оснащено относительно мало компьютеров, что мешает широкому использованию улучшенного алгоритма.

Описанный метод имеет несколько недостатков, которые несколько ограничивают область его применения :

1)  Невозможность верной имитации рельефа с резкими перепадами высот при малых углах между вектором зрения и плоскостью полигона.

Этот недостаток является следствием использования линейного поиска с заданным шагом и бинарного поиска с ограниченным числом итераций при трассировке луча.

Возможным путем решения проблемы является увеличение точности алгоритмов поиска при помощи сокращения длины шага для линейного поиска и увеличения числа итераций для бинарного поиска в зависимости от фактора глубины ( т.е. коэффициента, применяемого к картам высот ) и угла между вектором взгляда и полигоном ( далее "lv-угол" ), что, впрочем, ощутимо скажется на производительности.

На рисунке 13 изображены сравнительные рендеры полигона с имитацией поверхности, имеющей резкие перепады высот при большом ( слева ) и маленьком ( справа ) lv-углах.


Рис. 13.

2) Ступенчатые артефакты при построении теней, отбрасываемых элементами рельефа с линейными границами между освещенными и неосвещенными областями.


Рис. 14

Недостаток также обусловлен дискретностью алгоритма трассировки. Для уменьшения артефактов используется метод, описанный в предыдущем пункте.

На рисунке 14 красным обозначена область, в которой объект с линейными границами отбрасывает ступенчатую тень. Обратите внимание на качество теней, отбрасываемых остальными объектами.

Шумовые артефакты при построении теней на границах освещенных и не освещенных областей поверхности.

Эффект возникает как следствие ограниченной точности карт высот, а его интенсивность прямо пропорциональна фактору глубины. Стоит добавить, что особенно четко ( как показано на рисунке 15 ) артефакты проявляются в том случае, если вектора нормалей поверхности на границе областей с различной освещенностью составляют с векторами, соединяющими точки поверхности и положение источника света, угол близкий к 90 градусам.


Рис.15

  

В завершении статьи приведем несколько изображений, полученных при помощи метода рельефных текстур.

 

Литература

1.   Morgan McGuire and Max McGuire. Steep Parallax Mapping. I3D 2005 Poster, 2002.

2.   Fabio Policarpo, Manuel M. Oliveira, Joao Comba. Real-Time Relief Mapping on Arbitrary Polygonal Surfaces. ACM SIGGRAPH 2005 Symposium on Interactive 3D Graphics and Games, 2005, pp. 155-162

Дополнительная информация
Ссылка: 
Илья Тисевич. Рельефное текстурирование. Компьютерная графика и мультимедиа. Выпуск №3(3)/2005. http://cgm.computergraphics.ru/content/view/104
Выпуск: 
Выпуск №3(3)/2005

Комментарии

Картинки не

Картинки не грузятся :-(

Картинки

Картинки поправили.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Тест предназначен для отсеивания спама
Fill in the blank