Direct3D 11 (D3D11) - компонент інтерфейсу програмування додатків ( англ. API ) DirectX 11, 11-а версія Direct3D, наступник Direct3D 10/10.1. Direct3D 11 забезпечує функції для взаємодії операційної системи і додатків з драйверами відеокарти. Ці функції не прив'язані до наступної операційній системі в лінійці Windows ( Windows 7) і доступні в Windows Vista. Частково D3D11 працює на відеокартах рівня Direct3D 9-10.

Microsoft-DirectX-11-Logo-wordmark.svg

Перші попередні версії з'явилися в листопаді 2008 року. Офіційна фінальна версія вийшла 22 жовтня 2009 в складі Windows 7. 28 жовтня 2009 DirectX 11 став офіційно доступний для Windows Vista і Windows Server 2008 за допомогою скачування через Windows Update. [1]


1. Тесселяція

У D3D11 додається 3 додаткових стадії конвеєра візуалізації, метою введення яких є ефективна тесселяция поверхонь. Більш докладно стадії розбираються в книзі Real-Time Rendering, 3rd Edition в главі Graphics Processing Unit.

Конвеєр D3D11 включає три нових стадії між стадіями вершинного і геометричного шейдера. Дві з них є програмованими (стадії оболонкового (hull shader) і domain шейдерів) і одна - конфігурується (стадія тесселяції):

Представлений конвеєр оперує сітками, заданими поверхневими патчами. Основними примітивами D3D11 є трикутні та квадратні патчі. Форма кожного патча визначається числом контрольних точок. У вершинні шейдери ці точки трансформуються, скіни і (або) морфем послідовно.

Оболончатий шейдер викликається для кожного патча. В якості вхідних даних використовуються контрольні точки патча з вершинного шейдера. Оболончатий шейдер має два основних застосування. Перше (опціонально) - це конвертація контрольних точок з одного подання в інше. Наприклад, він дозволяє реалізувати метод, представлений в статті Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches. Після цього шейдера контрольні точки пересилаються безпосередньо далі, минаючи тесселятор. Інше застосування - обчислення підходящого параметра тесселяції, який потім передається на стадію тесселяції. Такий підхід дозволяє робити адаптивну тесселяції, яка може бути використана у разі відозавісімих рівнів деталізації (LOD). Параметр тесселяції визначається для кожної грані патча і варіюються в діапазоні від 2 до 64. Це означає, що кожна грань трикутного (або квадратного) патча може бути розбита на 2 (або максимум 64) грані.

Стадія тесселятор представлена ​​фіксованим набором функції (добре конфігурується), які використовують параметр тесселяції для подразбіенія патча на кілька трикутників або квад. Тесселятор не має доступу до контрольних крапках - всі рішення про розбиття приймаються на основі конфігураційних і тесселяціонних параметрів, що передаються з оболонкового шейдера. Кожна вершина після стадії тесселяції передається в domain шейдер, причому передаються тільки координати параметризації (parametrization coordinates).

Domain shader оперує parametrization coordinates патча для кожної вершини роздільно, хоча є можливість отримати доступ до трансформованим контрольним точкам для всього патча. Domain шейдер відправляє всю інформацію про вершині (позицію, текстурні координати, і т. п.) в геометричний шейдер (або на стадію кліпування, якщо геометричний шейдер не заданий). По суті справи, він оцінює представлення поверхні в кожній точці. На даній стадії може бути застосований метод карт зсуву (displacement mapping).

Корисні посилання:


2. Обчислювальні шейдери і неупорядкована пам'ять

Direct3D 11 вводить новий тип шейдера - обчислювальний шейдер (Compute Shader). Обчислювальний шейдер викликається як регулярний масив потоків. Потоки діляться на групи. Кожна група має 32 Кб пам'яті, що розділяється між потоками групи. Таким чином потоки в групі можуть обмінюватися результатами, покращуючи свою продуктивність. Також потоки можуть виробляти читання і запису з довільним доступом до графічних ресурсів: текстурам, масивам вершин, рендер Таргет. Ці доступи до пам'яті невпорядковані, хоча синхронізація різних інструкцій здійснюється, коли це дійсно необхідно.

Піксельні (фрагментного) шейдери можуть також читати по довільному адресою, що дозволяє записувати структури даних, які можуть бути потім використані в обчислювальному шейдери, або навпаки. Варто відзначити, що піксельні шейдери завжди мали можливість довільного доступу на читання через текстурні лукапи.

Обчислювальні шейдери можуть також проводити операції такі, як summed-area tables, швидке Фур'є-перетворення значно швидше, ніж раніше застосовувані методи на графічному процесорі. На даний момент Microsoft досліджує бібліотеки, що забезпечують подібні розрахунки. Microsoft вважає, що алгоритми, такі як A-буфер візуалізація і трасування променів можуть також бути здійснені ефективно, але на даний момент немає реальних показників, які свідчать про їх ефективність.

Виклик обчислювального шейдера замінює всі стадії конвеєра візуалізації. Тим не менш, можна змішувати обчислювальні шейдери і традиційний рендер шляхом використання їх результатів. Наприклад, обробка зображення після візуалізації обчислювальним шейдером (можна завантажувати додаткові структури даних).

Корисні посилання:


3. Багатопотокова візуалізація

D3D10 дозволяє передавати команди візуалізації тільки з одного потоку (на даний момент існує спеціальний багатопотоковий режим, але через низьку продуктивність Майкрософт не рекомендує використовувати його). Як відомо, передача команд візуалізації через Direct3D припускає використання додаткових обчислювальних ресурсів CPU. Враховуючи тенденцію збільшення числа ядер центрального процесора, вводиться підтримка більш просунутою багатопоточності, щоб розподіляти цю роботу між декількома потоками, тим самим виробляючи її більш ефективно.

Direct3D 11 дає можливість створювати дисплейні списки з декількох потоків і виконувати їх з головного потоку візуалізації. Крім того, пристрій, який створює ресурси, було винесено з контексту, який передає команди візуалізації. Це дозволяє створювати ресурси асинхронно. Відкладені контексти (Deferred Contexts) використовуються для створення дисплейних списків і прямий контекст (Immediate Context) для передачі команд візуалізації на GPU, включаючи обробку дисплейних списків, створених у відкладених контекстах.

На відміну від інших можливостей, в Direct3D 11 багатопотокова візуалізація реалізується програмно через драйвер. Відповідні драйвери D3D10 (можливо, навіть D3D9) дозволяють виконувати багатопотокове візуалізацію набагато ефективніше, ніж раніше. Певний рівень багатопоточності буде доступний навіть без нових драйверів, проте поки неясно, які обмеження будуть в цьому випадку.


4. Інші можливості

Підтримка динамічної лінковки шейдеров (за аналогією Cg). Це дозволяє розділити написання та компіляцію шейдеров світла і матеріалів. Пізніше зв'язування проводиться при виставленні шейдера. Цей підхід є вирішенням проблеми комбінаторного вибуху в разі різних джерел світла і матеріалів (він і деякі інші проблеми обговорюються в секції 7.9 книги Real-Time Rendering, 3rd Edition)

Додано два нових формату стислих текстур. BC6 підтримує широкий динамічний діапазон RGB текстури, використовуючи при цьому 1 байт на кожен тексель (замість 6 байт в разі 16-бітних RGB речових текстури). BC7 підтримує вузький динамічний діапазон RGB або RGBA текстур. Він також використовує 1 байт на тексель (як DXT5/BC3), але надає значно кращу якість в порівнянні з форматами текстур D3D10. Обидва нових формату використовують кілька типів блоків - утиліта для стиснення вибирає відповідний тип блоку на основі його змісту.

Формати блоків стиснення D3D9 і D3D10 засновані на ідеї, що кожен блок 4 4 з текселей містить всі свої значення у вигляді однієї лінії, і біти кожного текселя кодують позицію в цій лінії. Наприклад, в DXT1/BC1 рядок у просторі RGB представляє дві кінцеві точки RGB, і кожен тексель використовує два біти, щоб вказати який колір використовується з чотирьох точок вздовж лінії.

Нові формати D3D11 підтримують типи блоків з однією, двома і навіть трьома (у разі BC7) колірними лініями. Існує компроміс між числом ліній і числом точок вздовж такої лінії, оскільки кожен блок займає однаковий об'єм пам'яті. В принципі, блок 4 4 з двома кольоровими лініями вимагає додатково 16 біт на кожен блок для завдання яка лінія кожного текселя була пов'язана з ним (у випадку трьох колірних ліній буде потрібно ще більше біт). Для зниження вимог по пам'яті підтримуються тільки невеликий набір можливих моделей колірних ліній. Для кожного блоку утиліта упаковки вибирає кращий варіант з цієї підмножини.

Direct3D 11 має більш жорстку специфікацію текстур. Результати декомпресії повинні бути точними і субтексельная / субміп фільтрація повинна забезпечувати точність не менше 8 біт.

Direct3D 11 дозволяє використовувати текстури, які мають максимальний розмір у діапазоні від 8K-16K текселей. Відзначимо, що 16K х 16K DXT1/BC1 текстура займає 128MB - не так багато ігор буде використовувати такі великі текстури, але це може бути підходящим для методик зразок мегатекстури. Загалом, тепер у D3D11 ресурс може мати розмір до 2 Гб.

Апаратне забезпечення може додатково підтримувати (опціонально) речові числа з плаваючою точкою подвійної точності.

На Gamefest 2008 також був представлений слайд з безліччю інших нововведень, деталі яких не були пояснені:

  • Адресуємий потоковий висновок (Addressable Stream Out)
  • Непряма отрісовка (Draw Indirect)
  • Покращений Gather4 (Improved Gather4)
  • Instance programming model для геометричних шейдерів (Geometry shader instance programming model)
  • Min-LOD texture clamps
  • Conservative oDepth
  • Pull-model attribute eval
  • Read-only depth or stencil views

5. DirectX 11 і Керований код

SlimDX і SharpDX підтримують DirectX 11. XNA - немає

6. Ігри з підтримкою DirectX 11

Крім того, підтримка DirectX 11 впроваджена в наступні ігрові движки:


Примітки

  1. Andrew Burnes DirectX 11 Released For Windows Vista - ve3d.ign.com/articles/news/51031/DirectX-11-Released-For-Windows-Vista (Англ.) . Voodoo Extreme 3D (28 жовтня 2009 року). Читальний - www.webcitation.org/66DbpVb8v з першоджерела 17 березня 2012.
  2. Jube Colin McRae: DiRT 2 Available In DirectX 11 - ve3d.ign.com/articles/news/48845/Colin-McRae-DiRT-2-Available-In-DirectX-11 (Англ.) . Voodoo Extreme 3D (6 липня 2009 року). Читальний - www.webcitation.org/66DbqDjlS з першоджерела 17 березня 2012.
  3. BattleForge з підтримкою DirectX 11 - www.gametech.ru/cgi-bin/show.pl?option=news&id=9363. GameTech (7 жовтня 2009 року). Читальний - www.webcitation.org/66Dbr6HgR з першоджерела 17 березня 2012.
  4. Andrew Burnes ATI On DirectX 11 Gaming - ve3d.ign.com/articles/news/50217/ATI-On-DirectX-11-Gaming (Англ.) . Voodoo Extreme 3D (11 вересня 2009 року). Читальний - www.webcitation.org/65nczOAPh з першоджерела 29 лютого 2012.
  5. 1 2 3 Accent AMD представила 3D-карти ATI Radeon HD 5800 з підтримкою DirectX11 на самому продуктивному в світі GPU - www.ixbt.com/news/hard/index.shtml?12/42/19. iXBT.com (23 вересня 2009 року). Читальний - www.webcitation.org/66DbsNNJk з першоджерела 17 березня 2012.
  6. Battlefield Bad Company 2 з підтримкою DirectX 11 - www.gametech.ru/cgi-bin/show.pl?option=news&id=6818. GameTech (16 квітня 2009 року). Читальний - www.webcitation.org/66DbtqG29 з першоджерела 17 березня 2012.