Алгоритм - Учебный центр
Заполните форму ниже! Мы вам перезвоним!

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


Как создается иллюзия трехмерного изображения на плоском экране монитора.

Как создается иллюзия трехмерного изображе­ния на плоском экране монитора.

Графический конвейер.

Графический конвейер (Graphic Pipeline) — это некоторое программно-аппарат­ное средство, которое преобразует описание объектов в «мире» приложения в матрицу ячеек видеопамяти растрового дисплея. Его задача — создать иллюзию трехмерного изображе­ния.

В глобальных координатах приложение создает объекты, состоящие из трех­мерных примитивов. В этом же пространстве располагаются источники освеще­ния, а также определяется точка зрения и направление взгляда наблюдателя. Естественно, что наблюдателю видна только часть объектов: любое тело имеет как видимую (обращенную к наблюдателю), так и невидимую (обратную) сторо­ну. Кроме того, тела могут перекрывать друг друга, полностью или частично.

1. Первая стадия графического конвейера - трансформация (Transformation).

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

На этой стадии вы­полняются вращения, перемещения и масштабирование объектов, а затем и пре­образование из глобального пространства в пространство наблюдения (world-to-viewspace transform), а из него и преобразование в «окно» наблюдения (viewspace-to-windowtransform), включая и проецирование с учетом перспективы.

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

2. Вторая стадия графического конвейера - освещенность (Lighting).

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

3. Третья стадия графического конвейера - растериза­ции(Rasterization).

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

Весь процесс создания растрового изображения трехмерных объек­тов называется рендерингом(rendering).

Движение.

Чтобы трехмерное изображение «оживить» движением, изображения объектов в новом положении должны схо­дить с графического конвейера со скоростью хотя бы 15 кадров в секунду (со­временные акселераторы могут строить и 100 кадров в секунду). Это колоссальное ускорение построений обеспечивается применением в графи­ческих картах встроенного специализированного процессора, решающего значи­тельную часть задач графического конвейера.

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

Тесселяция(Tesselation).

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

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

Оптические свойства.

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

Сложнее дело обстоит с прозрачными и просвечиваемыми объектами. Прозрачность (transparency) объек­та позволяет видеть и объекты, расположенные за ним, а просвечиваемость (trans-lucency) позволяет проходить через него лучам света от источников.

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

Рендеринг.

Весь процесс создания растрового изображения трехмерных объек­тов называется рендерингом.

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

Вполне понятно, что рендеринг модели может производиться только поэле­ментно. Результатом

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

Z-буфер.

Для уче­та взаимного расположения применяют так называемыйZ-буфер, названный по имени координаты третьего измерения (X и Y — координаты в плоскости экра­на).

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

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

В видеопамять этот фраг­мент поступает с учетом результата попиксельного сравнения информации из Z-буфера, с его собственными значениями:

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

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

Итак, Z-буфер позволяет определить взаимное расположение текущего и ранее сформированного пиксела, которое учитывается при формировании нового зна­чения пиксела в видеопамяти.

От разрядности Z-буфера зависит разрешающая способность графического конвейера по глубине. При малой разрядности (на­пример, 8 бит) для близко расположенных элементов рассчитанные значения Z могут совпасть, в результате картина перекрытий исказится. Большая разряд­ность буфера требует большого объема памяти, доступного графическому про­цессору. По нынешним меркам минимальная разрядность Z-буфера — 16 бит, профессиональные графические системы используют 32-битный Z-буфер.

Aльфа-блендинг (Alpha-blending).

Теперь обсудим модификацию цвета пиксела видеопамяти. В общем случае у нас есть два значения цвета — С1 для того образа, который «ближе», С2 для того, что «дальше» (по Z-параметру). Результирующий цвет определяется обо­ими значениями и свойством «прозрачности» ближнего.

Для получения нового значения цвета обычно используют так называемый альфа-блендинг (Alpha-blending).  Мерой прозрачности объекта является коэффициент а (0 < а < 1),

а =1 (единице) соответствует полной непрозрачности.

Результирующий цвет пиксела вы­числяется по формуле С = С1 х а + С2 х (1 - а), причем за этой формулой сто­ит в три раза больше операций, поскольку цвет определяется тремя значениями базисных цветов (R, G и В).

Ну и нетрудно догадаться, что для реализации дан­ного метода требуется и свой альфа-буфер с количеством ячеек, по меньшей мере равным числу пикселов на экране.

Часто 8-битный коэффициент прозрачности для каждого пиксела хранят прямо в видеопамяти: при 24-битном кодировании цвета от двойного слова (32 бит), выделяемого на пиксел для упрощения адреса­ции и ускорения обмена, как раз остается 8 бит. Такой формат видеопамяти на­зывают RGBA.

Текстура.

Объекты, входящие в модель и представляющие их элементы (тессели), не обязательно однородны по цвету: на их поверхности могут быть наложены тек­стуры — растровые картинки, исходно плоские, но как бы к ним приклеенные. Текстура состоит из элементов, называемых текселами (Texel — Texture Element). Здесь уместна аналогия с созвучным термином пиксел (Picture Element), кото­рый относится к элементу изображения на экране и его образу в видеопамяти.

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

Далее этот участок должен быть ото­бражен в видеопамять — текселы должны быть отображены в пикселы.

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

Масштабирование и поворо­ты текстур могут приводить к различным искажениям: к примеру, увеличенное и повернутое изображение гладкого горизонтального (или вертикального) от­резка превратится в грубую ступенчатую линию. Кроме того, могут появляться «рваные» края у текстур по линиям их сопряжения. Существуют способы улучшения качества представлением одной и той же текстуры в разном масштабе(MIPmap).

MIPmap (представление одной и той же текстуры в разном масштабе).

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

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

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

Трилинейная фильтрация (Trilinear Filtering) сложнее — здесь билиней­ная фильтрация выполняется дважды для двух соседних уровней MIPmap, бли­жайших к требуемому масштабу. Окончательный цвет пиксела определяется ин­терполяцией этих двух результатов.

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

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

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

В последнее время стали использовать и трехмерные текстуры (3D textures) — трехмерные массивы пикселов. Они позволяют, например, имитировать объем­ный туман, динамические источники света (языки пламени).

 


Лицензия