История 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.
| Компонент | Назначение |
|---|---|
| DirectDraw | 2D-графика, доступ к видеобуферу |
| Direct3D | 3D-примитивы; позже ядро всего стека |
| 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–6 | 1997–1998 | Развитие Direct3D, несколько текстур на поверхности, сглаживание |
| DirectX 7 | 1999 | Аппаратная T&L — геометрия на GPU |
| GeForce 256 | 1999 | Первая массовая карта, которую назвали 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-е | Архитектура "глобального состояния" мешает многопоточности |
| 2018 | Apple объявила устаревание 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 | Кто развивает | Где видит игрок |
|---|---|---|
| DirectX | Microsoft | Windows, Xbox; пункты DX11/DX12 в меню |
| Vulkan | Khronos Group | Linux, Android, Switch; опция в настройках PC-игр |
| Metal | Apple | iPhone, 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.
Связанные темы — ПК как игровая платформа, графика, железо.
Хронология
| Год | Событие |
|---|---|
| 1992 | OpenGL — открытый стандарт 3D-графики |
| 1994 | WinG и урезанный WinDoom |
| 1995 | DirectX 1.0; Doom 95; Windows 95 |
| 1996–97 | Direct3D в DX2–3; критика Кармака; DirectPlay/DirectInput |
| — | DirectX 4 пропущен |
| 1999 | DX7, T&L, GeForce 256 |
| 2000 | DX8, программируемые шейдеры; Xbox |
| 2002–04 | DX9 / 9.0c, HLSL, HDR, инстансинг |
| 2006–07 | DX10, Vista, спор вокруг Crysis |
| 2009 | DX11, тесселяция, DirectCompute |
| 2015 | DX12, низкий overhead, stutter шейдеров |
| 2016 | Vulkan |
| 2018+ | DXR, DLSS, FSR |
| 2020 | DirectX 12 Ultimate |
См. также
- DirectX, OpenGL и Vulkan — простыми словами
- DirectX — графика и мультимедиа на Windows
- Графические API в разработке игр
- Компьютерная графика
- Linux-гейминг и Proton
- Steam
- Игровая индустрия — о разделе
- Компьютерные игры — о разделе