Перейти к основному содержимому

История DirectX — от DOS до нейросетей

Всем

DirectX — набор библиотек Microsoft для графики, звука, ввода и сетевой игры на Windows и Xbox. С 1995 года эта технология шла рука об руку с тем, как ПК стал игровой платформой, как менялись видеокарты и как в игре вообще появляется картинка на экране.

Краткий словарь для чтения — в DirectX, OpenGL и Vulkan — простыми словами. Практика программирования на C++ — DirectX — графика и мультимедиа на Windows.


Словарь терминов

ТерминЧто это
APIНабор готовых команд, через которые программа обращается к железу. Игра не пишет драйвер сама — она вызывает API.
GPUГрафический процессор на видеокарте. Считает треугольники, текстуры, освещение.
ДрайверПрограмма от NVIDIA, AMD или Intel, которая переводит команды API в работу конкретной карты.
ШейдерНебольшая программа на GPU. Описывает, как выглядят поверхность, вода, тени.
FPSКадров в секунду. Чем выше, тем плавнее движение на экране.
ПолигонПлоский треугольник. Из тысяч полигонов собирают 3D-модели.
ТекстураКартинка, натянутая на полигоны (кирпич, кожа, металл).
РастеризацияКлассический способ рисования 3D — разложение сцены на пиксели без симуляции лучей света.

Цепочка, общая для DirectX, OpenGL и Vulkan:

Подробнее о стеке — Графические данные и компьютерная графика.


PC-гейминг в начале 1990-х

В середине 1990-х консоли Sega и Nintendo забирали большую долю рынка. ПК чаще ассоциировали с офисом и пошаговыми стратегиями. Причина — в устройстве систем.

MS-DOS давала играм прямой доступ к железу.

  • Видеобуферу — куда писать картинку.
  • Звуковой и сетевой карте.
  • Клавиатуре и мыши без лишних слоёв.

Платой служила ручная настройка.

  • прерывания IRQ;
  • каналы DMA;
  • правки файлов autoexec.bat и config.sys.

Зато игра могла выжать из машины максимум производительности.

Windows 3.x и ранний Windows 95 работали в защищённом режиме поверх DOS. Прямой доступ к железу ограничивали. Часть ресурсов уходила на саму ОС. Разработчики и игроки считали Windows слишком медленной для динамичных игр.

Microsoft понимала, что без игр Windows не станет домашней платформой. Нужен был способ рисовать быстро внутри ОС без возврата к ручной настройке DOS.


WinG в 1994 году

В 1994 году Microsoft выпустила WinG — библиотеку для ускоренного вывода двумерной графики в окне Windows. Задача — показать, что в ОС можно играть без полного отказа от Windows.

Для демонстрации Microsoft бесплатно портировала Doom (WinDoom). Демоверсия умела только выводить изображение. Не работали:

  • звук;
  • сеть;
  • джойстики.

Индустрия не поверила в WinG. Проект закрыли с многомиллионными убытками.

Вывод для Microsoft: урезанного порта мало. Игре на Windows нужен полный набор.

  • графика;
  • звук;
  • ввод;
  • сеть;
  • реальные хиты с полным функционалом.

Рождение DirectX в 1995 году

Параллельно с официальными проектами трое инженеров Microsoft — Крейг Эйслер, Алекс Сент-Джон и Эрик Энгстром — вели разработку под кодовым именем "Манхэттенский проект". Сначала продукт назывался Windows Games SDK. В сентябре 1995 он вышел как DirectX 1.0.

Идея шире, чем у WinG. DirectX — целый набор API для игры на Windows.

КомпонентНазначение
DirectDraw2D-графика, доступ к видеобуферу
Direct3D3D-примитивы; позже ядро всего стека
DirectSoundЗвук
DirectInputКлавиатура, мышь, геймпады
DirectPlayСетевая игра

Индустрия сначала проигнорировала DirectX. Причины:

  • лишняя прослойка между игрой и железом;
  • сырые драйверы;
  • FPS ниже, чем в DOS.

Убедить индустрию помогли готовые игры — в первую очередь Doom 95.


Doom 95 и Windows 95

Осенью 1995 года Microsoft снова обратилась в id Software — за полноценным портом Doom со звуком и сетью через DirectX. Продюсером порта стал Гейб Ньюэлл (позже основатель Valve и Steam), тогда сотрудник Microsoft.

Doom 95 показал стабильную картинку и удобный мультиплеер без ручной настройки сети. Джон Кармак, технический автор Doom, отнёсся скептически, но порт убедил часть индустрии. Вместе с масштабным релизом Windows 95 это закрепило образ ОС как платформы для игр. DirectX перестали воспринимать как эксперимент.


DirectX 2 и 3, ранний OpenGL

В 1996 Microsoft купила Render Morphics и встроила их движок в DirectX 2.0 как Direct3D.

Джон Кармак публично раскритиковал ранний Direct3D. Для одного треугольника требовались громоздкие execute buffers — специальные буферы команд. В OpenGL хватало нескольких строк кода. Кармак оставался на OpenGL в id Software ещё много лет.

DirectX 3.0 (1997) закрыл дыры предыдущих версий и принёс для геймеров:

  • DirectPlay — сеть без ручной настройки IP-адресов и портов;
  • DirectInput — единая поддержка геймпадов и рулей.

Пропуск DirectX 4

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


Эпоха 3D — Glide, 3dfx, DirectX 5–7

В конце 1990-х сильную позицию занимала 3dfx с API Glide. Он был быстрым, но закрытым и работал только на картах Voodoo. Многие игры лучше всего шли именно на Glide.

Microsoft продвигала DirectX как единый стандарт для всех производителей. NVIDIA и ATI (позже AMD) встроили Direct3D в драйверы. 3dfx отказалась от компромисса. К 2000 году компания обанкротилась. NVIDIA заняла лидирующие позиции на рынке.

ВерсияГодЧто изменилось
DirectX 5–61997–1998Развитие Direct3D, несколько текстур на поверхности, сглаживание
DirectX 71999Аппаратная T&L — геометрия на GPU
GeForce 2561999Первая массовая карта, которую назвали GPU

T&L (transform and lighting) переносит на видеокарту расчёт положения вершин и освещения. Раньше этим занимался процессор. Без T&L современные 3D-миры на домашнем ПК были бы слишком тяжёлыми.


DirectX 8 и 9, эра шейдеров

DirectX 8 (2000)

Программируемые шейдеры — главный сдвиг десятилетия. Раньше эффекты были зашиты в железо. Теперь разработчик пишет маленькие программы для GPU:

  • вершинный шейдер — форма и положение модели;
  • пиксельный шейдер — цвет и материал каждого пикселя.

Первый Xbox (2001) — по сути ПК с DirectX 8 в корпусе. Отсюда имя DirectX Box, сокращённое до Xbox. Подробнее — Xbox Series X и Series S.

DirectX 9 (2002)

DirectX 9 долго оставался эталоном PC-гейминга.

  • Shader Model 2.0 и язык HLSL — шейдеры на понятном языке вместо ассемблера GPU.
  • Игры вроде Half-Life 2 (вода, освещение) и Far Cry (большие открытые локации).
  • DirectX 9.0c (2004) добавил Shader Model 3.0, HDR (расширенный динамический диапазон яркости), инстансинг — отрисовку тысяч одинаковых объектов одной командой. Без инстансинга трудно было бы сделать толпы в Left 4 Dead или леса в Oblivion.

Многие киберспортивные тайтлы (CS:GO, Dota 2) годами оставались на DirectX 9. API был стабилен, железо разнообразно, драйверы отлажены.


DirectX 10, Vista и Crysis

DirectX 10 (2006) вышел вместе с Windows Vista. API переписали под унифицированную шейдерную архитектуру — один тип шейдерного блока на все задачи. Добавили геометрические шейдеры, которые генерируют новую геометрию на GPU.

Технически шаг вперёд. На практике Microsoft жёстко привязала DX10 к Vista. Реклама сводилась к схеме "новая графика — новая ОС и новая видеокарта". Vista на старте критиковали за производительность и совместимость.

Crysis (2007) стала витриной DX10. Реклама обещала ультра-настройки только на Vista и DirectX 10. Через несколько недель энтузиасты нашли в конфиге игры заблокированные эффекты. Их включали на Windows XP с DirectX 9 — скриншоты совпадали. Метка "только DX10" иногда означала маркетинг, а не реальное ограничение железа.


DirectX 11 и спор вокруг Crysis 2

DirectX 11 (2009, Windows 7) работал и на относительно старом железе. Ключевые новинки:

  • Тесселяция — разбиение грубых полигонов на мелкие. Нужна для рельефа камней и неровных поверхностей.
  • DirectCompute — вычисления на GPU. Физика волос, воды, постобработка.
  • Многопоточная запись команд — лучше загрузка многоядерных CPU.

Патч Crysis 2 с ультра-настройками для DX11 вызвал расследования в прессе. На плоских стенах включали экстремальную тесселяцию. Под картой Нью-Йорка лежал скрытый объём воды с максимальной детализацией — игрок его не видел, GPU считал каждый кадр.

Карты NVIDIA Fermi справлялись с избыточной геометрией лучше AMD. Crytek тесно сотрудничала с NVIDIA. AMD позже добавила в драйверы ограничение тесселяции — FPS вырос без потери видимого качества.

Так API-фичи и бенчмарки иногда используют для сравнения вендоров, а не только для картинки.


DirectX 12 и новые обязанности разработчика

DirectX 12 (2015, Windows 10) даёт разработчикам прямой доступ к GPU. Драйвер делает меньше работы "за кулисами". Все ядра CPU могут отправлять команды видеокарте. В удачных сценариях CPU bottleneck (узкое место на процессоре) снижается на 50–60 %.

Обратная сторона:

  • писать эффективный код под DX12 могут немногие студии;
  • издатели требовали галочку "DX12" на старых движках без полноценной переработки;
  • компиляция шейдеров — в DX11 драйвер собирал шейдеры в фоне; в DX12 это задача игры. При первом появлении объекта возможны фризы (stutter), если кэш шейдеров не прогрет.

На Linux те же игры часто идут через VKD3D-Proton — перевод DX12 в Vulkan. См. Linux-гейминг и Proton.


OpenGL и Vulkan, параллельная линия

DirectX — один из путей от игры к видеокарте. С 1990-х параллельно развивались открытые кроссплатформенные API.

OpenGL

OpenGL (Open Graphics Library) появился в 1992 на базе IRIS GL компании Silicon Graphics. Стандарт открытый — одни и те же команды на разных ОС и у разных производителей GPU.

В середине 1990-х id Software рендерила Quake и следующие шутеры через OpenGL. Кармак тогда предпочитал его раннему Direct3D.

ПериодРоль OpenGL
1996–2005Игры id, Valve, Blizzard; порты на Linux и Mac
2000-еOpenGL ES — облегчённая версия для мобильных
2010-еАрхитектура "глобального состояния" мешает многопоточности
2018Apple объявила устаревание OpenGL на macOS в пользу Metal
2019+Khronos Group перевела классический OpenGL в режим поддержки

OpenGL проще войти новичку. Драйвер скрывает детали, разработчик описывает, что нарисовать. Минус — непредсказуемая производительность и слабая работа с несколькими ядрами CPU.

От Mantle к Vulkan

В 2013 AMD представила Mantle — низкоуровневый API с минимальными накладными расходами драйвера, близкий по идее к будущему DirectX 12. Mantle не стал массовым стандартом, но показал запрос на кроссплатформенный низкоуровневый API.

В 2016 консорциум Khronos Group выпустил Vulkan. Открытый преемник OpenGL по духу, близкий к DX12 по уровню контроля.

  • Явное управление памятью и синхронизацией.
  • Многопоточная запись команд с CPU.
  • Предсказуемая производительность.
  • Один API на Windows, Linux, Android, Nintendo Switch.

Шейдеры в Vulkan компилируют в SPIR-V или пишут на GLSL / HLSL. На Windows игра на Vulkan обходит Direct3D, но всё равно идёт через драйвер NVIDIA, AMD или Intel.

Какие API где встречаются

APIКто развиваетГде видит игрок
DirectXMicrosoftWindows, Xbox; пункты DX11/DX12 в меню
VulkanKhronos GroupLinux, Android, Switch; опция в настройках PC-игр
MetalAppleiPhone, iPad, Mac — единственный путь к GPU
OpenGLНаследиеСтарые игры, инди, эмуляторы

На Windows большинство AAA по-прежнему на DirectX. Vulkan берут, когда нужен один рендер на PC и Linux (DOOM Eternal, движки с Vulkan-бэкендом).

На Linux DirectX напрямую недоступен. Proton переводит вызовы DirectX в Vulkan через DXVK (DX9–11) и VKD3D-Proton (DX12).

Практика для C++ — OpenGL, Vulkan, DirectX. Сравнение для разработчиков — Графические API в разработке игр.


Лучи, нейросети и DirectX 12 Ultimate

DirectX Raytracing (DXR), 2018

В DirectX 12 добавили DXR — аппаратную трассировку лучей. GPU симулирует путь света.

  • отражения;
  • мягкие тени;
  • глобальное освещение.

Раньше такие кадры считали часами на рендер-фермах. В Cyberpunk 2077 и других AAA — в реальном времени, с оговорками по FPS.

Трассировка сильно снижает кадровую частоту. На помощь пришли апскейлеры:

  • DLSS (NVIDIA) — нейросеть достраивает картинку;
  • FSR (AMD) — алгоритмический и нейросетевой апскейл;
  • XeSS (Intel) — аналог для карт Intel.

Игра рендерит кадр в меньшем разрешении, апскейлер увеличивает его до разрешения монитора.

DirectX 12 Ultimate (2020)

Единый бренд для набора технологий.

ТехнологияСмысл
Variable Rate ShadingМеньше детализации в периферии кадра — экономия GPU
Mesh ShadersНовая модель геометрии; используется в Unreal Engine 5
DirectStorageЗагрузка с NVMe-диска в GPU в обход CPU — быстрее экраны загрузки
DXR 1.1Улучшенная трассировка лучей

Xbox Series X|S и современные PC-игры опираются на этот стек.


DirectX сегодня

DirectX остаётся главным API для игр на Windows и Xbox. На других платформах ту же роль играют Vulkan и Metal. Классический OpenGL — наследие; подробнее в разделе OpenGL и Vulkan.

DirectX 13 на момент написания не анонсирован. Следующий скачок связывают с нейросетевым рендерингом — frame generation, реконструкция освещения. Значительная доля пикселей на экране уже рождается нейросетью, а классическая растеризация дополняет картинку. Игры смешивают обычный рендер, трассировку и DLSS/FSR.

Связанные темы — ПК как игровая платформа, графика, железо.


Хронология

ГодСобытие
1992OpenGL — открытый стандарт 3D-графики
1994WinG и урезанный WinDoom
1995DirectX 1.0; Doom 95; Windows 95
1996–97Direct3D в DX2–3; критика Кармака; DirectPlay/DirectInput
DirectX 4 пропущен
1999DX7, T&L, GeForce 256
2000DX8, программируемые шейдеры; Xbox
2002–04DX9 / 9.0c, HLSL, HDR, инстансинг
2006–07DX10, Vista, спор вокруг Crysis
2009DX11, тесселяция, DirectCompute
2015DX12, низкий overhead, stutter шейдеров
2016Vulkan
2018+DXR, DLSS, FSR
2020DirectX 12 Ultimate

См. также