Что такое microsoft directx

DirectX – что это такое, как оно работает, где скачать

Что такое microsoft directx. Смотреть фото Что такое microsoft directx. Смотреть картинку Что такое microsoft directx. Картинка про Что такое microsoft directx. Фото Что такое microsoft 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:

Что такое microsoft directx. Смотреть фото Что такое microsoft directx. Смотреть картинку Что такое microsoft directx. Картинка про Что такое microsoft directx. Фото Что такое microsoft 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.

Что такое microsoft directx. Смотреть фото Что такое microsoft directx. Смотреть картинку Что такое microsoft directx. Картинка про Что такое microsoft directx. Фото Что такое microsoft directx

Другим способом переключить версию, если игрой это не предусмотрено, никак нельзя. Сами подумайте – разработчики писали код игры, используя команды под определённую версию. Просто так взять и заменить команды на другие невозможно.

Таким образом вопрос “на каком 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 на компьютерах без интернета:

Что такое microsoft directx. Смотреть фото Что такое microsoft directx. Смотреть картинку Что такое microsoft directx. Картинка про Что такое microsoft directx. Фото Что такое microsoft directx

DirectX – загрузка полного комплекта обновлений

Судя по датам, на момент написания этой записи обновления компонентов DirectX выходили 18 апреля 2011 года (обновление от 29.01.2016 г.: теперь все приходит через Центр обновлений другими пакетами).

Загруженная программа – по сути самораспаковывающий архив. Откроем его архиватором 7-zip:

Что такое microsoft directx. Смотреть фото Что такое microsoft directx. Смотреть картинку Что такое microsoft directx. Картинка про Что такое microsoft directx. Фото Что такое microsoft directx

После установки добавятся новые библиотеки и обновятся старые, что даст возможность запуститься тем играм, которые сообщают об ошибке отсутствия 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, появившаяся на свет полтора года спустя.

Источник

Microsoft DirectX – это очень просто!

Microsoft DirectX – это очень просто!

О чем пойдет речь в статье:
Что такое DirectX?
Для чего нужен DirectX?
Что входит в DirectX?
Что такое шейдер?
Зачем нужны шейдеры? Конвейер и шейдерная модель
Что дает пользователю компьютера очередная версия DirectX?
DirectX 10. Эволюционное обобщение пройденного
DirectX 10.1 Как же теперь жить? И пара слов об OGL

Когда говорят о “Microsoft DirectX”, то разные категории людей могут вкладывать в это различные понятия. Давайте разберемся, что может иметься в виду и что это такое на самом деле, для чего он нужен и чем же отличаются последние версии DirectX друг от друга.

Microsoft DirectX – это очень просто!

О чем пойдет речь в статье:

    Что такое DirectX?
    Для чего нужен DirectX?
    Что входит в DirectX?
    Что такое шейдер?
    Зачем нужны шейдеры? Конвейер и шейдерная модель
    Что дает пользователю компьютера очередная версия DirectX?
    DirectX 10. Эволюционное обобщение пройденного
    DirectX 10.1 Как же теперь жить? И пара слов об OGL

Когда говорят о “Microsoft DirectX”, то разные категории людей могут вкладывать в это различные понятия. Давайте разберемся, что может иметься в виду и что это такое на самом деле, для чего он нужен и чем же отличаются последние версии DirectX друг от друга.

Обратимся к первоисточнику – самой Microsoft:

http://msdn2.microsoft.com/en-us/library/bb219737.aspx
“DirectX is a set of low-level APIs for creating games and other high-performance multimedia applications. It includes support for high-performance 2D and 3D graphics, sound, and input”.

Учитывая, что API (Application Programming Interface) – это интерфейс разработки программ, буквальный перевод звучит так: “DirectX – это набор низкоуровневых программных интерфейсов для создания игр и других высокопроизводительных приложений. Он включает в себя поддержку высокопроизводительной 2D и 3D графики, звука и устройств ввода”.

В действительности, Microsoft предоставляет это определение для разработчиков программного обеспечения, следовательно, само собой под DirectX подразумевается APIs DirectX. А с точки зрения пользователя все выглядит несколько иначе. Поэтому дадим более общее определение, хотя оно при этом будет подлиннее.

DirectX – это технология Microsoft для операционных систем семейства Windows, предоставляющая разработчику программного обеспечения интерфейсы (то есть, комфортную среду интерактивного взаимодействия) для создания программ, эффективно использующих графические, мультимедийные устройства и устройства ввода, и обеспечивающая низкоуровневые утилиты (то есть эффективные высокооптимизированные программы) для взаимодействия этих устройств с прикладной программой и операционной системой через соответствующие драйверы.

Другими словами, вполне логично различать понятия DirectX как технологии в целом, как наборов программных интерфейсов при создании программного обеспечения и как программной составляющей операционной системы, отвечающей за поддержку мультимедийных и графических устройств, а также устройств ввода.

Для поддержки разработчиков программного обеспечения Microsoft предоставляет DirectX SDK (Software Developing Kit) – набор программ и утилит разработчика программного обеспечения под технологию DirectX, а для системных программистов и разработчиков компьютерного оборудования есть WDK (Windows Driver Kit )– набор программ и утилит для разработки драйверов. Оба этих программных продукта распространяются свободно и доступны для скачивания с сайта Microsoft. К слову сказать, по прилагаемой к DirectX SDK лицензии, все графические и мультимедийные файлы и компьютерные модели разрешается использовать в своих программах для демонстрационных некоммерческих целей.

Теперь можно смело утверждать, что если моя видеокарта поддерживает DirectX, то это означает, что она способна выполнять программы, созданные с использованием API DirectX, при условии наличия соответствующего драйвера и поддержки со сороны операционной системы.

Сегодня уже трудно найти видеоадаптер, не поддерживающий хотя бы DirectX 7, поэтому для нормальной работы приложения, разработанного в соответствии с конкретной спецификацией DirectX, нужно, во-первых, чтобы операционная система поддерживала эту версию (плюс к тому были установлены соответствующие или более новые библиотеки DirectX в виде dll – файлов, которые обычно автоматически устанавливаются при инсталляции программы, если на компьютере установлены более старые версии библиотек), во-вторых, чтобы видеокарта была с поддержкой соответствующего DirectX и, в третьих, чтобы был установлен подходящий драйвер видеокарты. Несоблюдение первых двух условий не позволит приложению запуститься, а в случае с драйвером может оказаться так, что самый последний доступный драйвер не является лучшим для конкретного приложения (вплоть до полной неработоспособности программы), хотя, в целом, действует правило, что лучше использовать самые свежие версии драйверов и рекомендуется этого правила придерживаться.

Несколько слов о том, что явилось катализатором появления DirectX. Безусловно, в первую очередь, это компьютерные игры. Персональные компьютеры и сейчас далеки от вычислительной мощности, позволяющей кинематографически реалистично воспроизводить на экране монитора с высоким разрешением полноценное интерактивное 3D действие в реальном режиме времени, тем более это им было не под силу двадцать лет назад. Поэтому программисты всегда боролись за каждый байт и мегагерц компьютерных ресурсов (а основные ресурсы – это процессорное время и оперативная память), выжимая все из топовых аппаратных решений, доступных на рынке. И в эпоху, когда основной ОС домашних компьютеров была DOS, очень много игр писалось на языке Ассемблер, что было достаточно трудоемко, но в умелых руках позволяло использовать 100% возможностей техники, так как позволяло напрямую программирвать видеокарту, модель распределения памяти и управлять системными ресурсами. Для тех, кто не застал это время, поясню, что, в отличие от Windows, MS-DOS (наиболее распространенная ОС того времени) – это однозадачная ОС, то есть запускаемая программа забирала все компьютерные ресурсы себе. Чтобы запустить другую программу, первую нужно было обязательно завершить, что часто делалось простой перезагрузкой компьютера.

Производители видеокарт тоже включились в эту гонку, выпуская новые и новые видеокарты, которые частенько и опережали свое время, и оказывались впоследствии тупиковым направлением развития. Но это уже совсем другая история.

Появление новой ОС – Windows 3.х привело к противоречию между конкретной программой, требующей в свое распоряжение максимальное количество ресурсов, и многозадачной ОС, делящей эти ресурсы по “справедливости” между приложениями. Кроме того, драйверы устройств перестали быть доступны программе напрямую – появилась прослойка в виде виртуальных драйверов. Несмотря на имеющуюся иерархию приоритетов у выполняемых в ОС программ, в первых версиях Windows быстродействие игр оказывалось неудовлетворительным. Поэтому долгое время DOS, которой разработчики игр отдавали предпочтение, сосуществовала параллельно с Windows. Но такое положение вещей не вписывалось в стратегию развития Microsoft и привело к интенсификации усилий по решению имеющихся проблем с быстродействием. Так появилcя Game SDK, впоследствии сменивший название на DirectX, призванный сделать программную прослойку от выполняемой программы до мультимедийного и графического оборудования универсальной, не требующей детального знания оборудования (это – дело производителя, задача которого – написать функциональный драйвер), легко создаваемой и сопровождаемой, минимальной по длине и максимальной по быстродействию.

Мы выяснили, что означает, фраза “моя карта поддерживает DirectX”. Впрочем, тут есть один нюанс. DirectX – это собирательное понятие набора программных компонент, и, хоть графическая часть и есть его наиболее существенная, сложная и объемная составляющая, там присутствует и поддержка оборудования, отличного от видеокарт. К примеру, видеокарта вряд ли поддерживает DirectInput (хотя технически ничто не мешает, например, установить на ней пару USB-разъемов для подключения джойстика или геймпада). Поэтому, правильно говорить о поддержке видеокартой компоненты DirectGraphics (которая, на самом деле, только “прикрывает” настоящие компоненты – Direct3D и Direct3DХ), составной части DirectX, но маркетинг – он и в Африке маркетинг – поэтому не только короче, но и гораздо солиднее звучит именно вариант поддержки DirectX целиком! И никаких гвоздей! Поэтому от этого стереотипа уже практически не избавиться. Мы ведь живем, по большей части, в демократических государствах, и, раз большинство считает, что поддерживает, то несколько голосов за правду утонут в общем хоре негодования. Чтобы не прослыть белой вороной, заявляем – наши видеокарты поддерживают DirectX! Однозначно и в полном объеме!

То, что в этом случае видеокарты также должны поддерживать DirectInput, призванный обеспечить работу устройств ввода, таких как клавиатура, мышь, джойстики и другие манипуляторы, уже упомянуто. Все же, для полноты картины, перечислим все компоненты, которые входят в современную версию DirectX:

    DirectGraphics
    DirectSound
    DirectInput


Коротко, логично и понятно. В свое время в разные версии DirectX в разное время включались, убирались и восстанавливались вновь и другие компоненты – DirectDraw, DirectMusic, DirectPlay, DirectShow и еще несколько, но они или уже существуют только для обратной совместимости либо перенесены в другие SDK, и их использование не рекомендуется либо уже попросту невозможно.

Главная цель создания DXGI – управление низкоуровневыми задачами, которые не требуют включения в библиотеку исполнения DirectX – речь идет о более рациональном разделении установочных и исполняемых процедур.

Последняя версия DirectX SDK на момент написания статьи (Август 2007) добавляет еще одну компоненту,

The Windows Vista Game Explorer,

Слово «шейдер» очень часто употребляют неправильно, не понимая что это такое и отождествляя его с частью компьютерного оборудования. Но это понятие не относится к категории «hardware».
Что же такое “шейдер”? Это слово пришло в мир бытовых компьютеров из кинематографии, где так именовались специальные программы (“shaders”), участвующие в рендеринге (формировании) итогового изображения на экран (или в память). Поэтому шейдеры – это относительно небольшие программы, написанные на специализированных языках, которые выполняются графическим процессором. Для чего служат эти программы и почему заранее известно, что они небольшие? Современные ГПУ обрабатывают потоковую информацию – большие массивы однородных данных простых типов, которые надо обработать по короткому алгоритму и быстро передать дальше, чем меньше программа – тем быстрее обработка, хотя тенденция к усложнению явно прослеживается. Впрочем, большими эти программы (по крайней мере по отдельности) еще долго нельзя будет называть, а размер первых шейдеров вообще очень сильно ограничивался возможностями видеокарт (это определялось наличием в ГПУ регистров для хранения обрабатываемых данных и установленным ограничением на число выполняемых инструкций).
А зачем им нужен специализированный язык? ГПУ имеет многочисленные внутренние специализированные потоковые процессоры с ограниченной функциональностью и упрощенной системой команд. Для потоковой обработки этого вполне достаточно. Это – компромисс между функциональностью, стоимостью и быстродействием, оптимальный на сегодня.
Но даже для небольшой игры может потребоваться написание большого числа шейдеров. Шейдеры группируются в логически связанные блоки, именуемые эффектами (“effects”). Дополнительную информацию по этому вопросу можно получить из документации к DirectX SDK.

Зачем нужны шейдеры? Конвейер и шейдерная модель

Было время, когда о шейдерах никто и не думал. Хорошее было время! Откуда же они свалились на нашу голову? Для того, чтобы понять это, надо знать, как работает современная видеокарта и графический процессор и как это было в то далекое время, когда дети, увидев морскую волну, не кричали радостно “Шейдеры! Шейдеры!”. Поэтому будет уместно сделать маленькое лирическое отступление от непосредственной темы DirectX и разобраться в этом. Я постарался максимально упростить технические детали, насколько это мне удалось – судить вам.

Попробуем упрощенно описать, как функционирует видеокарта. Тут удобно применить технологию “черного ящика”, широко используемую в автоматике. У ящика есть вход и выход, внутренняя функциональность нас интересует весьма приблизительно, причем не интересует, как это происходит на самом деле, а важно лишь то, как это видится снаружи “черного ящика”. Этим черным ящиком и будет выступать видеокарта. Мы должны узнать, что подается на вход, что является выходом и в общих чертах понять, что происходит внутри этого “черного ящика”.

Что является выходом, большинству сразу понятно – к видеокарте подключается монитор и то, что мы на нем видим, и есть выход. Пока будем считать, что так оно и есть, хотя это является истиной далеко не всегда – карта может работать ведомой в SLI или CF без монитора, видеокарта может производить неграфические вычисления и также не подключаться к монитору, выполняя полезную работу как сопроцессор к ЦПУ, либо часть процессорного времени ГПУ может отдаваться задачам, не связанным непосредственно с графикой.

Таким образом, данные о вершинах хранятся в памяти, в буфере вершин, и периодически поступают на обработку в видеокарту. Что происходит с ними дальше – зависит от того, какую версию DirectX поддерживает видеокарта и какую версию DirectX поддерживает программа. Грамотное DirectX приложение при старте проверяет, удовлетворяют ли возможности видеокарты требованиям программы, и только при положительном ответе (после опроса системных данных) разрешает работу.
Итак, пока мы определились, что в видеокарту постоянно будет поступать информация из буфера вершин.

Теперь самое время обсудить, что такое “графический конвейер”. Тут – почти полная аналогия с заводским конвейером. От входа до выхода бежит лента транспортера, на которую поступают входные детали. И пока они на этой ленте направляются к концу конвейера, все, кто работает за конвейером, в соответствии с порученными технологическими операциями, производят соответствующие манипуляции, кто-то что-то привинчивает, или наоборот, отвинчивает, и в итоге начальную деталь вообще не узнать, ибо, как принято говорить, с конвейера уже сходит готовый продукт.

Представьте, что конвейер стал автоматизированным. Все операции выполняются роботами – станками и манипуляторами. Роботы запрограммированы раз и навсегда на выполнение конкретной операции в технологической цепочке. Если на транспортер конвейера ставили более мощный двигатель или рядом ставили еще один конвейер, оказывалось, что старые роботы уже сдерживают увеличение пропускной способности конвейера, независимо от числа линий. Поэтому в таких случаях каждый раз приходится менять роботов на более современных. Опять же, замена требовалась, если хотя бы чуть-чуть менялась технология обработки деталей.

Со временем инженеры так доработали роботов, что теперь стало возможно автоматически, во время работы, оперативно изменять их программу, в зависимости от того, какие детали находятся на конвейере и какие операции требуется выполнять. Кроме того, за процессом работы линий конвейеров стал наблюдать диспетчер, который следит за тем, правильно ли распределена загрузка входными деталями в соответствии с текущей производительностью роботов. Диспетчер сразу исправляет ситуацию так, чтобы не было ни простоев, ни завалов. Поэтому производительность труда на современных конвейерах многократно выросла.

Новая эпоха шейдерного графического программирования принесла не только улучшение качества графики, но и головную боль программистам и покупателям видеокарт.

Мало того, что программист должен был учитывать множество спецификаций, он должен был еще программировать физический опрос возможностей карты (так называемых capable bits) независимо от заявленной поддержки производителем карты на красочной суперобложке, чтобы убедиться, какую же программу подсунуть именно этой карте.

На этом месте статьи я остановился, никак не получалось решить – стоит ли описывать текстурирование, что повлечет необходимость более детального описания пиксельного шейдера, блендинга и фильтраций. Честно говоря, статья и так отняла много времени, поэтому после некоторых колебаний, я решил пропустить эти моменты, так как изначально все-таки стояла цель вводного ознакомления с DirectX, написанного простым языком. И, к тому же, есть масса доступных источников в интернете. Но, если появятся вопросы, – я постараюсь на них ответить.

Может возникнуть вопрос, если на видеокарте, поддерживающей DirectX 9, запускается старая программа, написанная без шейдеров и требующая наличия блока “T&L”, как она выполняется, ведь современные карты уже не содержат аппаратного “T&L”? Очень просто. Драйвер видеокарты различает такую ситуацию и имеет для этих целей простейшие шейдеры с обработкой в стиле а-ля “T&L”, что обеспечивает полную совместимость со старыми приложениями.

Что дает пользователю компьютера очередная версия DirectX?

Теперь, когда мы знаем, что такое DirectX, попробуем разобраться, с точки зрения пользователя-непрограммиста, а что нам дает каждая новая версия DirectX?
Ответ однозначен – НИЧЕГО! DirectX – это одновременно и инструмент и потенциал, который надо раскрыть. Это должны сделать и разработчики программы (программисты, администраторы, художники, музыканты, дизайнеры) и программисты – драйверописатели.

Чтобы раскрыть такой потенциал, нужно немало усилий по изучению нового API и возможностей видеокарт, написанию и отладке кода и его оптимизации, постоянное отслеживание производительности десятков типов видеокарт под последними драйверами, часто вносящими хаос в уже отлаженный под предыдущий драйвер код, нужно умение и способность выкроить чуть – чуть ресурсов для создания нового эффекта, под который их нехватило в предыдущей версии движка под предыдущую версию API. иначе зачем новый API, если все-будет выглядеть по старому? И стоит только выкроить полмиллисекунды на кадр, ее тут же забирают под дополнительные полигоны в сцене, и начинается все сначала. Проходит время. Уже анонсирована следующая версия DirectX.
Это была история о программистах из деревни Виллабаджо.

А в это время в деревне Виллариба программисты под OpenGL радуются и веселятся – смена поколения видеокарт не принесла им никах проблем со сменой API, только лишь возросло быстродействие! И они только что сделали классную новую игру! И не хуже последней игры, выпущенной в деревне Виллабаджо под DirectX!

Конечно, два предыдущих абзаца – шутка. Но в ней очень много правды.
Отметим, что арт-команда готова полностью загрузить следующие несколько поколений видеокарт уже сегодня. Но сегодняшные топовые карты это не осилят.

Можно поставить вопрос и по-другому, а чего не хватало программистам или в целом команде разработчиков в предыдущих версиях DirectX? Что же такого особенного дают новые версии, кроме беспокойства владельцу недавно купленной видеокарты?
Попробуем выяснить и это.

DirectX 10. Эволюционное обобщение пройденного

Здесь уже не обойтись без упоминания некоторых технических деталей, и я коротко перечислю существенные моменты, понимание которых не требует знания DirectX.

Внедрена новая модель драйвера Windows Vista Display Driver Model (WDDM). Чем стала плоха старая модель WDM, использовавшаяся в прежних версиях Windows, можно узнать по ссылке:
http://www.microsoft.com/whdc/driver/wdf/wdf-intro.mspx
а вот все о новой модели WDDM:
http://msdn2.microsoft.com/en-us/library/ms797619.aspx

Краткий комментарий.
Произошла полная виртуализация графической памяти. Набирающая силу тенденция виртуализации всего и вся наконец-то добралась и до видеоподсистемы компьютера в полную силу. Чем же она так хороша? Да многим, и с точки зрения безопасности, и с точки зрения размера адресного пространства. Теперь каждому окну приложения выделяется собственная виртуальная память в размере полного экрана, собственный рендеринг (впрочем, WDM – Windows Display Manager трогать не будем). Разрешение экрана 1280х1024 потребует более 5Мб видеопамяти. 10 открытых приложений займет под 60 Мб. Без виртуализации, особенно на карте со 128Мб это называется приехали. Так что очень полезная штука.

Появилась возможность переключения задач на ГПУ. Теперь есть возможность прервать выполнение основной графической задачи и быстро выполнить в фоне, к примеру, расчет какого-нибудь физического взаимодействия объектов. Причем предоставляется возможность и прерывания выполнения работы над примитивом или посреди выполнения шейдера, если это поддерживается видеокартой (так как это не является требованием DirectX 10).

WDDM разрешает совместное использование поверхностей DirectX между процессами, тоже очень неплохо, что появилась официальная поддержка.
По модели драйвера вроде все, что относится к драйверописателям, не трогаем.

Теперь вернемся к DirectX 10. Начнем с того, что у всех на слуху.
Введена унифицированная шейдерная архитектура. Все шейдерные блоки теперь равнозначны и они выполняют задачи в соответствии с текущей стадией конвейера. В видеокартах предыдущего поколения это тоже было ограничено возможно, но приходилось сильно извращаться.

Если теперь производитель карты заверяет, что его видеокарта поддерживает DirectX 10, то этому уже, наверное, можно поверить. По новой спецификации, такая поддержка означает полное соответсвие API – все, что запрограммировано правильно, должно выполняться на любом DirectX 10 железе. Другое дело, что карты все равно разные и обеспечивают разные возможности. К примеру, Радеоны включили аппаратную тесселяцию, что скоро станет требованием DirectX, а видеокарты Nvidia 86хх имеют несколько аппаратных отличий, выгодно отличающих их (конечно, временно, до выхода нового поколения карт) от топовых решений 88хх (к примеру, это позволяет им обращаться к атомам в технологии CUDA, чего лишены их более старшие собратья, есть и другие преимущества. Впрочем, это вряд ли компенсирует владельцам этих карт банальный разрыв в быстродействии).

Появилась новая стадия в конвейере – стадия исполнения геометрического шейдера. Что можно интересного запрограммировать в коде геометрического шейдера? Как и вершинный шейдер, он на входе получает вершины и вершины же выдает на выход, но появляются существенные отличия. Входными данными уже являются не обезличенные вершины в потоке, а вершины примитивов, то есть вершины треугольника, линии или точки, а также соответствующие примыкающие вершины (три на треугольник и две на линию). В выходном потоке стадия геометрического шейдера может генерировать дополнительные вершины, образующие коллекцию вершин (point list), ломаную линию (line strip), либо группу связанных треугольников (tristrip).
Выходной поток вершин стадии геометрического шейдера может быть направлен, как входной поток, на стадию растеризации, либо в буфер памяти, и тогда он снова может являться входным источником вершин для стадии исполнения вершинного шейдера.

Безусловно, операция крайне процессороемкая (имея в виду ГПУ) в плане создания на лету высокополигональной геометрии (особенно, если делать ее за один присест).

Примеры работы геометрического шейдера владельцы видеокарт последних серий могут посмотреть, скачав свежие SDK на сайтах производителей своих видеокарт.

Шейдерная модель получила номер 4.0.
Программный язык написания шейдеров – только НLSL (хотя по-прежнему можно подключать внешний байт-код).

Произошла унификация подхода к используемым ресурсам – все ресурсы могут быть деривативами только от текстуры или буфера памяти.

Соответствуют ли изменения от DirectX 9 к DirectX 10 революционному обновлению? Мое скромное мнение – нет, это большой шаг вперед, но по значимости он не дотягивает до действительно революционного скачка от DirectX 7 к DirectX 8. Тем более очень интересная особенность – динамическая смена задач на ГПУ – не относится к DirectX.

Что мы, как обычные пользователи, вправе ожидать от технологии DirectX, присутствующей на рынке 8 месяцев плюс год открытого предварительного тестирования?

Увы. Мое мнение такое. Самые новые игры под DirectX 9 напрягали соответствующие топовые видеокарты под завязку. Новые возможности API, теоретически давая очень интересный инструмент в руки разработчика, не позволят реализовать его полный потенциал на существующих топовых DirectX видеокартах (имеется в виду Nvidia 8800 и AMD 2900) так, чтобы это было играбельно.
То, что анонсируемые на этот год премьеры будут ориентированы на эти топы, понятно, но уровеь всеобщего ожидания и интерес к этим играм такой, что плохо быть сделанными они не имеют права. Значит, их будут делать хорошо, чтобы разница в передаче игровой атмосферы под DirectX 10 была бы заметна. При этом, чтобы обеспечить приемлимый фпс, наверняка частью красот придется пожертвовать. Миддл сектор в лице 8600 и 2600 отдыхает.

Но есть и хорошие моменты.
Во-первых, это только мое личное мнение, и я очень хочу, чтобы оно оказалось ошибочным (у меня самого пара 8600GT).
Во-вторых, наверняка будет много игр, не выжимающих все из железа, но реализующих какие-нибудь интересные возможности DirectX 10.
В третьих, скоро подоспеет новый топ от Nvidia. Но я не говорил, что это хорошая новость для всех.

Кстати, еще пара слов о конкурирующем стандарте графического API – OpenGL. Его глобальное обновление, с точки зрения временных рамок, вторично по отношению к DirectX, так как он уже ориентируется на те аппаратные изменения, которые производители делают для соответствия спецификации DirectX. Поскольку аппаратное обеспечение и при OpenGL и DirectX одинаково, принципиально эти технологии примерно равноценны, если говорить о потенциальном качестве картинки, а различия проявляются на уровне самого API, открытости кода, мультиплатформенности, способе принятия расширений стандарта и еще нескольких менее важных для конечного пользователя моментов.
Но вернемся к DirectX 10.1. Абсолютно ничего страшного не произошло, всего лишь мелкое эволюционное изменение, вполне соответствующее тем временным рамкам, которые были приняты между предыдущими обновлениями версий DirectX. Поскольку изменений не так много, я решил привести их все (хоть это и сугубо технические моменты), чтобы вы также смогли оценить размеры “катастрофы”.

Перевожу с английского, документация DirectX SDK за август 2007 года:

Direct3D 10.1 добавляет 3 новых API интерфейса. Они добавлены в Direct3D.1 DLL (D3D10_1.DLL и D3D10Core.dll), и будут доступны в Windows Vista Service Pack 1, а именно:
две новые функции D3D10CreateDevice1 и D3D10CreateDeviceAndSwapChain1 для создания интерфейса ID3D10Device1, который получил новые методы для создания интерфейса блендинга ID3D10BlendState1, поддерживающего независимые моды блендинга для каждой поверхности рендеринга и для создания интерфейса ID3D10ShaderResourceView1 c подержкой новых массивов кубических текстур (см. D3D10_TEXCUBE_ARRAY_SRV1).

Соответственно, появляется SM 4.1 для поддержки дополнительного метода работы с субресурсами и массивами кубических текстур.

Правда, к выходу Windows Vista Service Pack 1 список изменений может быть дополнен. Думается, что если бы Microsoft знала, какую волну подымет анонс и какой это найдет резонанс в среде технических дилетантов, она бы анонсировала его только вместе с выходом Windows Vista Service Pack 1, тем более, что всем кто следит за DirectX, о выходе версии DirectX 10.1 было известно давным-давно. Ни один разработчик не будет поддерживать DirectX 10.1 эксклюзивно, и если хочется поддерживать оба варианта, то никаких усилий для этого прикладывать не надо.

При написании статьи ни один сайт или любой другой информационный ресурс не пострадал от копипэйста или плагиата, за исключением нескольких строк, любезно предоставленных для цитирования компанией Microsoft.

Все написанное автором выражает только его личную точку зрения, которая может не соотвествовать объективной реальности. Свою точку зрения (по любому вопросу) автор с радостью и благодарностью изменит, если найдет ваши аргументы убедительными. Эти аргументы, критику, предложения и любые мысли вслух, имеющие какое-нибудь отношение к рассматриваемым вопросам, можно изложить здесь

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *