Тайны первых 3D-игр: как устроена была графика в проектах 90-х

Прокомментировать Просмотры: 6

Вы когда-нибудь задавались вопросом, как создатели 3D-игр 90-х умудрялись добиваться эффектной картинки на крайне скромном железе? Достаточно вспомнить NFS High Stakes, Quake 3, Unreal или Jurassic Park: Trespasser: при всей простоте тогдашних технологий они выглядят потрясающе. Там были и зеркала, и отражения на металле, и продвинутое статическое освещение с рейтрейсингом, и даже чёткие тени…

…но далеко не все знают, что на видеокартах уровня 3dfx Voodoo 2 всё это достигалось благодаря хитроумным приёмам, хакам и особенностям тогдашних ускорителей. В этой статье мы из первых рук разберём такие техники на практике: писать 3D-демки и игры для ретро-железа — одно из моих хобби.

О железе

Начать, конечно, стоит с аппаратной базы, на которой в те годы запускались 3D-игры. Типичный компьютер середины девяностых выглядел примерно так:

  • Процессор — Intel 386/486 с тактовой частотой 16–50 МГц и аналоги от AMD/Cyrix в более бюджетных конфигурациях; Pentium 66 и 133 встречались в машинах побогаче.

  • Оперативная память — 4–8 мегабайт в недорогих сборках и 16–32 в более дорогих.

  • Видеокарта — обычный VGA-адаптер без 2D-ускорения либо 2D-ускоритель вроде S3 Trio с аппаратным блиттингом. Ускорять 3D такие карты не умели.

  • HDD — от ~100 до 500 МБ в бюджетных системах и порядка 1 ГБ в некоторых дорогих.

О 3D-ускорении на домашних ПК тогда оставалось лишь мечтать, но многие разработчики всё равно выпускали полноценные 3D-игры и демки, пусть и не слишком сложные графически: просто мир в них рисовал процессор. Этот подход получил название Software rendering, а возможным его сделало появление FPU в x86-процессорах — роскоши, о которой большинству чипов на ARM/MIPS приходилось

У программного рендеринга были и достоинства, и недостатки. Главное достоинство в том, что, в отличие от ранних видеокарт, здесь не было фиксированного конвейера: разработчик реализовывал отрисовку так, как считал нужным, и мог по сути встроить «шейдеры» прямо в функцию растеризации треугольника. Второй важный плюс — «бесплатный» прямой доступ к буферу кадра, благодаря которому легко делались разнообразные постэффекты вроде LUT, размытия или капель дождя на стекле.

Пример реализации дождя в Дальнобойщиках. Хотя именно в Д1 могли реализовать не пост-эффектом, а полупрозрачной текстурой-маской, которая формируется процессором, или вообще через стенсильный буфер.
Пример реализации дождя в «Дальнобойщиках». Хотя именно в первой части его могли сделать не постэффектом, а полупрозрачной текстурой-маской, формируемой процессором, или вообще через стенсильный буфер.

Были, однако, и минусы, причём главный из них — колоссальная нагрузка на процессор, растущая вместе с разрешением игры. В 320×200 Pentium 66 ещё как-то справлялся с несложной сценой без значительного овердроу (как в Quake 1), но на 640×480 и 800×600 частота кадров падала до однозначных значений. Второй недостаток вытекает из первого: во многих играх не было ни фильтрации, ни перспективной коррекции текстур, из-за чего полы и стены под определённым углом начинали искажаться.

Что такое Overdraw?

Overdraw — доля отрисовки поверхностей, которые перекрывают фрагмент, уже нарисованный ранее.

Простой пример: мы сидим в доме и смотрим на стену. Если игра сначала нарисует ландшафт за домом, затем забор, затем качели за забором и лишь после этого стену прямо перед нами — это и есть Overdraw. Некоторые игры умудряются рисовать за кадр практически весь уровень, и это сильно бьёт по филлрейту.

В Quake-подобных играх такой проблемы не было: там работал хитрый PVS-куллинг, отсекавший даже те стены, что находятся прямо за стеной, на которую мы смотрим.

Гигагерцовый Vortex86 уже не вывозил Quake 1 в 1280x1024 даже под DOS!
Гигагерцовый Vortex86 уже не тянул Quake 1 в 1280×1024 даже под DOS!

Первой 3D-видеокартой для ПК стала STG2000 (она же Diamond Edge 3D), вышедшая в 1995 году на чипе NV1 — первом видеочипе Nvidia. По сути, NV1 был мультимедийным комбайном: один чип объединял 3D-ускоритель, 2D-ускоритель, аудио- и MIDI-контроллер и даже контроллер геймпадов Sega Saturn. Всё было бы замечательно, но чип от Nvidia работал не с привычными треугольниками, а с квадами и хитрой схемой представления текстурных координат. Портировать на него игры, написанные для «треугольных» софтрендеров, было слишком сложно: приходилось переделывать всю геометрию (а значит, и переучивать 3D-моделеров). Большинство разработчиков не стали возиться, NV1 провалился и едва не разорил молодую Nvidia.

Фото с сайта Vintage3D
Фото с сайта Vintage3D

Уже через год, в 1996-м, вышла первая 3dfx Voodoo, перевернувшая мир 3D-игр на ПК. Это был первый по-настоящему полноценный 3D-ускоритель: он реально разгружал процессор и позволял рендерить игры в заметно более высоком разрешении с приличным FPS — теперь можно было замахнуться не только на 640×480, но и на 800×600 в 16-битном цвете! Важный нюанс: Voodoo был именно ускорителем. Технически он умел лишь растеризовать треугольники, интерполировать цвета, накладывать на них текстуры и добавлять туман; вершинного конвейера, клиппинга и освещения у него не было — всё это ложилось на

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов