Что такое трехмерная графика

Что такое трехмерная графика

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

Компания Microsoft выпустила первую версию нашумевшей игры Flight Simulator спустя не очень много времени после появления на свет операционной системы MS-DOS. Несмотря на очень низкие по нынешним представлениям разрешение и частоту обновления кадров она дала пользователям РС возможность почувствовать вкус высоких технологий, ранее доступный лишь тем счастливчикам, которые имели тогда доступ к военным имитаторам полетов.

После этого присутствие 3D-технологий в мире РС постоянно расширялось. На выбор пользователям многие фирмы предложили буквально десятки 3D-приложений. Диапазон их простирался от САПР и профессиональных систем визуализации до широчайшего ассортимента игр, включая воздушные, космические симуляторы и "бегалки-стрелялки" по хитроумным лабиринтам. Однако в целом этим 3D-приложениям недоставало той впечатляющей реалистичности, которую обеспечивали рабочие станции, специализирующиеся на трехмерной графике, системы виртуальной реальности и уже упоминавшиеся военные стенды-имитаторы.

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

Тенденции массового рынка 3D-графики

На бескрайнем пространстве, именуемым компьютерным рынком, выделяется скоростью своего роста участок домашней техники. Сегодня куда больше трети проданных персональных компьютеров обосновывается в квартирах, а не на офисах. И это количество с каждым годом увеличивается примерно на 15%, как утверждают зарубежные источники (см. рис. 1).

Цифры эти показывают, что особое значение приобретает рынок усовершенствованных 32/64-битовых игровых приставок. Вместе с большим количеством совместимых с ними уже установленных и свежепроданных домашних компьютеров это открывает богатые потенциальные возможности для бизнеса перед издателями и разработчиками игровых программ, позволяя им сделать акцент на платформу РС.

Естественно, игровые компании прекрасно понимают кроющиеся в этом рынке возможности. Например, такая знаменитая 3D-игра, как DOOM от Id Software, была продана в количестве, превышающем 1.8 млн. копий, принеся десятки миллионов долларов дохода. Среди других 3D-игр, добившихся сходных результатов, можно упомянуть Descent от Interplay и Wing Commander III от Origin, каждая из которых разошлась более чем в 500,000 копий.

Однако, несмотря на ошеломляющий успех упомянутых игр, они и близко не предлагали такого качества изображения, как современные 32/64-битовые приставки типа Sega Saturn или Sony Playstation. Благодаря же усилиям производителей графических карт для РС и ОЕМ архитектурные решения в области 3D-графики, схожие с примененными в этих приставках, появились в массовых персональных компьютерах, в первую очередь в ориентированных на завоевание умов и сердец домашних пользователей.

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

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

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

До рождения Windows 95 такие API в основном базировались на операционной системе DOS (так же как и игровые программы) и принадлежали перу независимых компаний, например RenderWare от Criterion, Brender от Argonaut и RealityLab от Rendermorphics. С приходом Windows 95 и Direct3D эти API приобрели гибкость и аппаратную независимость, которые обеспечивает высокотехнологичное программное обеспечение. Direct3D позволяет этим API не только предоставлять услуги программной 3D-визуализации, но и предложить преимущества аппаратного ускорения 3D-графики массовому потребителю. Для этого Microsoft включила в состав Windows 95 интерфейс 3D API RealityLab.

Интеграция технологии от Rendermorphics в систему Windows 95 была тщательно спланирована Microsoft. Цель - ввести уровень поддержки, который позволит разработчикам легко создавать новые 3D-приложения, а также даст возможность приложениям и API от третьих фирм легко воспользоваться преимуществами аппаратного ускорения. Для ее достижения в среду разработки для Windows 95 были введены два уровня 3D API: высокий уровень, названный RealityLab, и низкий - Direct3D.

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

Direct3D дает возможность разработчикам, у который есть собственный процессор 3D-визуализации, воспользоваться аппаратным ускорением при работе под системой Windows 95. Это особенно привлекательно при переводе написанных ранее под DOS 3D-игр в Windows 95. При изменении лишь небольшой части приложения оно не только обретает возможность работать в среде Windows 95, но и получает выгоды от аппаратного 3D-ускорения, когда таковое становится доступным.

Кроме того, уровень Direct3D позволяет сторонним производителям предложить независимые интерфейсы API, которые пользуются преимуществами любой аппаратной акселерации с той же эффективностью, как и RealityLab. Такие компании, как Argonaut и Criterion, поставляющие сообществу разработчиков игр для DOS программные процессоры визуализации и API, получили шанс предложить им совместимые с Windows 95 API, обладающие функциональными возможностями, отличными от имеющихся в задействованном Microsoft RealityLab.

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

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

Среди этих вычислений наибольшую трудоемкость представляет этап вращения и преобразования сцены. Он требует перемножения матриц 4 х 4 (16 отдельных перемножений или сложений с плавающей точкой!) для каждой вершины каждого полигона. Предположим, что сцена, состоящая из 1,000 полигонов, должна просчитываться с частотой 30 кадров в секунду. Тогда только на этом этапе потребуется 1,440,000 операций умножения или сложения с плавающей точкой в секунду! Способность РС воспроизводить истинно интерактивную 3D-графику с обработкой на геометрической стадии стала доступной с использованием вычислительной мощи процессоров класса Pentium. Возможности расчетов с плавающей точкой этих процессоров позволяют домашним компьютерам генерировать полигоны со скоростью 30 кадров в секунду, обеспечивая полностью интерактивную высококачественную 3D-графику. Например, массовые процессоры Pentium способны выполнить в секунду по меньшей мере 4 миллиона умножений.

Итак, с появлением процессоров Pentium в РС на место стал второй кусочек 3D-мозаики.

Процессор визуализации Благодаря вычислительным возможностям математики с плавающей точкой в процессорах Pentium образовался естественный водораздел между сегментами геометрических построений и визуализации. Стадия визуализации требует громадных возможностей обработки пикселов, в то время как геометрическая стадия нуждается в векторных и матричных вычислениях. И поскольку процессор визуализации в большей степени ориентирован на обработку пикселов, он хорошо уживается в паре с базирующимися на Pentium геометрическими вычислениями.

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

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

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

Процесс визуализации может быть разбит на несколько функциональных участков: - визуализация полигонов; - наложение текстур; - атмосферные эффекты; - удаление скрытых поверхностей.

Стадия визуализации полигонов получает данные об их расположении и освещении от геометрического процессора и создает представление для отображения сцены. Полигоны описываются множеством способов, чаще всего применяются треугольники, но также встречаются многоугольники, бикубические кривые или кривые Безье и т.д. Хотя наибольшей популярностью пользуются треугольники - разновидность, получающая максимум выгоды от общих вершин и приводящая к значительному повышению производительности процесса визуализации. Полосы треугольников, названные tri-strips, представляют собой такое описание полигонов, которое позволяет серии треугольников с совмещенными вершинами быть просчитанной без повторной передачи общих вершин. Это устраняет ожидание, связанное с загрузкой 18 координатных данных (сокращая их число до 6) на треугольник, когда вершины совмещены.

Полигоны, треугольники и полосы могут быть визуализированы одним из следующих способов: - равномерное закрашивание (цвет треугольника постоянный); - закрашивание Гуро (цвет треугольника интерполируется от каждой из вершин); - наложение текстуры (цвет треугольника базируется на записанной в памяти растровой картинке, состоящей из "текстурных пикселов", или "текселов").

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

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

Равномерное закрашивание (слева) и закрашивание методом Гуро (справа) заметно отличаются по качеству.

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

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

Пример наложения текстуры показан на рисунке. Этот чайник "текстурирован" с помощью показанной в нижнем углу текстуры.

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


Наложение текстур придает даже очень простой трехмерной сцене высокую реалистичность и детальность.

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

Коррекция перспективы (perspective correction) чрезвычайно важна для развертывания перед пользователем реалистичной картины. Говоря проще, по мере удаления от наблюдателя рисунок на текстуре должен сжиматься или сходиться, как сходятся в одну точку на горизонте и линии объектов. Без такой коррекции текстуры сползают в сторону и причудливо изламываются самым нереалистичным образом. Настоящая коррекция перспективы требует "попиксельного деления", а это достаточно интенсивная с точки зрения вычислений процедура. Правда, за счет этого достигается наибольшая реалистичность открывающейся перед пользователем картины.

О важности коррекции перспективы можете судить сами, посмотрев на этот рисунок. Пример наложения текстуры без коррекции песпективы (слева) и с ней (справа).

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

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

Основные методы сглаживания: - билинейная фильтрация; - MIP-текстурирование; - трилинейное MIP-текстурирование.

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

MIP-текстурирование, получившее название от латинского выражения multum in parvo (все в одном, как теперь модно выражаться), построено на использовании для улучшения качества визуализации предварительно просчитанных текстурных карт, в которых варьируется разрешение. Разрешение текстурной карты выбирается в зависимости от размера треугольника или полигона, к которому ее надо применить. В конечном итоге получаются более высокого качества текстуры при меньшем расходовании текстурной памяти, так как читаются только одиночные пикселы, а не по четыре, как при билинейной фильтрации.

Уро- веньРазре- шениеЕстественный размерУвеличенный вид
0полное
11/2
21/4
31/8


Таблица 1 . Пример карт с разным разрешением, записанных в MIP-наборе. Колонка с увеличенным изображением демонстрирует изменение разрешения, требуемое при удалении текстурированного объекта от глаз наблюдателя или при уменьшении его размера.

В таблице 1 показан возможный набор MIP-текстур (всего четыре), сопровождаемый увеличенным их изображением, чтобы было лучше видно изменение разрешения.

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

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

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

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

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

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

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

Дальнейшее приближение синтезированных образов к реальной жизни достигаетсяпутем применения атмосферных эффектов. Чаще всего используются затуманивание и затемнение в глубине (см. рисунки). "Туман" создается путем размывания цвета объекта или его текстуры постоянным цветом (раз туман, то используется белый цвет) по мере увеличения дистанции от наблюдателя. Чем дальше расположен объект от наблюдателя, тем больше в нем белого цвета. Затемнение по глубине состоит в уменьшении его интенсивности соответственно увеличению расстояния от наблюдателя. Этот эффект хорошо знаком по 3D-играм типа Quake, в которых он (на мой взгляд, слишком усиленный по отношению к реальности, вплоть до утрированного) придает коридорам лабиринтов глубину и таинственность.

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


Сравнение алгоритмов Z-сортировки (слева) и Z-буферизации (справа) показывает преимущество последнего при визуализации пересекающихся объектов.

Алгоритмы Z-сортировки располагают полигоны в порядке от дальних к ближним еще до визуализации. Благодаря этому при визуализации наиболее близкие к наблюдателю объекты обсчитываются в последнюю очередь, накладываясь на дальние. Результаты получаются достаточно аккуратные за исключением тех случаев, когда объекты пересекаются друг с другом, как показано на рисунке. При Z-буферизации информация о глубине записывается для каждого пиксела. Когда просчитывается новый пиксел, его глубина сравнивается с глубиной записанного в буфере на этом месте. Новый пиксел записывается в буфер только в том случае, если его значение глубины меньше, чем взятое у ранее помещенного в буфер пиксела. Метод срабатывает на 100 процентов правильно в отношении как непересекающихся, так и пересекающихся объектов.

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

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

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

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

Массовый рынок для систем 3D-графики означает, что найдется спрос на системы всех уровней сложности и стоимости. Кое-какие рекомендации по вопросу выбора 3D-системы приведены во врезке "3D-решения для РС" .

Роман Соболенко. При подготовке использованы материалы S3 Inc.


Компьютерная газета. Статья была опубликована в номере 22 за 1997 год в рубрике hard :: технологии

©1997-2022 Компьютерная газета