05 марта 2021 года    
Пятница | 17:45    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Графика и дизайн / Графика

3D Глоссарий.

3D Glossary from Reactor Critical

>Артефакты

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

1) Заблюренность (Blur) - смазывание мелких деталей текстуры.
2) Муар (Moire pattern) - текстура с регулярной структурой  получает инород-
ный рисунок.
3) Полосы мипмэппинга (Mipmap bands) - видны границы между текстурами с раз-
ными мип-уровнями.
4) Пикселизация (Pixelization) - образование "квадратов"  при сильном растя-
гивании текстуры и отсутствии билинейной фильтрации.
5) Шум (Noise, sparkling) - текстура  теряет  свою  структуру;  при движении
текстура не двигается, а "шумит".
6) Hестыковка текстур - полигоны  не стыкуются между собой,  оставляя тонкие
светлые или темные промежутки.
7) Лестничный эффект (Jaggies, stair-stepping) - зубчатость  краев полигонов
и диагональных линий.
Z-алиасинг (Z-aliasing) - неправильный рассчет глубины.

>Альфа-смешение

Альфа-смешение (alpha blending) - техника создания  эффекта полупрозрачности
путем объединения исходного пиксела с пикселом,  уже  находящимся  во фрейм-
буфере.  Каждому пикселу  обычно ставится в соответствие  значения красного,
зеленого и синего компонентов цвета (R,G,B).  Если  ставится  в соответствие
еще альфа-значение, то говорят что пикселы имеют альфа-канал  (компонент A в
схеме RGBA). Альфа-значение определяет степень прозрачности конкретного пик-
села. Объекты могут иметь различную прозрачность,  например стекло имеет вы-
сокий уровень прозрачности (и таким образом низкое альфа-значение), а желе -
средний уровень. Альфа-смешение есть процесс комбинирования двух объектов на
экране с учетом их альфа-каналов. Альфа-смешение используется для: антиалиа-
синга, прозрачности, создания теней, зеркал, тумана.

>Антиалиасинг

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

Краевой антиалиасинг - механизм борьбы с лестничным эффектом.  Краевой анти-
алиасинг сглаживает края полигонов и диагональные линии.  Краевой  антиалиа-
синг применяется в 3D-ускорителях Voodoo Graphics, Voodoo 2, Verite V2000.

Для реализации краевого антиалиасинга чаще всего используют технику усредне-
ния по площади (area averaging).  Цвет пиксела определяется на основании то-
го, насколько каждый полигон перекрывает данный пиксел.

Hапример, пиксел перекрывают два полигона: A и B. Метод усреднения по площа-
ди определяет видимые области, занимаемые полигонами,  которые "прикасаются"
к пикселу, и вычисляет результирующий цвет на основании видимых площадей пе-
рекрытия (то есть принадлежащих и пикселу, и полигону).  Пусть полигон A за-
нимает 40% площади пиксела,  а полигон B - 60%.  Результирующий цвет  в этом
случае определяется  цветами A и B c весовыми коэффициентами 40% и 60% соот-
ветственно  (то есть проводится операция альфа-смешения).  Для линий и точек
метод тот же самый, в данном случае считается, что линии и точки имеют нену-
левую площадь.

К сожалению, альфа-смешение в краевом антиалиасинге приводит к появлению ар-
тефакта под названием bleeding (дословно "кровоточение"). Bleeding - окраши-
вание внутренних ребер в цвет фона, это связано с тем, что между гранями об-
разуется тонкий просвет.  Поэтому программа сама должна знать, какие ребра и
линии нужно сглаживать. Из-за этого краевой антиалиасинг сложно программиро-
вать.

Полный антиалиасинг, в отличие от краевого,  направлен на полную нейтрализа-
цию алиасинга.  Единственным представителем  полного антиалиасинга  является
субпиксельный  антиалиасинг.   Субпиксельный   антиалиасинг   применяется  в
3D-ускорителях  PVNG,  Intel740,  WARP 5,  а также  во всех профессиональных
OpenGL-ускорителях.

Субпиксельный антиалиасинг в PVNG и WARP 5 базируется  на технике суперсэмп-
линга.  Суперсэмплинг означает,  что вся сцена рендерится  каком-то  большом
виртуальном разрешении,  а затем  сжимается  до  фактического разрешения.  В
общем случае  виртуальное и фактическое  разрешения  могут быть  некратными.
Техника суперсэмплинга возможна из-за того,  что  эти ускорители  используют
tile-based архитектуру.  Ускорителю традиционной архитектуры потребовался бы
большой  объем памяти  (для виртуального разрешения 1600x1200 - более 8 MB).
Дело в том, что ускоритель tile-based архитектуры не работает с целым фрейм-
буфером,  а с отдельными фрагментами (tiles).  И все данные о субпикселах он
хранит только для фрагмента, который рендерится в данный момент.

В 3D-ускорителях серии Glint используется другой метод, основанный на хране-
нии маски. Рассмотрим случай, когда 1 пиксел разбивается на 16 (4x4) субпик-
селов  (эта техника  называется  мультисэмплингом),  а  полигоны  рендерятся
front-to-back (картинка снизу).  Когда  рендерится полигон не переднем плане
(П), субпикселы 2,3,4,7,8,12 окрашиваются в цвет переднего полигона.  Причем
запоминается, какие субпикселы попали в передний полигон, то есть маска. Эта
маска проверяется  когда  рендерится задний полигон (З).  Субпикселы 1,5,6,9
окрашиваются  в цвет заднего полигона.  Субпикселы 2,3,  принадлежащие обоим
полигонам,  не изменяют цвет и таким образом остаются с цветом переднего по-
лигона. В результате - никакого bleedingа.
 _______________________
|13   |14   |15   |16   |
|_____|_____|_____|_____|
|9  З |10   |11   |12 П |
|_____|_____|_____|_____|
|5  З |6  З |7  П |8  П |
|_____|_____|_____|_____|
|1  З |2  ПЗ|3  ПЗ|4  П |
|_____|_____|_____|_____|

Обратная сторона такого антиалиасинга - это необходимость хранения маски для
каждого пиксела и требование сортировки полигонов front-to-back. Второе тре-
бование можно обойти,  сохраняя z-координату для каждого субпиксела.  Однако
хранить z-координаты для всех субпикселей на экране невозможно,  так как это
требует гигантского объема видеопамяти.  Поддержку  субпиксельного антиалиа-
синга с z-буферизацией  реализует техника аккумулятора.  Суть его сводится к
тому,  что обработка ведется последовательно для каждого пиксела  и при этом
используется одна и та же память.  Hедостаток:  из-за  требования последова-
тельной обработки  невозможность  аппаратного распараллеливания  и как след-
ствие уменьшение производительности в число раз, равравное числу субпикселов
в пикселе.  Hапример, субпиксельный антиалиасинг 4x4 снижает  производитель-
ность в 16 раз, или другими словами увеличивает Fillrate в 16 раз.

>Мипмэппинг

Мипмэппинг (MIP-mapping) использует несколько версий одной текстуры с разной
степенью детализации (LOD - level-of-detail), причем следующая версия меньше
предыдущей в 4 раза  (например 128x128, 64x64, 32x32 и т.д.).  Такие  версии
называются мип-уровнями, а все версии одной текстуры - мип-каскадом.

Цели мипмэппинга:
1) Уменьшение времени обработки - для объектов на далеком расстоянии обраба-
тывать текстуру с низким разрешением гораздо легче.
2) Избавление от шума и муара - добавление мип-уровней  с низким уровнем де-
тализации.

Существует  несколько  видов мипмэппинга, но все они используют 1 либо 2 со-
седних мип-уровня.  При мипмэппинге,  каждый используемый  мип-уровень  либо
увеличивается, либо уменьшается (соотвествие 1:1 статистически редко).  Уве-
личение и уменьшение называются соответственно магнификацией (magnification)
и минификацией (minification).  И минификация, и магнификация имеет свои не-
достатки.  Минификация  приводит к underfilteringу  (выражающемуся в муаре и
шуме),  магнификацизации  или  заблюриванию).  Чем  меньше  искажается  мип-
уровень, тем лучше выглядит текстура в конечном итоге.

Основные виды мипмэппинга:

1) Простой мипмэппинг (nearest mipmapping)  без билинейной фильтрации сейчас
не используется.

2) Простой мипмэппинг с билинейной фильтрацией.  Самый применяемый метод се-
годня.  Похож на предыдущий метод, но между текселами выполняется интерполя-
ция. При приближении или удалении объекта от наблюдателя выбирается подходя-
щий  мип-уровень.  При приближении  к наблюдателю  выбирается  мип-уровень с
бОльшей степенью детализации, при удалении - с меньшей.  Что же будет с мип-
уровнем в конкретный момент - будет  выполняться  минификация или магнифика-
ция?  Это зависит от конкретной реализации и от параметра,  называемого LOD-
bias. Если в рендеринге доминирует минификация, то на сцене присутствуют шум
и муар.  Если доминирует магнификация, то текстуры кажутся более размазанны-
ми, но муара/шума нет. Простому мипмэппингу присущ артефакт,  выражающийся в
резких переходах на текстурированной поверхности (так называемые полосы мип-
мэппинга). Это происходит при смене степени детализации, если мип-каскад на-
рисован некачественно.

3) Трилинейная фильтрация (tri-linear filtering). Hаиболее аккуратный способ
вычисления цвета пиксела. Трилинейная фильтрация более сложна, нежели преды-
дущие методы. В отличие от простого мипмэппинга, в котором просто выбирается
подходящий уровени детализации,  здесь  проводится  интерполяция между двумя
соседними мип-уровнями.  Благодаря  этому  полосы мипмэппинга не образуются.
При вычислении цвета пиксела используется 8 текселов (4 при билинейной филь-
трации) и требует 7 операций смешения (3 при билинейной фильтрации). Исполь-
зование трилинейной фильтрации дает гораздо более высокое качество изображе-
ния для движущихся объектов.

Адаптивная фильтрация  частично решает проблему  overfilteringа/underfilter-
ingа.  Программа  выбирает  как  обрабатывать мип-уровни, отдельно верхний и
нижний.  Hапример  интерполировать  нижний мип-уровень, и не интерполировать
верхний мип-уровень,  а затем интерполировать  полученные текстуры между со-
бой, как при трилинейной фильтрации.

Мипмэппинг предполагает, что разработчик сам создает мип-каскад. Однако мно-
гие игры имеют лишь текстуры с одним разрешением.  Для решения этой проблемы
была придумана техника авто-мипмэппинга. Драйвер 3D-ускорителя сам вычисляет
несколько мип-уровней, используя основную текстуру (она становится мип-уров-
нем с максимальной детализацией). Техника авто-мипмэппинга используется так-
же для увеличения числа мип-уровней,  если  игра использует недостаточное их
количество  (например многие игры используют всего 3 мип-уровня для экономии
текстурной памяти).

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

>Морфинг уровня детализации

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

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

Версии одного объекта  для разных уровней детализации  могут  готовиться  на
стадии разработки,  а могут  просчитываться в реальном времени методом прог-
рессивных сеток  (progressive meshes).  Прогрессивные  сетки  поддерживаются
Direct3D RM.

>Мультитекстурирование

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

Tex1~~~~~~~~~~~~        <
Tex0------------ <       } Op1
                  } Op0 <
Poly____________ <

Рисунок наглядно демонстрирует выполняемые действия. Первый блок накладывает
на пиксел текстуру Tex0,  используя операцию Op0,  передает  пиксел  второму
блоку. Этот пиксел передается второму блоку, который натягивает на него тек-
стуру Tex1, используя операцию Op1. В это время первый блок не ждет, а пере-
ходит к обработке следующего пиксела, и т.д. Мультитекстурирование похоже на
конвейеризацию в микропроцессорах, только мультитекстурирование гораздо про-
ще,  здесь нет никаких ветвлений и т.п.  Операции  наложения тумана и альфа-
смешения с фрейм-буфером не относятся  к мультитекстурированию и выполняются
после всех стадий.

Мультитекстурирование  может использоваться для эффективной реализации таких
эффектов как:
1) карты освещенности (lightmaps)
2) отражение (reflections)
3) морфинг текстур (texture morphing)
4) текстуры с детализацией (detailed textures)

>Рендеринг

Рендеринг (rendering) - процесс визуализации  трехмерных объектов и сохране-
ние изображения в фрейм-буфере.  Рендеринг  выполняется по многоступенчатому
механизму, называемому конвейером рендеринга. Конвейер рендеринга может быть
разделен на 3 стадии:  тесселяция,  геометрическая обработка и растеризация.
Принцип конвейеризации  является фундаментальным понятием,  в соответствии с
ним работают и 3D-ускорители, и 3D-API, - благодяря конвейеру можно рассмот-
реть работу любого из них.  Если взять произвольный 3D-ускоритель,  то он не
будет ускорять все стадии конвейера,  и даже более того,  стадии  могут лишь
частично ускоряться им.  Далее  мы рассмотрим  подробнее  стадии конвейера в
контексте работы 3D-ускорителей. Традиционно каждой стадии называют буквами.

Стадия "T". Тесселяция (триангуляция) - процесс разбиения поверхности объек-
тов на полигоны (треугольники или четырехугольники).  Эта стадия  проводится
полностью программно  вне зависимости от технического уровня и цены 3D-аппа-
ратуры.  Тем не менее тесселятор (программный код, отвечающий за тесселяцию)
должен учитывать особенности того или иного 3D-ускорителя, так как они могут
иметь разные требования к полигонам-примитивам:

1) произвольные треугольники
2) треугольники с горизонтальной нижней или верхней гранью
3) треугольник или четырехугольник с описанием уравнений ребер  (бесконечные
плоскости)

Также тесселятор должен учитывать, умеет ли работать с сетками (meshes) раз-
ных типов. Если 3D-программа разрабатывается на высокоуровневом 3D-API,  на-
пример Direct3D RM или PowerRender,  то ей не надо  заботиться обо всех этих
деталях, так как такой API имеет свой тесселятор.

Стадия "G". Геометрическая обработка делится на несколько фаз,  и может час-
тично ускоряться 3D-ускорителем.

1) трансформация (transformation) - преобразование координат  (вращение, пе-
ренос и масштабирование всех объектов)
2) отсечение (clipping), выполняемое до и после преобразования координат
3) освещение (lighting) - определение цвета  каждой вершины  с  учетом  всех
световых источников (решение уравнения освещенности)
4) проецирование (projection) - преобразование координат в систему координат
экрана
5) setup - предварительная обработка  потока  вершин  (перевод  из плавающей
точки  в фиксированную точку  данных о вершинах,  а также сортировка вершин,
отбрасывание задних граней, субпиксельная коррекция)

Hаиболее часто люди путаются именно с геометрической обработкой. Это усугуб-
ляется тем, что сами производители путают терминологию. (Hапример 3Dlabs за-
являет, что Glint Delta - геометрический сопроцессор,  что вообще говоря не-
верно, Delta - это setup engine.)  Большинство  существующих  3D-ускорителей
ускоряют только последнюю фазу - setup, при том делают это с разной степенью
полноты. Говорят, что 3D-ускоритель имеет полный setup engine, если он может
переводить в фиксированную точку все данные о вершине. В зависимости от типа
примитивов, с которыми работает 3D-ускоритель, речь ведется о triangle setup
или о planar setup.

Геометрический процессором называется ускоритель,  который ускоряет всю ста-
дию геометрической обработки, в том числе трансформацию и освещение.  Реали-
зация геометрического процессора довольно дорого, и как уже было сказано, он
является объектом рекламных спекуляций.  Определить  реализован ли геометри-
ческий процессор довольно легко - надо выяснить,  поддерживает ли 3D-ускори-
тель операции с матрицами. Без такой поддержки не может идти речь об ускоре-
нии фазы трансформации. Геометрическими процессорами являются например Glint
Gamma и Pinolite.

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

>Текстурирование

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

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

Билинейная фильтрация (bi-linear filtering) использует 4 смежных тексела для
получения одного пиксела. Билинейная фильтрация требует четыре операции сме-
шения для каждого результирующего пиксела:  для  двух верхних текселей,  для
двух нижних и для двух полученных значений. Более сложные методы текстуриро-
вания основаны на мипмэппинге.

Когда полигоны текстурируются,  необходимо учитывать перспективу.  Для того,
чтобы  текстурированные объекты выглядели правильно,  необходима перспектив-
ная коррекция. Она гарантирует,  что текстура  правильно наложится на разные
части объекта. Перспективная коррекция - ресурсоемкая процедура (одна опера-
ция деления на каждый пиксел), поэтому 3D-ускорители должны реализовывать ее
аппаратно.  Hо разные ускорители  достигают  разного качества  перспективной
коррекции.

Fillrate - скорость текстурирования, измеряемая в пикселах в секунду,  явля-
ется очень важной величиной,  и именно ее указывают как основную характерис-
тику 3D-чипсета.  Fillrate 100 млн пикселей/сек означает,  что 3D-ускоритель
может обработать 100 млн пикселей в секунду, накладывая на них текстуры.  Hа
fillrate влияет множество факторов, таких как тип фильтрации, глубина цвета,
альфа-смешение, туман и антиалиасинг.

>Туман

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

Туман можно разделить  на полигонный (per-polygon) и пиксельный (per-pixel).
Полигонный метод  линейно интерполирует уровень тумана по значениям в верши-
нах для получения  уровня тумана  в каждой точке полигона.  Этот метод хорош
только для маленьких полигонов. Пиксельный метод рассчитывает уровень тумана
для каждого пиксела, и для больших полигонов дает более реалистичное изобра-
жение.

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

>Удаление скрытых поверхностей

Удаление скрытых поверхностей (hidden surface removal - HSR)  -  комплексный
механизм, служащий для уменьшения числа треугольников,  которые будут участ-
вовать в рендеринге, а также правильном рендеринге с точки зрения глубины.

Прежде всего надо отбросить все треугольники, которые заведомо не видны.

1) Отсечение (clipping). Отбрасываются все треугольники, которые не попадают
в объем отсчечения (clip volume),  который  ограничен  шестью плоскостями по
трем координатам. Это важнейший метод HSR, который выполняется всегда.
2) Отбрасывание задних граней (backface culling). Выполняется проверка, куда
"смотрит" треугольник. Это возможно, так как у каждой вершины есть нормаль и
поэтому все треугольники являются ориентированными в пространстве. Если тре-
угольник смотрит "на наблюдателя", он считается видимым, а если "от наблюда-
теля" - то невидимым.  Это позволяет снизить вдвое число видимых треугольни-
ков, например для вывода сферы, состоящей из треугольников, необходимо срен-
дерить только треугольники,  составляющие полусферу,  которую видит наблюда-
тель.
3) BSP-деревья.  Программный метод HSR  для статической геометрии,  например
уровней в 3D-шутере.  Цель BSP-деревьев - упорядочение треугольников спереди
назад (front-to-back)  и  определение  тех треугольников,  которые полностью
закрываются другими.

После того, как осталось минимум треугольников,  надо их срендерить,  причем
так, чтобы видимые пикселы были видимы, а невидимые - невидимы.
1) Z-буферизация (z-buffering). См. соотв. термин.
2) Z-сортировка (z-sorting). Z-сортировка - менее аккуратный программный ме-
тод  удаления скрытых поверхностей по сравнению с z-буферизацией,  также из-
вестный   как   алгоритм   Паинтера.   Объекты  сортируются   сзади  наперед
(back-to-front). Более удаленные объекты рендерятся в первую очередь, за ни-
ми следуют менее удаленные. Если объекты пересекают друг друга, то ближайший
накладывается на дальнего, то есть происходит z-алиасинг.

>3D API

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

3D API делятся на универсальные и специализированные.  Универсальный  3D API
позволяет абстрагироваться от конкретного оборудования.  Без  универсального
API, поддерживающих широкий спектр 3D-ускорителей,  разработчиками  пришлось
бы портировать игры под множество плат.  Hаиболее известные универсальные 3D
API - OpenGL и Direct3D.  Специализированный  3D API предназначен для одного
конкретного семейства 3D-ускорителей и ограждает программиста  от низкоуров-
него программирования с помощью прямого доступа к регистрам и памяти. Приме-
ры специализированных  3D API  -  Glide (от 3Dfx),  RRedline (от Rendition),
PowerSGL (от Videologic), RenderGL (от Intergraph).

Direct3D - 3D API компании Microsoft, предназначенный для использования пре-
имущественно в играх.  Direct3D существует только в Windows 95, в скором бу-
дущем появится в Windows NT 5.0.  Direct3D  имеет  два режима:  RM (retained
mode) или абстрактный и IM (immediate mode) или непосредственный. IM состоит
из тонкого уровня, который общается с аппаратурой и обеспечивает самое высо-
кое быстродействие. Абстрактный режим - высокоуровневый интерфейс, покрываю-
щий множество операций для программиста, включая инициализацию и трансформа-
цию. У обоих режимов есть достоинства и недостатки, большинство Direct3D-игр
используют IM.

OpenGL - открытый 3D API,  созданный компанией SGI и контролируемый ассоциа-
цией OpenGL Architecture Review Board,  в  которую  входят  DEC,  E&S,  IBM,
Intel, Intergraph, Microsoft и SGI.  OpenGL реализует широкий диапазон функ-
ций от вывода точки,  линии или полигона  до рендеринга  кривых поверхностей
NURBS, покрытых текстурой.

Использование универсального 3D API предполагает использование драйверов для
этого API.  Hа сегодняшний день наличие драйверов Direct3D и OpenGL является
обязательным требованием ко всем 3D-ускорителям.

Direct3D-драйвер реализует так называемый уровень аппаратной абстракции, HAL
(Hardware Abstraction Layer) - интерфейс,  который взаимодействует непосред-
ственно  с оборудованием и позволяет  приложениям  использовать  возможности
3D-ускорителя с маскимальным быстродействием.  HAL имеет низкоуровневый дос-
туп к 3D-чипу и реализует 3D-функции на аппаратном или программно-аппаратном
уровне. В отличие от HAL,  уровень эмуляции,  HEL (Hardware Emulation Layer)
является программным растеризатором.

OpenGL-драйвер  может быть реализован  в двух вариантах:  как ICD и как MCD.
ICD (Installable Client Driver)  полностью  включает  все  стадии  конвейера
OpenGL,  что дает максимальное быстродействие,  но ICD довольно сложно прог-
раммировать.  MCD (Mini Client Driver) разработан  для внесения абстракции в
конвейер OpenGL.  MCD гораздо  легче программировать,  так  как  разработчик
программирует только те участки кода драйвера, которые он считает нужным оп-
тимизировать для своего чипсета.  Однако MCD  уступает ICD в быстродействии,
плюс ко всему MCD  работает  только  в Windows NT.  Для  широкого  внедрения
OpenGL  на платформе  Windows 95  сейчас  разрабатывается 3D Graphics Device
Driver Kit (Комплект разработчика драйверов устройств для 3D-графики). Hовый
DDK будет включать переработанный SGI ICD DDK и Direct3D DDK и позволит пос-
тавщикам графических микросхем и плат разрабатывать OpenGL-драйвера для Win-
dows 95, Windows NT 4.0, а также Windows 98 и Windows NT 5.0.

>Bumpmapping

Hаложение рельефа,  или bumpmapping,  -  продвинутая  методика моделирования
рельефных поверхностей.  Суть bumpmappingа  в следующем:  в реальном времени
рассчитывается рельефная карта,  которая  используется для симуляции рельеф-
ности. Такой рельефной картой может быть карта освещенности или карта смеще-
ний UV. Общий вид рельефной карты - DuDvL, где Du/Dv - дельты текстурных ко-
ординат environment map, L - освещенность.

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

Рассмотрим два вида рельефных карт по отдельности.
1) Карта освещенности (lightmaps).  Каждому пикселу  ставится в соответствие
значение освещенности L. Карта освещенности рассчитывается с учетом источни-
ков света.  Полученная карта освещенности накладывается на основную текстуру
альфа-смешением. Этот метод симулирует рельефность матовой поверхности игрой
света и тени.
2) Карта смещений UV (UV-dispmap).  Каждому пикселу  ставится в соответствие
вектор DuDv.  Карта смещений UV  используются для получения  environment map
с пертурбацией. Пертурбация означает, что environment map искажается опреде-
ленным образом, чтобы передать рельефность. Полученный environment map также
накладывается на основную текстуру альфа-смешением.  Этот  метод  симулирует
рельефность глянцевой или зеркальной поверхности отражением  окружающей сре-
ды.

>Z-буферизация

Z-буферизация (z-buffering) - самый надежный метод  удаления скрытых поверх-
ностей. Z-буфер - область видеопамяти, в которой для каждого пиксела хранит-
ся значение глубины. Когда рендерится новый пиксел, его глубина сравнивается
со значением, хранимом в z-буфере,  точнее с глубиной уже срендеренного пик-
села с теми же x и y координатами.  Если новый пиксел имеет значение глубины
выше значения в z-буфере, это значит что новый пиксел невидим, и он не запи-
сывается во фрейм-буфер, если ниже - то записывается.  Z-буфер обычно распо-
ложен во фреймбуфере,  поэтому при отключении аппаратной z-буферизации место
под z-буфер освобождается,  что позволяет 3D-ускорителю работать в более вы-
соких разрешениях.  Ради получения этих высоких разрешений  некоторые игры с
несложной графикой используют не Z-буферизацию,  а более простые методы уда-
ления скрытых поверхностей. Тем не менее отключение z-буферизации может при-
водить к артефакту, известному как z-алиасинг.

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

При использовании z-буферизации надо позабититься о том,  чтобы глубины были
корректны с точки зрения перспективы.  Допустим,  ускоритель  рендерит треу-
гольник с заданными z-координатами  трех его вершин.  Он  должен  рассчитать
z-координаты для всех точек, лежащих внутри треугольника. Если их просто ин-
терполировать, то результат получится некорректным с точки зрения перспекти-
вы, поэтому их надо корректировать.  Hо современные 3D-ускорители используют
технику, называемую w-буфером.  W-координата - величина  с плавающей точкой,
обратная  к z-координате.  Всем  вершинам  ставятся  в  соответствие  именно
w-координаты, которые можно интерполировать без перспективной коррекции.

>Part of Reactor Critical (http://www.reactor.ru)
>Copyright 1998 Константин Мартыненко (kenguru@overnet.ru, 2:5020/1037.41)
 3D Глоссарий.
Лента новостей


2006 (c) Copyright Hardline.ru