Стал часто сталкивался со всевозможными заблуждениями на тему 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:
https://www.youtube.com/watch?v=lSfN7OTUOTA
Считается, что чем выше версия DirectX — тем лучше картинка. Но не стоит ожидать чуда — зачастую изменения не бросаются в глаза. На мой взгляд, главная причина столь малой разницы качества изображения в том, что сейчас игры разрабатываются одновременно для игровых консолей Xbox, Sony PlayStation и ПК. Приставки по сравнению с современными «персоналками» слабы в плане производительности и поддерживаемых технологий. В итоге мы играем на компьютере в игры, графика которых осталась на уровне года выхода консолей, любуясь на размытые текстуры и упрощенные эффекты. Да, есть игры, разработанные или доработанные для ПК, но таких единицы.
Типичный пример межплатформенности — игра Skyrim:
Разница в графике между Playstation 3 и Xbox360 заключается в деталях: на PS3 где-то воды капает мало, на Xbox 360 тени не реагируют на мерцающие источники света. На ПК (в видео обозначен как «Windows») таких проблем нет, плюс видны объекты на дальних расстояниях, но больше никаких улучшений нет. Позже разработчики выпустили набор текстур высокой четкости для ПК-версии игры, но кардинально графику это не улучшило.
Чтобы вы увидели, какую графику способен выдавать компьютер — пример игры, заточенной под использование всех возможностей видеокарты и процессора:
https://www.youtube.com/watch?v=NYGvxuQbY7Y
Видите разницу? Красивое освещение, четкие текстуры, плавные движения. Такой уровень детализации был бы недостижим с помощью устаревших технологий DirectX 9 — слишком много объектов находятся в кадре одновременно. Также присутствует много эффектов, которые реализуются силами видеокарт с поддержкой DirectX 10 как минимум.
Возможности графического движка игры Crysis 3:
Вопреки мнению некоторых пользователей, DirectX не улучшает графику в играх, а только дает возможность программисту сделать игру красивее. Если игра разрабатывалась для DirectX 9, то наличие DirectX 10-й версии ничего не изменит. Все зависит не только от возможностей видеокарты, но и от поддержки технологий игрой. Если все совместить — получится просто чудесная игра в плане графики.
Разные Windows и версии DirectX
DirectX по сути представляет собой набор файлов — программных библиотек. Если их не будет в системных папках, то игры в лучшем случае будут отображаться без эффектов, в худшем — не запустятся, выдавая ошибку (при запуске игры появляется ошибка «не найден d3dx9_42.dll», где цифры могут быть разными).
Минимальный набор этих файлов уже присутствует в только что установленной Windows. В зависимости от версии операционной системы, будет разный комплект файлов, а значит — поддержка разных версий DirectX (информация отсюда):
- Windows XP SP2 — DirectX 9.0c
- Windows Vista — DirectX 10
- Windows Vista SP1 — DirectX 10.1
- Windows Vista SP2 — DirectX 11
- Windows 7 — DirectX 11.1
- Windows 8 — DirectX 11.1
- Windows 8.1 — DirectX 11.2
- Windows 10 — DirectX 12
Предыдущие версии включены. Т.е. 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. Необязательный пункт: обновите драйвер видеокарты до самой новой версии:
Официальная страница драйверов для видеокарт nVidia
Официальная страница драйверов для видеокарт AMD (см. выбор драйвера справа вверху страницы)
Официальная страница драйверов для видеокарт Intel (выберите в списке «Графические адаптеры», затем нужную модель)
3. Нажмите Пуск — Выполнить (если нет такого пункта, можно нажать сочетание клавиш Win+R, где Win — кнопка с логотипом) — Введите «dxdiag» без кавычек — затем кнопка ОК.
Появится окно «Средство Диагностики DirectX«. На вкладке «Система» можно увидеть установленную на компьютере версию DirectX:
Эту версию сменить нельзя, за исключением обновления системы — например, при обновлении Windows Vista SP1 на SP2 поддерживаемая версия изменится с 10.1 на 11.
[ig_notice style=»success»]Другими способами, кроме обновлений системы, установить поддержу нового DirectX нельзя. Никакая подмена файлов не включит на старой Windows поддержку новых версий DirectX.
В интернете полно всяких наборов «DirectX 10 для Windows XP» и аналогичных. Запомните — это обман. В Windows XP невозможно включить поддержку современных версий DirectX.[/ig_notice]
Как заставить игру X использовать DirectX версии Y?
Только если в настройках игры версию можно переключить. Например, смену поддерживает GTA V. В ней доступно аж три варианта рендера DirectX: 10, 10.1 и 11.
Другим способом переключить версию, если игрой это не предусмотрено, никак нельзя. Сами подумайте — разработчики писали код игры, используя команды под определённую версию. Просто так взять и заменить команды на другие невозможно.
[ig_notice style=»notice»]Поддерживать DirectX определенной версии должны все стороны: видеокарта, операционная система и игра.[/ig_notice]
Таким образом вопрос «на каком DirectX лучше играть» бессмысленный — что поддерживает железо, ОС и использует игра, то и будет.
Нужно ли устанавливать DirectX с сайта Microsoft? Что это дает?
Кратко: можно, только версию DirectX это не изменит!
Если хотите, чтобы игры запускались нормально — обязательно установите все обновления из Центра обновления Windows, потому что именно оттуда Windows берет свежие версии библиотек. Подтверждение от Microsoft.
На сайте компании Майкрософт, которая разработала DirectX, можно скачать инсталлятор DirectX. На самом деле это не установщик DirectX, а только программа-инсталлятор, которая загрузит из интернета и установит новые версии программных библиотек DirectX. Несмотря на цифры 9, 10, 10.1 и т.п., DirectX имеет и внутреннюю нумерацию, которая имеет отношение к обновлениям. То есть внутри версий возможны исправления и улучшения.
Windows 7, 8 и 10 эти библиотеки, в общем-то, не нужны, потому что требуемые обновления приходят через Центр обновлений. Но если у вас не запускается какая-то старая (2005-2010 годов) игра, использующая DirectX 9, пробуйте установить тот самый инсталлятор. Авось поможет.
[ig_toggle label=»Список ошибок DirectX, исправляемые с помощью этого установщика»]
D3DX9_24.dll -D3DX9_43.DLL
D3DX10. DLL — D3DX10_43.DLL
D3DCompiler_33.dll — D3DCompiler_43.DLL
D3DX11_42.DLL
D3DX11_43.DLL
D3DCSX_42.DLL
D3DCSX_43.DLL
XACTENGINE2_0.dll — XACTENGINE2_9.DLL
XACTENGINE3_0.dll — XACTENGINE3_7.DLL
XAUDIO2_0.DLL
XAUDIO2_1.DLL
XAUDIO2_2.DLL
XAUDIO2_3.DLL
XAUDIO2_4.DLL
XAUDIO2_5.DLL
XAUDIO2_6.DLL
XAUDIO2_7.DLL
XAPOFX1_0.dll -XAPOFX1_5.DLL
X3DAUDIO1_0.dll — X3DAUDIO1_7.DLL
XINPUT1_1.DLL
XINPUT1_2.DLL
XINPUT1_3.DLL[/ig_toggle]
Чтобы проверить, что устанавливается инсталлятором, я скачал программу автономной установки DirectX, которая нужна для установки обновлений DirectX на компьютерах без интернета:
Судя по датам, на момент написания этой записи обновления компонентов DirectX выходили 18 апреля 2011 года (обновление от 29.01.2016 г.: теперь все приходит через Центр обновлений другими пакетами).
Загруженная программа — по сути самораспаковывающий архив. Откроем его архиватором 7-zip:
Обратите внимание на имена файлов — в инсталляторе содержатся как файлы, имеющие отношение в DirectX 9 (d3dx9_31, d3dx9_32, d3dx9_33 и т.д), так и к DirectX 10 (d3dx10_35, d3dx10_40 и т.д.). Каждая версия обновляется — выходят новые версии .dll библиотек, добавляются новые.
[ig_notice style=»notice»]Еще раз напомню: это не обновление DirectX с версии на версию. Это обновление версий программных библиотек и к нумерации 9, 10, 10.1, 11, 11.1 отношения не имеет. Вы не сможете повысить версию установленного DirectX таким способом.[/ig_notice]
После установки добавятся новые библиотеки и обновятся старые, что даст возможность запуститься тем играм, которые сообщают об ошибке отсутствия d3dx*. Так что попробовать установить можно.
Откуда скачать DirectX?
Просто установите обновления через Центр обновления!
Ни с каких сайтов скачивать ДиректИкс нельзя! Вы рискуете попасть на вирусы!
Компоненты DirectX обновляются через Центр обновления Windows. Только так вы можете получить поддержку DirectX 10.1 и 11 на Windows Vista, 11.1 на Windows 7.
Приведу цитату из статьи Майкрософта «Как установить последнюю версию DirectX»:
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. В современные игры с ними на минимальных настройках графики можно играть вполне комфортно.
[ig_toggle label=»Видеокарты без поддержки DirectX 12 (но поддерживающие DX10 и/или 11):»]
Intel
Intel ValleyView2 HD Graphics
Intel HD Graphics 2500
Intel HD Graphics 4000
И новее.
AMD
AMD Radeon HD 5xxx
AMD Radeon HD 6xxx
AMD Radeon HD серий 7xxxG, M и D
AMD Radeon HD 8xxxG
И новее.
Nvidia
Вроде как все должны.
[/ig_toggle]
[ig_toggle label=»Видеокарты с поддержкой DirectX 12 Tier 1″]
Intel
Intel HD Graphics 4400
Intel HD Graphics 4600
Intel HD Graphics 5000
Intel Iris Graphics 5100
Intel Iris Pro Graphics 5200
AMD
Нет.
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
И новее.
[/ig_toggle]
[ig_toggle label=»Видеокарты с поддержкой DirectX 12 Tier 2″]
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
И новее.
[/ig_toggle]
[ig_toggle label=»Видеокарты с поддержкой DirectX 12 Tier 3″]
Intel — нет.
AMD
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 R7 200
AMD Radeon R9 200
AMD Radeon R9 390X
И новее.
Nvidia
А вот у нВидии видеокарт с полной поддержкой DirectX 12 пока нет.
Обновление от 3.03.2018: уже есть. Все современные поддерживают 12-ю версию.
[/ig_toggle]
Обратите внимание — после 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 и поддержка множества функций, которые я здесь приводить не буду (зачем?). Представители:
- Nvidia GeForce GTX 745/750;
- AMD Radeon HD серий 7700-7900/8500-8900, Rx 240-280;
- Intel HD Graphics 4200-5200, 5300-6300;
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, появившаяся на свет полтора года спустя.