
Теория_КГ / Лекция_3D_конвейер_КГ
.doc3D-конвейер(3D Pipeline)
Для того чтобы хорошо понимать смысл математических преобразований в процессе создания и обработки компьютерного изображения, рассмотрим подробнее этапы 3D-конвейера.
Этапы 3D-конвейера.
В общем случае синтез трехмерного изображения включает следующие этапы:
-
конструирование (расчет) трехмерного объекта на основе исходных данных, например результатов 3D-сканирования или математического описания объекта;
-
расчет движения объекта и трансформация его формы;
-
моделирование поверхности объекта с учетом различных факторов (освещения, отражений, рельефа и раскраски поверхности и т.п.);
-
проецирование рассчитанного объекта на плоскость экрана;
-
разделение объектов по относительной удаленности от наблюдателя путем изменения контраста, передачи текстуры поверхностей объектов (например, чем дальше, тем более размытая текстура) и т.п.;
-
удаление невидимых поверхностей объектов, скрытых более близкими к наблюдателю объектами.
-
Имитация возможных визуальных эффектов, обусловленных геометрией объекта, положением и интенсивностью источников освещения, степенью прозрачности среды(туман, блики и другие атмосферные эффекты) и т.п.
Все эти операции выполняются для того, чтобы аналитически рассчитать те особенности конечного изображения, которые будут создавать ощущение его объемности. Эти особенности основаны на факторах, определяющих способность человека к объемному восприятию изображения.
К этим факторам относятся:
-
Оценка расстояния до предмета на основе информации о его размерах (чем дальше объект, тем он меньше);
-
Оценка порядка наложения предметов друг на друга;
-
Определение глубины пространства за счет использования эффекта перспективы – визуального сближения параллельных линий, уходящих вдаль;
-
Анализ световых эффектов на предмете (тени, блики и т.п.).
Отметим, что использование этих факторов позволяет создать ощущение объемности изображения не только при бинокулярном, но и при монокулярном зрении. Это дает возможность формировать изображения трехмерных объектов с помощью традиционных, двумерных устройств отображения, например мониторов.
Определение. Процесс расчета трехмерного изображения объекта (точнее, его двумерной проекции) называется 3D-конвейером, поскольку он выполняется в несколько последовательных этапов.
В общем виде можно выделить следующие основные этапы 3D-конвейера.
1.1.Построение геометрической модели поверхности объекта путем задания трехмерных координат опорных (ключевых) точек, а также уравнений соединяющих их линий. В результате формируется так называемая каркасная модель объекта, или wireframe.
1.2.Разбиение поверхности полученного объекта на элементарные плоские элементы:
Прямоугольники и треугольники. Этот этап называется также тесселяцией(tesselation) или триангуляцией. В результате тесселяции поверхность объекта, обычно имеющая искривленную форму, становится «граненой», т.е. представляет собой совокупность плоских многоугольников (треугольников или четырехугольников). Чем больше таких граней и чем меньше их размер, тем точнее воспроизводится поверхность объекта.
Необходимость в этом этапе обусловлена тем, что дальнейшие операции гораздо проще выполнять с плоскими участками поверхности объекта. Чаще всего поверхность объекта разбивается на треугольники, поскольку тремя точками (вершинами треугольника) однозначно задается плоскость в пространстве.
На этапе тесселяции математическая модель объекта представляет собой совокупность трехмерных координат всех вершин (вертексов, от англ. vertex) элементарных треугольников, записанных в определенном порядке (иными словами, порядок следования координат вершин грани определяет направление вектора нормали к этой грани).
1.3.Трансформация (transformation). На этом этапе моделируется движение объекта: его перемещение, вращение, изменение размеров (масштабирование) и изменение формы. Этап сводится к стандартному преобразованию трехмерных координат вершин граней (вертексов) и требует интенсивного использования операций матричной (линейной) алгебры и тригонометрических функций.
1.4. Расчет освещенности (lighting) и затенения (shading) поверхности объекта. На данном этапе осуществляется расчет освещенности каждого элементарного треугольника в зависимости от его удаленности от источника света и угла падения светового луча (вот для чего элемент поверхности объекта должен быть плоским). Это позволяет имитировать реальное распределение освещенности по поверхности объекта, подчеркивающее его объемность. Однако, если сделать освещенность всех точек каждого треугольника одинаковой, поверхность объекта будет выглядеть угловатой, состоящей из множества маленьких плоских граней.
Для того чтобы устранить этот дефект, используют различные методы интерполяции значений освещенности, позволяющие плавно изменить освещенность каждой грани и скрыть резкие переходы между ними. Эти методы принято называть методами затенения. Наиболее распространенными из них являются метод Гуро (Gouraud Shading) и метод Фонга (Phong Shading).
1.5.Проецирование (Projection) полученного трехмерного объекта на плоскость экрана. На данном этапе происходит первое, предварительное преобразование трехмерного объекта в совокупность двумерных координат вершин его граней, при этом запоминается информация о расстоянии каждой из вершин грани до плоскости проецирования (координата ). Это позволяет на следующих этапах корректно определить, какие части объекта окажутся видимыми, а какие - нет. Совокупность данных о глубине каждой из вершин, или значения ее третьей координаты , называют -буфером.
1.6.Обработка (настройка) координат вершин элементарных треугольников (Triangle Setup), полученных на предыдущих этапах. На этом этапе выполняется преобразование формы представления координат вершин граней, т.е. числа с плавающей запятой (вещественные) преобразуются в целые числа. Кроме того, производится сортировка вершин, отбрасывание невидимых граней (culling) и так называемая субпиксельная коррекция.
1.7.Удаление скрытых поверхностей – исключение из проекции тех элементов поверхности объекта, которые оказываются невидимыми из точки наблюдения. Этот этап называется HSR (Hidden Surface Removal). Строго говоря, процесс удаления скрытых поверхностей выполняется последовательно, за несколько шагов: на предыдущем (Triangle Setup), на котором обрабатываются векторные изображения, и на последующих, на которых на основе алгоритмов -буферизации или -сортировки обрабатываются уже растровые изображения.
1.8.Закраска элементарных треугольников, или текстурирование, выполняется путем наложения текстур (texture mapping) на поверхность объекта с учетом данных, полученных в результате выполнения предыдущих этапов 3D –конвейера (Рис.4). Текстура – это элемент обшивки объекта, т.е. изображение участка его поверхности. Она хранится в виде квадратной растровой картинки, состоящей из текселов (Texel-TEXture ELement -минимальный элемент текстуры). Иными словами, тексел – это пиксел текстуры. После наложения текстур каркасная модель объекта как бы «обрастает кожей» и становится похожа на реальный объект. Наложение текстур – это первый этап конвейера, который выполняется с растровой графикой. На этом этапе каждый треугольник заменяется частью текстуры. При этом значение каждого пиксела грани вычисляется по значению соответствующего тексела текстуры. Соответствие между пикселами и текселами обеспечивается путем проецирования текстуры на поверхность грани. В зависимости от формы объекта и его отдельных частей (для объектов сложной формы) используются различные системы проекционных координат: прямоугольная, сферическая, цилиндрическая и т.д. Текстурирование – довольно трудоемкий процесс, поскольку обработке подвергается растровая графика. При модификации растрового изображения возникают многочисленные дефекты, поэтому на данном этапе применяются различные приемы коррекции изображения: мип-мэппинг (MIP-mapping - использование текстур с различным разрешением), коррекция перспективы, фильтрация и др.
1.9.Моделирование эффектов прозрачности и полупрозрачности. На этом этапе на основе информации о взаимной прозрачности объектов и среды выполняется коррекция цвета пикселов – так называемое альфа-смешение(alpha-blending) и туман (fogging).
1.10.Коррекция дефектов картинки, вызванных угловатостью линий на границах (краях) объектов, - антиалиасинг (anti-aliasing).
1.11.Интерполяция недостающих цветов – дизеринг(dithering) – применяется в том случае, когда в текущем видеорежиме 3D –акселератора для кодирования цвета пиксела используется меньше 24 бит (например, в режиме High Color). Это приводит к незначительному ухудшению разрешения (резкости), но позволяет эффективно имитировать отсутствие в палитре цвета.
1.12.Окончательное формирование кадра. Кадр формируется в кадровом буфере – области локальной памяти 3D –акселератора, в которую помещается спроецированное двумерное изображение. Кадровый буфер используется для формирования выходного аналогового видеосигнала 3D – ускорителя, точно также, как это делается в обычном видеоадаптере VGA (в совмещенных 2D/3D-акселераторах под кадровый буфер отводится часть видеопамяти).
Для ускорения процесса создания изображения используется механизм двойной буферизации(Double buffering), заключающийся в том, что в видеопамяти выделяется область для хранения одновременно двух смежных кадров (по сути два кадровых буфера = две видеостраницы): построение следующего кадра начинается еще до того, как закончится отображение (передача в RAMDAC) текущего. В результате удается избежать ненужного «простоя» акселератора и обеспечить более высокую частоту смены кадров.
1.13.Пост-обработка (Post-processing) используется в том случае, когда требуется реализовать какие-либо двумерные эффекты над подготовленным кадром как единым целым.
Этапы 1.1-1.6 образуют геометрическую стадию 3D-конвейера.
В игровых 3D-акселераторах известных фирм-производителей(nVidia GeForce, DTD, ATI Radeon и др.) имеется геометрический процессор и обеспечивает аппаратное ускорение геометрической стадии 3D-конвейера.
Отметим, что на геометрической стадии все операции выполняются с векторной графикой. Для повышения точности вычислений используются числа с плавающей запятой.
Этапы 1.7. – 1.13. образуют стадию прорисовки объекта, или стадию рендеринга (rendering - рисование, визуализация). На этой стадии все действия выполняются уже с растровыми объектами, состоящими из отдельных дискретных элементов – пикселов и текселов. Иногда термин «рендеринг» употребляют для обозначения всего 3D-конвейера, а этапы 1.7.-1.13. называют “растеризацией”, подчеркивая тем самым отличие этой стадии конвейера от предыдущей (геометрической), на которой все операции выполнялись с векторной графикой.
Стадия растеризации является наиболее сложной и трудоемкой, поэтому именно здесь необходимо аппаратное ускорение. Большинство современных 3D-ускорителей как раз и предназначены для выполнения растеризации на аппаратном уровне и различаются лишь количеством реализуемых функций.
Примечание. Приведенная последовательность и содержание этапов 3D-конвейера не являются жесткими. В зависимости от особенностей архитектуры 3D–акселератора и программного обеспечения последовательность этапов может быть изменена, а в некоторых случаях отдельные этапы могут быть и вовсе исключены из 3D–конвейера.