Технологии построения трехмерного изображения

Современные технологии формирования трехмерного изображения и придания ему реалистичности чрезвычайно сложны, и детальное рассмотрение их всех выходит за рамки данной книги. Поэтому мы лишь вкратце опишем базовые технологии, которые фигурируют в качестве характеристик современных видеокарт.
Основные понятия
Прежде всего нам предстоит познакомиться с основными понятиями трехмерной графики. К таким понятиям относятся вершина, полигон и текстура.
Любой трехмерный объект, каким бы сложным он ни был, можно представить в виде набора простейших полигонов, которыми являются треугольники.
Поскольку речь идет о трехмерной графике, то любой объект представляется в виде набора точек, называемых вершинами, в трехмерном пространстве. Каждая вершина в трехмерном пространстве характеризуется тремя координатами, а система координат определяется тремя осями: горизонтальной (X), вертикальной (Y) и глубины (Z). Соединяя вершины между собой, можно любую трехмерную поверхность аппроксимировать набором полигонов (многоугольников), простейшими из которых являются треугольники. Положение этих полигонов и задается вершинами. Понятно, что для формирования изображения полигоны необходимо закрасить. Для этого часто прибегают к текстурам. Текстура — это двухмерное изображение, которое может «натягиваться» на трехмерные объекты с учетом их формы и положения.
Текстурирование трехмерных поверхностей — это самый распространенный метод закрашивания. Если бы мы попробовали смоделировать кирпичную стену без технологии наложения текстур, нам потребовалось бы прорисовывать множество отдельных граней для моделирования множества кирпичей. Текстура дает больше реализма и требует меньше вычислительных ресурсов, позволяя оперировать со всей стеной как с единой поверхностью. Все текстуры хранятся в памяти, обычно установленной на видеокарте.
Чтобы придать реалистичность формируемому изображению, необходимо рассчитать, какие именно объекты должны выводиться на экран, а какие не должны попасть в иоле зрения. К примеру, если один объект находится спереди, а второй позади, то часть второго объекта должна быть невидимой.
Для решения этой задачи применяется метод, называемый Z-буферизацией. В так называемом Z-буфере (буфере глубины) хранятся значения глубины всех пикселов (Z-координаты). Когда рассчитывается новый пиксел, его глубина сравнивается со значениями глубин уже рассчитанных пикселов с теми же координатами X и Y. Если новый пиксел имеет значение глубины больше какого-либо значения в Z-буфере, то новый пиксел не записывается в буфер для отображения, если меньше — записывается.
Процесс обработки текстур и информации кадрового буфера называется рендерингом (или процессом закраски).
Аппаратная реализация Z-буферизации значительно увеличивает производительность графической подсистемы. Главная характеристика Z-буфера — это его разрешающая способность. Она критична для высококачественного отображения сцен с большой глубиной. Чем выше разрешающая способность, тем выше дискретность Z-координат и точнее выполняется рендеринг удаленных объектов. Если при рендеринге разрешающей способности не хватает, может случиться, что два перекрывающихся объекта получат одну и ту же координату Z, что вызовет искажение изображения. Как правило, видеокарты имеют 32-разрядный Z-буфер.
Кроме буфера глубины, позволяющего отсекать невидимые поверхности, для создания реалистичных трехмерных изображений необходимо учитывать, что объекты могут быть полупрозрачными. Эффект полупрозрачности создается путем объединения цвета исходного пиксела с пикселом, уже находящимся в буфере. В результате цвет точки является комбинацией цветов переднего и заднего планов. Для учета прозрачности объектов используется так называемый альфа-коэффициент прозрачности, который имеет значение от 0 до 1 для каждого цветового пиксела.
Очевидно, что для создания реалистичной картины происходящего на экране необходимо частое обновление его содержимого. При формировании каждого следующего кадра ЗО-акселератор проходит весь путь подсчета заново, поэтому он должен обладать немалым быстродействием. Но в ЗБ-графике применяются и другие методы придания плавности движению. Наиболее распространенный — метод двойной буферизации (Double Buffering).
Для двойной буферизации требуется наличие двух областей, зарезервированных в буфере кадров. Метод Double Buffering использует два буфера кадров для получения изображения: один для отображения картинки, другой для рендеринга. В то время как отображается содержимое одного буфера, в другом происходит рендеринг. Когда очередной кадр обработан, буферы переключаются (меняются местами). Без применения двойной буферизации изображение не будет иметь требуемой плавности, то есть будет прерывистым.
Технологии повышения реалистичности трехмерного изображения
Для повышения реалистичности отображения наложенных на полигоны текстур используются самые различные технологии: сглаживания (Anti-Aliasing), MIP mapping, текстурной фильтрации и т. д.
Технология сглаживания (Anti-Aliasing)
Anti-Aliasing — это технология устранения эффекта ступенчатых краев.
Изображение на экране состоит из множества мелких точек — пикселов, которые, как маленькие кирпичики, формируют любое изображение. Однако из-за того, что пикселы имеют конечный размер, на краях трехмерных объектов можно различить так называемую лестницу, или ступенчатые края. Чтобы минимизировать эффект лестницы, проще всего увеличить разрешение экрана (уменьшив тем самым минимальный размер формируемых пикселов). Правда, такой способ минимизации паразитного эффекта подходит не всегда, поскольку это зависит от конкретного монитора, а если речь идет об игре — то и от возможности игры переключаться на более высокое разрешение. Если избавиться от ступенчатого эффекта за счет повышения разрешения монитора нельзя, можно использовать технологию Anti- Aliasing, которая позволяет визуально сгладить эффект лестницы. Наиболее часто используемая для этого техника — это создание плавного перехода от цвета линии или края к цвету фона. Цвет точки, лежащей на границе объектов, определяется как среднее значение цветов двух граничных точек.
Существует несколько базовых технологий Anti-Aliasing. Первоначально технологии сглаживания применялись лишь к отдельным объектам, однако с повышением производительности графических процессоров получила широкое распространение технология полноэкранного сглаживания (Full Screen Anti-Aliasing, FSAA).
Суть данной технологии заключается в том, что графический процессор рассчитывает изображение в гораздо большем разрешении, чем разрешение экрана, а затем сжимает его до установленного значения. Например, при разрешении экрана 800 х 600 и установке режима FS АА 2×2 изображение будет рассчитываться в разрешении 1600 х 1200, а затем сжиматься до 800 х 600 и выводиться на экран.
При сжатии полученное изображение уменьшается на строго установленное количество пикселов, при этом в соответствии с используемым алгоритмом окончательные цвета сглаженных пикселов рассчитываются по значениям нескольких соседних пикселов. В результате при сжатии изображения у всех линий появляются плавные цветовые границы переходов, что визуально устраняет эффект лестницы.
Технология MIP mapping
Одна из самых распространенных технологий, используемых для улучшения качества текстурирования трехмерных объектов, называется MIP mapping.
Дело в том, что для придания реалистичности трехмерному изображению необходимо учитывать глубину сцены. По мере удаления от точки наблюдения накладываемая текстура должна выглядеть все более размыто. Поэтому при текстурирова- нии даже однородной поверхности чаще всего используется не одна и даже не две текстуры, что позволяет корректно учитывать перспективные искажения трехмерного объекта. Представим, что нам необходимо изобразить брусчатую мостовую, уходящую вглубь сцены. Если мы попытаемся использовать для этого всего одну текстуру по всей длине, то по мере удаления от точки наблюдения (на заднем плане) может проявиться рябь или просто один сплошной цвет. В этой ситуации сразу несколько пикселов текстуры (текселов) попадает в один пиксел на мониторе. Возникает вопрос: в пользу какого одного тексела сделать выбор при отображении пиксела?
Для решения подобных проблем используется технология MIP mapping, которая подразумевает возможность использования набора текстур с различной степенью детализации. То есть на базе каждой текстуры создается целый набор текстур с меньшим уровнем детализации. Текстуры такого набора называются М1Р-карта- ми (MIP тар).
В простейшем случае наложения текстуры для каждого пиксела изображения определяется соответствующая ему МIP-карта согласно таблице детализации (Level Of Detail, LOD). Далее из MIP-карты выбирается только один тексел (пиксел карты), который присваивается пикселу.
Технологии фильтрации
Как правило, технология MIP mapping используется в сочетании с технологиями фильтрации, призванными исправить артефакты MIP-текстурирования. Например, при удалении объекта все дальше от точки наблюдения происходит переход от низкого к высокому MIP тар-уровню. В момент нахождения объекта в переходном состоянии от одного MIP тар-уровня к другому появляется особый тип ошибок визуализации — явно различимые границы перехода от одного MIP тар-уровня к другому.
Смысл фильтрации состоит в том, что цвет пикселов объекта рассчитывается по соседним точкам текстуры (текселам). Существует несколько типов фильтрации, поддерживаемых видеокартами.
1. Билинейная. При медленном вращении или движении объекта могут быть заметны перескакивания пикселов с одного места на другое, что и вызывает мерцание. Для снижения этого эффекта при билинейной фильтрации для отображения точки поверхности берется взвешенное среднее значение четырех смежных текстурных пикселов.
2. Трилинейная. Также призвана удалять артефакты, возникающие при использовании MIP-текстурирования. При трилинейной фильтрации для определения цвета пиксела берется среднее значение цвета восьми текселов, по четыре из двух соседних текстур, и в результате семи операций смешивания определяется цвет пиксела. При использовании трилинейной фильтрации возможен вывод на экран текстурированного объекта с плавно выполненными переходами от одного МIP-уровня к следующему. Таким образом решается большинство проблем, связанных с MIP-текстурированием и ошибками из-за неправильного расчета глубины сцены (depth aliasing).
3. Анизотропная. Самая прогрессивная на сегодняшний день технология фильтрации, при использовании которой один-единственный пиксел может рассчитываться по 8-32 текселам. Для сравнения, в простейшем варианте фильтрации, билинейной, для расчета цвета пиксела используется всего четыре ближайших тексела.
