Variable rate shading что это

Что такое VRS и как он влияет на производительность в играх — главное из анализа Digital Foundry

Технология оптимизации, у которой большое будущее.

Variable rate shading (VRS) — технология, призванная повысить производительность путём оптимизация шейдинга. В обычных условиях происходит один вызов шейдинга для каждого пикселя в кадре. Соответственно, с повышением разрешения изображения системе требуется больше мощностей.

Однако на экране часто присутствует большое количество идентичных пикселей — примером тому может служит, например, однотонное небо на горизонте. В таких случаях ресурсы системы расходуются нерационально, ведь при рендере всё равно обрабатывается каждый пиксель отдельно. VRS позволяет группировать одинаковые пиксели в кадре и вызывать шейдинг сразу для целых групп.

В Digital Foundry рассказали, как работает эта технология, а мы выбрали из ролика главное.

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

Сегодня VRS можно увидеть, например, в Wolfenstein: Youngblood. В Digital Foundry не смогли заметить особой разницы в качестве изображения между выключенным и включённым VRS, но во втором случае прирост в производительности составил порядка 10%.

В Gears: Tactics включение VRS может дать от 13% до 30% прироста FPS в зависимости от настроек графики.

Впрочем, в Gears: Tactics заметно и ухудшение изображения с включённым VRS. Это связано с тем, игре используется более ограниченная и менее гибкая первая версия VRS, которая требует ручной работы и группирует пиксели не по цвету, а по объектам и их расположению в кадре.

Кроме того, VRS в Gears: Tactics в его текущем состоянии затрагивает и элементы интерфейса, чего происходить не должно.

При использовании VRS разработчикам приходится использовать фильтры, чтобы изображение не выглядело «пикселизованным».

В движении недостатки технологии практически незаметны. Это можно увидеть в кат-сценах Gears: Tactics, где камера постоянно перемещается, а не находится в одной позиции, как во время самой игры.

Источник

AMD запатентовала Variable Rate Shading

Variable rate shading что это. variable rate shading. Variable rate shading что это фото. Variable rate shading что это-variable rate shading. картинка Variable rate shading что это. картинка variable rate shadingОдна из новых функций архитектуры Turing является поддержка Variable Rate Shading (VRS). NVIDIA реализовала VRS под собственным названием NVIDIA Adaptive Shading (NAS). Все современные видеокарты на архитектуре Turing, как GeForce RTX, так и GeForce GTX 1660 Ti, поддерживают данную технологию.

Оказывается, еще 25 мая 2017 года AMD подала патентную заявку, описывающую Variable Rate Shading. Но опубликован патент только сейчас.

Ниже приведено оригинальное описание патента на английском:

«A technique for performing rasterization and pixel shading with decoupled resolution is provided herein. The technique involves performing rasterization as normal to generate fine rasterization data and a set of (fine) quads. The quads are accumulated into a tile buffer and coarse quads are generated from the quads in the tile buffer based on a shading rate. The shading rate determines how many pixels of the fine quads are combined to generate coarse pixels of the coarse quads. Combination of fine pixels involves generating a single coarse pixel for each such fine pixel to be combined. The positions of the coarse pixels of the coarse quads are set based on the positions of the corresponding fine pixels. The coarse quads are shaded normally and the resulting shaded coarse quads are modified based on the fine rasterization data to generate shaded fine quads.»

Как видим, патент как раз описывает реализацию NVIDIA Adaptive Shading. Не совсем понятно, как данный патент скажется на реализации VRS от NVIDIA. Сама AMD многократно подчеркивала свою приверженность открытым стандартам. Можно упомянуть разработку FreeSync против G-Sync (недавно NVIDIA как раз поддержала Adaptive Sync), также AMD проявляет интерес к созданию альтернативы DLSS через Windows ML.

Что такое NVIDIA Adaptive Shading

Variable rate shading что это. thumb 067E19BFB046449C961A3D3BD2DDA45A. Variable rate shading что это фото. Variable rate shading что это-thumb 067E19BFB046449C961A3D3BD2DDA45A. картинка Variable rate shading что это. картинка thumb 067E19BFB046449C961A3D3BD2DDA45A

По сути, Variable Rate Shading является технологией сжатия на уровне затенения. Мы уже знакомы с технологиями сжатия музыки (MP3), изображений (JPG), да и архитектуры GPU опираются на сжатие памяти. Как правило, в процессе шейдинга каждый пиксель просчитывается каждый раз. Но подобная точность требуется далеко не всегда. Многие участки на протяжении нескольких кадров не меняются. Здесь как раз и пригодится Variable Rate Shading.

В случае Variable Rate Shading кадр разделяется на несколько блоков. В зависимости от контента кадра и скорости, с которой объект меняется на следующих кадрах, размер блоков может меняться. Также могут использоваться разные методы Variable Rate Shading.

Начнем с Content Adaptive Shading, здесь анализируется содержимое кадра. И однородные поверхности без особых отличий 3D-модели или текстуры могут комбинироваться. Motion Adaptive Shading оценивает движения и изменения, которые происходят при переходе от одного кадра к другому. Как раз в Wolfenstein II: The new Colossus и используется Motion Adaptive Shading. Motion Adaptive Shading опирается на то, что движущиеся объекты воспринимаются человеческим глазом с меньшим разрешением, чем стационарные. Технология Motion Adaptive Shading не должна давать какие-либо существенные отличия по качеству картинки.

Мы провели несколько тестов NAS. Активация Adaptive Shading приводит к увеличению производительности от 6,8% до 9,4% в случае низкого уровня качества NAS. Если же включить режим высокого качества NAS, то прирост составит всего около 2%.

Впрочем, как раз в случае Wolfenstein II: The New Colossus и новых видеокарт RTX с производительностью никаких проблем нет. Даже GeForce RTX 2070 дает достаточную частоту кадров в разрешении 3.840 x 2.160 пикселей в режиме Extreme. В случае GeForce GTX 1660 Ti все выглядит несколько иначе. С менее мощными видеокартами и новыми играми на Vulkan API технология NVIDIA Adaptive Shading может оказать более существенное влияние.

Источник

В DirectX 12 добавлена поддержка Variable Rate Shading

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

Variable rate shading что это. sm.Tier2 Default side by side.750. Variable rate shading что это фото. Variable rate shading что это-sm.Tier2 Default side by side.750. картинка Variable rate shading что это. картинка sm.Tier2 Default side by side.750

На мероприятии Game Developers Conference 2019 корпорация из Редмонда объявила о реализации технологии Variable Rate Shading, которая входит в API DirectX 12. Эта технология является функциональным аналогом NVIDIA Adaptive Shading и предназначена для экономии ресурсов видеокарты. Это позволяет снизить нагрузку при просчёте периферийных объектов и зон. При этом технология позволяет повышать детализацию там, где это необходимо.

В результате такая технология повышает производительность в игре без заметной потери качества изображения. В ходе презентации компания показала работу технологии в игре Civilization VI. Как отмечается, кадровая частота в левой части изображения оказалась на 14 % выше, чем в правой при одинаковом качестве.

Ряд компаний, в том числе Turn 10 Studios, Ubisoft, Massive Entertainment, 343 Industries, Stardock, IO Interactive, Activision и Epic Games, уже заявили, что внедрят в свои проекты Variable Rate Shading. При этом в Редмонде заявили, что технология поддерживается картами NVIDIA на архитектуре Turing и будущим семейством Intel Gen11. Также не исключено, что VRS будут поддерживать и будущие дискретные карты Intel, хотя явно этого пока не говорили. А ранее появлялись слухи о поддержке технологии в GPU поколения Navi и игровых next-gen-консолях.

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

Источник

Variable-Rate Shading (VRS)

Мотивация для ВРС

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

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

Без ВРС — многопримерного сглаживания с помощью ресамплинга

Без заливки с переменными частотами единственным средством управления скоростью заливки является многопримерное сглаживание (MSAA) с выполнением на основе образца (также известное как «ресамплинг»).

MSAA — это механизм уменьшения геометрического псевдонима и улучшения качества отрисовки изображения по сравнению с использованием MSAA. Число выборок в MSAA, которое может иметь значение 1x, 2x, 4X, 8X или 16x, регулирует число выборок, выделенных для каждого целевого пикселя рендеринга. Число выборок MSAA должно быть известно перед выделением целевого объекта и не может быть изменено в дальнейшем.

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

Приложение может управлять скоростью заливки, выбирая между выполнением на основе точек или MSAA-with-ресамплинг. Эти два варианта не обеспечивают очень точное управление. Кроме того, может потребоваться уменьшить скорость заливки для определенного класса объектов по сравнению с остальной частью изображения. Такие объекты могут включать объект, лежащий в основе элемента HUD, или прозрачность, размытие (глубину поля, движение и т. д.) или оптическое искажение из-за VR. Но это было бы невозможно, так как качество заливки и затраты зафиксированы для всего изображения.

С заливкой с переменной скоростью (ВРС)

Модель заливки с переменным заливке (ВРС) расширяет интерполяцию с помощью-MSAA в противоположную «грубую» точку (направление), добавляя концепцию грубой заливки. В этом случае заливка может выполняться с частотой более крупных, чем на пиксель. Иными словами, группа пикселей может быть закрашена как единое целое, а результат затем будет транслироваться во все примеры в группе.

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

Ниже приведена таблица, в которой описывается, какой уровень MSAA поддерживается, с крупным размером в пикселях. Некоторые из них не поддерживаются на всех платформах. другие по условию включены в зависимости от возможности (аддитионалшадингратессуппортед), обозначенной «Cap».

Variable rate shading что это. . Variable rate shading что это фото. Variable rate shading что это-. картинка Variable rate shading что это. картинка

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

Уровни компонентов

Существует два уровня реализации ВРС и две возможности, которые можно запросить. Каждый уровень описывается более подробно после таблицы.

Variable rate shading что это. tiers. Variable rate shading что это фото. Variable rate shading что это-tiers. картинка Variable rate shading что это. картинка tiers

Уровень 1

Уровень 2

Список возможностей

Задание скорости заливки

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

Список команд

Это самый простой механизм для настройки скорости заливки. Он доступен на всех уровнях.

Приложение может указать размер грубой точки с помощью метода ID3D12GraphicsCommandList5:: рссетшадинграте. Этот API принимает один аргумент Enum. API предоставляет общий контроль над уровнем качества для отрисовки — возможности установить скорость заливки для каждого рисования.

Поддержка размера грубой точки

Скорости заливки 1×1, 1 экземпляр 2, 2×2 и 2×2 поддерживаются на всех уровнях.

Существует возможность, аддитионалшадингратессуппортед, чтобы указать, поддерживаются ли на устройстве устройства 2×4, 4 экземпляра 2 и 4×4.

Изображение пространства экрана (на основе изображений)

На уровнях 2 и выше можно указать скорость заливки пикселов с помощью изображения на экране.

Изображение пространства экрана позволяет приложению создать изображение «уровень детализации (ЛОДа)», указывающее области с различным качеством, такие как области, на которые распространяется размытие движения, Размытие по глубине поля, прозрачные объекты или элементы пользовательского интерфейса HUD. Разрешение образа находится в макроблоккс; Он не находится в разрешении целевого объекта отрисовки. Иными словами, данные о скорости заливки задаются на уровне гранулярности 8×8 или 16×16 пикселей, как показано размером плитки ВРС.

Размер плитки

Приложение может запрашивать API для получения поддерживаемого размера плитки ВРС для устройства.

Плитки являются квадратными, а размер — ширина или высота плитки в пикселей текстуры.

Если оборудование не поддерживает заливку переменной уровня 2, то запрос возможности для размера плитки возвращает значение 0.

Если оборудование поддерживает заливку переменного уровня 2, то размер плитки будет одним из этих значений.

Размер изображения на экране

Для целевого объекта отрисовки размером <Ртвидс, Рсеигхт>, используя заданный размер плитки с именем врстилесизе, изображение пространства экрана, которое будет охватывать эти измерения.

Левый верхний край изображения на экране (0, 0) заблокирован для верхнего левого угла рендеринга (0, 0).

Чтобы найти координату (x, y) плитки, которая соответствует определенному положению в целевом объекте рендеринга, разделите координаты пространства окна (x, y) на размер плитки, игнорируя дробные разряды.

Если размер изображения на экране больше, чем требуется для данного целевого объекта рендеринга, дополнительные фрагменты справа и (или) снизу не используются.

Если изображение на экране слишком мало для данного целевого объекта рендеринга, все попытки чтения из изображения за пределами фактических экстентов приводят к заливке по умолчанию 1×1. Это связано с тем, что верхний левый рисунок на экране (0, 0) заблокирован для верхнего левого угла рендеринга (0, 0), а «чтение за пределами целевого объекта рендеринга» означает слишком много значений для x и y.

Формат, макет, свойства ресурса

Формат этой поверхности — 8-разрядная поверхность с одним каналом (DXGI_FORMAT_R8_UINT).

Ресурс является TEXTURE2D измерения.

Он не может быть массивом или миппед. Он должен иметь один уровень MIP.

Он содержит число выборок 1 и пример качества 0.

Ожидаемый способ заполнения данных изображения экранного пространства — либо

При создании изображения пространства экрана эти флаги разрешены.

Эти флаги не допускаются.

Тип кучи ресурса не может быть UPLOAD или РЕАДБАКК.

Не удается SIMULTANEOUS_ACCESS ресурс. Ресурс не может быть перекрестным адаптером.

Данные

Состояние ресурса

Ресурс необходимо перевести в состояние только для чтения при использовании в качестве изображения пространства экрана. Для этой цели определено состояние «только для чтения», D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE.

Ресурс изображения перейдет из этого состояния, чтобы снова сделать запись доступным для записи.

Настройка образа

Изображение пространства экрана для указания скорости шейдера задается в списке команд.

Ресурс, заданный в качестве источника скорости заливки, не может быть считан или записан на любом этапе шейдера.

Продвижение и Decay

Ресурс изображения на экране не имеет каких-либо специальных последствий в отношении продвижения или Decay.

Атрибут для каждого примитива

Атрибут «на примитив» добавляет возможность указания Терма скорости заливки в виде атрибута из вершины заставляющего. Этот атрибут имеет плоский цвет, — т. е. он распространяется на все пиксели в текущем треугольнике или примитиве линии. Использование атрибута для каждого примитива может обеспечить более детализированный контроль качества изображения по сравнению с другими описателями скорости заливки.

Если набор VS или GS SV_ShadingRate установлен, но ВРС не включен, семантический параметр не действует. Если для SV_ShadingRate одного примитива не указано значение, то значение скорости заливки 1×1 принимается в качестве вклада для каждого примитива.

Объединение факторов скорости заливки

Различные источники скорости заливки применяются в последовательности с помощью этой схемы.

Variable rate shading что это. combiners. Variable rate shading что это фото. Variable rate shading что это-combiners. картинка Variable rate shading что это. картинка combiners

Каждая пара A и B объединяется с помощью средства объединения.

* При указании скорости шейдера по атрибуту вершины.

Список комбинированных элементов

Поддерживаются следующие комбинирования. Использование средства объединения (C) и двух входных данных (A и B).

где maxRate — это самая крупная допустимая аналитика грубого пикселя на устройстве. Это будет

Выбор средства объединения для заливки переменной скорости задается в списке команд с помощью ID3D12GraphicsCommandList5:: рссетшадинграте.

Если параметры не заданы, то они остаются в расположении по умолчанию, которое является ТРАНЗИТным.

Если источником для объединения является D3D12_AXIS_SHADING_RATE, который не допускается в таблице поддержки, входные данные исключены в поддерживаемую частоту заливки.

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

Состояние по умолчанию и очистка состояния

Все источники скорости заливки, а именно

по умолчанию имеет значение D3D12_SHADING_RATE_1X1. По умолчанию используются значения .

Если изображение пространства экрана не указано, то скорость заливки 1×1 выводится из этого источника.

Если не указано ни одного примитивного атрибута, то скорость заливки 1×1 выводится из этого источника.

ID3D12CommandList:: клеарстате сбрасывает скорость, указанную для состояния конвейера, на значение по умолчанию, а изображение пространства экрана — в значение по умолчанию «нет изображения на экране».

Запрос скорости заливки с помощью SV_ShadingRate

Полезно определить, какая скорость заливки была выбрана оборудованием при любом вызове шейдера пикселей. Это может обеспечить разнообразные оптимизации в коде PS. Системная переменная только для PS SV_ShadingRate предоставляет сведения о скорости заливки.

Тип этой семантики — uint.

Интерпретация данных

Если ВРС не используется

Если некрупная заливка пикселей не используется, то SV_ShadingRate считывается в виде значения 1×1, что означает, что пикселы задаются нормально.

Поведение при выполнении на основе образца

Примечания для отложенной заливки

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

Глубина и трафарет

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

Использование запрошенной скорости заливки

Для всех уровней предполагается, что если запрашивается скорость заливки и она поддерживается в сочетании Device-and-MSAA-Level, то это — скорость заливки, предоставляемая оборудованием.

Запрошенная скорость заливки означает, что скорость заливки, вычисленная как результат работы средств объединения (см. в разделе объединение факторов скорости заливки в этом разделе).

Производные пространства экрана

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

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

Интерполяция атрибута

Входные данные для шейдера пикселей могут быть интерполяции на основе их исходных вершин. Поскольку заливка переменной скорости влияет на области целевого объекта, написанного при каждом вызове шейдера пикселей, он взаимодействует с интерполяцией атрибута. Три типа интерполяции — Center, центроид и Sample.

Center

Центральная часть интерполяции для грубой точки — это геометрический центр полной грубой области. SV_Position всегда интерполируются в центре области грубой точки.

Центроид

При использовании в MSAA грубой заливки пикселей для каждого тонкого пикселя все равно будет выполняться запись в полное число выборок, выделенных для уровня MSAA целевого объекта. Таким образом, расположение интерполяции центроид будет рассматривать все примеры для тонких точек в пределах грубых пикселов. С другой стороны, расположение интерполяции центроид определяется в качестве первого охваченного примера в порядке возрастания индекса выборки. Этот пример действительного покрытия — и-ED с соответствующим битом состояния средства растеризации Самплемаск.

Если на уровне 1 используется штриховка «грубая пиксельная заливка», Самплемаск всегда является полной маской. Если для Самплемаск не задана полная маска, то на уровне 1 отключается грубая заливка пикселей.

Выполнение на основе образца

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

евалуатеаттрибутеснаппед

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

Встроенная функция может EvaluateAttributeSnapped использоваться с затенением грубых пикселей на уровне 2. Его синтаксис такой же, как и всегда.

Для context EvaluateAttributeSnapped имеет параметр offset с двумя полями. Если используется без грубой заливки пикселей, используются только четыре бита нижнего порядка из полного 32. Эти четыре бита представляют диапазон [-8, 7]. Этот диапазон охватывает сетку размером 16 x в пикселе. Диапазон состоит в том, что верхний и левый края пикселя включены, а нижняя и правая границы — нет. Offset (-8,-8) находится в левом верхнем углу, а смещение (7, 7) — в правом нижнем углу. Смещение (0,0) является центром пикселя.

При использовании с грубой заливкой пикселей EvaluateAttributeSnapped параметр offset может указывать более широкий диапазон расположений. Параметр offset выбирает сетку 16×16 для каждого тонкого пикселя и несколько точек подточки. Числовой диапазон и последующий число используемых битов зависят от размера грубой точки. Верхний и левый края грубой точки включаются, а нижний и правый края — нет.

В следующей таблице описывается интерпретация EvaluateAttributeSnapped параметра offset для каждого грубого размера в пикселях.

Диапазон смещения Евалуатеаттрибутеснаппед

Грубый размер пикселяИндексируемый диапазонВыступающий размер диапазонаТребуемое число битов

Двоичная маска пригодных для использования битов
1×1 (хорошо)
1 экземпляр 2
2×1
2×2
коннектор
4×2
4×4

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

Для четырех битовых значений.

Двоичное значениеDecimalДробная часть
1000-0,5 f— 8/16
1001-0.4375 f— 7/16
1010-0.375 f— 6/16
1011-0.3125 f— 5/16
1100-0.25 f— 4/16
1101-0.1875 f— 3/16
1110-0,125 f— 2/16
1111-0.0625 f— 1/16
0000указано0 / 16
0001-0.0625 f1 / 16
0010-0,125 f2 / 16
0011-0.1875 f3 / 16
0100-0.25 f4 / 16
0101-0.3125 f5 / 16
0110-0.375 f6 / 16
0111-0.4375 f7 / 16

Для пяти-разрядных значений.

Двоичное значениеDecimalДробная часть
10000-1— 16/16
10001— 0,9375— 15/16
10010— 0,875— 14/16
10011— 0,8125— 13/16
10100-0.75— 12/16
10101— 0,6875— 11/16
10110— 0,625— 10/16
10111— 0,5625— 9/16
11000-0,5— 8/16
11001— 0,4375— 7/16
11010— 0,375— 6/16
11011— 0,3125— 5/16
11100-0.25— 4/16
11101— 0,1875— 3/16
11110— 0,125— 2/16
11111— 0,0625— 1/16
0000000 / 16
000010,06251 / 16
000100.1252 / 16
000110,18753 / 16
001000,254 / 16
001010,31255 / 16
001100,3756 / 16
001110,43757 / 16
010000,58 / 16
010010,56259 / 16
010100,62510 / 16
010110,687511 / 16
011000,7512 / 16
011010,812513 / 16
011100,87514 / 16
011110,937515 / 16

Для шести-разрядных значений.

Двоичное значениеDecimalДробная часть
100 000-2-32/16
100001— 1,9375— 31/16
100010— 1,875— 30/16
100011— 1,8125— 29/16
100100— 1,75— 28/16
100101— 1,6875— 27/16
100110— 1,625— 26/16
100111— 1,5625— 25/16
101000— 1,5— 24/16
101001— 1,4375— 23/16
101010— 1,375— 22/16
101011— 1,3125— 21/16
101100-1.25— 20/16
101101— 1,1875— 19/16
101110— 1,125— 18/16
101111— 1,0625— 17/16
110000-1— 16/16
110001— 0,9375— 15/16
110010— 0,875— 14/16
110011— 0,8125— 13/16
110100-0.75— 12/16
110101— 0,6875— 11/16
110110— 0,625— 10/16
110111— 0,5625— 9/16
111000-0,5— 8/16
111001— 0,4375— 7/16
111010— 0,375— 6/16
111011— 0,3125— 5/16
111100-0.25— 4/16
111101— 0,1875— 3/16
111110— 0,125— 2/16
111111— 0,0625— 1/16
00000000 / 16
0000010,06251 / 16
0000100.1252 / 16
0000110,18753 / 16
0001000,254 / 16
0001010,31255 / 16
0001100,3756 / 16
0001110,43757 / 16
0010000,58 / 16
0010010,56259 / 16
0010100,62510 / 16
0010110,687511 / 16
0011000,7512 / 16
0011010,812513 / 16
0011100,87514 / 16
0011110,937515 / 16
010000116 / 16
0100011,062517 / 16
0100101,12518 / 16
0100111,187519 / 16
0101001,2520 / 16
0101011,312521 / 16
0101101,37522 / 16
0101111,437523 / 16
0110001.524 / 16
0110011,562525 / 16
0110101,62526 / 16
0110111,687527 / 16
0111001,7528 / 16
0111011,812529 / 16
0111101,87530 / 16
0111111,937531 / 16

Точно так же, как и в случае с тонкими пикселями, EvaluateAttributeSnapped Сетка вычисляемых расположений выравнивается по центру в грубой точке, когда используется грубая заливка пикселей.

SetSamplePositions

Если API ID3D12GraphicsCommandList1:: сетсамплепоситионс используется с грубой заливкой, API задает позиции выборки для тонкого пикселя.

SV_Coverage

Если SV_Coverage объявляется как входные или выходные данные шейдера на уровне 1, то отключается грубая заливка пикселей.

Вы можете использовать SV_Coverage семантику с грубой заливкой на уровне 2, и она отражает, какие образцы целевого объекта MSAA записываются.

Когда используется грубая заливка пикселей, — позволяя нескольким исходным пикселам — составлять плитку, маска покрытия представляет все выборки из этой плитки.

Учитывая совместимость с MSAA, количество битов покрытия, которые необходимо указать, может различаться. Например, при использовании ресурса 4X MSAA с использованием D3D12_SHADING_RATE_2x2каждый грубый пиксель записывается в четыре пикселя, и каждый тонкая точка имеет четыре образца. Это означает, что каждый грубый пиксель записывается в общую сумму 4 * 4 = 16 выборок.

Необходимое количество битов покрытия

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

Variable rate shading что это. numberofcoveragebits. Variable rate shading что это фото. Variable rate shading что это-numberofcoveragebits. картинка Variable rate shading что это. картинка numberofcoveragebits

Как указано в таблице, нельзя использовать грубые Пиксели для записи более чем 16 выборок за раз, используя функцию заливки переменной скорости, доступную через Direct3D 12. Это ограничение обусловлено ограничениями Direct3D 12, связанными с тем, какие уровни MSAA разрешены, с размером грубой точки (см. таблицу в разделе with ВРС (заливка переменной) этой статьи).

Упорядочивание и форматирование битов в маске покрытия

Биты маски покрытия соответствуют четко определенному заказу. Маска состоит из покрытия пикселов слева направо, а затем сверху вниз (столбец — основной). Биты покрытия являются младшими битами семантики покрытия и сжимаются вместе.

В таблице ниже показан формат маски покрытия для поддерживаемых комбинаций грубого размера и уровня MSAA.

Variable rate shading что это. . Variable rate shading что это фото. Variable rate shading что это-. картинка Variable rate shading что это. картинка

В следующей таблице портрайс 2x MSAAs, где каждый пиксель имеет два образца индексов 0 и 1.

Расположение меток выборок в пикселях предназначено для наглядных целей и не обязательно приводить к пространственному положению образцов на этом пикселе; особенно учитывая, что позиции выборки можно изменить программным способом. На примеры ссылаются их индексы (от 0).

Variable rate shading что это. . Variable rate shading что это фото. Variable rate shading что это-. картинка Variable rate shading что это. картинка

В следующей таблице показаны пикселы 4X MSAA, где каждый пиксель имеет четыре выборки индексов 0, 1, 2 и 3.

Variable rate shading что это. . Variable rate shading что это фото. Variable rate shading что это-. картинка Variable rate shading что это. картинка

Игнорировать

Если используется семантика HLSL discard с грубой заливкой пикселей, то грубые пикселы отбрасываются.

Независимая от целевого объекта растрирование (Тир)

Тир не поддерживается, когда используется грубая заливка пикселей.

Представления растрового порядка (РОВС)

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

Консервативная растрирование

Вы можете использовать консервативную растрирование с заливкой переменной скорости. При использовании консервативной растеризации с грубой заливкой пикселов, тонко разкраска пикселов в грубых пикселях с использованием полного покрытия.

Покрытие

При использовании консервативной растеризации семантика покрытия содержит полные маски для тонких пикселов, а 0 — для тонких пикселов, которые не охватываются.

Пакеты

В пакете можно вызывать API-интерфейсы заливки с переменными частотами.

Проходы визуализации

Вы можете вызывать API-интерфейсы заливки с переменными частотами в ходе подготовки к просмотру.

Вызов интерфейсов API ВРС

В следующем разделе описывается способ, с помощью которого можно получить доступ к заливке переменной с применением Direct3D 12.

Запросы возможностей

Чтобы запросить возможность заливки с переменным адаптером, вызовите метод ID3D12Device:: чеккфеатуресуппорт с D3D12_FEATURE::D 3D12_FEATURE_D3D12_OPTIONS6и предоставьте структуру D3D12_FEATURE_DATA_D3D12_OPTIONS6 для заполнения функцией. Структура D3D12_FEATURE_DATA_D3D12_OPTIONS6 содержит несколько элементов, включая один из перечисляемых типов D3D12_VARIABLE_SHADING_RATE_TIER (D3D12_FEATURE_DATA_D3D12_OPTIONS6:: вариаблешадингратетиер) и один, который указывает, поддерживается ли фоновая обработка (D3D12_FEATURE_DATA_D3D12_OPTIONS6:: баккграундпроцессингсуппортед).

Например, для запроса возможности уровня 1 это можно сделать.

Скорости заливки

Значения в перечислении D3D12_SHADING_RATE организованы таким образом, что скорость заливки легко делимыми на две оси, где значения каждой оси сжимаются в виде логарифмического пробела в соответствии с перечислением D3D12_AXIS_SHADING_RATE.

Можно создать макрос для объединения двух ставок заливки осей в скорость заливки, подобную этой.

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

Задание скорости и параметров затенения на уровне команд

Подготовка изображения пространства экрана

Состояние ресурса только для чтения, обозначающее пригодное для использования значение скорости заливки, определяется как D3D12_RESOURCE_STATES::D 3D12_RESOURCE_STATE_SHADING_RATE_SOURCE.

Настройка изображения пространства экрана

Запрос размера плитки

Одно измерение извлекается, поскольку горизонтальные и вертикальные измерения всегда одинаковы. Если возможности системы D3D12_SHADING_RATE_TIER_NOT_SUPPORTED, возвращается размер плитки 0.

Источник

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

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