Эпоха 3Dfx


Многие из вас, любителей компьютерных игр, наверняка слышали эту загадочную аббревиатуру - "3Dfx". В разговорах о новых играх встречались упоминания каких-то "патчей", с которыми игры становятся красивее и идут быстрее. Но что есть такое "3Dfx" — конкретно узнать у вас так и не получилось. Пришло время рассказать вам об этом.

Каменный век игровой индустрии.

Самые первые игры для персональных компьютеров условно можно разделить на два типа — плоские и векторные. К первому относились незабвенные "Digger", "Alley Cat", "Space commander", "Arcanoid", "Тетрис". Все они предоставляли игроку поле для действия, размер которого обычно соответствовал размеру графического экрана, и все происходило в двух измерениях. Спрайты с изображением движущихся объектов "перемещались" по экрану. Технология этого довольно проста. Запоминаем небольшой участок экрана, затем на этом участке рисуем спрайт. Как только требуется передвинуть спрайт — восстанавливаем старую картинку, запоминаем новый участок, рисуем наш спрайт на нем.

Другие же игры — "F-19", "Elite Plus",- гордо назывались "трехмерными", и в них виртуальность представляла собой конструкцию из линий и многоугольников, координаты которой обсчитывались с изменением игровой ситуации, и затем вся она проецировалась на плоскость, совпадавшую с плоскостью экрана.

Два этих типа игр были просты в написании, а главное — были по силам тогдашним процессорам и видеокартам.

Бронзовый век.

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

Немного опередила развитие компьютеров фирма Id Software, которая выпустила сначала "Catacomb Abyss", а затем и "Wolfenstein 3D" — игры, которые считаются основоположниками жанра 3D-action. Игры эти шли еще на 286 процессорах, и являются ярким примером нового способа изображения виртуальности — текстурирование.

Во-первых, при этом способе, стены коридора, по которым бегает главный герой — это не просто одноцветные прямоугольники, а прямоугольные растровые картинки (то есть, состоящие из точек), например, рельеф кирпичной стены, или чей-нибудь портрет. Во-вторых, изображения врагов, которых игрок видел "глазами" персонажа, также были растровыми. Эффект присутствия в игре создавало масштабирование — при приближении к стене ее изображение увеличивалось, и соответствующим образом масштабировался рисунок ее текстуры. Но в этом же содержится и большой минус, который можно пояснить так: предположим, мы стоим лицом к стене на таком расстоянии от нее, на котором одна точка текстуры равняется одной точке экрана. Так как обычно для текстур использовались массивы 64х64 точки, в данном случае текстура на экране будет квадратом 64х64. Если уменьшать это расстояние, "подходить" к стене, точки текстуры должны "увеличиваться" — то есть, текстура должна занимать уже больший квадрат, прорисовывая одну и ту же точку несколько раз. Если уменьшить расстояние в два раза — каждая точка превратится в квадрат 2х2 пикселя, чтобы заполнить на экране квадрат 128х128. Ну а если подойти к стене вплотную, на экране мы увидим несколько больших разноцветных квадратов.

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

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

Со временем появлялись новые типы процессоров. 486 уже предъявляли повышенные требования к видеокартам, и те также начали развиваться в сторону увеличения быстродействия.

Появлялись новые типы игр — полутрехмерный "DOOM", полностью трехмерный "Descent", игры с другими методами изображения реальности, типа "Voxel Space" из "Comanche". Появилось понятие "z-buffer".

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

При всем при этом, компьютеры все же не успевали за растущими потребностями игрового населения. Что самое обидное — игровые телеприставки типа SEGA или 3DO намного обгоняли PC по быстродействию, поскольку изначально были ориентированы на производство игр.

Железный век.

В один прекрасный для любителей IBM PC день, фирма 3Dfx Interactive, которая успешно делала видеочипы для игровых автоматов, решила расширить свой рынок, и перейти на PC. Это у нее получилось — да так хорошо, что только через полгода после выхода первого 3D-ускорителя, на выставке E3 этого года, некоторые фирмы смогли показать проекты своих ускорителей, которые только приближались по быстродействию к карте от 3Dfx. Настал век аппаратной поддержки игр.

Что дает карта, использующая чип 3Dfx? Судите сами. Любая трехмерная игра, которая была написана с поддержкой этого ускорителя, автоматически идет в режиме 640x480 и в 65 тысячах цветов, и при этом на среднем пентиуме 120 дает 25-30 кадров в секунду! Невероятно? Но это факт.

Итак, 3Dfx.

Каким же образом эта карточка работает? Все очень просто. Для примера рассмотрим карту Diamond Monster 3D, выпускаемую фирмой Diamond Multimedia. Эта карта вставляется в PCI-слот вашего компьютера (кстати, работает она только на современных пентиумных материнских платах — на 486 компьютерах и на старых Pentium-платах, типа Pentium 60 она не заработает), и в нее вставляется шнур от монитора. А от нее к видеокарте идет так называемый passthrough-cable. Когда происходит вывод обычного изображения, карта 3Dfx бездействует. В тот момент, когда программа посылает команду карте 3Dfx на включение, обычная видеокарточка просто показывает последний экран перед включением 3Dfx (например, desktop Windows 95), а вывод основного изображения берет на себя 3Dfx. Для этого у нее есть два процессора, обрабатывающих изображение, и своя собственная оперативная память. Такой метод дает еще один плюс — вы можете использовать в паре с 3Dfx любую видеокарту.

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

В основном, 3Dfx занимается просчетом двух главных задач — один процессор занят процедурой z-buffer, в то время, как второй — наложением текстур. Полученную картинку карта сама и выводит на монитор. В результате, игре остается только давать несложные команды на обсчет, и представлять структуру виртуального мира в целом.

Давайте немного посчитаем.

Карточка эта может показывать игры в трех разрешениях (на полном экране) — 400х300, 512х384, 640x480 или 800x600.

Картинка отображается в 65 тысячах цветов — по 2 байта на пиксел, но для расчета z-buffer нужно два буфера кадра (один показываем, а второй в это время просчитываем) — то есть, 4 байта на пиксел. Кроме того, еще и сам буфер глубины 16-битный — и это еще плюс 2 байта на пиксел. Итого — 6 байт на пиксел.

640*480*6 = 1843200 байт, и текстурам остается 2Мб памяти

800*600*6 = 2880000 байт, и в 2 Мб он не помещается. Это мало — и в таком высоком разрешении игры могут идти только, если отключить аппаратный z-buffer. То есть, игра считает z-buffer, а карта только размазывает текстуры. Это медленнее — но все равно красиво. По слухам, в новых Glide-драйверах такое будет возможно.

Итак, если вы раньше играли только в обычную версию игры, получающийся с помощью 3Dfx эффект потрясает: кроме удивительной скорости, исчезают проблемы с масштабированием текстур. Если вы подходите к стене — пикселов на ней не видно! Если вы приближаетесь или удаляетесь от монстра - он не превращается в груду квадратов.

Кроме этого, карта 3Dfx занимается такими спецэффектами, как:

  • эффект освещения текстур
  • быстрая анимация текстур
  • сглаживание изображения
  • "размазывание" текстур
  • специальные световые эффекты (Гуро)
  • пиксельное альфа-смешивание (то есть, эффект полупрозрачности — например стекло, туман, вода).

Для примера, взгляните на картинки, взятые из "Quake" и "Tomb Raider".

quake img
Обычный Quake
 
quake GL image
GLQuake
 
 
tomb rider img
Обычный Tomb Raider
 
tomb rider GL img
Tomb Raider на Diamond Monster 3D

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

Железо для программ, и программы для железа.

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

Разные игры используют разные программные интерфейсы для общения с 3Dfx-картой — Glide обычно используют игры под ДОС, Direct3D — это интерфейс, входящий в стандартную поставку Microsoft DirectX, и потому этот интерфейс используется исключительно под Windows 95, и OpenGL — это многоплатформенный графический интерфейс, который изначально был написан для графических станций типа SUN. Quake специально был написан для него, чтобы сделать удобным портирование этой игры под другие, не PC-платформы.

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

И другие…

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

Проведем краткий обзор производителей чипов и карт.

Во-первых, стандарт 3Dfx реализован в двух чипах — они называются Voodoo Graphics и Voodoo Rush. Отличия в быстродействии нет — зато Rush, более новый чип, имеет собственный 2D-ускоритель, и может поэтому воспроизводить картинку не только на полном экране, но и в окне Windows 95. Кроме того, из-за наличия 6Мб памяти, этот чип может воспроизводить картинку 800х600 с аппаратным z-buffer. Но есть и минус — эта карта работает только со специальными графическими процессорами, производства компании Alliance Semiconductors.

Интерфейс Glide был разработан так, чтобы игры, которые написаны под него, шли как под Voodoo, так и под Rush — но пока, к сожалению, из-за недоработанных драйверов для Rush полной совместимости нет.

На чипе Voodoo построено на данный момент четыре видеокарты — Diamond Monster 3D, Orchid Righteous 3D, Deltron RealVision Flash 3D, и карточка фирмы A-Trend.

На чипе Rush — Hercules Stingray 128/3D, Intergraph Intense 3D Voodoo.

Перспективный чип под названием Verite1000 выпустила компания Rendition. На нем были собраны такие карточки, как 3D Blaster PCI (от известной фирмы Creative), Sierra Screaming 3D, и др.

На сайте Creative находится список игр, для которых были выпущены патчи под 3D Blaster.

Совсем недавно Rendition выпустила новый чип, Verite2200, который по тестам, опубликованным на различных интернетовских сайтах, обгоняет Voodoo, но пока карточки на этом чипе в России не появились, и с уверенностью что-то говорить об этом сложно.

Фирма NEC производит свои собственные чипы — NEC PowerVR PCX1 и PCX2. На последнем собраны такие карты, как VideoLogic Apocalypse 5D и Apocalypse 3Dx.

Существует также очень много узко специализированных чипов и карточек, рассчитанных на конкретные приложения — например, AutoCAD, программы для анимации, и др.

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

Неплохой ускоритель реализован в карте известной фирмы Matrox под названием Matrox Mystique. Наряду с очень хорошим 2D, в карте реализованы некоторые 3D-функции, которые поддерживают Direct3D.

Последнее слово — за будущим.

Как видно, на сегодняшний день 3Dfx является любимой карточкой всех фанатов трехмерных игр. Проводятся конкурсы, посвященные программированию для 3Dfx, есть официальный Software Development Kit для 3Dfx, и несмотря на выход новых чипов, компания 3Dfx не сдает своих позиций, и надеюсь, будет еще долго радовать игроманов новыми разработками.




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.