Процент Экрана с Temporal Upsample в Unreal Engine 4

0
9
Процент Экрана с Временным Обновлением в Unreal Engine 4
В выпуске Unreal Engine 4.19 внесены некоторые существенные изменения в работу Screen Percentage. Большая часть этого напрямую повлияет на те проекты по разработке виртуальной реальности (VR), которые в большинстве случаев нарушат обратную совместимость.

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

До версии 4.19 Unreal Engine 4 (UE4) вам нужно было только изменить процентность экрана, но теперь он разделен на два типа масштабирования во время передачи рендеринга: первичное и вторичное пространственное масштабирование.

  • Primary Spatial Upscaling (Первичное пространственное масштабирование) – это тот же процент экрана, который использовался ранее. Он основан на идее рендеринга кадра с более низким разрешением, а затем масштабирования его перед отрисовкой пользовательского интерфейса.
  • Secondary Spatial Upscaling (Вторичное пространственное масштабирование) выполняет второй и последний проход пространственного масштабирования независимо от первичного прохода масштабирования.

Primary Screen Percentage – Процент основного экрана

Primary Spatial Upscale – Первичное пространственное масштабирование (или процентное соотношение основного экрана) работает путем рендеринга разрешения экрана в процентах от экрана и последующего масштабирования в соответствии с текущим разрешением экрана. Использование меньшего процента экрана (или более низкого разрешения) с последующим увеличением масштаба называется повышающей дискретизацией. Или, когда процент экрана увеличивается (рендеринг с более высоким разрешением), он уменьшается до текущего разрешения экрана, которое называется суперсэмплингом (super sampling). Все это происходит до того, как отрисовывается пользовательский интерфейс, и может повлиять на производительность.

Концептуальная идея о том, как работает процент экрана для всех render targets буфера, составляющих изображение, отображаемое на экране для одного кадра графического процессора, может быть представлена ​​следующим образом:без Upscaling ue4

Для каждого кадра GPU все render targets используют свое полное разрешение по всей системе передачи.Spatial Upscale ue4

С пространственным повышением масштаба все, что рисуется перед пользовательским интерфейсом, имеет более низкое или более высокое разрешение в зависимости от используемого процента экрана. Процент экрана был снижен (обозначен более узкими целями рендеринга перед пользовательским интерфейсом), что привело к созданию изображения с более низким разрешением для целей рендеринга. Пространственное масштабирование происходит перед пользовательским интерфейсом, масштабируя изображение до разрешения экрана, на которое оно будет выводиться. Например, если текущее разрешение установлено на 1920×1080 и используется 83% процента экрана, render targets будут изменены до приблизительного разрешения 1600×900, а затем увеличены до 1920×1080.

Spatial Upscale Quality

При увеличении масштаба render targets качество увеличения можно определить с помощью следующей консольной переменной:


  r.Upscale.Quality

Он контролирует качество, в котором процентное соотношение экрана и оконного полноэкранного режима масштабирует 3D-рендеринг.

Значение Upsample QualityРезультат Upsample 
0Наиболее приблизительная фильтрация
1Простой билинейный
2Направленное размытие с нерезкой маской
3Бикубический Catmull-Rom с 5 ветками, приближенный к Lanczos 2 (по умолчанию)
4Lanczos 3 с 13 ветками
5Нерезкая маска с 36 ветками и фильтром по Гауссу (очень дорогая, но хорошая для экстремального повышения частоты дискретизации)

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


    r.Tonemapper.MergeWithUpscale.Mode

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

Temporal Anti-Aliasing Upsample

В дополнение к первичному пространственному масштабированию, для процента основного экрана также поддерживается второй метод масштабирования: Temporal Upsample (временное обновление). Вместо выполнения временной интеграции с временным сглаживанием (Temporal Anti-Aliasing – TAA) и последующего первичного пространственного масштабирования, оба происходят одновременно в шейдере Temporal Anti-Aliasing Upsample (TAAU). Это также позволяет им сходиться к более четким изображениям, чем то, что может обеспечить пространственное масштабирование, но это обходится дороже, поскольку большее число пост-процессов выполняется с более высоким разрешением. Это также позволяет скрыть изменения процентного соотношения основного экрана с помощью динамического разрешения, что позволяет изменять его чаще, чтобы максимально приблизиться к бюджету графического процессора.Spatial And Temporal Upsample ue4

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

Следует отметить, что во временном увеличении упорядочение различных пост-процессов не изменилось с добавлением TAAU, оно просто заменило TAA. Разница теперь в том, что любой процесс до TAAU будет использовать более низкое разрешение до того, как будет повышен до разрешения после разрешения TAAU. До 4.19 предполагалось, что разрешение везде одинаково во время пост-обработки.

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

Включение Temporal Upsample

Чтобы использовать Temporal Anti-Aliasing Upsample, в настройках Project Setting вам нужно выбрать параметр Temporal Upsampling или проще – использовать следующую консольную переменную:


r.TemporalAA.Upsampling 1

Более низкий процент основного экрана с пространственным масштабированием может привести к потере значительной детализации при использовании более низких разрешений. Например, для чего-то вроде ограждения в виде звена цепи или решетки в передней части автомобиля детали могут стать более трудными для наблюдения на дальних расстояниях при использовании Temporal Anti-Aliasing (временного сглаживания). Включив TAAU, это можно уменьшить, но при этом использовать более низкий процент экрана.

параметр Temporal Upsample выключен ue4

процент экрана: 70

параметр Temporal Upsample выключен

Процент Экрана с Временным Обновлением в Unreal Engine 4

процент экрана: 70

параметр Temporal Upsample включен

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

Дополнительные примеры

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

temporal upsample выключен ue4

процент экрана: 70

параметр Temporal Upsample выключен

temporal upsample включен ue4

процент экрана: 70

параметр Temporal Upsample включен

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

1 temporal upsample включено ue4

процент экрана: 70

параметр Temporal Upsample включен

1 temporal upsample выключено ue4процент экрана: 70

параметр Temporal Upsample выключен

Automatic View Texture Mip Bias

Поскольку процентное соотношение экрана приводит к визуализации геометрии с более низкой плотностью пикселей, для временной аппроксимации требуется больше информации о текстуре из областей поверхности и отложенных декалей областей материала, чтобы поддерживать одинаковую резкость изображения. Для этого в выражении Образец Текстуры по умолчанию может использоваться Automatic View Mip Bias.

В выражении Образец Текстуры можно использовать Automatic View Mip Bias, чтобы переключать выборку текстуры со смещением Mip для каждого просмотра для более четкого вывода с помощью временного сглаживания.параметр Automatic View Mip Bias ue4

Для высокочастотных текстур (как в примере ниже) автоматическое смещение Mip может стать проблематичным при более низком проценте экрана.высокочастотная текстура ue4

В этом случае вы можете компенсировать ввод смещения Mip или отказаться от Automatic View Mip Bias.параметр Automatic View Mip Bias Unchecked ue4

Automatic View Mip Bias происходит только при включенном TAAU. Обычные методы сглаживания (TAA, MSAA и FXAA) не смогут использовать эту опцию.

Изменение производительности шейдеров для качества сглаживания

Как и TAA, Temporal Upsample поставляется с более быстрыми перестановками шейдеров для Post Process Quality 3 и 4. Перестановки шейдеров продаются с некоторым количеством качества для передачи заголовка с частотой 60 Гц на консолях. Настройки качества аналогичны тем, которые уже используются при настройке качества постобработки. Кроме того, имейте в виду, что TAAU требуется больше работы, чем TAA, поскольку он работает с более высоким разрешением наряду с пост-процессами, которые следуют за проходом TAAU.

Следующая консольная переменная может использоваться для настройки качества постобработки:


r.PostProcessAAQuality

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

Приведенная ниже таблица является показателем того, чего можно ожидать при использовании установки процентного значения основного экрана между этими диапазонами:

Диапазон процента экранаЗаметки
50%71%Это самый быстрый подход к производительности, поскольку он использует меньшую плитку Local Data Storage (LDS) в памяти. Это идеальное решение для увеличения частоты дискретизации до 4K на настольных компьютерах и консолях.
71%100%Идеально подходит для обычного рендеринга DPI (Dots Per-Inch) на рабочем столе и консолях.
100%200%Это было бы идеально, чтобы дать Dynamic Resolution теоретическую возможность превысить 100%, если это не ограничено памятью GPU для render targets.

 

Улучшения Материалов

Было несколько улучшений в том, как Материалы используют выражение Scene Texture для выборки сцены. Это было упрощено, так что размер представления всегда равен размеру используемого render targets. В выражении Положение Экрана появился новый вывод, позволяющий точно определять положение пикселя в пределах размера представления. Ниже перечислены некоторые дополнительные моменты, которые следует учитывать при использовании материалов постобработки после TAAU.

Размер просмотра и размер render targets

Размер просмотра теперь всегда будет равен размеру render target в материале. До UE4 версии 4.19 при выборке текстуры сцены материал должен был работать со сложностью Scene Texture UV, которая отличается от Viewport UV. Например, выражение Положения экрана выведет оба этих значения, а свойство просмотра также предоставит размер render target, который не обязательно равен размеру просмотра. Это произошло из-за того, что рендеринг фактически визуализировал область просмотра в возможно более крупных render targets.Viewport Vs разрешение Render Target ue4

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

Screen Position возвращает размер ViewportUV ue4Пример настройки того, как Screen Position возвращает размер ViewportUV для выражения Scene Texture.

Выход высокоточного пиксельного положения Screen Position

Выражение Screen Position теперь включает второй вход для Screen Position, который представляет собой UV области просмотра, умноженную на размер прохода. Размер представления свойства просмотра всегда будет возвращать разрешение до TAAU, даже в материалах пост-обработки, запущенных после TAAU.

Положение пикселей используется для того, чтобы дать материалу наиболее точную позицию пикселя в пределах размера просмотра, что является критическим для таких эффектов, как нестандартное сглаживание пикселей, синхронизированное с TAA. Ниже приведен пример расчета Viewport UV:расчет Viewport UV ue4

Материал пост-обработки после Temporal Upsample

При создании материала постобработки вы можете выбрать Blendable Location (смешиваемое местоположение) для использования. Местоположения After Tonemapping и Replacing the Tonemapper располагаются после TAAU в системе передачи, что означает, что они на самом деле работают с полным разрешением и отличаются от размера просмотра.Blendable Location ue4

Размер Просмотра выражения Свойства Просмотра и Размер Render Target по-прежнему будут возвращать разрешение просмотра до TAAU, даже если это происходит после этого. Чтобы узнать, каковы размер просмотра и размер UV текселя после TAAU, выражение текстуры сцены, использующее PostProcessInput0, может использовать выходы для Size и InvSize.свойство просмотра ue4

Повторное вычисление Viewport UV из Pixel Position можно сделать так:вычисление Viewport UV из Pixel Position ue4

Теперь, когда выражения Scene Texture принимают только Viewport UV, можно преобразовывать любые произвольные текстуры сцены без возможных ошибок при преобразовании UV viewport.

Secondary Spatial Upscale

В дополнение к первичному Primary Spatial Upscale, после прохождения TAAU происходит вторичный Secondary Spatial Upscale. Это может быть проблематично для мониторов с высоким DPI, где графический процессор может не справиться с задачей в зависимости от сложности сцены, отображаемой при более высоком разрешении. Для этого средство визуализации поддерживает использование процента вторичного экрана, который управляет вторым и последним наивысшим проходами. Этот проход не зависит от процента основного экрана.

Обратите внимание, что в отличие от первичного primary spatial upscale, вторичный secondary spatial upscale является статическим и не может быть динамически изменено в игре.

Primary And Secondary Screen Percentage Upscale ue4Вы можете установить процент дополнительного экрана, используя следующую переменную консоли в файле конфигурации (.ini):


r.SecondaryScreenPercentage.GameViewport

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


Target Resolution / Currently Set Resolution * 100 = Secondary Screen Percentage
900 / 1080 * 100 = 0.8333 * 100 = 83.33

Например, мы используем значение 83,33 при нацеливании на 60 Гц на Xbox One для Fortnite Battle Royale и устанавливаем его с помощью следующего:


[XboxOne_60 DeviceProfile]
DeviceType=XboxOne
BaseProfileName=XboxOne
+CVars=r.SecondaryScreenPercentage.GameViewport=83.33
Добавление процента дополнительного экрана к вашему файлу конфигурации приведет к переопределению редактора и всех платформ, для которых он установлен. Также имейте в виду, что с помощью переменной консоли r.SetRes контролируется разрешение буфера. Лучше оставить значение 1080p или 4k, чтобы пользовательский интерфейс всегда отображал исходное разрешение для целевой платформы.

Масштабирование области просмотра редактора DPI

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


SecondaryScreenPercentage = 100 / OS's DPI Scale

Масштабирование сцены (или качество) настраивается для мониторов с высоким DPI, чтобы обеспечить стабильную производительность при очень больших render target. Это также предотвращает выделение промежуточного render target, который может быть слишком большим для графического процессора вашей системы, что может привести к сбою редактора и потере вашей работы. По умолчанию редактор настраивает масштабирование сцены для мониторов с высоким разрешением, чтобы обеспечить стабильную производительность при очень высокой плотности пикселей. Однако это можно настроить, включив параметр Disable DPI Based Editor Viewport Scaling в настройках редактора. По умолчанию процент вторичного экрана по умолчанию будет равен 100, что будет отображаться с полным разрешением для всех видов просмотра редактора.параметр Disable DPI Based Editor Viewport Scaling ue4

Изменение этого параметра влияет только на редактор, и процент вторичного экрана сборки игры по умолчанию будет равен 100%.

Изменение этого параметра влияет только на редактор, и процент вторичного экрана сборки игры по умолчанию будет равен 100%.

VR Pixel Density

До Unreal Engine 4.19 консольная переменная процентного соотношения экрана использовалась для определения разрешения, при котором экран Head Mounting Display (HMD) должен отображать ваш проект VR. Это часто было «волшебным» числом, которое нужно было корректировать (и запоминать) в зависимости от HMD, используемого для отображения проекта.

Теперь разрешение экрана контролируется Pixel Density. Это устраняет необходимость использования «магических» чисел для процентов экрана, что упрощает разработку для нескольких HMD. По умолчанию, глазные представления будут отображаться с рекомендованным разрешением HMD, чтобы избежать того, что составляющий HMD выполняет масштабирование, которое обычно является причиной размытости. Вы будете использовать следующую консольную переменную, чтобы получить более высокую или меньшую плотность пикселей (Pixel Density) по сравнению с рекомендуемым разрешением экрана:


    vr.PixelDensity

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

Для получения дополнительной информации читайте о плотности пикселей VR здесь.