vrs что это такое
Что такое VRS и как это работает?
Понятие виртуальной базовой станции (Virtual Reference Station) основано на сети базовых GNSS-станций, непрерывно соединенных посредством каналов передачи данных с центром управления. Компьютер в центре управления непрерывно собирает информацию от всех приемников, и создает базу данных региональных поправок. Эти поправки используются для создания виртуальной базовой станции, расположенной всего в нескольких метрах от места, где расположен подвижный приемник (ровер). GNSS-ровер интерпретирует и использует данные VRS как если бы они поступили от реальной базовой станции. В результате повышается точность и производительность RTK метода.
Реализация идеи VRS в функциональное системное решение по следующим принципами. Для начала необходимы несколько базовых станций (не менее трех), которые подключены к сетевому серверу через некоторые линии связи.
GNSS-ровер посылает его примерное положение в центр управления, с использованием канала передачи данных мобильного телефона. Центр управления принимает данные о положении ровера, и отвечает путем отправки корректирующих поправок на ровер. Как только они получены, ровер вычисляет свое положение в высоком качестве и обновляет координаты точки. А затем вновь направляет данные о своем местоположении в центр управления.
Сетевой сервер теперь будет вычислять новые поправки таким образом, чтобы они воспринимались ровером как поправки от базовой станции, находящейся рядом. И посылает их обратно на канал передачи данных мобильного телефона. Этот метод создания исходных данных базовой станции и дает концепции ее название «The Virtual Reference Station». С помощью данного метода, можно выполняют высоко улучшенную RTK съемку.
Основным назначением VRS является уменьшение длины базовой линии между мобильным приемником и базовой станцией для того, чтобы эффективно удалить пространственно коррелированные ошибки с использованием дифференциальной обработки, и включить поправки, полученные от сети базовых станций.
Поскольку приемник пользователя не может, по определению, отличить реальную базовую станцию и VRS, расстояние между VRS и пользователем должно быть соизмеримо с уровнем поправок, присутствующих в данных VRS. Что позволяет приемнику использовать свои алгоритмы обработки данных, которые изменяются в зависимости от длины базовой линии к базовой станции.
Чтобы проиллюстрировать это, давайте рассмотрим простой пример. Предположим, пользовательский приемник выполняет L1 обработку базовых линий до, скажем, 8 километров и двухчастотные (L1 / L2) комбинации для более длинных базовых линий.
Теперь представьте, что если поправки в данных VRS были похожи на 20-километровую базовую линию, но положение VRS было определено всего в 2 километрах от пользователя. В этом случае приемник пользователя будет пытаться использовать L1 обработку, но уровень поправок в данных, почти наверняка не позволит получить корректные результаты с использованием этого подхода.
Из этого примера мы видим, что VRS нуждается в физической сети GNSS-станций вокруг области измерений, с как минимум тремя базовыми станциями, чтобы получить возможность моделирования поправок. При этом большее количество базовых станций и улучшенная геометрия сети обеспечивают более точное моделирование поправок.
Концепция VRS позволяет использовать менее плотную сеть GNSS-станций без ухудшения точности. В результате максимальное расстояние между ровером и ближайшей базовой станцией может быть увеличено по сравнению с типичными 10
15 километрами без ухудшения точности. Данная технология значительно упрощает работу геодезистов в условиях сложного рельефа местности, а так же, позволяет оздать сеть поправок на большую территорию и отойти от необходимости введения различных местных систем координат с делением их на зоны.
Что такое 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, где камера постоянно перемещается, а не находится в одной позиции, как во время самой игры.
3DMark уже позволяет тестировать эффективность Variable-Rate Shading
В июле Futuremark сообщила о разработке нового функционального теста 3DMark, призванного тестировать эффективность технологии Variable-Rate Shading. Функциональные тесты 3DMark призваны показать влияние конкретных технологий, методов и возможностей в специализированных задачах. Таковыми, например, выступают тест для оценки сглаживания NVIDIA DLSS, 3DMark API Overhead для оценки эффективности низкоуровневых API или 3DMark PCI Express 4.0 для демонстрации преимущества нового интерфейса.
Оптимизация и повышение производительности в играх — ключевая задача. С этой целью Microsoft на мартовском мероприятии GDC 2019 представила Variable-Rate Shading, которая стала частью API DirectX 12. Она аналогична технологии NVIDIA Adaptive Shading и призвана снизить нагрузку при просчёте периферийных объектов и зон (например, однородного моря или тумана) с помощью снижения точности проводимых вычислений.
DMark VRS позволяет сравнить разницу в производительности и качестве изображения при использовании Tier 1 Variable-Rate Shading. Для вычисления цвета каждого пикселя на экране вызываются шейдеры. Показатель Shading rate указывает разрешение, в котором эти шейдеры просчитываются (оно не всегда равно разрешению экрана). Чем выше Shading rate, тем выше точность и нагрузка на ГП, и наоборот. Обычно оно для всей картинки одинаково, так что все пиксели кадра рассчитываются с одинаковым качеством. VRS позволяет разбивать кадр на блоки и для каждого из них указывать разные значения Shading rate: например, снижать точность для пикселей, которые находятся в глубоких тенях, вдали от камеры или на периферии, вне фокуса внимания игрока. За счёт этого можно существенно повысить частоту кадров, незначительно потеряв в визуальном качестве.
Функциональный тест 3DMark VRS работает в два прохода. В первом VRS не используется, чтобы создать базовую картинку для сравнения. А при втором прохождении уже применяется Variable-Rate Shading. Благодаря VRS операция с единичным пиксельным шейдером может быть применена к блоку пикселей: например для просчёта блока пикселей 4 × 4 одной операцией, а не 16 отдельными. В 3DMark VRS показатель Rate Shading зависит от расстояния до камеры: для самых дальних объектов включается VRS 4 × 4, 2 × 2 для геометрии на среднем расстоянии и наиболее качественный 1 × 1 — для ближайших объектов переднего плана.
Для запуска теста необходима платформа Windows 10 в версии 1903 и ускоритель с поддержкой DirectX 12, поддерживающий Tier 1 VRS и AdditionalShadingRatesSupported: например, видеокарта семейства NVIDIA Turing или встроенная графика в процессорах Intel Ice Lake. В настоящее время приобрести 3DMark Advanced Edition можно со скидкой в 75 % в Steam. Тест VRS будет частью бесплатного обновления пакета для 3DMark Advanced Edition или 3DMark Professional Edition с действующей годовой лицензией.
AMD запатентовала 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 является технологией сжатия на уровне затенения. Мы уже знакомы с технологиями сжатия музыки (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 может оказать более существенное влияние.
Variable-Rate Shading (VRS)
Мотивация для ВРС
Из-за ограничений производительности графический модуль визуализации не всегда может позволить обеспечить одинаковый уровень качества для каждой части его выходного изображения. Заливка с переменной скоростью — или грубая заливка пикселя — — это механизм, позволяющий распределять производительность и степень отрисовки по тарифам, которые зависят от визуализированного изображения.
В некоторых случаях скорость заливки может быть уменьшена с минимальным или без снижения качества вывода. повышение производительности, которое, по сути, предоставляется бесплатно.
Без ВРС — многопримерного сглаживания с помощью ресамплинга
Без заливки с переменными частотами единственным средством управления скоростью заливки является многопримерное сглаживание (MSAA) с выполнением на основе образца (также известное как «ресамплинг»).
MSAA — это механизм уменьшения геометрического псевдонима и улучшения качества отрисовки изображения по сравнению с использованием MSAA. Число выборок в MSAA, которое может иметь значение 1x, 2x, 4X, 8X или 16x, регулирует число выборок, выделенных для каждого целевого пикселя рендеринга. Число выборок MSAA должно быть известно перед выделением целевого объекта и не может быть изменено в дальнейшем.
При интерполяции с помощью ресамплинга пиксельный построитель текстуры вызывается один раз для каждого образца с более высоким качеством, но также повышается стоимость производительности по сравнению с выполнением на пиксель.
Приложение может управлять скоростью заливки, выбирая между выполнением на основе точек или MSAA-with-ресамплинг. Эти два варианта не обеспечивают очень точное управление. Кроме того, может потребоваться уменьшить скорость заливки для определенного класса объектов по сравнению с остальной частью изображения. Такие объекты могут включать объект, лежащий в основе элемента HUD, или прозрачность, размытие (глубину поля, движение и т. д.) или оптическое искажение из-за VR. Но это было бы невозможно, так как качество заливки и затраты зафиксированы для всего изображения.
С заливкой с переменной скоростью (ВРС)
Модель заливки с переменным заливке (ВРС) расширяет интерполяцию с помощью-MSAA в противоположную «грубую» точку (направление), добавляя концепцию грубой заливки. В этом случае заливка может выполняться с частотой более крупных, чем на пиксель. Иными словами, группа пикселей может быть закрашена как единое целое, а результат затем будет транслироваться во все примеры в группе.
API грубой заливки позволяет приложению указать число пикселей, принадлежащих к затененной группе, или грубую точку. После выделения целевого объекта рендеринга можно изменить размер грубой точки. Таким образом, различные части экрана или разные проходы рисования могут иметь различные скорости заливки.
Ниже приведена таблица, в которой описывается, какой уровень MSAA поддерживается, с крупным размером в пикселях. Некоторые из них не поддерживаются на всех платформах. другие по условию включены в зависимости от возможности (аддитионалшадингратессуппортед), обозначенной «Cap».
Для уровней компонентов, обсуждаемых в следующем разделе, не существует сочетания грубого размера и количества выборок, когда оборудование должно отследить более 16 выборок на каждом вызове шейдера пикселей. Эти сочетания являются полутонами, затененными в таблице выше.
Уровни компонентов
Существует два уровня реализации ВРС и две возможности, которые можно запросить. Каждый уровень описывается более подробно после таблицы.
Уровень 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 принимается в качестве вклада для каждого примитива.
Объединение факторов скорости заливки
Различные источники скорости заливки применяются в последовательности с помощью этой схемы.
Каждая пара 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 | Приведенные ниже таблицы представляют собой инструкции по преобразованию из с фиксированной точкой в десятичное и дробное представление. Первый используемый бит в двоичной маске является битом знака, а остальная часть двоичной маски состоит из числовой части. Для четырех битовых значений.
Для пяти-разрядных значений.
Для шести-разрядных значений.
Точно так же, как и в случае с тонкими пикселями, 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. Как указано в таблице, нельзя использовать грубые Пиксели для записи более чем 16 выборок за раз, используя функцию заливки переменной скорости, доступную через Direct3D 12. Это ограничение обусловлено ограничениями Direct3D 12, связанными с тем, какие уровни MSAA разрешены, с размером грубой точки (см. таблицу в разделе with ВРС (заливка переменной) этой статьи). Упорядочивание и форматирование битов в маске покрытияБиты маски покрытия соответствуют четко определенному заказу. Маска состоит из покрытия пикселов слева направо, а затем сверху вниз (столбец — основной). Биты покрытия являются младшими битами семантики покрытия и сжимаются вместе. В таблице ниже показан формат маски покрытия для поддерживаемых комбинаций грубого размера и уровня MSAA. В следующей таблице портрайс 2x MSAAs, где каждый пиксель имеет два образца индексов 0 и 1. Расположение меток выборок в пикселях предназначено для наглядных целей и не обязательно приводить к пространственному положению В следующей таблице показаны пикселы 4X MSAA, где каждый пиксель имеет четыре выборки индексов 0, 1, 2 и 3. ИгнорироватьЕсли используется семантика 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.
|