Gears Tactics — динамичная пошаговая стратегия во вселенной одной из самых известных игровых франшиз — Gears of War. Кроме того, это первая игра, поддерживающая одну из основных функций DirectX 12 Ultimate — Variable Rate Shading (VRS).
VRS позволяет Gears Tactics добиться значительного прироста производительности — до 18,9%! — на широком спектре оборудования без заметной потери качества изображения.
Одна из основных целей при разработке Gears Tactics заключалась в том, чтобы охватить более широкую аудиторию ПК за счет снижения минимальных системных требований. Для этого было необходимо найти новые решения для повышения производительности, которые не требовали бы существенного снижения качества графики. Одним из таких решений стал VRS.
В этой статье мы подробно рассмотрим процесс настройки VRS для достижения оптимального баланса между качеством и производительностью. В частности, на каких проходах рендеринга его задействовать и с какими параметрами.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/e76/204/30c/e7620430ce8f5ef4abb11e530e7ad7f5.png)
Поскольку главной целью было включить в реализацию самый широкий спектр оборудования, речь пойдет только о первом уровне поддержки VRS (Tier 1), что позволяет устанавливать shading rate для каждого объекта. Для получения дополнительной информации о VRS можете почитать этот пост.
В случае Gears Tactics VRS не распространяется на уровень поддержки выше первого, поэтому нужно было определить, на каких проходах рендеринга можно его задействовать (оговоримся, что Gears Tactics создавалась на Unreal Engine 4), а также сформулировать критерии, когда следует уменьшить shading rate — размер области пикселей, к которой применяется единовременный рендеринг. Чем он выше (самый высокий — 1×1), тем выше точность прорисовки и, соответственно, выше нагрузка на GPU.
Как оказалось, выгоду из VRS можно извлечь на любом этапе рендеринга, включая некоторые полноэкранные отрисовки.
Поначалу казалось, что базовый проход рендеринга и проход по полупрозрачности (translucency) должны представлять собой наибольший потенциал для оптимизации по сравнению с остальными. Поэтому VRS включался для всех вызовов отрисовки в базовом проходе и в проходе по translucency, но на последнем возникали слишком серьезные артефакты.
Значит, следующим шагом следовало оценить, какие проходы наиболее перспективны для получения максимальной выгоды от VRS, а затем протестировать shading rate на этих проходах и исключить те, которые оставляли артефакты. Так, проходы, использующие точную информацию о пикселях, оказались одной из основных причин этих артефактов.
Чтобы выяснить, какие проходы покажут себя наиболее эффективными, понадобилось включить VRS на всех из них, а затем сузить в PIX их число до тех, которые показали себя лучше других.
Вот они:
Затем нужно было оценить серьезность артефактов, полученных в этих проходах из-за VRS. Процесс оказался довольно трудоемким, так как Gears Tactics имеет несколько биомов с различными типами погодных условий. Можно было получить хорошие результаты в городе днем, но вылезли бы артефакты в песчаной среде, или листве, или ночью под дождем.
Следующие проходы показали улучшение производительности с включенным VRS, но при этом имели слишком много артефактов для того, чтобы их стоило использовать:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/d2b/a38/257/d2ba38257aa18127762d4b419e2b1e7c.png)
Пример, показывающий изображение до и после Composition after lighting с грубым размером пикселя 4×4
После исключения этих проходов началась работа над корректировкой shading rate на основе других факторов. В первую очередь были исключены динамические объекты и объекты с маской прозрачности.
Динамические объекты отбрасывают полностью динамическую тень. От этого с VRS они часто теряют важные детали и становятся более заметными по всей сцене, а также во время движения. Применение VRS к маске прозрачности тоже нередко приводило к большой потере детализации. И, поскольку объекты со смещением глубины пикселя, как оказалось, также отображались неправильно, они тоже были исключены.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/0c2/8d3/565/0c28d3565804f351dd71ebf5cd2acf42.png)
VRS использовался на наборе маскированных объектов, что привело к недопустимой потере детализации
Итак, мы составили хороший набор проходов рендеринга, к которым можно применить VRS. Однако повсеместное применение самого малого shading rate (4×4 или 2×2 в зависимости от аппаратной поддержки) на этих проходах приведет к существенной потере качества. Поэтому следующим шагом явилось исследование динамических методов, которые могли бы изменить shading rate в зависимости от конкретного прохода. В результате их сформировалось три. Каждый из них использовался в ключевых проходах непосредственно перед прорисовкой сетки.
Вот эти методы: определение размера объекта, маскировка глубины резкости и маскировка «Туман войны».
В этом методе VRS активно применяется на любой сетке, чрезвычайно малой в сравнении с игровым пространством. В основе его лежит быстрая проверка условия, ниже ли заданного порога значение размера отдельного полигона в сетке. Если это так, shading rate масштабируется пропорционально этому размеру.
Для большинства графических процессоров глубина резкости в Gears Tactics по умолчанию выключена, но включается во время кат-сцен. Этот метод определяет степень размытия сетки после применения глубины резкости в процессе постобработки. И, поскольку на этом этапе детали намеренно устраняются, на всех предыдущих ключевых проходах можно выставить небольшой shading rate.
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/0fe/b79/eb8/0feb79eb86d068ce67d4e215a21f2799.jpg)
Сетки, выделенные красным, из-за глубины резкости имеют самый грубый размер пикселя
Gears Tactics использует «туман войны» для скрытия части поля битвы. Также с его помощью можно замаскировать и пониженный shading rate. Эта техника определяет, как далеко конкретная полигональная сетка скрыта «туманом войны», и, отталкиваясь от этого, пропорционально снижает shading rate.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/781/2c5/244/7812c5244bab72a0d4edf7ef92521371.png)
Интенсивность VRS растет пропорционально интенсивности «тумана войны»
Оказалось, при помощи совокупности описанных выше методов можно получить более 30% прироста производительности за счет значительного снижения shading rate. Правда, потеря качества при этом будет более заметной, чем хотелось бы. Поэтому следующим шагом явилась ручная настройка shading rate для каждого прохода по нескольким биомам и оценка прироста производительности и качества изображения после каждого изменения.
В результате VRS получил два уровня. Конфигурация «On» оказывает наименьшее влияние на качество изображения при условии, если отключить VRS для некоторых проходов рендеринга и ограничить снижение shading rate. В то же время настройка «Performance» приведет к небольшим компромиссам в качестве картинки в пользу увеличения производительности с использованием более низких shading rate.
Здесь прослеживается еще одно преимущество использования shading rate, для которых нужны дополнительные мощности. Размеры пикселей более 2 требуют дополнительной поддержки shading rate со стороны аппаратного обеспечения, поэтому любой проход, использующий shading rate размером 2×4, 4×2 или 4×4, ограничен уровнем «Performance».
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/bf2/83a/4d7/bf283a4d7b99bb35658eeb2d9b1e07ec.jpg)
Тестирование проводилось на Intel Gen 11 и Intel Xe, а также на NVIDIA Turing. На всех поддерживаемых средствах наблюдается схожий прирост производительности.
Операционная система: Windows 10 Pro 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)
Процессор: Intel® Core(TM) i9-9900X CPU @ 3.50GHz (20 CPUs), ~3.5GHz
Память: 98304 MB RAM
Видеокарта: NVIDIA GeForce RTX 2080 SUPER
Все тесты проводились при настройках игры Ultra с разрешением 4K
![](https://habrastorage.org/r/w780q1/webt/ix/mg/ck/ixmgckd0wntgrmtrou96nkjinqq.jpeg)
![](https://habrastorage.org/r/w780q1/webt/_i/cz/qu/_iczquqx1k8jobt9nzlq1lbam4g.jpeg)
![](https://habrastorage.org/r/w780q1/webt/qi/d3/oh/qid3ohvh2dajsimd8d0krsesjmo.jpeg)
![](https://habrastorage.org/r/w780q1/webt/zd/s8/f9/zds8f9vb5bu1yzwjzhu9prj0a9s.jpeg)
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/c19/c81/a66/c19c81a6645cf1dac5709b5fcf7e4d18.png)
Все техники при настройках «VRS On»
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/b96/4df/e1c/b964dfe1c55c6035d276a9f65f904637.png)
Включение всех техник при «VRS Performance»
![](https://habrastorage.org/r/w780q1/webt/as/p9/h-/asp9h-hcl9ay7ls3op_qpa7lsss.jpeg)
Можно получить дополнительные преимущества, расширив описанные здесь методы применения VRS.
Дополнительные методы маскирования могут повысить эффективность VRS или уменьшить количество артефактов. Эти методы могут варьироваться в зависимости от случаев, когда области затенены или размыты во время игры:
Как и в случае с динамическим масштабированием разрешения, возможным улучшением здесь является масштабирование VRS в зависимости от частоты кадров с целью минимизации времени, необходимого для его использования. Это отдельная система слежения, которая может потребовать регулировки на разных частотах во избежание усиления артефактов.
Gears Tactics использует для оптимизации и VRS, и DRS, но эти функции могут иметь не очень хорошую совместимость. Это связано с тем, что, когда DRS меняет масштаб разрешения, меняются и артефакты VRS. Это приводит к тому, что игрок либо узнает и об артефактах VRS, и об изменении разрешения разом, либо и то, и другое остается незамеченным. Одним из способов одновременного использования обеих функций может стать мониторинг коэффициента изменения DRS и отключение использования VRS до тех пор, пока он не стабилизируется.
Умелое использование Tier 1 VRS позволяет добиться значительного прироста производительности на широком спектре оборудования с минимальным влиянием на качество изображения.
VRS позволяет Gears Tactics добиться значительного прироста производительности — до 18,9%! — на широком спектре оборудования без заметной потери качества изображения.
Одна из основных целей при разработке Gears Tactics заключалась в том, чтобы охватить более широкую аудиторию ПК за счет снижения минимальных системных требований. Для этого было необходимо найти новые решения для повышения производительности, которые не требовали бы существенного снижения качества графики. Одним из таких решений стал VRS.
В этой статье мы подробно рассмотрим процесс настройки VRS для достижения оптимального баланса между качеством и производительностью. В частности, на каких проходах рендеринга его задействовать и с какими параметрами.
![image](https://habrastorage.org/getpro/habr/post_images/e76/204/30c/e7620430ce8f5ef4abb11e530e7ad7f5.png)
Поскольку главной целью было включить в реализацию самый широкий спектр оборудования, речь пойдет только о первом уровне поддержки VRS (Tier 1), что позволяет устанавливать shading rate для каждого объекта. Для получения дополнительной информации о VRS можете почитать этот пост.
В случае Gears Tactics VRS не распространяется на уровень поддержки выше первого, поэтому нужно было определить, на каких проходах рендеринга можно его задействовать (оговоримся, что Gears Tactics создавалась на Unreal Engine 4), а также сформулировать критерии, когда следует уменьшить shading rate — размер области пикселей, к которой применяется единовременный рендеринг. Чем он выше (самый высокий — 1×1), тем выше точность прорисовки и, соответственно, выше нагрузка на GPU.
Как оказалось, выгоду из VRS можно извлечь на любом этапе рендеринга, включая некоторые полноэкранные отрисовки.
Оценка рендеринг-пайплайна
Поначалу казалось, что базовый проход рендеринга и проход по полупрозрачности (translucency) должны представлять собой наибольший потенциал для оптимизации по сравнению с остальными. Поэтому VRS включался для всех вызовов отрисовки в базовом проходе и в проходе по translucency, но на последнем возникали слишком серьезные артефакты.
Значит, следующим шагом следовало оценить, какие проходы наиболее перспективны для получения максимальной выгоды от VRS, а затем протестировать shading rate на этих проходах и исключить те, которые оставляли артефакты. Так, проходы, использующие точную информацию о пикселях, оказались одной из основных причин этих артефактов.
Чтобы выяснить, какие проходы покажут себя наиболее эффективными, понадобилось включить VRS на всех из них, а затем сузить в PIX их число до тех, которые показали себя лучше других.
Вот они:
- Композиция после освещения (Composition after lighting): Освещение для подповерхностных рассеивающих материалов.
- Фильтр полупрозрачных объемов (Filter Translucent Volumes): Сглаживает полупрозрачные сетки внутри объема, чтобы избежать проблем с наложением.
- Затухание света (Light attenuation): Затухание – это внешние границы при расчете спада заданного освещения. Этот проход повторяется для затененных источников света при учете рассчитанного спада с целью рендеринга теневых проекций.
- Постановка световых композиций (Light composition tasks (PreLighting)): Отвечает за окклюзию окружающего света.
- Блум световых лучей (Light Shaft Bloom): Эффект блума (свечения), возникающий при рендеринге световых лучей.
- Отражения пространства экрана (Screen Space Reflections): Процесс повторного использования информации о пространстве экрана для создания отражений.
- Временной анти-алиасинг отражений пространства экрана (SSR Temporal AA): Сглаживание результатов прохода по отражениям пространства экрана.
- Прямое отложенное освещение (Direct Deferred Lighting): Отвечает за рендеринг любых прямых источников света в буфер цвета сцены.
Затем нужно было оценить серьезность артефактов, полученных в этих проходах из-за VRS. Процесс оказался довольно трудоемким, так как Gears Tactics имеет несколько биомов с различными типами погодных условий. Можно было получить хорошие результаты в городе днем, но вылезли бы артефакты в песчаной среде, или листве, или ночью под дождем.
Следующие проходы показали улучшение производительности с включенным VRS, но при этом имели слишком много артефактов для того, чтобы их стоило использовать:
- Полупрозрачное освещение (Translucency);
- Отложенное освещение (Deferred Lighting);
- Композиция после освещения (Composition after lighting).
![image](https://habrastorage.org/getpro/habr/post_images/d2b/a38/257/d2ba38257aa18127762d4b419e2b1e7c.png)
Пример, показывающий изображение до и после Composition after lighting с грубым размером пикселя 4×4
После исключения этих проходов началась работа над корректировкой shading rate на основе других факторов. В первую очередь были исключены динамические объекты и объекты с маской прозрачности.
Динамические объекты отбрасывают полностью динамическую тень. От этого с VRS они часто теряют важные детали и становятся более заметными по всей сцене, а также во время движения. Применение VRS к маске прозрачности тоже нередко приводило к большой потере детализации. И, поскольку объекты со смещением глубины пикселя, как оказалось, также отображались неправильно, они тоже были исключены.
![image](https://habrastorage.org/getpro/habr/post_images/0c2/8d3/565/0c28d3565804f351dd71ebf5cd2acf42.png)
VRS использовался на наборе маскированных объектов, что привело к недопустимой потере детализации
Динамические техники
Итак, мы составили хороший набор проходов рендеринга, к которым можно применить VRS. Однако повсеместное применение самого малого shading rate (4×4 или 2×2 в зависимости от аппаратной поддержки) на этих проходах приведет к существенной потере качества. Поэтому следующим шагом явилось исследование динамических методов, которые могли бы изменить shading rate в зависимости от конкретного прохода. В результате их сформировалось три. Каждый из них использовался в ключевых проходах непосредственно перед прорисовкой сетки.
Вот эти методы: определение размера объекта, маскировка глубины резкости и маскировка «Туман войны».
Определение размера объекта
В этом методе VRS активно применяется на любой сетке, чрезвычайно малой в сравнении с игровым пространством. В основе его лежит быстрая проверка условия, ниже ли заданного порога значение размера отдельного полигона в сетке. Если это так, shading rate масштабируется пропорционально этому размеру.
Маскировка глубины резкости
Для большинства графических процессоров глубина резкости в Gears Tactics по умолчанию выключена, но включается во время кат-сцен. Этот метод определяет степень размытия сетки после применения глубины резкости в процессе постобработки. И, поскольку на этом этапе детали намеренно устраняются, на всех предыдущих ключевых проходах можно выставить небольшой shading rate.
![image](https://habrastorage.org/getpro/habr/post_images/0fe/b79/eb8/0feb79eb86d068ce67d4e215a21f2799.jpg)
Сетки, выделенные красным, из-за глубины резкости имеют самый грубый размер пикселя
Маскировка «Туман войны»
Gears Tactics использует «туман войны» для скрытия части поля битвы. Также с его помощью можно замаскировать и пониженный shading rate. Эта техника определяет, как далеко конкретная полигональная сетка скрыта «туманом войны», и, отталкиваясь от этого, пропорционально снижает shading rate.
![image](https://habrastorage.org/getpro/habr/post_images/781/2c5/244/7812c5244bab72a0d4edf7ef92521371.png)
Интенсивность VRS растет пропорционально интенсивности «тумана войны»
Соотношение качества и производительности
Оказалось, при помощи совокупности описанных выше методов можно получить более 30% прироста производительности за счет значительного снижения shading rate. Правда, потеря качества при этом будет более заметной, чем хотелось бы. Поэтому следующим шагом явилась ручная настройка shading rate для каждого прохода по нескольким биомам и оценка прироста производительности и качества изображения после каждого изменения.
В результате VRS получил два уровня. Конфигурация «On» оказывает наименьшее влияние на качество изображения при условии, если отключить VRS для некоторых проходов рендеринга и ограничить снижение shading rate. В то же время настройка «Performance» приведет к небольшим компромиссам в качестве картинки в пользу увеличения производительности с использованием более низких shading rate.
Здесь прослеживается еще одно преимущество использования shading rate, для которых нужны дополнительные мощности. Размеры пикселей более 2 требуют дополнительной поддержки shading rate со стороны аппаратного обеспечения, поэтому любой проход, использующий shading rate размером 2×4, 4×2 или 4×4, ограничен уровнем «Performance».
![image](https://habrastorage.org/getpro/habr/post_images/bf2/83a/4d7/bf283a4d7b99bb35658eeb2d9b1e07ec.jpg)
Результаты тестов
Тестирование проводилось на Intel Gen 11 и Intel Xe, а также на NVIDIA Turing. На всех поддерживаемых средствах наблюдается схожий прирост производительности.
Тестируемое оборудование
Операционная система: Windows 10 Pro 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)
Процессор: Intel® Core(TM) i9-9900X CPU @ 3.50GHz (20 CPUs), ~3.5GHz
Память: 98304 MB RAM
Видеокарта: NVIDIA GeForce RTX 2080 SUPER
Все тесты проводились при настройках игры Ultra с разрешением 4K
![](https://habrastorage.org/webt/ix/mg/ck/ixmgckd0wntgrmtrou96nkjinqq.jpeg)
![](https://habrastorage.org/webt/_i/cz/qu/_iczquqx1k8jobt9nzlq1lbam4g.jpeg)
![](https://habrastorage.org/webt/qi/d3/oh/qid3ohvh2dajsimd8d0krsesjmo.jpeg)
![](https://habrastorage.org/webt/zd/s8/f9/zds8f9vb5bu1yzwjzhu9prj0a9s.jpeg)
![image](https://habrastorage.org/getpro/habr/post_images/c19/c81/a66/c19c81a6645cf1dac5709b5fcf7e4d18.png)
Все техники при настройках «VRS On»
![image](https://habrastorage.org/getpro/habr/post_images/b96/4df/e1c/b964dfe1c55c6035d276a9f65f904637.png)
Включение всех техник при «VRS Performance»
![](https://habrastorage.org/webt/as/p9/h-/asp9h-hcl9ay7ls3op_qpa7lsss.jpeg)
Расширение VRS
Можно получить дополнительные преимущества, расширив описанные здесь методы применения VRS.
Дальнейшие методы маскирования
Дополнительные методы маскирования могут повысить эффективность VRS или уменьшить количество артефактов. Эти методы могут варьироваться в зависимости от случаев, когда области затенены или размыты во время игры:
- Размытие в движении (Motion Blur): Камеры, использующие быстро движущиеся сцены, могут легко использовать VRS в большинстве сеток с включенной функцией размытия в движении.
- Частицы (Particles): Полигональные сетки, спрятанные за толстым слоем частиц, можно использовать для маскирования VRS высокой интенсивности.
Динамический VRS
Как и в случае с динамическим масштабированием разрешения, возможным улучшением здесь является масштабирование VRS в зависимости от частоты кадров с целью минимизации времени, необходимого для его использования. Это отдельная система слежения, которая может потребовать регулировки на разных частотах во избежание усиления артефактов.
Динамическое масштабирование разрешения (DRS)
Gears Tactics использует для оптимизации и VRS, и DRS, но эти функции могут иметь не очень хорошую совместимость. Это связано с тем, что, когда DRS меняет масштаб разрешения, меняются и артефакты VRS. Это приводит к тому, что игрок либо узнает и об артефактах VRS, и об изменении разрешения разом, либо и то, и другое остается незамеченным. Одним из способов одновременного использования обеих функций может стать мониторинг коэффициента изменения DRS и отключение использования VRS до тех пор, пока он не стабилизируется.
Вместо заключения
Умелое использование Tier 1 VRS позволяет добиться значительного прироста производительности на широком спектре оборудования с минимальным влиянием на качество изображения.