Ретроспектива: с чего начиналась 3D-графика на ПК. Часть 1: 3dfx Interactive — взлет
Что было до 3Dfx…
Еще с появлением даже не кино как такового, а фотографии стало ясно, что мы смотрим плоскую картинку, на которой разворачиваются вполне себе трехмерные события, которые обрабатывает наш мозг, формируя полноценное многомерное изображение. Однако кино — это все же фотографическое отображение реальности на пленке (на каждом кадре), поэтому для мозга не составляет труда трансформировать 2D-картинку в полноценное восприятие реальности. Постепенно всего этого становилось мало — стало скучно показывать людям то, что они и так видят в повседневной жизни. К тому же, есть сказки, фантастические рассказы и т. п., где и сцены, и герои вымышленные, их не показать в кино, не придумывая особых декораций или костюмов (грима) для актеров.
Поэтому пока не было эпохи цифровых технологий, были фильмы-сказки знаменитых Роу, Птушко, как и в Голливуде свои именитые режиссеры находили способы создания декораций, комбинирования кадров, наложения всевозможных фильтров, чтобы показать людям иные, сказочные и фантастические миры. Просматривая старые фильмы, подчас даже трудно представить, какой колоссальный труд был вложен, чтобы Золушка по мановению волшебной палочки превращалась в принцессу, чтобы мыши могли расти и превратиться в лошадей. Да, мультипликация на этой почве получила огромное развитие, ведь там все выходило из-под кистей художников (а это означало отсутствие огромных затрат на натурные съемки, декорации, костюмы и грим актеров — но, правда, требовались очень талантливые художники).
Но все же мультфильмы давали лишь приблизительное представление о месте и героях. Достичь фотографического сходства с реальностью таким образом невозможно, достаточно бросить взгляд на любую картину художника и фотографию, чтобы понять, где рука художника, а где объектив камеры создал срез реальности. Однако даже более сложной проблемой в мультфильмах была трехмерность сцен. Как ни накладывай слои картинок друг на друга, все равно полноценной глубокой сцены не получалось.
И вот пришли цифровые технологии. Я не буду загружать читателей историей их становления. Прокрутим временно́е колесо сразу до примерно середины 1970-х годов, когда появился рендеринг трехмерных изображений. Разумеется, обсчетом занимались целые комплексы ЭВМ (понятие ПК еще было крайне мало распространено), умные люди написали некое универсальное уравнение рендеринга (расчет параметров освещения), позволяющее просчитать, как будут отображаться трехмерные объекты на 2D-экране (условно, конечно). И вот чуть позже, в начале 1980-х, появилась знаменитая компания Silicon Graphics Computer System (позже — Silicon Graphics, или SGI). Их задачей являлось производство графических терминалов, то бишь целых систем, нацеленных на ускоренный рендеринг трехмерных изображений.
Постепенно отдельные терминалы стали превращаться в кластеры огромных систем. С их помощью, например, возникли (ожили) динозавры в «Парке Юрского периода». То есть в кино, наряду с натурными съемками, стали появляться и трехмерные изображения, созданные такого рода системами. Я не буду дальше продолжать историю SGI, скажу лишь, что одновременно трехмерным рендерингом такого же масштаба занималась компания Intergraph Computer System, являвшаяся жестким конкурентом SGI и в конце концов объединившаяся с ней. Ныне SGI поглощена компанией HP и является подразделением, выпускающим серверные комплексы, рабочие станции, в которых до сих пор есть наработки ПО SGI.
Почему я уделил такое внимание SGI? Просто потому, что ведущие специалисты и талантливые инженеры из SGI встали во главе новой компании 3Dfx Interactive. Именно с большой буквой «D». Таким было первое название этой фирмы. Кстати, ее злостного соперника — компанию nVidia (именно с маленькой «n») — основали также выходцы из SGI. Но о ней в другом материале.
3Dfx, Glide, пиксели, тексели
Итак, в 1994 году Росс Смит (Ross Smith), Гари Таролли (Gary Tarolli) и Скотт Селлерс (Scott Sellers), будучи выходцами из SGI, основали компанию 3Dfx Interactive при поддержке Горди Кэмпбелла (Gordie Campbell).
Основной задачей новой компанией был выпуск микросхем и референсных карт для игровых автоматов с аркадными играми. Собственно, основатели 3Dfx хотели стать пионерами в выходе трехмерного рендеринга из сферы процессорных вычислений целыми кластерами огромных систем в относительно небольшие отдельные автоматы и блоки. А потом и выйти на бешено растущий в те годы рынок ПК, особенно семейства x86 (Intel, AMD, Cyrix, UMC и др.). Их задача состояла в выпуске особых чипов, которые могли бы брать на себя ряд функций по отрисовке (рендерингу) трехмерных сцен.
Чтобы трехмерную сцену обсчитать, ее надо разбить на части, так называемые примитивы, или полигоны. И самой первой задачей стал выбор этих самых полигонов. Первый горький опыт внесла компания nVidia, которая уже существовала параллельно, основанная также выходцами из SGI, и крах ее NV1 позволил компании 3Dfx (и не только ей) не наступать на те же грабли: не брать полигоны четырехугольными. Правда, выбор полигонов — это только часть причин гибели NV1, но об этом — в материале о nVidia. Так вот, самым лучшим полигоном оказался, конечно же, треугольник — как простейшая геометрическая фигура, имеющая площадь.
В 3Dfx смекнули, что массово и очень стремительно развивающийся процессорный рынок х86-архитектуры позволит часть задач обсчета сцен оставить на центральных процессорах: например, определение вершин треугольников, как отразить освещение, то есть определить все опорные, так сказать, точки, вбить «колышки». А вот растягивать «палатки» на колышках (то есть покрывать полигоны текстурами) и дальше обрабатывать сами текстуры и т. д. — уже будут особые чипы.
Но это не все. Нужен соответствующий программный интерфейс для связи игры и операционной системы (включая драйвера, управляющие теми самыми особыми графическими чипами). В те годы уже была распространена программная архитектура OpenGL, которая была открытой (о чем говорит ее название) и потому любой мог ее дополнять инструкциями (расширениями). Из-за этого полновесные библиотеки, обслуживающие OpenGL, стали монстрообразными, и специалисты 3Dfx придумали выбрать из всего OpenGL только нужное для работы с их графическими процессорами. Так появился проприетарный программный интерфейс 3Dfx Glide. Он позволял разработчикам игр достаточно просто использовать возможности нового процессорного блока 3Dfx. Тут следует упомянуть, что к этому моменту уже вышли в свет игры на движках знаменитой компании id Software: Wolfenstein 3D (1992), Doom (1993), в год выпуска первого решения 3Dfx для ПК также появился Quake (1996). Понятно, что первые две игры были созданы для работы в MS DOS (если мы говорим о x86-совместимых ПК), так как Windows тогда был в зачаточном виде (лишь оболочка поверх DOS), и использовали технологии рейтрейсинга (разумеется, всё считал центральный процессор). И только Quake можно назвать полноценной трехмерной игрой, использующей уже текстурированные полигоны, а не спрайты. Игра вышла в то время, когда новая ОС Windows 95 уже стала активно внедряться в ПК миллионов пользователей, и потому было выпущено несколько версий движка Quake, в том числе и с использованием API OpenGL.
При этом предлагаемый Microsoft API Direct3D был еще слабо развит, и разработчики игр не особо его приветствовали. Каждый выход нового движка id Software становился эпохой для разработчиков игр, потому что открытая архитектура движка активно способствовала его лицензированию, и на его основе стали массово выходить игры иных компаний. Все это способствовало просто фантастическому распространению API OpenGL на платформах с Windows (уже не только серии 95–98-Millenium, но и NT, 2000, XP). API Glide, как урезанная версия OpenGL, очень вовремя появился на свет, ведь именно тогда 3Dfx выпустила Voodoo Graphics.
Разумеется, API Glide был тут же предложен разработчикам игр, поскольку он был разработан именно для облегчения работы программистов (не надо проверять работу на многих устройствах, а также на нескольких API). Если объяснить понятнее, то универсальный API (Direct3D, OpenGL) прячет особенности того или иного оборудования за уровнем аппаратных абстракций, вследствие чего программист может писать нечто универсальное, обязанное работать на любом аппаратном устройстве, поддерживающем эти API. Однако при этом требовалось обрабатывать служебные инструкции, связанные с драйверами и иными библиотеками, которые задавали работу процессорам, что снижало производительность в целом. Glide же, лишенный этой ненужной прослойки, давал возможность поднять производительность. И действительно, в играх, которые поддерживали как Glide, так и Direct3D, всегда выигрывал первый. Хотя сравнения были условными.
3Dfx Voodoo Graphics (Voodoo 1) и… троллинг nVidia
Фотография взята с сайта vgamuseum.info Фотография взята с сайта vgamuseum.info
В компании 3Dfx логично посчитали, что их задача — только обслуживание 3D-графики, поэтому они выпустили ускоритель, у которого не было 2D-интерфейса, то есть к нему требовалась 2D-карта, выводящая картинку на монитор. А в случае 3D-режима драйвер автоматом переключал бы картинку на Voodoo Graphics. Поэтому монитор подключался именно к последней, а к 2D-карте шел сквозной кабель-переходник.
Следует отметить, что в те времена еще была весьма популярна глубина цвета в 16 бит (она называлась High Color), когда для представления красной и синей компонент использовали по 5 бит, а для зеленой — 6 бит (поскольку глаз человека более чувствителен именно к зеленой части спектра), поэтому суммарно 16-битная глубина давала 65 536 цветов (оттенков). Этого вполне хватало, чтобы глаз практически не замечал разрывов между оттенками. Но зато для отображения с такой глубиной цвета требовалось меньше ресурсов видеокарты, да и рендеринг в 16-битном цвете был куда экономичнее и быстрее. В 16-битный цвет 3Dfx добавляла 4 бита для альфа-канала (способа отображения прозрачности), и вместо реальных 16 бит маркетинг компании агрессивно вещал о 22-битном цвете.
Дело в том, что уже появился конкурент в лице nVidia Riva 128. Про него я детально расскажу в части, посвященной компании из Санта-Клары, а тут лишь упомяну, что к тому времени кроме 16-битной глубины цвета уже была доступна и 24-битная (называемая TrueColor). Ее также называют 32-битной (добавляя 8 бит для альфа-канала), но все же реально это 24 бита. Так вот, Riva 128 уже умел рендерить в «труколоре», а также за такт мог обрабатывать 2 пикселя, а не один, как Voodoo Graphics, поэтому скорость заполнения сцены у него была в 2 раза выше. Но погубило этот продукт программное обеспечение: кривые драйверы и совершенно никудышная поддержка OpenGL. Так что Voodoo с его Glide чувствовал себя очень неплохо. Почему у этой карты было два чипа? Один — для формирования кадрового буфера, а второй — для текстурирования. За такт обрабатывался один пиксель и получался один тексель. Это стало частью так называемого конвейера рендеринга, и графические процессоры стали «мериться» друг с другом не только тактовой частотой (и частотой работы памяти), но и числом конвейеров. Остальные микросхемы — это 4 мегабайта памяти типа EDO. И память, и графические ядра работали на частоте 50 МГц. Техпроцессы того времени позволяли GPU не очень сильно нагреваться при работе на таких частотах, поэтому понятие кулера для карт 3Dfx не существовало.
Сейчас уже трудно себе это представить и сравнить с современными решениями, за много лет развития 3D-технологий само понятие конвейера сильно изменилось, он стал намного сложнее. Но само за себя говорит лишь то, что если у Voodoo 1 был один текстурный блок, умеющий обрабатывать текстуры низкого разрешения 256×256 текселей, то теперь в одном GPU этих блоков может быть больше 200, умеющих работать уже с очень большими текстурами.
Следует отметить еще раз, что Voodoo Graphics — это чисто 3D-ускоритель, требующий основную 2D-карту. Помню случаи, когда игра, выпущенная под Direct3D, конфликтовала со связкой таких карт, находя у обеих 3D-растеризатор.
Объем памяти, да и производительность GPU позволяли выводить 3D-картинку на экран в разрешении не выше 640×480. Учитывая, что в те годы массовыми были ЭЛТ-мониторы с разрешением не выше 800×600, это было вполне нормально.
Оглушенный успехом Voodoo 1, маркетинг 3Dfx Interactive стал вести себя несколько агрессивно и подчас даже беспардонно, особенно после прихода Брайена Бурка на должность главы департамента маркетинга. Помню, что не было ни одного публичного мероприятия, в котором участвовала 3Dfx, где Бурк не поливал бы грязью конкурента в лице nVidia. Разумеется, были и иные соперники, например ATI Technologies c их Rage/Rage Pro, но они были настолько слабыми и невразумительными, что 3Dfx даже не считала их за конкурентов. А вот растущие амбиции nVidia были очевидными, плюс основатели 3Dfx прекрасно знали основателей nVidia, ибо все они когда-то работали в SGI. Многие из прессы отмечали троллинг 3Dfx в адрес nVidia и качали головами: не к добру. Собственно, оно потом и аукнулось…
Обязательно надо сказать, что в те времена компания 3Dfx выпускала только наборы чипов (да и то размещала заказы у тайваньских полупроводниковых гигантов типа TSMC и UMC), а потом их продавала партнерам. Поэтому Voodoo Graphics были представлены многочисленными копиями Diamond Multimedia, Canopus, InnoVision, Creative и т. д. Было много и «нонейм»-производителей, не указывавших свои названия, а выпускающих карты от имени 3Dfx.
Японская компания Canopus была, по сути, единственной, уже в те времена устанавливавшей маленький кулер на «пиксельный» процессор Voodoo Graphics. Также только ее карта имела не 4, а 6 мегабайт памяти.
3Dfx Voodoo Rush и Voodoo 2
Фотография взята с сайта vgamuseum.info Фотография взята с сайта vgamuseum.info
В следующем 1997 году компания решается на выпуск единой видеокарты с 3D- и 2D-частью, чтобы избавить потребителя от переходников и некоторой потери качества 2D-картинки (тогда вывод изображения на монитор был только аналоговым, поэтому на видеокартах стояли RAMDAC-процессоры для преобразования цифровой картинки в аналоговую, и именно от частоты RAMDAC и качества сопутствующих элементов логики зависела четкость получаемой картинки на мониторе).
Вроде бы логично: взять Voodoo Graphics, установить туда еще 2D-процессор какого-либо производителя, RAMDAC и прочее. Однако у Voodoo Rush оказалось слишком много проблем, и эти карты быстро исчезли с рынка, так и не появившись на нем массово.
Специалисты 3Dfx заключили сотрудничество с компаниями Alliance Semiconductor и Macronix. Были сведения о том, что готовилось соглашение с Trident Microsystems, но карт с их чипами так и не появилось. Как в случае с Voodoo 1, компания 3Dfx лишь поставляла чипы и референс-карты, поэтому все Voodoo Rush производились партнерами компании. По 3D-части характеристики новинки были точно такими же, как у Voodoo 1, однако реальная производительность была меньше из-за того, что процессоры 3Dfx и 2D-чипсета обращались к одной и той же памяти, конкурируя между собой (память не могла одновременно выполнять команды обоих процессоров). Кроме того, на шину PCI был выведен лишь 2D-чипсет, а 3D-часть общалась с шиной через определенные регистры 2D-чипа. Все это также приводило к появлению лишних служебных команд и повышению нагрузки на шину PCI.
Позже партнер Hercules Computer выпустил вторую модификацию Voodoo Rush, где были на 10% повышены частоты работы и увеличен до 8 МБ объем памяти: вторые 4 МБ были на вставной части, присоединяемой к основной печатной плате «бутербродом». Однако и это не спасло Voodoo Rush от низкого спроса, и карты пропали с рынка уже через год.
Фотография взята с сайта vgamuseum.info Фотография взята с сайта vgamuseum.info
Через год 3Dfx выпускает улучшенную версию Voodoo Graphics — Voodoo 2. По сути, та же архитектура, но добавлен второй блок текстурирования, и теперь за такт ускоритель может выдавать два текселя. Также повышены частоты работы — до 90/90 МГц. Это тоже чистая 3D-карта, подключавшаяся к 2D-плате через такой же переходник.
Но вот объем памяти существенно вырос. Только под буфер кадра отведено было 4 мегабайта, плюс 4 или 8 мегабайт под текстуры (поэтому Voodoo 2 выпускался в двух вариантах: с 8 МБ и с 12 МБ). Шина обмена с памятью — 192-битная. Ускоритель мог выводить картинку в разрешении 800×600. На рынке имелись конкуренты в лице nVidia Riva 128 и ATI Rage Pro, но они были очень слабыми соперниками, и успех Voodoo 2 был ошеломляющим!
Более того, вместе с Voodoo 2 компания 3Dfx представила технологию SLI (Scan-Line Interleave), которая позволяла объединить две карты Voodoo 2, одна из которых отрисовывала нечетные строки, а вторая — четные, тем самым увеличивая производительность почти в 2 раза в 800×600, а также впервые стало возможно использовать разрешение 1024×768. Карты соединялись специальным кабелем (монитор подключался лишь к одной из них). Однако Voodoo 2 SLI не получил широкого распространения. Во-первых, видеоподсистема получалась слишком громоздкой: в компьютер устанавливались одна 2D-карта и два 3D-ускорителя. Во-вторых, производительность такой системы упиралась в вычислительные возможности центральных процессоров, системную шину и относительно медленную основную память. Таким образом, чрезмерно быстрое текстурирование не было востребовано для систем того уровня.
Примерно в то же время появилась легендарная игра Unreal, явившая миру новый движок Epic Games. Она затмила даже Quake2 компании id Software, потому что в Unreal использовались потрясающего (на тот момент) качества текстуры, открытый мир, обалденно созданные модели монстров в сочетании с очень захватывающим геймплеем.
Даже не стоит говорить, что первая реализация игры была с поддержкой только API Glide, поэтому не работала на ускорителях других компаний. Впоследствии появились патчи, обновившие движок игры и внесшие поддержку Direct3D и OpenGL. Однако все равно скорость работы в Glide была непревзойденной. Также сумеречные оттенки пестрых текстур умело и ловко скрывали, что весь рендеринг шел в 16-битном цвете. Все это стало причиной повторного всплеска интереса к Voodoo 2. И даже чуть позже вышедший nVidia Riva TNT, лишенный ошибок Riva 128, с полностью переработанными драйверами и полноценным OpenGL, не смог сильно навредить успеху 3Dfx Voodoo 2.
Фанаты этой игры должны просто млеть от первых звуков заставки! Я до сих пор помню мои первые впечатления от Unreal, когда глубина трехмерной сцены меня просто поглотила, эти потрясающие огни, отрисовки стен, движения скааржей поражали воображение. Когда у меня появилась вторая Voodoo 2, то я снова прошел игру с самого начала и до конца, но уже в 1024×768.
Кстати, Voodoo 2 точно так же выпускался силами партнеров 3Dfx, особенно преуспела в этом компания Creative Labs, создавшая очень агрессивную конкуренцию прежнему фавориту Diamond Multimedia. Особо оригинальным решением отличилась компания Quantum 3D, выпустив Voodoo2 SLI на одной карте типа «бутерброда» — Obsidian X24 (суммарно 24 МБ памяти — немыслимо по тем временам!)
Фотография взята с сайта vgamuseum.info Фотография взята с сайта vgamuseum.info
Кроме двух Voodoo 2 на плате имеются мост PCI и два RAMDAC. Следует отметить, что Voodoo 2 в целом грелся сильнее, чем Voodoo 1, а в случае с Obsidian X24 нагрев был еще выше, особенно у «пиксель»-процессоров. Работа в «бутерброде» представляла проблему для комплекта процессоров карты, поэтому для гарантии стабильности работы я подвешивал внешний вентилятор, обдувающий двойную PCB.
Фотография взята с сайта tdfx.de Фотография взята с сайта tdfx.de
3Dfx Voodoo Banshee и эфемерный Rampage
Несмотря на успех Voodoo 2, руководство компании все же было раздражено усилением конкуренции со стороны nVidia, особенно в свете выхода Riva TNT, тогда как в арсенале 3Dfx были только чистые 3D-ускорители без 2D-части. Поэтому к концу 1998 года компания сумела создать свой собственный 2D-ускоритель, который совместила с Voodoo 2 (с одним текстурным блоком) в один чип, названный Voodoo Banshee.
Фотография взята с сайта vgamuseum.info Фотография взята с сайта vgamuseum.info
К тому моменту уже появилась SGRAM-память, пришедшая на смену более медленной EDO. Ускоритель опять же выпускался силами партнеров 3Dfx. Частота работы ядра и памяти составляла 100 МГц. Несмотря на наличие всего одного текстурника, за счет более высокой тактовой частоты Banshee был быстрее в играх с несложным текстурированием, однако Voodoo 2 брал верх в играх с мультитекстурированием. Впрочем, 3Dfx и не планировала создавать конкурента своему же Voodoo 2, он оставался в премиальном сегменте, а Voodoo Banshee имел более низкую цену.
Кстати, 2D-часть получилась очень даже неплохой по тем меркам, с RAMDAC 250 МГц, 128-битным процессором GUI, который прекрасно работал с DirectDraw и аппаратно поддерживал Windows GDI. Короче говоря, 2D-процессор оказался на уровне современных ему решений Matrox, ATI и nVidia.
Однако компании все же не удалось полноценно развести по сегментам Voodoo 2 и Banshee. Потребители более охотно покупали Voodoo 2 и уже вовсю посматривали в сторону nVidia Riva TNT, для продвижения которого маркетинг nVidia проводил весьма агрессивную кампанию, прославлявшую 32-битный цвет «труколор», которого не было у продуктов 3Dfx. Все это сказалось на Banshee, и он ушел с рынка раньше, чем Voodoo 2.
Параллельно с выпуском Voodoo 2/Banshee компания создала две рабочие группы для разработки амбициозного проекта Rampage, нацеленного на двухлетний цикл (то есть в 2000-м году должны были появиться реальные GPU). Смысл проекта был не только в кардинально новом подходе к ускорению 3D-графики (переносе расчета трансформаций и освещения с центрального процессора на GPU), но и в масштабируемости решений, то есть на базе Rampage можно было выпускать 2 или даже 3 поколения GPU.
Однако в процессе распределения проектов возник ряд ошибок в планировании, был неверно оценен рынок, что привело к излишним тратам. Появились первые тревожные «звоночки» в плане устойчивости компании. Однако пока еще все было неплохо, акционеры не волновались. Rampage — долгоиграющий проект, а на очереди стоял Voodoo 3. Но о нем, о других решениях и о падении 3Dfx я расскажу в следующей части.
Оставайтесь с нами!
Несколько наших старых материалов по теме:
RivaTNT vs Banshee
Видеокарты на чипсете Banshee
FAQ по процессорам 3dfx
Оптимизация работы 3dfx Voodoo
Полный текст статьи читайте на iXBT