logo
Методичка

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

Для понимания принципа работы графического процессора рассмотрим вначале основные понятия, используемые при построении качественного трёхмерного изображения: вершина, полигон и текстура.

Объект в трёхмерном пространстве описывается набором полигонов, углы которых задаются точками, называемыми вершинами (vertex). Каждая вершина имеет три координаты по соответствующим трём осям: горизонтальной (X), вертикальной (Y) и глубины (Z). Соединяя вершины между собой можно аппроксимировать любую трёхмерную поверхность набором полигонов (многоугольников), простейшими из которых являются треугольники. При формировании изображения полигоны закрашиваются. Для этого часто прибегают к текстурам. Текстура – это двухмерное изображение, которое может “натягиваться” на трёхмерные объекты посредством закрашивания каждого полигона объекта с учётом расположения полигонов между собой.

Текстурирование трёхмерных поверхностей – это самый распространённый метод закрашивания. К примеру, если бы мы моделировали кирпичную стену без использования текстур, нам бы потребовалось прорисовывать множество отдельных граней каждого кирпича. Используя же текстуры нам достаточно просто загрузить из видеопамяти заранее созданный рисунок большого фрагмента кирпичной стены (текстуру стены) и наложить его на полигон. Если полигон больше размера текстуры, то накладывать текстуры надо встык требуемое количество раз. Если полигон меньше размеров текстуры, то накладывается только часть текстуры. Текстура даёт больше реализма и требует меньше вычислительных ресурсов, позволяя оперировать со стеной, как с единой поверхностью. Все текстуры хранятся в памяти видеокарты.

Для того чтобы придать реалистичность формируемому изображению, необходимо рассчитать, какие именно объекты должны выводиться на экран, а какие не должны попасть в поле зрения. К примеру, если один объект находится позади другого, то часть объекта должна быть невидимой. Для решения этой задачи применяется метод, называемый Z-буферизацией. В так называемом Z-буфере (буфере глубины) хранятся значения глубины всех пикселей (Z-координаты). Когда рассчитывается новый пиксель, его глубина сравнивается со значениями глубин уже рассчитанных пикселей с теми же координатами X и Y. Если новый пиксель имеет значение глубины больше какого-либо значения в Z-буфере, то новый пиксель не записывается в буфер для отображения, если меньше, то записывается. Процесс обработки текстур и информации кадрового буфера называется рендерингом (или процессом закраски).

Аппаратная реализация Z-буферизации значительно увеличивает производительность графического процессора. Главная характеристика Z-буфера – его разрешающая способность. Она критична для высококачественного отображения сцен с большой глубиной. Чем выше разрешающая способность, тем выше дискретность Z-координат и точнее выполняется рендеринг удаленных объектов. Если при рендеринге разрешающей способности не хватает, может случиться, что два перекрывающихся объекта получат одну и ту же координату Z, что вызовет искажение изображения. Как правило, видеокарты имеют 32-разрядный Z-буфер.

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

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

Для двойной буферизации требуется наличие двух областей, зарезервированных в буфере кадров. Метод Double Buffering использует два буфера кадров для получения изображения: один для отображения картинки, другой – для рендеринга. В то время как отображается содержимое одного буфера, в другом происходит рендеринг. Когда очередной кадр обработан, буферы переключаются (меняются местами). Без применения двойной буферизации изображение не будет иметь требуемой плавности, то есть будет прерывистым.