- Как запускать игры с разрешением 4К на мониторе 1080p при помощи суперсэмплинга
- Суперсэмплинг
- Digital Foundry: «Системный суперсемплинг на PS4 Pro даёт больше выбора пользователю, и это хорошо»
- Как запустить игру в большем разрешении?
- Краткий взгляд на Суперсэмплинг
- Опция №1: Включение Суперсэмплинга через Видеокарту
- Опция №2: Включение Суперсэмплинга в игре
- Как работает рендеринг в 3D-играх: сглаживание
- Избыточная выборка сглаживания, или суперсэмплинг (Supersampling anti-aliasing, SSAA)
- Множественная выборка сглаживания, или мультисэмплинг (Multisample anti-aliasing (MSAA)
- Быстрое приблизительное сглаживание (Fast approximate anti-aliasing, FXAA)
- Временное сглаживание (Temporal anti-aliasing, TAA)
- И это еще не все!
Как запускать игры с разрешением 4К на мониторе 1080p при помощи суперсэмплинга
Чтобы запускать игры в высоком разрешении, необязательно тратить деньги на монитор с поддержкой 4К. Если края текстур с шероховатостями вам не нравятся, опция под названием суперсэмплинг позволит получить разрешение 4К и даже выше на мониторе 1080p.
Суперсэмплинг
Что такое суперсэмплинг? Если вы знакомы с компьютерными играми, то могли слышать про сглаживание. Края объектов, которые должны быть плавными, могут выглядеть как ступеньки лестницы. Это напоминает о трёхмерных играх 90-х годов. Особенно часто это может встречаться на низких разрешениях вроде 1080p. Чтобы такого не происходило, игры включают в себя функции сглаживания, чтобы сделать изрезанные края плавными.
Современные версии сглаживания, такие как Subpixel Morphological Antialiasing (SMAA), работают достаточно хорошо, убирая изрезанные края без большого расхода ресурсов. Однако, и они не идеальные. Многие сглаживают только определённые типы зубцов по краям полигонов, а другие размывают изображение.
На изображении показана листва в игре Shadow of The Tomb Raider. Слева можно увидеть изрезанные края с отключенным сглаживанием. Справа SMAA делает изображение лучше, но сглаживание заставляет ветви исчезнуть в небе, добавляя заметное размытие. Улучшение оказывается не идеальным.
Здесь на помощь приходит суперсэмплинг. Вместо применения сглаживания к определённым частям изображения суперсэмплинг обрабатывает всю игру на более высоком разрешении, вроде 4K. Затем происходит масштабирование под ваш монитор. Результат не такой же, как запуск игры на реальном мониторе 4К, но лучше по сравнению с разрешением 1080p даже с включенным сглаживанием.
Для примера можно посмотреть на фотографии ниже. Слева изменённое SMAA изображение, справа использование суперсэмплинга до разрешения 4K. Можно увидеть значительную разницу в ветвях на переднем плане и в деревьях на расстоянии справа. На мониторах это видно ещё лучше, чем на фотографиях. Хотя игра по-прежнему запускается на мониторе с разрешением 1080p, ветви стали чётко видимыми без размытия и сглаживания, как на предыдущем изображении.
Суперсэмплинг не является новой технологией. Это одна из самых старых форм сглаживания. Её можно сравнить с методом грубой силы и из-за этого наблюдается значительное падение производительности. На смену пришли более современные методы сглаживания вроде MSAA и FXAA, которые не так влияют на частоту кадров.
В наши дни популярность суперсэмплинга растёт. Если у вашего компьютера есть запас производительности, мощная видеокарта или вы играете в игры возрастом несколько лет, это хороший вариант для повышения качества графики.
Достаточно мощный компьютер может объединять суперсэмплинг со встроенным сглаживанием в настройках игры для получения ещё более чёткого изображения. Это хорошо подходит для стратегий в реальном времени, если вы захотите увидеть больший участок карты в игровом окне.
Digital Foundry: «Системный суперсемплинг на PS4 Pro даёт больше выбора пользователю, и это хорошо»
Появившаяся в версии прошивки 5.50 опция — то, чего не хватало на улучшенной консоли Sony, но иногда лучше обойтись обычным 1080p, говорят специалисты.
С обновлением 5.50 на PS4 Pro появился режим принудительного суперсемплинга, который позволит задействовать чуть больше возможностей устройства пользователям, не имеющим 4K-дисплеев.
Опция позволяет любой игре, в которой есть поддержка более высокого, чем 1080p разрешения, «сжимать» картинку, генерирующуюся в Ultra HD, применяя к ней метод сглаживания SSAA.
Во многих тайтлах для PS4 нет возможности самостоятельно выбрать разрешение, в котором производится рендеринг изображения. Игра определяет, какой дисплей подключён к консоли, и генерирует картинку в зависимости от этого.
Часто это приводило к тому, что у владельцев Full HD-телевизоров не было никаких преимуществ при использовании PS4 Pro.
К примеру, ремастер трёх частей Assassin’s Creed под названием The Ezio Collection работает только в 4K и 30 FPS на дисплеях, поддерживающих это разрешение, и только в 1080p и 30 FPS — на всех остальных. При этом во втором случае никаких улучшений графики не наблюдается.
Принудительный суперсэмплинг, появившийся в прошивке 5.50 позволяет в такой ситуации сделать качество изображения выше. Он сглаживает острые углы и «лесенки», а также устраняет «мерцание» полигонов при отображении мелких деталей в движении.
В Digital Foundry отмечают, что в большинстве игр системное SSAA работает именно так, как задумано. Картинка становится более плавной, не теряя чёткости.
Единственная проблема, на которую обратили внимание обозреватели — сглаживание применяется в том числе к пользовательскому интерфейсу, поэтому слегка «смазанным» оказывается и текст на экране.
Специалисты в том числе сравнили работу системного суперсемплинга в The Last of Us с аналогичной встроенной опцией, и, по их словам, результат был одинаков.
Однако у опции из прошивки 5.50 есть и серьёзный минус — производительность. В некоторых играх частота кадров серьёзно падает при включённом SSAA, поэтому в Digital Foundry рекомендуют в таких случаях придерживаться режима по умолчанию — 1080p без сглаживания.
К примеру, в The Last Guardian, где показатель FPS нестабилен и на 4K-дисплеях, включение суперсемплинга на Full HD-дисплее приводит к аналогичной потере в производительности.
При этом качество картинки действительно будет ощутимо выше.
Обозреватели заключают, что само наличие подобного режима на PS4 Pro «даёт пользователям больше выбора, что не может быть плохо». Однако в идеале разработчики сами должны добавить поддержку различных опций, встроенных в их игры, независимо от того, какой дисплей подключён к консоли. Системное решение — лишь полумера.
Всё больше игр, такие как Rise of the Tomb Raider, Horizon Zero Dawn и Monster Hunter: World, позволяют игрокам выбрать тот режим, который им больше по нраву. Но пока будут выходить тайтлы, ограничивающие пользователей в этом отношении, принудительный суперсемплинг будет полезен, уверены в Digital Foundry.
60 fps лучше, чем разрешение и графон.
Предпочитаю 30 fps и картинку без лесенок и мыла. Кто-кого?
Не обязательно мыло и лесенки делать, но графон проще, менее детализированный и несколько более угловатый.
Смотря в каких играх. В шутерах и слешерах и файтингах определенно 60 фпс лучше, но они и сейчас с 60 фпс выходят (овервотч, колда, батла, инжастис и прочие автоматы)
В 3ps экшн адвенчурах типа анчартед и хорайзн и 30 фпс отлично играется. Там лучше пусть графон качественнее будет, чтобы показать работу художников по созданию мира
Согласен. В этом плане мне нравится, как поступили в Хитмане, Ведьмаке 3 и Ларке на улучшенных консолях: на выбор либо 4К и 30 фпс, либо 1080р и 60фпс с графоном, как в обычных консолях, либо 1080р и 30 фпс, но с ультра графоном (это в случае с Ларкой)
Во всех бы играх так! Сам выбираешь, что нужнее: графон или кадры в секунду.
На прошке разве можно в 60FPS в ведьмаке?
Пожалуй это первый раз с момента релиза «PS4 pro», когда я на какой-то момент начал хотеть эту приставку. Раньше этого не происходило потому что:
— VR не интересен;
— 4k-телевизора нет, и ближайшие 3-5 лет брать не планирую (если только текущий ТВ сам не сломается);
При этом тестово юзал я этот SSAA на своем PC в Skyrim и Dirt Rally, и ощущения после юзанья были просто невероятно положительные (в Dirt Rally FPS был норм, но охлаждение начинало не справляться, и после 20 минут начинало пахнуть чем-то типа оплавившегося асфальта, лол).
Собственно единственное что останавливает меня от немедленной продажи своей «толстушки» в пользу «Pro» это 24 FPS в скрине The Last Guardian.
Как запустить игру в большем разрешении?
Какое идеальное разрешение для ПК-игры? Спросите об этом большинство игроков и они незамедлительно ответят вам, что «максимально поддерживаемое монитором». Довольно очевидное решение. Ведь не имеет смысла рендерить графику в более высоком разрешении, если его не поддерживает ваше оборудование, верно?…Верно?
Краткий взгляд на Суперсэмплинг
Возможно, нет. В настоящее время, разработчики ПК-игр стали настоящими экспертами в том, чтобы их игры работали в 60 кадрах в секунду даже на средних конфигурациях железа(ну, по крайней мере некоторые из них), и даже бюджетные видеокарты являются невероятно производительными и эффективными. Помимо прочего, в индустрии появилась новая техника, которая заставляет игры выглядеть еще лучше. Называется она «Суперсэмплинг».
Так что делает этот Суперсэмплинг? Если просто, то он рендерит графику игр в разрешении больше, чем монитор может выдавать, а затем сжимает ее до размером стандартного разрешения монитора. Различное программное обеспечение с такими же функциями уже давно существовало, но сегодняшние видеокарты стали достаточно мощны, чтобы придать этой технологии полную поддержку.
Плюсом Суперсэмплинга является то, что вы можете видеть графику в более высоком качестве, избегая при этом некоторых базовых косяков, например, ступенчатых углов полигонов или артефактов освещения. Проще говоря, вы используете мощь вашей видеокарты для выдачи изображения в более высоком разрешении, придавая картинке хоть и незначительные, но приятные улучшения, например, уменьшением «лесенок» и улучшением эффектов освещения. Этот же эффект может быть достигнут и с помощью более сложных техник сглаживая, но теперешние видеокарты достаточно производительны, чтобы в полной мере использовать Суперсэмплинг. Минусом этой технологии, как уже можно было догадаться, является то, что зачастую кадровая частота при суперсэмплинге может очень сильно упасть, но оно и понятно, так как вашей видеокарте приходится работать в несколько раз больше.
Вверху вы можете увидеть персонажа Лусио из Overwatch в стандартном рендере и в рендере, который был увеличен на 200% с помощью технологии Суперсэмплинга. Обе картинки изображаются в разрешении 1080p, т.е. на максимальном разрешении большинства стандартных мониторов. Но изображение слева рендерится на игровом движке в 1080p, в то время как изображение справа рендерится в 4K(3840×2160). Обратите внимание насколько лучше стало выглядеть картинка, когда к ней применили оговариваемую технологию. Однако, такое улучшение, как уже было сказано, обойдется вам в уменьшенную кадровую частоту. Например, если у вас ранее в игре наблюдались стабильные 60 FPS, то с применением Суперсэмплинга они могут вполне ожидаемо опуститься до 40 или 30 FPS.
Результаты применения технологии Суперсэмплинга могут зависеть от различных конфигураций систем, а также от самих игр. Большинство энтузиастов в сфере компьютерных технологий уже достигли консенсуса между собой в том, что Суперсэмплинг наиболее мудро применять к старым ПК-играх или же нетребовательным консольным портам, которые обычно не требуют полной производительности от вашего компьютера. Подобные игры могут спокойно работать в 60 FPS даже под увеличенным разрешением рендера картинки. Помимо этого, Суперсэмплинг также будет интересен художникам, которым необходимо снять скриншот или записать высококачественное видео.
Вот отличный пример применения Суперсэмплинга. В данном случае использовалась технология со стороны AMD, которая имеет название «Виртуальное сверхвысокое разрешение».
Существует два способа добиться такой картинки: через программное обеспечение вашей видеокарты или через саму игру. Заметьте, что только некоторые видеоигры имеют поддержку Суперсэмплинга. Мы рекомендуем попробовать оба способа.
Опция №1: Включение Суперсэмплинга через Видеокарту
Этот метод заставит саму Windows рендерить изображение в более высоком разрешении.
Видеокарты Nvidia
Сейчас мы рассмотрим активацию этой технологии для владельцев графических ускорителей Nvidia. Откройте Панель управления Nvidia, а затем перейдите во вкладку «Регулировка размера и положения рабочего стола». Убедитесь, что вы поставите галочку напротив параметра «Замещение режима масштабирования, заданного для игр и программ».
Теперь перейдите во вкладку «Изменение разрешения» под ниспадающей вкладкой «Дисплей». Далее кликните на «Изменить разрешение» под списком доступных разрешений. Теперь кликните на кнопку «Изменить», а затем на кнопку «Создать пользовательское разрешение».
Далее вам предстоит задача по созданию разрешения, которое будет больше, чем родное разрешение вашего монитора, но при этом оно должно соответствовать его соотношению экрана. Большинство широкоэкранных мониторов имеют соотношение 16:9, про-версии таких мониторов имеют соотношение 16:10, старенькие ЖК-мониторы обычно имеют соотношение сторон 4:3. К примеру, если ваш монитор имеет разрешение экрана 1920×1080, что соответствует соотношению сторон 16:9, то вы можете выставить разрешение 2560×1440 или даже выкрутить его до полных 4K в 3840×2160(они оба являются разрешениями с соотношением сторон 16:9).
Кликните «Проверить», чтобы увидеть результат вашего выбора. Некоторые разрешения будут приняты вашим монитором, некоторые – нет. Если нет, то может отображаться пустой экран или же сообщение с ошибкой. В этом случае вам, скорее всего, потребуется воспользоваться функцией Суперсэмплинга в самих играх, но об этом далее в статье.
Если же вы смогли выставить разрешение удачно, то у вас в меню выбора разрешения Windows появится новое разрешение(нажатие правой кнопкой мыши на Рабочий стол и выбор «Разрешение экрана»). Вы можете просто выставить перед запуском игры нужное разрешение, а затем уже в ней подкорректировать его, если это будет нужно.
Однако, для Nvidia существует еще один способ воспользоваться Суперсэмплингом, и, возможно, вы найдете этот способ куда более легким для исполнения. Итак, снова зайдите в Панель управления Nvidia, а затем перейдите во вкладку «Параметры 3D→Управление параметрами 3D».
В настройках 3D, вам нужно найти два параметра: DSR – Плавность и DSR – Степень. DSR – это технология суперсэмплинга со стороны Nvidia, аббревиатура которой расшифровывается как Dynamic Super Resolution или Динамическое суперразрешение.
«DSR – Плавность» отвечает за четкость картинки. По умолчанию, плавность выставлена на 22%. Выставьте меньший процент, если вы хотите повысить четкость картинки, или больший, если хотите сделать ее плавнее. Однако знайте, что высокая плавность требует больших затрат ресурсов вашего компьютера. «DSR – Степень» буквально будет отвечать за доступные разрешения в игре. Поставьте галочки напротив всех множителей, чтобы разблокировать все возможные разрешения для рендера.
Сохраните изменения в Панели управления Nvidia и зайдите в любую игру, чтобы проверить доступные разрешения. Теперь в опциях любой игры у вас должен появиться выбор большего числа разрешений Суперсэмплинга.
Видеокарты AMD
На видеокартах AMD технология суперсэмплинга выступает под именем «Виртуальное сверхвысокое разрешение». VSR поддерживается на видеокартах Radeon HD 7790 и новее. Возможные разрешения зависят от мощности видеокарты, например, серия видеокарт Radeon R9 способна выдавать даже 4K.
Аналог от AMD также куда более дружелюбнее к пользователю по сравнению с версией Nvidia. Зайдите в Настройки программы для видеокарты Radeon, кликните на «Дисплей», а затем переключите опцию «Виртуальное сверхвысокое разрешение» на позицию «Включено». Как только вы это сделаете, игры смогут выставляться в более высоком разрешении без влияния на разрешение в Windows.
Вы также можете выставлять различные разрешения и на карточках AMD, которые не поддерживают этой технологии, но это куда более сложный и затратный по времени процесс, требующий редактирования Реестра Windows.
Опция №2: Включение Суперсэмплинга в игре
Некоторые недавние игры позволяют рендерить себя в более высоком разрешении. Расположение этой настройки может меняться в зависимости от игры, но в большинстве случаев она располагается в графических настройках. Например, опцию Суперсэмплинга можно найти в таких играх, как Shadow of Mordor, Overwatch, Batman: Arkham Knight и т.д.
Да, не все современные игры имеют поддержку Суперсэмплинга, но данная тенденция продолжает расти с каждым днем, и будет не удивительно, если в недалеком будущем все игры будут иметь поддержку этой непревзойденной технологии.
Как работает рендеринг в 3D-играх: сглаживание
Любая 3D-игра состоит из тысяч и даже миллионов всевозможных цветных линий. Но из-за того, какими способами они появляются на экране, они часто могут выглядеть неровными и отвлекать от игрового процесса.
В этой статье мы доступно и (почти) без математики объясним, какие методы используются для сглаживания границ в игровой графике.
С математической точки зрения, алиасинг, или эффект «зубчатости» границ на изображении, возникает тогда, когда непрерывный сигнал преобразуется в дискретный набор значений. Растеризация прямой или кривой вызывает пространственный алиасинг — такие геометрические линии фактически состоят из бесконечного числа точек, соединяющих две точки в пространстве, и их представление с использованием фиксированного числа пикселей приводит лишь к приближению к исходной линии. И поскольку пиксельная версия линии уже не является реальной, ее расположение рядом с другими фигурами создает множество визуальных странностей, которые мы и имеем в виду под термином «алиасинг».
Алиасинг возникает из того факта, что отрендеренное изображение должно каким-либо образом отображаться на экране. И независимо от того, сделан ли он из электронно-лучевой трубки (ЭЛТ), жидкокристаллического дисплея (ЖКД) или плазменной панели, этот экран создает изображение с помощью набора цветных элементов.
Разрешения 10 х 7 пикселей недостаточно для отображения этого треугольника без алиасинга
Некоторые сигналы меняются во времени, а не в пространстве, и в таком случае при выборке значений через заданные интервалы тоже образуется алиасинг. Например, преобразование аналоговой звуковой дорожки в цифровую включает в себя изменение уровня звука каждые несколько долей секунды: так, в случае аудио компакт-диска это происходит каждые 0,02 миллисекунды. Различия между дискретным и исходным сигналом создают временной алиасинг и обычно устраняются путем более быстрой выборки.
Но что, если сигнал представляет собой последовательность движений? В реальном мире кажется, что вещи вокруг нас движутся непрерывно — поэтому, когда мы преобразуем это в поток кадров, мы получаем алиасинг. В мире кино это приводит к странно выглядящему движению — например, когда колеса автомобиля как будто бы вращаются в обратном направлении. Также и в 3D-графике, когда частота кадров рендеринга недостаточно высока для полного представления движения объектов, это приводит к тому, что края выглядят размытыми или неровными, что еще больше усугубляется пространственным алиасингом.
Хотя методы, используемые для решения этих проблем, в совокупности известны как сглаживание (анти-алиасинг, сокращенно AA), в кино и 3D-играх они совершенно разные. Для последних по факту используется множество методов, имеющих самые разные названия. Но прежде, чем мы рассмотрим подробнее наиболее часто встречающиеся алгоритмы, давайте поговорим о разрешении и частоте кадров. Ведь если бы они всегда были сверхвысокими, то и не возникало бы никаких проблем.
Воспользуемся старым бенчмарком, таким как 3DMark03, чтобы сосредоточиться исключительно на пространственном алиасинге.
Приведенное выше изображение (оригинал) из теста Wings of Fury было снято с разрешением 1280×720 пикселей. Четырнадцать лет назад, когда Radeon 9800 XT и GeForce FX 5900 Ultra были лучшими из доступных видеокарт, самые большие мониторы имели разрешение около 1600×1200 пикселей — так что разрешение, которое мы используем для тестов сейчас, можно было бы принять за среднее либо низкое (сродни сегодняшнему 1080p).
Беглый взгляд на крылья самолетов ясно указывает на проблему алиасинга, и особенно это заметно в движении. Большой контраст между цветом пикселей на крыле и фоном неба и облаков создает мерцание при движении самолета по небу. Виной всему относительно низкая частота дискретизации, а потому наиболее очевидным решением было бы ее увеличение. Давайте снова посмотрим ту же сцену в разрешении 4K, или 3840×2160 пикселей (оригинал):
Края крыльев выглядят заметно сглаженными, но если немного увеличить масштаб, то можно увидеть, что алиасинг по-прежнему присутствует. Конечно, можно продолжить увеличивать разрешение до тех пор, пока визуально не останется никаких искажений, но за это придется заплатить производительностью.
Каждый пиксель требует обработки, если не указало иное: к нему нужно применить несколько текстур и обработать его многочисленными шейдерами для расчета окончательного цвета. Обычно это узкое место в большинстве игр, и общая частота кадров обратно пропорциональна разрешению. Если верить столь старому бенчмарку, как 3DMark03, переход с 1280х768 до 3840×2160 пикселей снижает среднюю частоту кадров с 1670 до 1274 кадров в секунду — то есть, увеличение количества обрабатываемых пикселей на 740% приводит к снижению производительности всего на 24%. Однако с новыми бенчмарками все выглядит несколько иначе. Это можно легко продемонстрировать, запустив последний 3DMark в различных разрешениях. На графике ниже показана средняя частота кадров первого графического теста в бенчмарке Time Spy.
Переход от 720p к 4K означает увеличение разрешения на 800%, но частота кадров при этом падает на 81%. Хотя игры не обязаны соответствовать этой закономерности, современные AAA-тайтлы, скорее всего, покажут схожие результаты. Это говорит о том, что если мы хотим максимально уменьшить влияние алиасинга, нам понадобится метод получше, чем просто повышение разрешения — ведь чем ниже частота кадров, тем хуже временной алиасинг.
Избыточная выборка сглаживания, или суперсэмплинг (Supersampling anti-aliasing, SSAA)
Это самый старый и самый простой метод сглаживания. Он включает в себя рендеринг сцены с более высоким разрешением, чем заданная настройка, а затем сэмплинг и смешивание результата до меньшего числа пикселей. Например, монитор может быть иметь разрешение 1920×1080 пикселей, а игру можно настроить для рендеринга с разрешением 3840×2160, после чего происходит масштабирование обратно до меньшего разрешения и вывод результата на экран. Обычно в этом алгоритме используется метод ближайшего соседа, а математика смешивания является ни чем иным, как средним арифметическим сэмплов.
Конечно, возможности современных графических процессоров позволяют использовать и более сложные алгоритмы сэмплирования и смешивания. Но для начала посмотрим, как работает этот.
На изображении ниже показан классический 4x SSAA в действии. 4x указывает на смешение четырех сэмплов путем вычисления среднего арифметического значения цвета для вывода его на экран. Для этого разрешение увеличивается в 2 раза по обеим осям.
Обратите внимание на расположение сэмплов в примере выше. Поскольку сами пиксели имеют дискретную область, позиции сэмплов могут быть установлены в любом месте в пределах этой области.
Проблема с SSAA заключается в том, что все эти дополнительные пиксели необходимо обрабатывать, и, как мы видели в тестах 3DMark, увеличение разрешения может легко вызвать резкое падение частоты кадров.
Сейчас суперсэмплинг используется уже редко, хотя и нашел новое применение в качестве настроек в драйверах для видеокарт AMD и NVIDIA: в первых эта технология называется виртуальное суперразрешение (Virtual Super Resolution, VSR), во второй — динамическое суперразрешение (Dynamic Super Resolution, DSR). Их можно использовать для сглаживания в некоторых старых играх, в которых нет никакой встроенной системы, или просто для улучшения уже имеющегося изображения.
Множественная выборка сглаживания, или мультисэмплинг (Multisample anti-aliasing (MSAA)
Этот метод впервые появился в исследовательских лабораториях Silicon Graphics в начале 90-х годов. По сути, это тот же SSAA, но с выборочным применением только там, где это действительно необходимо. Ладно, пожалуй, это все-таки не просто SSAA, но такая формулировка должна помочь в понимании, как работает этот алгоритм.
Главное преимущество суперсэмплинга само по себе представляет проблему, поскольку при нем сглаживается все: края примитивов, плоские текстурные поверхности, прозрачные многоугольники и многое другое. Учитывая, что фильтрация текстур уже заботится о том, что происходит внутри треугольников рендеринга, нам нужна система, которая работала бы только с краями, которые больше всего подвержены проблеме алиасинга.
Но как это сделать? Так уж вышло, что необходимая для этого информация у нас уже есть. Когда трехмерный мир вершин преобразуется в двухмерную плоскость растра, в пикселях, образующих различные примитивы в сцене, закладывается информация не только о цвете и текстурах, но и о глубине.
Эта информация может храниться в z-буфере (или буфере глубины), а затем использоваться для определения видимости краев. В приведенном выше примере все крайне просто: белый цвет обозначает фон, черный — примитив.
С возможностями современных графических процессоров мы можем создать версию черно-белой сетки с более высоким разрешением. В таком случае мы просто записываем глубину примитива в местах выборки:
Можно заметить, что большее число сэмплов дает нам более репрезентативную карту глубины.
А теперь перейдем к самому интересному. Отложив эту карту глубины, вернемся к кадру с исходным разрешением и запустим все наши пиксельные шейдеры для формирования конечного цвета. Затем вернемся к детализированному буферу глубины и для каждого пикселя, что находится в примитиве (т.е. для черных пикселей), выделим цвет шейдера на выходе. Очевидно, что это нужно где-то хранить, так что нам понадобится относительно небольшой буфер для каждой точки из выборки в пикселе. Затем, как и в SSAA, мы сэмплируем и смешиваем детализированный буфер до требуемого разрешения — и получаем фрейм со сглаживанием. Что касается производительности, то мы запускали пиксельные шейдеры только на относительно небольшом количестве точек, но при этом нам пришлось создать и сохранить пару буферов с высоким разрешением.
Таким образом, для мультисэмплинга необходимо большее количество VRAM и более высокая пропускная способность памяти (а также возможность быстрого чтения/записи в z-буферы), но зато он не требует большой мощности от шейдеров. Давайте для сравнения с SSAA воспользуемся старым примером кода AMD.
Код запускает простую сцену с базовыми текстурами и освещением, но большим количеством геометрии, так что алиасинг по краям видно особенно хорошо. Если приблизить изображение, то в верхнем левом углу можно увидеть следующую информацию: каждому кадру требуется в среднем 0,18 миллисекунды на рендеринг и всего 0,02 мс на смешивание для окончательного вывода. Цветовой буфер имеет размер 7,4 МБ, как и буфер глубины.
Также можно увеличить определенные области кадра, чтобы увидеть алиасинг во всех деталях. Напомним, что можно отрендерить все это с более высоким разрешением, но это увеличит время рендеринга. Если мы применим к сцене 4x SSAA, именно это и произойдет.
Обратите внимание, что на изображении выше время рендеринга увеличилось до 0,4 мс (то есть, на 122%), а время смешивания удвоилось. Кроме того, размер буферов цвета и глубины увеличился в 4 раза. Такова стоимость использования SSAA, и хотя современному графическому процессору не составит особой проблемы произвести такое сглаживание на столь простом примере, но современные 3D-игры — совсем другое дело.
Теперь взгляните на увеличенный фрагмент. Обратите внимание на гладкость линий. Да, осталось еще много «лесенок», но результат выглядит заметно лучше. Было бы это еще не так дорого.
Но теперь рассмотрим MSAA:
Здесь время рендеринга сцены почти вернулось к тому значению, каким оно было без применения сглаживания (что хорошо), хотя время вывода еще больше увеличилось. Общий объем памяти — где-то на полпути между отсутствием AA и 4x SSAA, отчего может показаться, что MSAA определенно лучший вариант, чем SSAA. Можно сказать, что даже уменьшение алиасинга на краях примитивов выглядит лучше, хотя это больше связано с выбором шаблона сэмплинга, а не с природой самого MSAA. Но если посмотреть на текстуру стены в увеличенной области, станет очевидным один недостаток MSAA.
Там, где SSAA улучшает все, MSAA влияет только на края геометрии, и хотя это не представляет большой проблемы для статических изображений, в движении разница будет куда более заметной. Другая проблема заключается в том, что алгоритм плохо работает с отложенным рендерингом, и, хотя есть способы обойти это, ни один из них не будет «бесплатным» с точки зрения производительности.
Так что же делать, если методы супер- и мультисэмплинга — не лучший выбор?
Быстрое приблизительное сглаживание (Fast approximate anti-aliasing, FXAA)
В 2009 году Nvidia представила новый метод очистки неровных краев фигур в 3D-сценах. В отличие от SSAA и MSAA, реализация FXAA был разработана полностью при помощи шейдеров. С момента выпуска он претерпел не одно улучшение и сегодня активно используется в играх.
Алгоритм представляет собой проход постобработки — то есть, запускается после того, как большая часть рендеринга уже завершена, но до применения таких элементов, как HUD, — и обычно имеет вид однопиксельного шейдера. Первая итерация алгоритма работает следующим образом: сначала мы выбираем буфер, содержащий изображение, которое мы хотим отобразить, и преобразуем значение sRGB в линейную оценку яркости этого пикселя (это мера того, сколько света проходит через заданную область в заданном направлении). Эта часть шейдера состоит всего из нескольких строк и даже может использовать зеленый канал для оценки уровня освещенности. Зачем это нужно? Что ж, следующий шаг в шейдере включает проверку относительного контраста окружающих пикселей по отношению к выбранному пикселю: если разница велика, то это место, скорее всего, окажется границей.
Последовательность FXAA: найти пиксели на границе, определить ее ориентацию, сдвинуть их, размыть конечное изображение
Отобранные пиксели проходят еще одну проверку по определению ориентации границы. После этого пара пикселей под углом 90° к границе, имеющая наибольшую разницу в яркости, участвует в сканировании по этой границе для поиска ее концов.
После идентификации всех краев на изображении позиции пикселей вдоль этих краев сдвигаются: вверх или вниз в случае горизонтальных линий и из стороны в сторону для вертикальных. Перемещаются они совсем ненамного, так что новое положение находится в пределах области исходного пикселя. Исходный буфер кадра дискретизируется с использованием уже новых местоположений: пиксели внутри примитивов по-прежнему останутся там, где они были раньше, но те, что определяли границы, поменяются, что поможет уменьшить влияние алиасинга.
FXAA имеет серьезные преимущества перед SSAA и MSAA. Во-первых, он представляет собой простой фрагмент кода, что под силу выполнить практически любому графическому процессору. Во-вторых, он сглаживает все края, а не только периметры фигур. Например, текстуры с прозрачностью, часто используемые для дыма, мусора и листвы, окажутся сглажены, чего не будет при MSAA.
Пример использования FXAA представлен ниже:
Без AA (слева) и FXAA (справа) — обратите внимание, что деревья и элероны на крыле выглядят намного более гладкими
Какие же минусы? При заполнении кадра высококонтрастными областями, такими как яркие пиксели на темном фоне, они будут смешаны независимо от того, было ли это нужно или нет.
Метод имеет меньшую точность, чем в SSAA или MSAA, ведь он не улавливает детали субпикселей и по сути просто является своеобразным фильтром, который размывает некоторые текстуры. Но принимая во внимание его дешевизну при относительной эффективности, нетрудно понять, почему FXAA все еще часто применяют 12 лет спустя, пусть и переработанный.
Существуют и другие полноэкранные алгоритмы обнаружения границ, аналогичные этому: морфологическое сглаживание (MLAA), разработанное Intel, в свое время послужило вдохновением для создания FXAA; далее оно было доработано разработчиком игр Crytek и университетом Сарагосы в Испании и получило новое название Enhanced Sub-pixel MLAA (SMAA). Самое лучшее во всех этих алгоритмах — что, в отличие от SSAA и MSAA, они могут постоянно обновляться и модифицироваться программистами, настраивающими их в соответствии с приложениями или играми, которые они создают.
Временное сглаживание (Temporal anti-aliasing, TAA)
До сих пор мы рассматривали только методы борьбы с визуальным воздействием пространственного алиасинга. Чтобы противостоять временному алиасингу, вызываемому тем, что 3D-игры генерируют дискретные выборки непрерывного движения, чаще всего используют следующий алгоритм.
Начинается рендеринг как обычно, но затем мы сохраняем значения цвета пикселей в блоке памяти, называемом буфером истории. После этого рендер переходит к следующему кадру в последовательности и обрабатывает его. Перед его отображением мы берем сэмплы из буфера истории, и результат смешивается с текущим кадром. Затем буфер истории обновляется с новым результатом, копируется для формирования окончательного изображения, а в конце отмечается как готовый для отображения на мониторе.
Основная предпосылка временного сглаживания
Затем все последующие кадры следуют тому же шаблону рендеринга, сэмплируют буфер истории, смешивают, обновляют и отображают результат. Накопление последовательных кадров приводит к сглаживанию всей сцены при переходе от кадра к кадру — так у нас получается гладкое изображение, на которое вполне можно смотреть.
Но если бы на этом работа алгоритма заканчивалась, он был бы бесполезен — например, если бы от кадра к кадру не было изменений, то смешивание ничего не исправило бы. Чтобы это обойти, каждый кадр изначально рендерится со случайным смещением камеры с небольшим запасом (это называется субпиксельным дрожанием). Слегка сдвинутые позиции пикселей затем используются для сэмплирования буфера истории, после чего дрожание устраняется, и обработку кадра можно считать завершенной. Таким образом, когда дело доходит до смешивания значений истории с текущими, вы почти всегда получаете выборки координат субпикселей, которые находятся не совсем в одном и том же месте, что приводит к некоторой степени сглаживания.
Самый распространенный алгоритм TAA
Временной АА может вызвать такую проблему, как гостинг (ghosting), когда края движущихся объектов кажутся размытыми, а не сглаженными. Один из наиболее распространенных методов ее решения заключается в использовании шейдера для вычисления векторов движения объектов, сохранения информации в памяти (буфере скорости) и последующего сравнения относительных скоростей текущего пикселя с выбранными: если они заметно отличаются, выборка истории отклоняется.
В дополнение к использованию значений скорости, большинство реализаций TAA выполняют дальнейший процесс верификации выборки истории — это предотвращает использование значений из предыдущих кадров, которые больше не актуальны в текущем (например, если они скрыты за перемещенным объектом). В этом методе обычно используется ограничивающая рамка, выровненная по осям, где оси используют цветность буфера истории, отклоняя любые цвета, выходящие за их пределы.
Окончательное смешивание пикселей текущих и из истории также может быть взвешено с использованием сравнительных значений цвета, яркости или скорости. Наконец, на финальной копии обновленного буфера истории можно использовать различные фильтры размытия, чтобы еще больше уменьшить гостинг изображения.
Так выглядит результат TAA:
Без AA (слева) и TAA (справа) — обратите внимание на размытие деталей на крыле
Для разработчиков запрограммировать все это гораздо сложнее, чем добавить в игру SSAA или MSAA. Но современные графические процессоры могут довольно быстро обрабатывать все требуемые шейдеры, и там, где алгоритмы супер- и мультисэмплинга требуют множество сэмплов для каждого кадра (а значит, большей работы модуля вывода рендеринга (ROP) и пропускной способности памяти), TAA эффективно распределяет эти сэмплы по нескольким кадрам. Это значит, что для игр, не сильно ограниченных количеством затенения, можно включить TAA с относительно небольшой потерей производительности.
Кроме того, TAA хорошо работает с отложенным рендерингом и может использоваться в связке с FXAA и SMAA, что приводит к еще лучшему виду изображения. К сожалению, он имеет склонность к чрезмерной размытости и вызывает мерцающие артефакты на краях с высокой контрастностью. Но, поскольку вычислительные мощности графических процессоров пока не демонстрируют никаких признаков выхода на плато, все эти методы можно продолжать совершенствовать.
И это еще не все!
Четыре описанных выше метода широко используются в играх для ПК и консолей, особенно в FXAA и TAA. Но на них дело не ограничивается.
Например, когда NVIDIA выпустила видеокарты серии GeForce 9, она также анонсировала модифицированную версию MSAA под названием Multi-Frame Sampled Anti-aliasing (MFAA). По сути, в этом алгоритме с каждым кадром графический процессор изменяет шаблон сэмплирования, и таким образом каждый раз берется и смешивается меньшее количество сэмплов. При усреднении по нескольким кадрам эффект оказывается такой же, как и при обычном MSAA, но с меньшими затратами на производительность. К сожалению, этот алгоритм можно было реализовать только в играх, разработанных под руководством NVIDIA. Тем не менее, он все еще существует, и вы можете получить к нему доступ, включив опцию в панели управления драйвером GeForce.
Совсем недавно та же компания вложила значительные ресурсы в разработку алгоритма AA, использующего искусственный интеллект. Алгоритм, появившийся в 2018 вместе с чипами Turing, имеет название суперсэмплинг при помощи глубокого обучения (DLSS).
Первая версия DLSS требовала обучение глубокой нейронной сети на определенных играх. В них она сравнивала кадры низкого разрешения с кадрами очень высокого разрешения, в которых был включен SSAA. Текущая версия использует более обобщенную сеть и принимает во внимание дополнительную информацию в виде векторов движения для определения, как должен выглядеть кадр, если он был отрендерен с более высоким разрешением.
Сравнение оригинального 1080p и с применением DLSS:
Сейчас AMD работает над собственным аналогом DLSS. Можно предположить, что со временем алгоритмы глубокого обучения AA заменят традиционные, но сейчас до этого еще далеко. Такие системы не легче внедрить, чем, скажем, TAA, а визуальные результаты при этом не всегда идеальны.
Мы прошли уже долгий путь со времен Riva TNT и Half-Life, когда просто приходилось мириться с неровными полигонами повсюду, ведь не было никаких технологий, чтобы можно было что-то с этим сделать, но исследования улучшенных методов сглаживания продолжаются и продолжаются.