Direct3D 11

Поделись знанием:
(перенаправлено с «DirectX 11»)
Перейти к: навигация, поиск

Direct3D 11 (D3D11) — компонент интерфейса программирования приложений (англ. API) DirectX 11, 11-я версия Direct3D, преемник Direct3D 10/10.1. Direct3D 11 обеспечивает функции для взаимодействия операционной системы и приложений с драйверами видеокарты. Эти функции не привязаны к следующей операционной системе в линейке Windows (Windows 7) и доступны в Windows Vista. Частично D3D11 работает на видеокартах уровня Direct3D 9-10. Первые предварительные версии появились в ноябре 2008 года. Официальная финальная версия вышла 22 октября 2009 года в составе Windows 7. 28 октября 2009 года DirectX 11 стал официально доступен для Windows Vista и Windows Server 2008 посредством скачивания через Windows Update.[1]





Тесселяция

В D3D11 добавляется 3 дополнительных стадии конвейера визуализации, целью введения которых является эффективная тесселяция поверхностей.

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

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

Оболочечный шейдер вызывается для каждого патча. В качестве входных данных используются контрольные точки патча из вершинного шейдера. Оболочечный шейдер имеет два основных применения. Первое (опционально) — это конвертирование контрольных точек из одного представления в другое. Например, он позволяет реализовать метод, представленный в статье [research.microsoft.com/~cloop/msrtr-2007-44.pdf Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches]. После этого шейдера контрольные точки пересылаются напрямую дальше, минуя тесселятор. Другое применение — вычисление подходящего параметра тесселяции, который затем передаётся на стадию тесселяции. Такой подход позволяет делать адаптивную тесселяцию, которая может быть использована в случае видозависимых уровней детализации (LOD). Параметр тесселяции определяется для каждой грани патча и варьируются в диапазоне от 2 до 64. Это означает, что каждая грань треугольного (или квадратного) патча может быть разбита на 2 (или максимум 64) грани.

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

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

Вычислительные шейдеры и неупорядоченная память

Direct3D 11 вводит новый тип шейдера — вычислительный шейдер (Compute Shader). Вычислительный шейдер вызывается как регулярный массив потоков. Потоки делятся на группы. Каждая группа имеет 32 Кб памяти, разделяемой между потоками группы. Таким образом потоки в группе могут обмениваться результатами, улучшая свою производительность. Также потоки могут производить чтения и записи с произвольным доступом к графическим ресурсам: текстурам, массивам вершин, рендер таргетам. Эти доступы к памяти неупорядочены, хотя синхронизация различных инструкций осуществляется, когда это действительно необходимо.

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

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

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

Многопоточная визуализация

D3D10 позволяет передавать команды визуализации только из одного потока (на данный момент существует специальный многопоточный режим, но из-за низкой производительности Майкрософт не рекомендует использовать его). Как известно, передача команд визуализации через Direct3D предполагает использование дополнительных вычислительных ресурсов CPU. Учитывая тенденцию увеличения числа ядер центрального процессора, вводится поддержка более продвинутой многопоточности, чтобы распределять эту работу между несколькими потоками, тем самым производя её более эффективно.

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

В отличие от других возможностей, в Direct3D 11 многопоточная визуализация реализуется программно через драйвер. Соответствующие драйверы D3D10 (возможно, даже D3D9) позволяют выполнять многопоточную визуализацию гораздо эффективней, чем ранее. Определённый уровень многопоточности будет доступен даже без новых драйверов, однако пока неясно, какие ограничения будут в этом случае.

Другие возможности

Поддержка динамической линковки шейдеров (по аналогии Cg). Это позволяет разделить написание и компиляцию шейдеров света и материалов. Позднее связывание производится при выставлении шейдера. Этот подход является решением проблемы комбинаторного взрыва в случае различных источников света и материалов (он и некоторые другие проблемы обсуждаются в секции 7.9 книги [www.amazon.com/Real-Time-Rendering-Third-Tomas-Akenine-Moller/dp/1568814240/ Real-Time Rendering, 3rd Edition])

Добавлены два новых формата сжатых текстур. BC6 поддерживает широкий динамический диапазон RGB текстуры, используя при этом 1 байт на каждый тексель (взамен 6 байт в случае 6-битных 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

DirectX 11 и Управляемый код

SlimDX и SharpDX поддерживают DirectX 11. XNA — нет

Игровые движки с поддержкой DirectX 11

См. также

Напишите отзыв о статье "Direct3D 11"

Примечания

  1. Andrew Burnes. [ve3d.ign.com/articles/news/51031/DirectX-11-Released-For-Windows-Vista DirectX 11 Released For Windows Vista] (англ.). Voodoo Extreme 3D (28 октября 2009 года). Проверено 29 октября 2009. [www.webcitation.org/66DbpVb8v Архивировано из первоисточника 17 марта 2012].
  2. [www.gametech.ru/cgi-bin/show.pl?option=news&id=6818 Battlefield Bad Company 2 с поддержкой DirectX 11]. GameTech (16 апреля 2009 года). Проверено 1 ноября 2009. [www.webcitation.org/66DbtqG29 Архивировано из первоисточника 17 марта 2012].

Ссылки

  • Андрей Воробьев, Алексей Берилло. [www.ixbt.com/video3/cypress-part1.shtml ATI RADEON HD 5870 1024MB PCI-E. В преддверии DirectX 11. Мощный удар из Канады - ATI (AMD) выпускает нового короля 3D-графики Часть 1 — Теория и архитектура]. iXBT.com (23 сентября 2009 года). — Первая статья из цикла статей, описывающих ATI RADEON HD 5870, которая фокусируется на технологиях и Direct3D 11. Проверено 24 сентября 2009. [www.webcitation.org/66Dbup7l3 Архивировано из первоисточника 17 марта 2012].
  • Александр Бакаткин. [www.3dnews.ru/news/40_nm_tehprotsess_i_directx_11_osobennosti_videokart_v_2009_godu/ 40-нм техпроцесс и DirectX 11 - особенности видеокарт в 2009 году]. 3DNews (6 октября 2008 года). — новость. Проверено 30 ноября 2008.
  • Accent. [www.ixbt.com/news/hard/index.shtml?12/09/03 AMD рассказала о достоинствах DirectX 11]. iXBT.com (29 июня 2009 года). — новость. Проверено 29 июня 2009. [www.webcitation.org/66DbzbpSk Архивировано из первоисточника 17 марта 2012].
  • Chas Boyd. [s08.idav.ucdavis.edu/boyd-dx11-compute-shader.pdf The DirectX 11 Compute Shader]. Microsoft. — презентация, 1 Мб.

Отрывок, характеризующий Direct3D 11

Малый с засученным рукавом на ходу еще ударил в лицо рвавшегося в дверь кузнеца и дико закричал:
– Ребята! наших бьют!
В это время первый кузнец поднялся с земли и, расцарапывая кровь на разбитом лице, закричал плачущим голосом:
– Караул! Убили!.. Человека убили! Братцы!..
– Ой, батюшки, убили до смерти, убили человека! – завизжала баба, вышедшая из соседних ворот. Толпа народа собралась около окровавленного кузнеца.
– Мало ты народ то грабил, рубахи снимал, – сказал чей то голос, обращаясь к целовальнику, – что ж ты человека убил? Разбойник!
Высокий малый, стоя на крыльце, мутными глазами водил то на целовальника, то на кузнецов, как бы соображая, с кем теперь следует драться.
– Душегуб! – вдруг крикнул он на целовальника. – Вяжи его, ребята!
– Как же, связал одного такого то! – крикнул целовальник, отмахнувшись от набросившихся на него людей, и, сорвав с себя шапку, он бросил ее на землю. Как будто действие это имело какое то таинственно угрожающее значение, фабричные, обступившие целовальника, остановились в нерешительности.
– Порядок то я, брат, знаю очень прекрасно. Я до частного дойду. Ты думаешь, не дойду? Разбойничать то нонче никому не велят! – прокричал целовальник, поднимая шапку.
– И пойдем, ишь ты! И пойдем… ишь ты! – повторяли друг за другом целовальник и высокий малый, и оба вместе двинулись вперед по улице. Окровавленный кузнец шел рядом с ними. Фабричные и посторонний народ с говором и криком шли за ними.
У угла Маросейки, против большого с запертыми ставнями дома, на котором была вывеска сапожного мастера, стояли с унылыми лицами человек двадцать сапожников, худых, истомленных людей в халатах и оборванных чуйках.
– Он народ разочти как следует! – говорил худой мастеровой с жидкой бородйой и нахмуренными бровями. – А что ж, он нашу кровь сосал – да и квит. Он нас водил, водил – всю неделю. А теперь довел до последнего конца, а сам уехал.
Увидав народ и окровавленного человека, говоривший мастеровой замолчал, и все сапожники с поспешным любопытством присоединились к двигавшейся толпе.
– Куда идет народ то?
– Известно куда, к начальству идет.
– Что ж, али взаправду наша не взяла сила?
– А ты думал как! Гляди ко, что народ говорит.
Слышались вопросы и ответы. Целовальник, воспользовавшись увеличением толпы, отстал от народа и вернулся к своему кабаку.
Высокий малый, не замечая исчезновения своего врага целовальника, размахивая оголенной рукой, не переставал говорить, обращая тем на себя общее внимание. На него то преимущественно жался народ, предполагая от него получить разрешение занимавших всех вопросов.
– Он покажи порядок, закон покажи, на то начальство поставлено! Так ли я говорю, православные? – говорил высокий малый, чуть заметно улыбаясь.
– Он думает, и начальства нет? Разве без начальства можно? А то грабить то мало ли их.
– Что пустое говорить! – отзывалось в толпе. – Как же, так и бросят Москву то! Тебе на смех сказали, а ты и поверил. Мало ли войсков наших идет. Так его и пустили! На то начальство. Вон послушай, что народ то бает, – говорили, указывая на высокого малого.
У стены Китай города другая небольшая кучка людей окружала человека в фризовой шинели, держащего в руках бумагу.
– Указ, указ читают! Указ читают! – послышалось в толпе, и народ хлынул к чтецу.
Человек в фризовой шинели читал афишку от 31 го августа. Когда толпа окружила его, он как бы смутился, но на требование высокого малого, протеснившегося до него, он с легким дрожанием в голосе начал читать афишку сначала.
«Я завтра рано еду к светлейшему князю, – читал он (светлеющему! – торжественно, улыбаясь ртом и хмуря брови, повторил высокий малый), – чтобы с ним переговорить, действовать и помогать войскам истреблять злодеев; станем и мы из них дух… – продолжал чтец и остановился („Видал?“ – победоносно прокричал малый. – Он тебе всю дистанцию развяжет…»)… – искоренять и этих гостей к черту отправлять; я приеду назад к обеду, и примемся за дело, сделаем, доделаем и злодеев отделаем».
Последние слова были прочтены чтецом в совершенном молчании. Высокий малый грустно опустил голову. Очевидно было, что никто не понял этих последних слов. В особенности слова: «я приеду завтра к обеду», видимо, даже огорчили и чтеца и слушателей. Понимание народа было настроено на высокий лад, а это было слишком просто и ненужно понятно; это было то самое, что каждый из них мог бы сказать и что поэтому не мог говорить указ, исходящий от высшей власти.
Все стояли в унылом молчании. Высокий малый водил губами и пошатывался.
– У него спросить бы!.. Это сам и есть?.. Как же, успросил!.. А то что ж… Он укажет… – вдруг послышалось в задних рядах толпы, и общее внимание обратилось на выезжавшие на площадь дрожки полицеймейстера, сопутствуемого двумя конными драгунами.
Полицеймейстер, ездивший в это утро по приказанию графа сжигать барки и, по случаю этого поручения, выручивший большую сумму денег, находившуюся у него в эту минуту в кармане, увидав двинувшуюся к нему толпу людей, приказал кучеру остановиться.
– Что за народ? – крикнул он на людей, разрозненно и робко приближавшихся к дрожкам. – Что за народ? Я вас спрашиваю? – повторил полицеймейстер, не получавший ответа.
– Они, ваше благородие, – сказал приказный во фризовой шинели, – они, ваше высокородие, по объявлению сиятельнейшего графа, не щадя живота, желали послужить, а не то чтобы бунт какой, как сказано от сиятельнейшего графа…
– Граф не уехал, он здесь, и об вас распоряжение будет, – сказал полицеймейстер. – Пошел! – сказал он кучеру. Толпа остановилась, скучиваясь около тех, которые слышали то, что сказало начальство, и глядя на отъезжающие дрожки.
Полицеймейстер в это время испуганно оглянулся, что то сказал кучеру, и лошади его поехали быстрее.
– Обман, ребята! Веди к самому! – крикнул голос высокого малого. – Не пущай, ребята! Пущай отчет подаст! Держи! – закричали голоса, и народ бегом бросился за дрожками.
Толпа за полицеймейстером с шумным говором направилась на Лубянку.
– Что ж, господа да купцы повыехали, а мы за то и пропадаем? Что ж, мы собаки, что ль! – слышалось чаще в толпе.


Вечером 1 го сентября, после своего свидания с Кутузовым, граф Растопчин, огорченный и оскорбленный тем, что его не пригласили на военный совет, что Кутузов не обращал никакого внимания на его предложение принять участие в защите столицы, и удивленный новым открывшимся ему в лагере взглядом, при котором вопрос о спокойствии столицы и о патриотическом ее настроении оказывался не только второстепенным, но совершенно ненужным и ничтожным, – огорченный, оскорбленный и удивленный всем этим, граф Растопчин вернулся в Москву. Поужинав, граф, не раздеваясь, прилег на канапе и в первом часу был разбужен курьером, который привез ему письмо от Кутузова. В письме говорилось, что так как войска отступают на Рязанскую дорогу за Москву, то не угодно ли графу выслать полицейских чиновников, для проведения войск через город. Известие это не было новостью для Растопчина. Не только со вчерашнего свиданья с Кутузовым на Поклонной горе, но и с самого Бородинского сражения, когда все приезжавшие в Москву генералы в один голос говорили, что нельзя дать еще сражения, и когда с разрешения графа каждую ночь уже вывозили казенное имущество и жители до половины повыехали, – граф Растопчин знал, что Москва будет оставлена; но тем не менее известие это, сообщенное в форме простой записки с приказанием от Кутузова и полученное ночью, во время первого сна, удивило и раздражило графа.
Впоследствии, объясняя свою деятельность за это время, граф Растопчин в своих записках несколько раз писал, что у него тогда было две важные цели: De maintenir la tranquillite a Moscou et d'en faire partir les habitants. [Сохранить спокойствие в Москве и выпроводить из нее жителей.] Если допустить эту двоякую цель, всякое действие Растопчина оказывается безукоризненным. Для чего не вывезена московская святыня, оружие, патроны, порох, запасы хлеба, для чего тысячи жителей обмануты тем, что Москву не сдадут, и разорены? – Для того, чтобы соблюсти спокойствие в столице, отвечает объяснение графа Растопчина. Для чего вывозились кипы ненужных бумаг из присутственных мест и шар Леппиха и другие предметы? – Для того, чтобы оставить город пустым, отвечает объяснение графа Растопчина. Стоит только допустить, что что нибудь угрожало народному спокойствию, и всякое действие становится оправданным.
Все ужасы террора основывались только на заботе о народном спокойствии.
На чем же основывался страх графа Растопчина о народном спокойствии в Москве в 1812 году? Какая причина была предполагать в городе склонность к возмущению? Жители уезжали, войска, отступая, наполняли Москву. Почему должен был вследствие этого бунтовать народ?
Не только в Москве, но во всей России при вступлении неприятеля не произошло ничего похожего на возмущение. 1 го, 2 го сентября более десяти тысяч людей оставалось в Москве, и, кроме толпы, собравшейся на дворе главнокомандующего и привлеченной им самим, – ничего не было. Очевидно, что еще менее надо было ожидать волнения в народе, ежели бы после Бородинского сражения, когда оставление Москвы стало очевидно, или, по крайней мере, вероятно, – ежели бы тогда вместо того, чтобы волновать народ раздачей оружия и афишами, Растопчин принял меры к вывозу всей святыни, пороху, зарядов и денег и прямо объявил бы народу, что город оставляется.
Растопчин, пылкий, сангвинический человек, всегда вращавшийся в высших кругах администрации, хотя в с патриотическим чувством, не имел ни малейшего понятия о том народе, которым он думал управлять. С самого начала вступления неприятеля в Смоленск Растопчин в воображении своем составил для себя роль руководителя народного чувства – сердца России. Ему не только казалось (как это кажется каждому администратору), что он управлял внешними действиями жителей Москвы, но ему казалось, что он руководил их настроением посредством своих воззваний и афиш, писанных тем ёрническим языком, который в своей среде презирает народ и которого он не понимает, когда слышит его сверху. Красивая роль руководителя народного чувства так понравилась Растопчину, он так сжился с нею, что необходимость выйти из этой роли, необходимость оставления Москвы без всякого героического эффекта застала его врасплох, и он вдруг потерял из под ног почву, на которой стоял, в решительно не знал, что ему делать. Он хотя и знал, но не верил всею душою до последней минуты в оставление Москвы и ничего не делал с этой целью. Жители выезжали против его желания. Ежели вывозили присутственные места, то только по требованию чиновников, с которыми неохотно соглашался граф. Сам же он был занят только тою ролью, которую он для себя сделал. Как это часто бывает с людьми, одаренными пылким воображением, он знал уже давно, что Москву оставят, но знал только по рассуждению, но всей душой не верил в это, не перенесся воображением в это новое положение.