Что такое DirectX?
Немного о DirectX
Пока в природе не существовало DirectX, большинство игровых программ для персональных компьютеров работали под управлением Ms Dos.
Чтобы запустить такие игры, пользователям приходилось бороться, в прямом смысле этого слова, с конфигурационными файлами системы, такими, как AUTOEXEC.BAT, CONFIG.SYS, и с настройками драйверов типа EMM386.EXE и т.д. лишь ради того, чтобы получить несколько дополнительных свободных байт из доступных 640Кб базовой памяти, даже если на компьютере установлено 16Мб оперативной памяти.
Жизнь разработчиков программного обеспечения была не сахар, потому что для преодоления ограничения в 640Кб приходилось использовать различные драйверы для каждой разновидности видеоадаптеров и звуковых карт.
С выходом в свет технологии компании Microsoft DirectX для Windows 95 все указанные выше проблемы становятся историей.
Теперь разработчики могут использовать аппаратно независимый интерфейс программирования, с помощью которого создаются новые игры, для участия в которых пользователю достаточно лишь вставить в устройство чтения компакт-диск с данными и наслаждаться игрой. Теперь писать игры и играть в них стало гораздо приятнее.
Но разработка игр с использованием DirectX остается все еще непростой задачей. Иногда все еще достаточно трудно найти грамотную документацию, и начинающие разработчики тратят много времени на поиск знаний о том, как использовать такие новшества, как DirectDraw, Z-буферы или DirectSound, а также многие другие сложные, но полезные инструменты.
Цель этой статьи — помочь разработчикам, использующим DirectX, несколькими советами, основанными на моем собственном опыте написания программ. Обычные пользователи смогут получить из этого обзора общее представление о том, что такое DirectX.
DirectX представляет собой набор из нескольких API (application programming interface — интерфейс программирования приложений), позволяющих разработчикам игр и других интерактивных приложений получать доступ к специфическим функциям аппаратного обеспечения без необходимости написания аппаратнозависимого программного кода. DirectX основан на наборе интерфейсов COM или классов. COM расшифровывается, как Component Object Model (Компонентная Модель Объектов), и представляет собой спецификацию интерфейса, в котором функции вызываются через указатели. Таким образом, объекты COM могут описываться такими языками программирования, как C/C++, Delphi или даже Basic. Все примеры, ссылка на которые была выше, написаны на C++, т.к. я пользуюсь именно этим языком. Интерфейс COM используется не только в DirectX, но и на уровне операционной системы в качестве модели объектов и является сердцем одной из самой широко применяемой технологии — OLE (Objects Linking and Embedding — связывание и встраивание объектов).
DirectX 5.0 SDK (Software Development Kit — Набор разработчика программ), доступен для загрузки с сайта Microsoft.
Справочник по DirectX для начинающих
Если Вы не являетесь разработчиком игровых программ, но Вам нравиться играть на персональном компьютере, Вы точно должны были слышать о DirectX. Почему?
Потому что DirectX широко используется в современном поколении компьютерных игр. Каждая игрушка, имеющая логотип «for Windows 95«, прежде, чем запуститься на Вашем компьютере, требует наличия установленного в системе DirectX. Вот почему DirectX это не просто «нечто для программистов», это принципиально необходимое нечто для игроков.
В тоже время если какая-то из таких современных игр установленна на Вашем компьютере, значит, DirectX тоже установлен, и Вы можете узнать об этом, обратив внимание на несколько новых файлов, которые появились в директории WindowsSystem, например DDRAW.DLL или DPLAY.DLL. Это компоненты DirectX, которые используются всеми играми, установленными в Вашей системе и работающими через интерфейс DirectX.
DirectX используется для обработки событий, которые должны совершаться в каждой игре, таких, как вывод изображения на экран или считывание входных данных с клавиатуры, мыши или джойстика.
Такие карты имеются в продаже, но многие игры не используют аппаратные возможности специализированных плат, потому что создатели игры должны написать соответствующий драйвер, а иногда бывает проблематично переписать заново целые фрагменты кода для того, чтобы использовать преимущества аппаратной обработки 3D. Компонент Direct3D, впервые включенный во вторую версию DirectX, обеспечивает стандарт на использование видеоадаптеров, обеспечивающих аппаратную 3D-акселлерацию, и его применение, несомненно, заставит трехмерные игрушки работать быстрее.
DirectX поддерживает VGA и SVGA видеорежимы при 64К цветов (Hi-color) без дополнительных затрат ресурсов. С каждым днем производительность видеоадаптеров возрастает, следовательно, DirectX игры будут выглядеть все более реалистично и привлекательно.
Комплект разработки программного обеспечения DirectX (SDK) состоит из библиотек времени выполнения в распространяемой двоичной форме, а также сопроводительной документации и заголовков для использования при кодировании. Первоначально среды выполнения устанавливались только играми или явно пользователем. Windows 95 не запускалась с DirectX, но DirectX был включен в Windows 95 OEM Service Release 2. Windows 98 и Windows NT 4.0 поставлялись с DirectX, как и все версии Windows, выпущенные с тех пор. SDK доступен для бесплатной загрузки. Хотя среды выполнения являются проприетарным программным обеспечением с закрытым исходным кодом, исходный код предоставляется для большинства образцов SDK. Начиная с выпуска Windows 8 Developer Preview, DirectX SDK был интегрирован в Windows SDK.
СОДЕРЖАНИЕ
История развития
Чтобы получить больше разработчиков на борту DirectX, Microsoft подошел ID Software «s Джон Кармак и предложил порт Гибели и Doom 2 из MS-DOS в DirectX, бесплатно, с идентификатором сохраняя все издательские права на игру. Кармак согласился, и Гейб Ньюэлл из Microsoft возглавил проект по переносу. Первая игра была выпущена как Doom 95 в августе 1996 года, первая опубликованная игра DirectX. Microsoft активно продвигала игру, и Билл Гейтс появлялся в рекламе этой игры.
В 2002 году Microsoft выпустила DirectX 9 с поддержкой использования гораздо более длинных шейдерных программ, чем раньше, с пиксельными и вершинными шейдерами версии 2.0. С тех пор Microsoft продолжала обновлять пакет DirectX, представив Shader Model 3.0 в DirectX 9.0c, выпущенном в августе 2004 года.
Трассировка лучей в реальном времени была объявлена как DXR в 2018 году.
Логотипы
DirectX – что это такое, как оно работает, где скачать
Стал часто сталкивался со всевозможными заблуждениями на тему DirectX. Например, пользователи пытаются ставить DirectX каких-то неправдоподобных версий, скачивают непонятно что с каких-то “левых” сайтов и т.п., получая в итоге всевозможные ошибки в работе Windows и игр.
Со всем этим я и разберусь в этой заметке, постаравшись расставить все точки над i в деле об игровой технологии DirectX.
Что такое DirectX
Чтобы разобраться, где правда, а где вымысел, для начала узнаем, что же это такое – ДиректИкс? Википедия говорит нам:
DirectX (от англ. direct — прямой, непосредственный) — это набор API, разработанных для решения задач, связанных с программированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр. … Зачастую обновленные версии DirectX поставляются вместе с игровыми приложениями.
Более простыми словами: DirectX – это “прослойка” между видеокартой и играми, позволяющая полностью реализовать всю вычислительную мощь компьютера для отрисовки красивой графики.
Помню, как в 2003 году я радовался правдоподобным отражениям в стеклах машин и лужах на дороге в игре Need for Speed: Underground, когда установил в компьютер видеокарту с поддержкой DirectX 9. Конечно, одними отражениями дело не ограничивается, но обо всем по порядку.
Чем отличаются версии DirectX
Технологии прогрессируют довольно быстро. Каждая новая версия DirectX позволяет программистам добавить какой-нибудь новый эффект в игру, а старые – оптимизировать.
Думаю, наиболее наглядно разницу между возможностями DirectX разных версий покажет это видео:
Обратите внимание на красивые эффекты летящего снега из-под колес машины и мягкие тени в DirectX 11 версии (слева). Справа – гораздо более старая девятая. В принципе, такие эффекты, как мягкие тени и снег из-под колес можно реализовать, ограничившись технологией DirectX 9, но падение производительности будет ощутимым – в “девятке” нет ни оптимизации, ни грамотной реализации подобных эффектов.
Второй пример – игра Crysis 2:
Считается, что чем выше версия DirectX – тем лучше картинка. Но не стоит ожидать чуда – зачастую изменения не бросаются в глаза. На мой взгляд, главная причина столь малой разницы качества изображения в том, что сейчас игры разрабатываются одновременно для игровых консолей Xbox, Sony PlayStation и ПК. Приставки по сравнению с современными “персоналками” слабы в плане производительности и поддерживаемых технологий. В итоге мы играем на компьютере в игры, графика которых осталась на уровне года выхода консолей, любуясь на размытые текстуры и упрощенные эффекты. Да, есть игры, разработанные или доработанные для ПК, но таких единицы.
Типичный пример межплатформенности – игра Skyrim:
Разница в графике между Playstation 3 и Xbox360 заключается в деталях: на PS3 где-то воды капает мало, на Xbox 360 тени не реагируют на мерцающие источники света. На ПК (в видео обозначен как “Windows”) таких проблем нет, плюс видны объекты на дальних расстояниях, но больше никаких улучшений нет. Позже разработчики выпустили набор текстур высокой четкости для ПК-версии игры, но кардинально графику это не улучшило.
Чтобы вы увидели, какую графику способен выдавать компьютер – пример игры, заточенной под использование всех возможностей видеокарты и процессора:
Видите разницу? Красивое освещение, четкие текстуры, плавные движения. Такой уровень детализации был бы недостижим с помощью устаревших технологий DirectX 9 – слишком много объектов находятся в кадре одновременно. Также присутствует много эффектов, которые реализуются силами видеокарт с поддержкой DirectX 10 как минимум.
Возможности графического движка игры Crysis 3:
Вопреки мнению некоторых пользователей, DirectX не улучшает графику в играх, а только дает возможность программисту сделать игру красивее. Если игра разрабатывалась для DirectX 9, то наличие DirectX 10-й версии ничего не изменит. Все зависит не только от возможностей видеокарты, но и от поддержки технологий игрой. Если все совместить – получится просто чудесная игра в плане графики.
Разные Windows и версии DirectX
DirectX по сути представляет собой набор файлов – программных библиотек. Если их не будет в системных папках, то игры в лучшем случае будут отображаться без эффектов, в худшем – не запустятся, выдавая ошибку (при запуске игры появляется ошибка “не найден d3dx9_42.dll”, где цифры могут быть разными).
Минимальный набор этих файлов уже присутствует в только что установленной Windows. В зависимости от версии операционной системы, будет разный комплект файлов, а значит – поддержка разных версий DirectX (информация отсюда):
Предыдущие версии включены. Т.е. Windows 10 имеет поддержку 12-й версии, DirectX 11.2, 11.1, 11, 10.1, 10, 9 и ниже.
О том, как установить полный набор файлов DirectX, будет ниже по тексту.
Поддержка видеокартой DirectX разных версий
Чем новее видеокарта, тем более высокую версию DirectX она поддерживает. Все предыдущие версии также будут поддерживаться. То есть старые игры, использующие ДиректХ 7/8/9 теоретически должны работать нормально. На практике ограничением становится поддержка операционной системы. Игры, разработанные для Windows 95/98/ME зачастую вылетают на более новых ОС, видеокарта тут совершенно не при чём.
При этом нужно понимать, что от Windows тоже зависит, какой DX будет работать. Игры, которым требуется 12-й Директ, не запустятся в Win7/8 и тем более XP. Сама видеокарта работать в древних системах будет, просто современные API функции будут недоступны. Таким образом, с видеокартой, поддерживающей DirectX 12, в Windows XP вы не поиграете в современные игры – запустятся только работающие через девятый DirectX и ниже.
Как узнать, какую версию DirectX поддерживает моя видеокарта и Windows?
Видеокарта
Подсмотреть информацию о том, какую версию DirectX поддерживает ваша видеокарта, можно на официальной страничке сайта производителя и в любом онлайн-магазине. Например, в Яндекс.Маркете. Однако, в целом, все видеокарты, вышедшие после 2015 года, поддерживают 12-ю версию. Хотя именно с DX12 есть нюансы, об этом ниже.
Windows
Узнать, какую версию поддерживает Windows, сложнее, потому что многое зависит от установленных обновлений. Если у вас Windows 10, то там точно самая свежая версия API. Для всех остальных ОС алгоритм таков:
1. Убедитесь, что у вас установлены все обновления Windows (Пуск – Все программы – Центр обновления Windows – Поиск обновлений – Установить).
2. Необязательный пункт: обновите драйвер видеокарты до самой новой версии:
Официальная страница драйверов для видеокарт Intel (выберите в списке “Графические адаптеры”, затем нужную модель)
3. Нажмите Пуск – Выполнить (если нет такого пункта, можно нажать сочетание клавиш Win+R, где Win – кнопка с логотипом) – Введите “dxdiag” без кавычек – затем кнопка ОК.
Появится окно “Средство Диагностики DirectX“. На вкладке “Система” можно увидеть установленную на компьютере версию DirectX:
Эту версию сменить нельзя, за исключением обновления системы – например, при обновлении Windows Vista SP1 на SP2 поддерживаемая версия изменится с 10.1 на 11.
В интернете полно всяких наборов “DirectX 10 для Windows XP” и аналогичных. Запомните – это обман. В Windows XP невозможно включить поддержку современных версий DirectX.
Как заставить игру X использовать DirectX версии Y?
Только если в настройках игры версию можно переключить. Например, смену поддерживает GTA V. В ней доступно аж три варианта рендера DirectX: 10, 10.1 и 11.
Другим способом переключить версию, если игрой это не предусмотрено, никак нельзя. Сами подумайте – разработчики писали код игры, используя команды под определённую версию. Просто так взять и заменить команды на другие невозможно.
Таким образом вопрос “на каком DirectX лучше играть” бессмысленный – что поддерживает железо, ОС и использует игра, то и будет.
Нужно ли устанавливать DirectX с сайта Microsoft? Что это дает?
Кратко: можно, только версию DirectX это не изменит!
Если хотите, чтобы игры запускались нормально – обязательно установите все обновления из Центра обновления Windows, потому что именно оттуда Windows берет свежие версии библиотек. Подтверждение от Microsoft.
На сайте компании Майкрософт, которая разработала DirectX, можно скачать инсталлятор DirectX. На самом деле это не установщик DirectX, а только программа-инсталлятор, которая загрузит из интернета и установит новые версии программных библиотек DirectX. Несмотря на цифры 9, 10, 10.1 и т.п., DirectX имеет и внутреннюю нумерацию, которая имеет отношение к обновлениям. То есть внутри версий возможны исправления и улучшения.
Windows 7, 8 и 10 эти библиотеки, в общем-то, не нужны, потому что требуемые обновления приходят через Центр обновлений. Но если у вас не запускается какая-то старая (2005-2010 годов) игра, использующая DirectX 9, пробуйте установить тот самый инсталлятор. Авось поможет.
Чтобы проверить, что устанавливается инсталлятором, я скачал программу автономной установки DirectX, которая нужна для установки обновлений DirectX на компьютерах без интернета:
DirectX – загрузка полного комплекта обновлений
Судя по датам, на момент написания этой записи обновления компонентов DirectX выходили 18 апреля 2011 года (обновление от 29.01.2016 г.: теперь все приходит через Центр обновлений другими пакетами).
Загруженная программа – по сути самораспаковывающий архив. Откроем его архиватором 7-zip:
После установки добавятся новые библиотеки и обновятся старые, что даст возможность запуститься тем играм, которые сообщают об ошибке отсутствия d3dx*. Так что попробовать установить можно.
Откуда скачать DirectX?
Просто установите обновления через Центр обновления!
Ни с каких сайтов скачивать ДиректИкс нельзя! Вы рискуете попасть на вирусы!
Компоненты DirectX обновляются через Центр обновления Windows. Только так вы можете получить поддержку DirectX 10.1 и 11 на Windows Vista, 11.1 на Windows 7.
Microsoft DirectX входит в качестве составной части в операционных системах Windows. Вы можете обновить DirectX, применив последний пакет обновления или другие обновления через Центр обновления Windows.
Если скачать и установить DirectX на Windows XP, появится ли там DirectX 11?
Не появится. DirectX 10, 11 и последующих версий на Windows XP не будет никогда. Можно долго распространяться на эту тему, я лишь скажу следующее: владельцы Windows XP, смиритесь – эта ОС давно уже перестала быть “игровой”. Многие современные игры не поддерживают Windows XP. Даже Майкрософт официально забила на нее.
Стоит заметить, что существует сборка DirectX 10 для Windows XP, сделанная умельцами. По сути это всего лишь набор программных библиотек, не добавляющих эффекты DirectX 10, а только позволяющая некоторым играм запускаться без ошибок в XP, если в их настройках включен режим “DirectX 10”. В любом случае, этот набор библиотек с высокой долей вероятности может вызвать глюки в операционной системе, так что ставить такое поделие ни в коем случае нельзя.
Как установить DirectX версии 11.1 на Windows 7?
В связи с появлением Windows 10 этот вопрос актуален как никогда. Там поддержка DirectX 11.1 уже есть изначально. В Windows 7 изначально установлена версия 11. Поддержка новой версии DirectX придет через Центр Обновления Windows (Пуск – Все программы – Центр обновления Windows). Обновление называется KB2670838.
Так что обновляйте Windows через Центр Обновления. Windows 8 это тоже касается.
DirectX 12
Много слухов циркулирует вокруг DirectX 12. Попробую расставить все точки над i.
Windows 7, 8 и DirectX 12
Нет. Нет и ещё раз нет! DirectX 12 в Windows 7 и 8 не будет. Теоретически это возможно сделать, если производители видеокарт и Microsoft скооперируются. На практике – увы. 12-я версия – прерогатива Win10.
Многие старые видеокарты частично поддерживают DirectX 12
Представители производителя видеокарт AMD и nVidia заявляли, что видеокарты, поддерживающие DirectX 11, будут поддерживать и DirectX 12. Это оказалось маркетинговым лукавством. Преимущество DirectX 12 перед 11 – многократное увеличение производительности за счет оптимизации работы с компонентами видеокарты (памятью, видеопроцессором). “Железная” часть видеокарт, выпущенных в эпоху DirectX 11 и ранее, не приспособлена под DirectX 12, поэтому основная “фишка” новой версии API – ускорение обсчета графики – работать не будет.
То есть современные игры, которым для работы требуется 12-я версия графического API, с такими видеокартами запустятся. Но качество графики придётся выкрутить на минимум, чтобы получить более-менее приличную частоту кадров.
Есть три уровня поддержки старыми видеокартами нового графического API: Tier 1, Tier 2 и Tier 3. Tier 3 – самая полная поддержка стандарта. И она, пожалуй, наиболее близка к тому, что представляет собой DX12. В современные игры с ними на минимальных настройках графики можно играть вполне комфортно.
Intel
Intel ValleyView2 HD Graphics
Intel HD Graphics 2500
Intel HD Graphics 4000
AMD Radeon HD 5xxx
AMD Radeon HD 6xxx
AMD Radeon HD серий 7xxxG, M и D
AMD Radeon HD 8xxxG
Nvidia
Вроде как все должны.
Intel
Intel HD Graphics 4400
Intel HD Graphics 4600
Intel HD Graphics 5000
Intel Iris Graphics 5100
Intel Iris Pro Graphics 5200
nVidia
NVIDIA GeForce GT 430
NVIDIA GeForce GT 440
NVIDIA GeForce GTS 450
NVIDIA GeForce GTX 460
NVIDIA GeForce GT 520M
NVIDIA GeForce GT 520
NVIDIA GeForce GT 525M
NVIDIA GeForce GT 540M
NVIDIA GeForce GTX 550 Ti
NVIDIA GeForce GTX 560
NVIDIA GeForce GTX 560 Ti
NVIDIA GeForce GTX 570
NVIDIA GeForce GTX 580
NVIDIA GeForce 610M
NVIDIA GeForce GT 610
NVIDIA GeForce GT 620M
NVIDIA GeForce GT 620
NVIDIA GeForce GT 630M
NVIDIA GeForce GT 630
NVIDIA GeForce GT 635M
NVIDIA GeForce GT 640M
NVIDIA GeForce GT 640
NVIDIA GeForce GT 730
Intel – нет.
AMD – нет.
Nvidia
NVIDIA GeForce GT 650M
NVIDIA GeForce GTX 650
NVIDIA GeForce GTX 650 Ti
NVIDIA GeForce GTX 650 Ti Boost
NVIDIA GeForce GTX 660M
NVIDIA GeForce GTX 660
NVIDIA GeForce GTX 660 Ti
NVIDIA GeForce GTX 670
NVIDIA GeForce GTX 680
NVIDIA GeForce GT 740M
NVIDIA GeForce GT 750M
NVIDIA GeForce GTX 750
NVIDIA GeForce GTX 750 Ti
NVIDIA GeForce GTX 760
NVIDIA GeForce GTX 765M
NVIDIA GeForce GTX 770
NVIDIA GeForce GTX 780
NVIDIA GeForce GTX 780 Ti
NVIDIA GeForce 840M
NVIDIA GeForce GTX 850M
NVIDIA GeForce GTX 860M
NVIDIA GeForce GTX 970
NVIDIA GeForce GTX 980
Intel – нет.
AMD Radeon HD 7750
AMD Radeon HD 7770
AMD Radeon HD 7850
AMD Radeon HD 7870
AMD Radeon HD 7950
AMD Radeon HD 7970
AMD Radeon R4 Graphics
AMD Radeon HD 8600
AMD Radeon HD 8800
AMD Radeon R9 390X
Nvidia
А вот у нВидии видеокарт с полной поддержкой DirectX 12 пока нет.
Обновление от 3.03.2018: уже есть. Все современные поддерживают 12-ю версию.
Обратите внимание – после 2015 года поддержка 12-й версии API улучшилась, сейчас об уровнях Tier знать не требуется.
Дополнительные уровни – Feature levels
Мне, как владельцу AMD Radeon HD7950, хотелось бы радоваться, что у неё точно-точно есть поддержка DX12, но не получается. Дело в том, что Microsoft пошла дальше и ввела дополнительные уровни особенностей (“Feature levels”). Если уровни Tier – индикатор для покупателей, то Feature levels предназначены для разработчиков и сообщают о том, какие же возможности новой версии API поддерживаются процессором видеокарты полноценно.
Feature level 11.0 – поддержка видеокартой DirectX11 и функции “Resource Binding” из Tier 1. Представители таких видеокарт: Nvidia GeForce GTX 400/500/600/700.
Feature level 11.1 – DirectX 11.1 и поддержка множества функций, которые я здесь приводить не буду (зачем?). Представители:
Feature level 12.0 – поддержка некоторых возможностей Tier 1 и Tier 2. Представители: AMD Radeon HD 7790/8770, Rx 260/285/290 и новее.
Feature level 12.1 – полная поддержка Tier 1, аппаратная поддержка всех возможностей DirectX 12.
Таким образом, ни одна из видеокарт, вышедших до 2015 года, не поддерживает DirectX 12 полностью. Часть возможностей реализована на программном уровне, поэтому одна и та же игра, использующая DX 11 и DX 12, не получит ощутимого прироста производительности при переходе на новую версию API.
От уровня доступа к “железу” компьютера сильно зависит скорость работы программ. Особенно это касается игр. DX 12 предоставляет возможности, которыми разработчики не должны пренебрегать. Увы, на практике они не всегда используются полностью. Поэтому GTA V, вышедшая на ПК в 2015 году, выглядит лучше и выдаёт на том же железе больше кадров в секунду, чем схожая геймплеем Watch Dogs 2, появившаяся на свет полтора года спустя.