Что такое 3D графика

Вступление

Модель

Роль API

Графические ускорители

Игровые двигатели (Games engines)

Графика без компромиссов

Технология 3D-графика

Заключение

Вступление

Вопрос о том, что же является двигателем всей компьютерной индустрии, давно беспокоит многих пользователей. То ли это фирма Intel, что, не переставая, выпускает и выпускает новые процессоры. Но кто тогда заставляет их покупать? Может, во всем виноват Microsoft, непрерывно делает свои окна больше и краше? Так нет, можно ведь довольствоваться старыми версиями программ — тем больше спектр их возможностей практически не меняется. Вывод напрашивается сам собой — во всем виноваты игры. Да, именно игры стремятся все более и более уподобиться реальному миру, создавая его виртуальную копию, хотят все более мощных ресурсов.

Вся история компьютерной графики на PC является тому подтверждением. Вспомните, в начале были тетрисы, диггеры, арканоиды. Вся графика заключалась в перерисовке небольших участков экрана, спрайтов, и нормально работала даже на XT. Но прошли те времена. Взошла звезда симулятрив.

С выходом таких игр, как F19, Formula 1 и т.п., в которых приходилось уже перерисовывать весь экран, предварительно заготовлюючы его в памяти, всем нам пришлось обзавестись по крайней мере 286 процессором. Но прогресс на этом не остановился. Желание уподобить виртуальный мир в игре реальном мира усилилось, и появился Wolf 3D.

Это, можно сказать, первый 3D-игра, в которой был смоделирован какой-никакой, но все же реалистичный мир. Для его реализации пришлось использовать верхнюю (более 640 Кб) память и загнать программу в защищенный режим. Для полноценной игры пришлось установить процессор 80386. Но и мир Wolf 3D страдал недостатками. Хотя стены и были не просто одноцветными прямоугольниками, но для их закраски использовались текстуры с небольшим разрешением, поэтому поверхности выглядели прилично только на расстоянии. Конечно, можно было пойти по пути наращивания разрешения текстур, вспомним, например, DOOM. Тогда нам пришлось снова перейти на более новый процессор и увеличить количество памяти. Правда, все равно, хотя изображение и улучшилось, но ему были присущи все те же недостатки. Да и плоские объекты и монстры — кому это интересно.

Тут то и взошла звезда Quake. В этой игре был применен революционный подход — z-буфер, который позволил придать объемность всем объектам. Однако вся игра все равно работала в невысоком разрешении и не отличалась высокой реалистичностью.

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

Тут то и вылез производитель игровых автоматов 3Dfx, что сделал эту сказку прошлым с помощью своего графического процессора Voodoo. Человечество сделало еще один шаг в виртуальный мир.

А поскольку операционной системы на PC с текстурными окнами, уплывают назад, в туман, пока нет, и не предполагается, весь аппарат трехмерной графики можно пока применить только к играм, успешно делает все цивилизованное человечество.

Модель

Для изображения трехмерных объектов на экране монитора потребуется проведение серии процессов (обычно называемых конвейером) с последующей трансляцией результата в двумерный вид. Сначала, объект представляется в виде набора точек или координат, в трехмерном пространстве. Трехмерная система координат определяется тремя осями: горизонтальной, вертикальной и глубины, обычно называемых, соответственно осям x, y и z. Объектом может быть дом, человек, машина, или самолет целый 3D мир и координаты определяют положение вершин (узловых точек), из которых состоит объект, в пространстве. Соединив вершины объекта линиями, мы получим каркасную модель, называемую так потому, что видимыми являются только края поверхностей трехмерного тела. Каркасная модель определяет области, составляющие поверхности объекта, которые могут быть заполнены цветом, текстурами и освещаться лучами света.

image008

Рис. 1: Каркасная модель куба

Даже при таком упрощенном объяснении конвейера 3D графики становится ясно, как много требуется вычислений для прорисовки трехмерного объекта на двумерном экране. Можно представить, насколько увеличивается объем необходимых вычислений над системой координат, если объект движется.

image007

Рис. 2: Модель самолета с закрашенными поверхностями

Роль API

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

Для приложений общего и развлекательного направления, существуют следующие API:

Microsoft Direct3D

Criterion Renderware

Argonaut BRender

Intel 3DR

Компания Apple продвигает свой собственный интерфейс Rave, созданный на основе их собственного API Quickdraw 3D.

Для профессиональных приложений, работающих под управлением WindowsNT доминирует интерфейс OpenGL. Компания Autodesk, крупнейший производитель инженерных приложений, разработала свой собственный API, называемый Heidi.

Свои API разработали и такие компании, как Intergraph — RenderGL, и 3DFX — GLide.

Существование и доступность 3D интерфейсов, поддерживающих множество графических подсистем и приложений, увеличивает потребность в аппаратных ускорителях трехмерной графике, работающих в режиме реального времени. Развлекательные приложения, главный потребитель и заказчик таких ускорителей, но не стоит забывать и о профессионально приложения для обработки 3D графики, работающих под управлением Windows NT, многие из которых переносятся из высокопроизводительных рабочих станций, типа Silicon Graphics, на PC платформу. Интернет приложения сильно выиграют от невероятной маневренности, интитивности и гибкости, что обеспечивает применение трехмерного графического интерфейса. Взаимодействие в World Wide Web будет намного проще и удобнее, если будет происходить в трехмерном пространстве.

Графический ускоритель

Рынок графических подсистем к появлению понятия малтимедиа был относительно прост в развитии. Важной вехой в развитии был стандарт VGA (Video graphics Array), разработанный компанией IBM в 1987 году, благодаря чему производители видеоадаптеров получили возможность использовать более высокое разрешение (640×480) и большую глубину представления цвета на мониторе компьютера. С ростом популярности ОС Windows, появилась острая потребность в аппаратных ускорителях двумерной графики, чтобы разгрузить центральный процессор системы, вынужден обрабатывать дополнительные события. Отвлечение CPU на обработку графики существенно влияет на общую производительность GUI (Graphical User Interface) — графического интерфеса пользователя, а потому что ОС Windows и приложениям для нее нужно как можно больше ресурсов центрального процессора, обработка графики осуществлялась с более низким приоритетом, т.е. делалась очень медленно. Производители добавили в свои продукты функции обработки двумерной графики, такие, как прорисовка окон при открытии и свертованиы, аппаратный курсор, постоянно видимый при перемещении указателя, закраски областей на экране при высокой частоте регенерации изображения. Итак, появился процессор, обеспечивает ускорение VGA (Accelerated VGA — AVGA), также известный, как Windows или GUI ускоритель, который стал обязательным элементом в современных компьютерах.

Внедрение малтимедиа создало новые проблемы, вызванные добавлением таких компонентов, как звук и цифровое видео к набору двумерных графических функций. Сегодня легко заметить, что многие продукты AVGA поддерживают на аппаратном уровне обработку цифрового видео. Следовательно, если на Вашем мониторе видео проигрывается в окне, размером с почтовую марку — пришло время установить в Вашей машине малтимедиа ускоритель. Малтимедиа ускоритель (multimedia accelerator) обычно имеет встроенные аппаратные функции, позволяющие масштабировать видеоизображение по осям x и y, а также аппаратно преобразовывать цифровой сигнал в аналоговый, для вывода его на монитор в формате RGB. Некоторые малтимедиа акселераторы могут также иметь встроенные возможности декомпрессы цифрового видео.

Разработчики графических подсистем должны исходить из требований, частично диктуемых размерами монитора компьютера, частично под влиянием GUI, и частично под влиянием графического процессора. Первичный стандарт VGA с разрешением 640×480 пикселей был адекватен 14 "мониторам, наиболее распространенных в то время. Сегодня наиболее лучшие мониторы с размером диагонали трубки 17", благодаря возможности выводить изображение с разрешением 1024×768 и более.

Основной тенденцией при переходе от VGA до малтимедиа ускорителей была возможность размещения как можно больше визуальной информации на мониторе компьютера. Использование 3D графики является логическим развитием этой тенденции. Большие объемы визуальной информации могут быть втиснуть в ограниченное пространство экрана монитора, если она представляется в трехмерном виде. Обработка трехмерной графики в режиме реального времени дает возможность пользователю легко оперировать данными, которые представляются.

Игровые двигатели (Games engines)

Первое правило компьютерных игр — нет никаких правил. Традиционно, разработчики игр больше заинтересованы в крутой графике своих программ, чем прохождению рекомендаций технарей. Несмотря на то, что в распоряжении разработчиков имеется множество трехмерных API, например — Direct3D, некоторые программисты идут по пути создания собственного 3D игровые или интерфейсы двигателя. Собственные игровые двигатели — один из путей для разработчиков добиться невероятной реалистичности изображения, фактически на пределе возможностей графического программирования.

Нет ничего более желанного для разработчика, чем иметь прямой доступ к аппаратным функциям компонентов системы. Несколько известных разработчиков создали свои собственные игровые двигатели, работающие с оптимальным использованием аппаратных ускорителей графики, принесшие им популярность и деньги. Например, двигатели Interplay для Descent II и id Software для Quake, обеспечивают истинную трехмерность действия, используя наполни аппаратные функции 3D, если они доступны.

Графика без компромисов

Разговоры, которые ведутся уже достаточно долгое время, о перспективах применения трехмерной графики в таких областях, как развлечения и бизнес, допредела подогрели интерес потенциальных пользователей, на рынке уже появился новый тип продуктов. Эти новые технологические решения, сочетающие в себе прекрасную поддержку 2D графики, отвечает сегодняшним требованиям к Windows акселлераторам, аппаратную поддержку функций 3D графики и проигрывают цифровое видео с необходимой частотой смены кадров.

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

Среди представителей нового поколения можно назвать, как пример, следующие продукты:

процессор Ticket-To-Ride компании Number Nine Visual Technologies

серия процессоров ViRGE компании S3 Inc.

процессор RIVA128, разработанный совместно компаниями SGS Thomson и nVidia

Технология 3D-графики

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

Допустим, такой игрой оказался симулятор автомобильных гонок, и Ваша машина уже стоит на старте, готовая броситься к покорению новых рекордов. Идет предстартовый обратный отсчет, и Вы замечаете, что вид из кабины, отображаемый на экране монитора, немного отличается от привычного.

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

Попробуем разобраться, какие же технические решения позволяют 3D-видеокарта передавать виртуальную действительность с такой реалистичностью. Каким образом изобразительным средствам PC удалось достичь уровня профессиональных студий, занимающихся трехмерной графикой.

Часть вычислительных операций, связанных с отображением и моделированием трехмерного мира переведен теперь на 3D-акселератор, который является сердцем 3D-видеокарты. Центральный процессор теперь практически не занят вопросами отображения, образ экрана формирует видеокарта. В основе этого процесса лежит реализация на аппаратном уровне ряда эффектов, а также применение несложного математического аппарата. Попробуем разобраться, что же конкретно умеет графический 3D-процессор.

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

Это самый распространенный эффект для моделирования поверхностей. Например, фасад дома потребовал бы отображения множества граней для моделирования множества кирпичей, окон и дверей. Однако текстура (изображение, налагаемое на всю поверхность сразу) дает больше реализма, но требует меньше вычислительных ресурсов, так как позволяет оперировать со всем фасадом как с единой поверхностью. Перед тем, как поверхности попадают на экран, они текстурируются и затинюються. Все текстуры хранятся в памяти, конечно установленной на видеокарте. Кстати, здесь нельзя не заметить, что применение AGP обеспечивает сохранение текстур в системной памяти, а ее объем намного больше.

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

Коррекция с учетом перспективы очень трудоемкая операция, поэтому нередко можно встретить не совсем верную ее реализацию.

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

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

Трехлинейная фильтрация немного сложнее. Для получения каждого пикселя изображения берется взвешенное среднее значение результатов двух уровней билинейной фильтрации. Полученное изображение будет еще более четкое и менее мерцающее.

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

Для того чтобы избежать непредвиденных изменений, большинство управляющих график процессов создают серии передфильтрованих битмепов текстур с уменьшенным разрешением, этот процесс называется mip mapping. Затем, графическая программа автоматически определяет, какую текстуру использовать, основываясь на деталях изображения, уже выведено на экран. Соответственно, если объект уменьшается в размерах, размер его текстурного битмепа тоже уменьшается.

Но вернемся в наш гоночный автомобиль. Сама дорога уже выглядит реалистично, но проблемы наблюдаются с ее краями! Вспомните, как выглядит линия, проведенная на экране не параллельно его края. Вот и в нашей дороги появляются "рваные края". И для борьбы с этим недостатком изображения применяется anti-aliasing.

Это способ обработки (интерполяции) пикселов для получения более четких краев (границ) изображения (объекта). Наиболее часто используемая техника — создание плавного перехода от цвета линии или края к цвету фона. Цвет точки, лежащей на границе объектов определяется как среднее цветов двух предельных точек. Однако в некоторых случаях, побочным эффектом anti-aliasing является смазывание (blurring) краев.

Мы подходим к ключевому моменту функционирования всех 3D-алгоритмов. Предположим, что трек, по которому ездит наша гоночная машина, окружен большим количеством разнообразных объектов — зданий, деревьев, людей.

Тут перед 3D-процессором встает главная проблема, как определить, какие из объектов находятся в области видимости, и как они освещены. Причем, знать, что очевидно в данный момент, недостаточно. Необходимо иметь информацию и о взаимном расположении объектов. Для решения этой задачи применяется метод, называемый z-Буферизация. Это самый надежный метод удаления скрытых поверхностей. В так называемом z-буфере хранятся значения глубины всех пикселей (z-координаты). Когда рассчитывается (рендерится) новый пиксел, его глубина сравнивается со значениями, сохраненными в z-буфере, а конкретнее с глубинами уже срендеренных пикселов с теми же координатами x и y. Если новый пиксел имеет значение глубины больше какого-либо значения в z-буфере, новый пиксел не записывается в буфер для отображения, если меньше — то записывается.

Z-Буферизация при аппаратной реализации сильно увеличивает производительность. Однако, z-буфер занимает большие объемы памяти: например даже при разрешении 640×480 24-разрядный z-буфер будет занимать около 900 Кб. Эта память должна быть также установлена на 3D-видеокарте.

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

Для предотвращения этих эффектов профессиональные платы имеют 32-разрядный z-буфер и оборудуются большими объемами памяти.

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

Реальный мир состоит из прозрачных, полупрозрачных и непрозрачных объектов. Для учета этого обстоятельства, применяется alpha blending — способ передачи информации о прозрачности полупрозрачных объектов. Эффект полупрозрачности создается путем объединения цвета исходного пиксела с пикселей, уже находящегося в буфере.

В результате цвет точки является комбинацией цветов переднего и заднего плана. Конечно, коэффициент alpha имеет нормализованное значение от 0 до 1 для каждого цветного пиксела. Новый пиксел = (alpha) (цвет пиксела А) + (1 — alpha) (цвет пиксела В).

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

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

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

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

Конвейер рендеринга может быть разделен на 2 стадии: геометрическая обработка и растеризации.

image006

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

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

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

Из всего вышеуказанных можно понять, для каких целей используется память, установленная на плате 3D-акселераторы. В ней хранятся текстуры, z-буфер и буферы следующего кадра. При использовании шины PCI, использовать для этих целей обычную оперативную память нельзя, так как быстродействие видеокарты существенно будет ограничена пропускной способностью шины. Именно по этому для развития 3D-графики особенно перспективные продвижение шины AGP, что позволяет соединить 3D-чип с процессором прямо и тем самым организовать быстрый обмен данными с оперативной памятью. Это решение, к тому же, должны удешевить трехмерные акселераторы за счет того, что на борту платы останется лишь немного памяти собственно для кадрового буфера.

Заключение

Повсеместное внедрение 3D-графики вызвало увеличение мощности компьютеров без какого-либо существенного увеличения их цены. Пользователи потрясены открывающимися возможностями, и стремятся попробовать их у себя на компьютерах. Множество новых 3D-карт позволяют пользователям видеть трехмерную графику в реальном времени на своих домашних компьютерах. Эти новые акселераторы позволяют добавлять реализм к изображениям и ускорять вывод графики в обход центрального процессора, опираясь на собственные аппаратные возможности.

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

При подготовке материала использовалась информация из Diamond White Papers