SSAO в играх что это

Сглаживание в играх и другие настройки, как выжать максимум из видеокарты?

Здравствуйте, уважаемые читатели блога Pc-information-guide.ru. Поскольку среди моих читателей наверняка есть те, кто играет в компьютерные игры, я решил посвятить сегодняшнюю статью игровым настройкам, а конкретно сглаживанию и другим важным параметрам, в той или иной степени оказывающим влияние на производительность видеокарты. Поэтому сегодня мы с вами будем разбираться, как и какие настройки влияют на производительность видеокарты.

Во-первых важно понимать, как и из чего формируется изображение на экране, которое мы видим во время игры. Видеокарте нужно расставить объекты, натянуть текстуры, рассчитать освещение, положить тени, сгладить неровности, и при всем при этом, уложиться буквально в считанные доли секунды! И если какой-то этап занимает больше времени чем положено, появляется заметное глазу «торможение», или по-научному, проседание кадров в секунду. Вот, посмотрите сами:

Конечно, многое зависит от разрешения (Resolution) как такового. Простым изменением разрешения на одну ступень ниже можно добиться прироста производительности в 30-40%. Однако при этом, независимо от остальных настроек, картинка на экране будет выглядеть «замыленной». Поэтому самую «вкусную» картинку в игре можно получить, если разрешение соответствует максимальному разрешению (стандартному заводскому) монитора.

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

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

Это создает гораздо более реалистичную картинку с необходимыми затенениями в углах, но ОЧЕНЬ нагружает видеокарту. На сегодняшний день эта технология доступна в двух вариантах: чуть более простой SSAO (Screen Space Ambient Occlusion) и гораздо более продвинутый и прожорливый HBAO (Horizon-Based Ambient Occlusion).

Есть еще Анизотропная фильтрация (anisotropic filtering, AF) или фильтрация текстур. Она нужна для того, чтобы текстуры, которые находятся под углом или далеко от камеры не выглядели слишком мутными и на них не было никаких цветовых артефактов.

Чем выше значение — тем лучше результат фильтрации, однако сразу скажу — эти значения можно выкручивать сразу на «16x», т.е. на максимальное, и это никак не отразится на производительности даже самой бюджетной видеокарты.

Про сглаживание в играх

Сглаживание (anti aliasing). Что же такое сглаживание? Вы наверняка в играх довольно часто встречались с тем, что у объектов, которые должны в принципе выглядеть ровно и гладко, на краях появляются какие-то непонятные лесенки и зазубрины. Естественно, разработчики игр и видеокарт об этой проблеме знают, поэтому и появилась технология, которая называется «сглаживание», она и нужна чтобы эти неровности сгладить (что очевидно).

Существует довольно много методов осуществить сглаживание. Первый из них взаимодействует с изображением еще на уровне его построения. К первому методу относится: способ сглаживания SSAA (Supersample anti-aliasing) и MSAA (Multisample anti-aliasing), и еще между ними недавно затесался CSAA (Coverage Sampling Antialiasing) — последний, нечто среднее по производительности и по качеству.

Как все эти способы сглаживания работают? Они создают картинку в несколько раз большую, чем необходимо, а потом сжимают ее до размеров экрана, получается довольно неплохой результат, но нагрузка на видеокарту в этот момент просто нечеловеческая. Потому что в зависимости от того, что вы выберете в настройках игры (2x, 4x или 8x), соответственно и изображение будет в два, четыре или в восемь раз больше необходимого, получается, что и нагрузка в два, четыре или восемь раз больше.

Но, к счастью для нас, есть второй метод, который основан на так называемой пост-обработке, т.е. когда сглаживание применяется уже к сформированной сцене. К этому методу относятся уже 3 способа сглаживания: FXAA (Fast approXimate Anti-Aliasing) — по качеству сравним с четырех кратным MSAA сглаживанием, но при этом он не создает вообще никакой нагрузки на видеокарту, ну или настолько малую, что ее практически незаметно. Правда у FXAA есть один небольшой минус — при этом совсем слегка замыливаются текстуры. На глаз это почти незаметно.

Но если вам это мыло прям режет глаза, для вас есть второй способ SMAA (Sub-pixel Morphological Anti-Aliasing), он дает чуть меньшее размытие, но и настолько же меньшее качество сглаживания, при том, что все так же не нагружает видеокарту. И наконец третий способ — TXAA (Temporal anti-aliasing, если я правильно понял, доступно только на видеокартах от Nvidia), он дает очень плавную, киношную картинку, но при этом ощутимо нагружает видеокарту. Если сравнить его с эталонным MSAA, то двукратный TXAA = восьмикратному MSAA, при этом нагрузка на видеокарту такая же, как при двукратном MSAA.

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

Настройки в играх: с чувством, с толком, с расстановкой

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

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

Разрешение экрана

Пожалуй, этот параметр является одним из главных, влияющих как на качество картинки, так и на производительность игры. Данный параметр зависит исключительно от матрицы ноутбука, и поддержки данного разрешения игрой (от 640х480 до 1920х1080). Тут все просто и пропорционально, чем больше разрешение, тем четче картинка и больше нагрузка на систему, и, соответственно, наоборот.

Качество графики

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

Качество текстур

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

Качество теней

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

Качество эффектов

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

Качество окружающей среды

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

Покрытие ландшафта

В некоторых играх указывается как «Плотность травы» либо носит другие подобные названия. Отвечает за количество травы, кустов, веток, камней и прочего мусора находящегося на земле. Соответственно чем выше параметр, тем более насыщенной разными объектами выглядит земля.

Анизотропная фильтрация

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

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

Читать еще:  Pocketbook 626 не включается что делать

Сглаживание

Принцип работы сглаживания таков: до вывода картинки на экран она рассчитывается не в родном разрешение, а в двукратном увеличении. Во время вывода картинка уменьшается до нужных размеров, причем неровности по краям объекта становятся менее заметными. Чем больше исходное изображение и коэффициент сглаживания (x2, x4, x8, x16), тем меньше неровностей будет заметно на объектах. Собственно само сглаживание нужно для того чтобы максимально избавится от «лестничного эффекта» (зубцов по краям текстуры).

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

Multisample anti-aliasing (MSAA), в отличие от FSAA, сглаживает только края объектов, что приводит к небольшому ухудшению графики, но при этом экономит огромную часть вычислительной мощи. Так что если вы не обладаете топовой игровой видеокартой, лучше всего использовать MSAA.

SSAO (Screen Space Ambient Occlusion)

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

Размытие в движение

Также известно как Motion Blur. Это эффект, смазывающий изображение при быстром передвижении камеры. Придает сцене больше динамики и скорости (часто используется в гонках). Увеличивает нагрузку на GPU, тем самым уменьшает количество FPS.

Глубина резкости (Depth of field)

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

Вертикальная синхронизация (V-Sync)

Синхронизирует частоту кадров в игре с частотой вертикальной развертки монитора. При включенной V-Sync, максимальное количество FPS равно частоте обновления монитора. Если же количество кадров в игре у вас ниже, чем частота развертки монитора, стоит включить тройную буферизацию, при которой кадры подготавливаются заранее, и хранятся в трех раздельных буферах. Преимущество вертикальной синхронизации состоит в том, что она позволяет избавиться от нежелательных рывков, при резких скачках FPS.

Не обошлось и без недостатков, например в новых требовательных играх возможно сильное падение производительности. Также в динамических шутерах или онлайн играх, V-Sync может только навредить.

Заключение

Выше изложены основные, но далеко не все настройки в играх. Стоит напомнить, что каждая игра имеет свой уровень оптимизации, и свой ряд настроек. В некоторых случаях игры с лучшей графикой будут идти на вашем ноутбуке быстрее, чем неоптимизированные игры с более низкими требованиями. Большинство игр позволяет использовать как уже готовые настройки, так и задавать вручную каждый отдельно взятый параметр. Часть из рассмотренных выше эффектов поддерживается только в новых DirectX 11 играх, а в более старых с поддержкой DirectX 9 их просто нет.

Желаем вам приятного времяпровождения и незабываемых ощущений в играх.

Графические настройки в компьютерных играх — подробный разбор

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

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

У Nvidia и AMD есть программное обеспечение для автоматической настройки графики согласно техническим характеристикам вашего компьютера. Со своей задачей программы справляются неплохо, но часто ручная настройка приносит куда больше пользы. Все-таки, мы ПК-бояре, у нас должна быть свобода выбора!

Если вы новичок в области игровой графики, это руководство создано специально для вас. Мы расшифруем основные пункты любого меню «Настройки графики» в ваших играх и объясним, на что они влияют. Эта информация поможет вам избавиться от лагов и фризов в любимой игре, не лишаясь красивой картинки. А владельцы мощных компьютеров поймут, как настроить самую сочную и привлекательную графику, чтобы записывать крутые видео и делать зрелищные скриншоты.

Начнем с фундаментальных понятий, а затем пройдемся по тонким настройкам в рамках нескольких разделов, посвященных анизотропной фильтрации, сглаживанию и постобработке. Для написания этого гайда мы пользовались информацией, полученной от профессионалов: Алекса Остина, дизайнера и программиста Cryptic Sea, Николаса Вайнинга, технического директора и ведущего программиста Gaslamp Games и от представителей Nvidia. Сразу отметим, что статью мы пишем простыми словами, опуская подробные технические детали, чтобы вам было легче понять механизмы работы разных технологий.

Содержание

Разрешение

Пиксель — основная единица цифрового изображения. Это цветовая точка, а разрешение — количество столбцов и рядов точек на вашем мониторе. Самые распространенные разрешения на сегодня: 1280×720 (720p), 1920×1080 (1080p), 2560×1440 (1440p) и 3840 x 2160 (4K или «Ultra-HD»). Но это для дисплеев формата 16:9. Если у вас соотношение сторон 16:10, разрешения будут слегка отличаться: 1920×1200, 2560×1600 и т.д. У ультрашироких мониторов разрешение тоже другое: 2560×1080, 3440×1440 и т.д.

Кадры в секунду (frames per second, FPS)

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

Чем сильнее вы загрузите видеокарту обработкой красивых, наполненных деталями игровых сцен, тем ниже будет ваш FPS. Если частота кадров окажется низкой, они будут повторяться и получится эффект подтормаживания и подвисания. Киберспортсмены охотятся за максимальном возможными показателями FPS, особенно в шутерах. А обычные пользователи зачастую довольствуются играбельными показателями — это где-то 60 кадров в секунду. Однако, мониторы на 120-144 Гц становятся более доступными, поэтому потребность в FPS тоже растет. Нет смысла играть на 120 герцах, если система тянет всего 60-70 кадров.

Так как в большинстве игр нет встроенного бенчмарка, для измерения кадров в секунду используется стороннее программное обеспечение, например, ShadowPlay или FRAPS. Однако, некоторые новые игры с DX12 и Vulkan могут некорректно работать с этими программами, чего не наблюдалось со старыми играми на DX11.

Апскейлинг и даунсэмплинг

В некоторых играх есть настройка «разрешение рендеринга» или «rendering resolution» — этот параметр позволяет поддерживать постоянное разрешение экрана, при этом настраивая разрешение, при котором воспроизводится игра. Если разрешение рендеринга игры ниже разрешения экрана, оно будет увеличено до масштабов разрешения экрана (апскейлинг). При этом картинка получится ужасной, ведь она растянется в несколько раз. С другой стороны, если визуализировать игру с большим разрешением экрана (такая опция есть, например, в Shadow of Mordor), она будет выглядеть намного лучше, но производительность станет заметно ниже (даунсэмплинг).

Производительность

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

Мы использовали наш Large Pixel Collider (суперкомпьютер от сайта PC Gamer), включив две из четырех доступных видеокарт GTX Titan, чтобы продемонстрировать, как сильно разрешение влияет на производительность.

Тесты проводились в бенчмарке Shadow of Mordor:

1980х720 (½ родного разрешения)

2560х1440 (родное разрешение)

5120х2880 (x2 родного разрешения)

Вертикальная синхронизация и разрывы кадров

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

Одним из решений этой проблемы стала вертикальная синхронизация, которая почти всегда присутствует в настройках графики. Она не позволяет игре показывать кадр, пока дисплей не завершит цикл обновления. Это вызывает другую проблему — задержка вывода кадров, когда игра способна показать большее количество FPS, но ограничена герцовкой монитора (например, вы могли бы иметь 80 или даже 100 кадров, но монитор позволит показывать только 60).

Адаптивная вертикальная синхронизация

Бывает и так, что частота кадров игры падает ниже частоты обновления монитора. Если частота кадров игры превышена, вертикальная синхронизация привязывает ее к частоте обновления монитора и она, например, на дисплее с 60 Гц не превысит 60 кадров. А вот когда частота кадров падает ниже частоты обновления монитора, вертикальная синхронизация привязывает ее к другому синхронизированному значению, например, 30 FPS. Если частота кадров постоянно колеблется выше и ниже частоты обновления, появляются подтормаживания.

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

Читать еще:  Windows 10 PRO VL что означает VL

Технологии G-sync и FreeSync

Новые технологии помогают разобраться со многими проблемами, которые зачастую основаны на том, что у дисплеев фиксированная частота обновления. Но если частоту дисплея можно было бы изменять в зависимости от FPS, пропали бы разрывы кадров и подтормаживания. Такие технологии уже есть, но для них нужны совместимые видеокарта и дисплей. У Nvidia есть технология G-sync, а у AMD — FreeSync. Если ваш монитор поддерживает одну из них и она подходит к установленной видеокарте, проблемы решены.

Сглаживание (Anti-aliasing, антиалиасинг)

Инструментов для этого достаточно, но легче объяснить на примере суперсэмплинга (SSAA). Эта технология отрисовывает кадры с более высоким разрешением, чем у экрана, а затем сжимает их обратно до его размера. На предыдущей странице вы могли видеть эффект от сглаживания при уменьшении частоты в Shadow of Mordor с 5120х2880 до 1440p.

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

Такова суть технологии. Но, она требует от системы очень много ресурсов. Ей приходится отрисовывать каждый кадр с разрешением в два или более раз больше, чем оригинальное разрешение экрана. Даже в случае с нашими топовыми видеокартами суперсэмплинг с разрешением 2560х1440 кажется нецелесообразным. К счастью, есть альтернативы:

Мультисэмплинг (MSAA): Эффективнее суперсэмплинга, но все еще прожорлив. В старых играх он был стандартом, а его суть объясняется в видео, которое вы увидите ниже.

Усовершенствованный мультисэмплинг (CSAA): более эффективная версия MSAA от Nvidia для ее видеокарт.

Усовершенствованный мультисэмплинг (CFAA): тоже апгрейд MSAA, только от компании AMD для ее карточек.

Метод быстрого приближения (FXAA): вместо анализа каждого отдельного пикселя, FXAA накладывается в качестве фильтра постобработки на всю сцену целиком после ее рендеринга. FXAA также захватывает места, которые пропускаются при включении MSAA. Хотя сам метод быстрого приближения тоже пропускает много неровностей.

Морфологический метод (MLAA): он свойственен видеокартам AMD и тоже пропускает этап рендеринга. MLAA обрабатывает кадр, выискивая алиасинг и сглаживая его. Как нам объяснил Николас Вайнинг: «Морфологическое сглаживание работает с морфологией (паттернами) неровностей на краях моделей; оно вычисляет оптимальный способ удаления лесенок для каждого вида неровностей путем разбиения краев и зубцов на небольшие наборы морфологических операторов. А затем использует специальные типы смешивания для каждого отдельного набора». Включить MLAA можно в панели управления Catalyst.

Улучшенное субпиксельное морфологическое сглаживание (SMAA): еще один вид постобработки, в котором сочетаются детали MLAA, MSAA и SSAA. Такой метод можно совмещать со SweetFX, а многие современные игры поддерживают его изначально.

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

Николас Вайнинг объясняет: «Идея TAA заключается в ожидании того, что два идущих друг за другом кадра будут очень похожи, ведь пользователь в игре двигается не настолько быстро. Поэтому раз объекты на экране переместились несильно, мы можем получить данные из предыдущего кадра, чтобы дополнить участки, нуждающиеся в сглаживании».

Многокадровое сглаживание (MFAA): появилось с релизом графических процессоров Maxwell от Nvidia. Тогда как MSAA работает с устойчивыми шаблонами, MFAA позволяет их программировать. Представители Nvidia подробно объясняют технологию в видео ниже (о нем мы уже говорили раньше и очень скоро вы его увидите).

Суперсэмплинг с глубоким обучением (DLSS): новейшая технология Nvidia, доступная лишь в некоторых играх и с видеокартами GeForce RTX. По словам компании: «DLSS использует нейронную сеть для определения многомерных особенностей визуализированной сцены и интеллектуального объединения деталей из нескольких кадров для создания высококачественного финального изображения. DLSS использует меньше сэмплов, чем TAA, при этом избегая алгоритмических трудностей с прозрачностями и другими сложными элементами сцен».

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

Что означают цифры?

В настройках сглаживания вы часто видите значения: 2x, 4x, 8x и т.д. Эти цифры рассказывают о количестве используемых образцов цвета и, как правило, чем больше число, тем точнее будет сглаживание (при этом оно потребует больше системных ресурсов).

Но есть исключения. Так, CSAA пытается достичь сглаживания на уровне MSAA с меньшим количеством образцов цвета. Поэтому 8xCSAA фактически использует только четыре образца цвета. Есть и 8QxCSAA — этот способ сглаживания увеличивает количество образцов цвета до восьми, чтобы повысить точность.

Производительность

Мы использовали бенчмарк Batman: Arkham City, чтобы протестировать несколько старых методов сглаживания: MSAA, FXAA и TXAA. Результаты, как и ожидалось, показывают, что FXAA требует меньше всего ресурсов, в то время как MSAA и TXAA сильно влияют на среднюю частоту кадров.

Результаты тестирования сглаживания в Batman: Arkham City (на двух Nvidia GTX Titan SLI):

HBAO в играх — что это такое?

Приветствую всех)) Мне нравится что производители видеокарт не только улучшают их аппаратно, но и программно, создавая разные технологии для улучшения картинки в играх, пытаясь выжать все из железа)) Вот например вы играете, все нормально, а тут выходит новая версия драйверов, в которых есть новая функция улучшения графики! такой себе бесплатный приятный бонус))

HBAO в играх — что это значит?

HBAO расшифровывается как Horizon Based Ambient Occlusion, это метод затенения, отличающийся от SSAO тем, что основано на физической модели, где аппроксимируется интеграл освещенности фрагмента сцены со значениями выборки буфера глубины (понятного конечно мало). В итоге качество выше чем SSAO, но кушает ресурсов тоже больше. Поэтому HBAO рендерится обычно в более низком разрешении, что в итоге приводит к мерцанию картинки.

Проблема мерцания была исправлена в версии HBAO+ (но видюху требует от GTX 660 и выше), кстати этот способ используется и в 4K играх на Sony PlayStation: в HBAO+ используется шахматный рендерниг, то есть для обработки затенения используется часть предыдущего кадра и половина нового, в итоге нагрузка на видеокарту меньше, но при этом рендеринг происходит в исходном разрешении, поэтому мерцания нет.

Вот пример как работает технология в деле:

HBAO создает мягкие и реалистичные контактные тени, может и правда улучшить графику. Но как мы уже выяснили — кушает ресурсы, поэтому может быть просадка FPS.

HBAO больше подходит для видеокарт NVIDIA, а для AMD лучше использовать HDAO, в то время как SSAO — самый легкий режим в плане использования ресурсов.

Что лучше ставить? Вопрос сложный. Идеально это ставить Fraps и тестировать FPS))

Затенение HBAO+ входит в набор технологий NVIDIA GameWorks.

Давайте посмотрим на эффект HBAO+, вот скрин из игры, тут ничего нет:

А здесь уже включена технология HBAO+:

Вот еще интересный пример сравнения технологий:

Еще узнал, что SSAO доступен при DirectX 9, а вот в DirectX 11 уже будут доступны HBAO и HDAO. Вывод — все еще зависит от версии DirectX.

Здесь мы уже четко видим преимущество HBAO+:

NO AO — значит затенения нет вообще.

Заключение

  1. HBAO в играх — эффект затенения, режим требователен к ресурсам, повышает качество графики. Но правда читал что иногда при включенном режиме свет бывает какой-то неестественный.
  2. Включить или нет? Если у вас мощная видеокарта — то стоит пробовать, а вообще FPS может стать немного ниже. Нужно тестировать во Фрапсе.
  3. И стоит помнить, что первоначально HBAO создала NVIDIA, поэтому этот режим лучше включать на их видеокартах, а вот для AMD лучше HDAO.

Удачи и добра, надеюсь кому-то информация пригодилась!

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Screen space ambient occlusion с учетом нормалей и расчет одного отражения света.

В этой статье я расскажу, как я с нуля делал SSAO (Screen Space Ambient Occlusion — расчёт фонового освещения в экранном пространстве) с учетом нормалей. Сразу следует отметить, что это наиболее простая и прямолинейная реализация «в лоб», не претендующая на оптимальность или новизну. Статья будет полезна в первую очередь тем, кто имеет желание разобраться, как это работает.

Читать еще:  DNS probe finished nxdomain что делать

Как-то захотелось мне поупражняться с графикой, и я решил сделать SSAO с нуля, опираясь на мои опыты с трассировкой лучей и на полученные ранее знания о том, как в целом это должно работать. В общем, поставил задачу написать к своему движку демку, с использованием всяких разных технологий. Решено было также поизучать deferred shading и screen-space local reflections, но об этом как-нибудь в другой раз. В этой статье сконцентрируюсь на SSAO.

Для самых нетерпеливых, вот результат:

1. Немного теории

Что нам говорит Википедия, по поводу ambient occlusion:

Получается, что нам нужно рассчитать, сколько света доходит до конкретной точки из полусферы, ориентированной по нормали в этой точке. Я даже как смог нарисовал в фотошопе картинку:

Что мы тут видим:

Сверху расположена камера, которая смотрит на нашу сцену.

Разными цветами показаны точки на объекте, их нормали и полусферы, по которым мы будем собирать затенение.

Точка, обозначенная фиолеовым ничем не затенена.

Точка, обозначенная желтым — затенена совсем чуть-чуть.

Точка, обозначенная голубым — затенена практически наполовину.

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

Таким образом, нам нужно рассчитать затенение для каждой точки, учитывая расстояние до объекта, который её перекрывает. Это и будет наш ambient occlusion.

Я решил в отличие от «традиционного» SSAO (например того, который, если я правильно помню, использоваться в первом Crysis) рассчитывать это не в screen space, а во view space. Минус этого подхода в большей сложности вычислений (хотя тоже, надо смотреть, проверять и сравнивать), плюс — в более точном AO.

2. Подготовка

Итак, для расчета ambient occlusion нам понадобятся две текстуры: глубины и нормалей.

Как я уже сказал, нормали будут во view space. Как сохранять и восстанавливать нормали — ваше дело, я, например, использую хитрую функцию, которая записывает нормаль в две компонеты. Подробнее об этом в последнем разделе «Ништяки». Пока, пускай у нас будут две функции в шейдере:

Выглядеть текстура с нормалями будет примерно вот так:

Текстура с глубиной у нас будет хранить «стандартную» глубину OpenGL.

Значения глубины, приведенные к интервалу [-1..1] и возведенные в 64-ю степень, у меня выглядят как-то так:

Но, так как мы будем использовать view space нам нужно будет восстанавливать положение точки во view space по глубине. О том, как это сделать смотрите в последнем разделе «Ништяки». Пока, пускай у нас будут четыре функции в шейдере:

Также, для того, чтобы придать разнообразия нашему расчету AO, нам понадобится текстура с шумом. Самая обычная текстура с шумом, я даже показывать её здесь не буду. В дополнение к этой текстуре нам специально для неё нужны будут текстурные координаты. Такие, чтобы текстура рисовалась на экране тексель в пиксель. По большому счету, это не обязательно, но очень желательно, чтобы выборки были «более случайными».

Итого, на входе во фрагментный шейдер у нас есть три текстуры и два набора текстурных координат.

Надо заметить, что в моем движке для того, чтобы поддерживались разные версии шейдеров, сделаны следующие штуки:
Входящая переменная во фрагментный шейдер — etFragmentIn. В старых шейдерах заменяется на varying, в новых на in.
Результат фрагментного шейдера записывается в переменную etFragmentOut (gl_FragColor в старых шейдерах и «out vec4 . » + glBindFragDataLocation в новых версиях).

Итого, кусочек шейдера у нас уже есть:

Теперь можно приступить непосредственно к расчету нашего затенения.

3. Расчет SSAO

Общая идея такова: в данной точке получить положение и нормаль, затем сгенерировать несколько случайных направлений на полусфере, заданой нормалью, и проверить затенения в них. Результат собрать и поделить на количество выборок. Таким образом мы хотим контролировать как минимум три параметрa:
1) количество выборок;
2) минимальное расстояние, на котором мы проверяем затенение (оно нужно нам, чтобы избавиться от некоторых неприятных артефактов);
3) максимальное расстояние, на котором мы проверяем затенение;

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

Максимальное расстояние — чем оно больше, тем «шире» и мягче у нас затенение:

Для тестовой сцены (Crytek Sponza) я использовал такие параметры:

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

Итак, у нас все есть для того, чтобы рассчитать затенение каждой точки на экране. Для начала нам нужно найти нормаль в этой точке и её положение (не забывайте, что мы работает во view space). Делается это просто чтением нормали из текстуры и восстановлением положения по глубине:

Теперь, чтобы не городить все в теле функции main(), заведем специальную функцию, которая рассчитывает затенение в данной точке. Я пафосно назвал её performRaytracingInViewSpace:

Ну, и собственно, чтобы не томить, остаток шейдера:

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

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

Таким образом, весь секрет у нас в функции расчета затенения. Давайте рассмотрим её поближе.

Здесь нам нужно сгенерировать случайное направление на полусфере, заданой нормалью в точке. Я это делаю очень просто: нормализую значение из текстуры шума, и если оно лежит в другой полуплоскости от нужной нам нормали, то умножаю на –1. Выглядит это вот так:

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

Теперь у нас есть случайное направление, по которому мы будем делать выборку. Мы сдвигаем точку в этом направлении на случайную величину между MIN_SAMPLE_SIZE и SAMPLE_SIZE и проецируем её в screen space. После чего получаем некие новые текстурные координаты и глубину в интервале [0..1].

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

А дальше, когда мы определили, что новая точка лежит ближе к камере, чем наша спроецированная, начинается магия затенения. Что у нас есть на входе:
— глубина нашей спроецированной точки (которая гарантировано больше, чем новая глубина);
— глубина, которую мы получили после выборки (которая гарантирована меньше, чем глубина спроецированной точки).

Что нам нужно вычислить:
— насколько сильно объект (на точку которого мы наткнулись) перекрывает нашу исходную точку.

Что нам нужно учесть:
— чем ближе новая точка к спроецированной, тем сильнее перекрытие;
— если новая точка сильно «далеко» от спроецированной, тем меньше перекрытие.

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

Итого, у нас есть два значения оценки глубины, возьмем между ними разницу, которая будет характеризовать расстояние одной точки от другой:

Так как мы хотим контролировать степень затенения, можем ввести некий коэффециент для этой разности. В финальном варианте получается так:

Для тестовой модели я использовал значение DEPTH_DIFFERENCE_SCALE равным 3.33333. Все зависит от масштабов того, что мы рисуем и на чём хотим вычислять затенение.

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

Чтобы сделать его более мягким и приятным, еще можно учитывать расстояние, на которое мы делали выборку (приведенное к промежутку [0..1]). Итоговая формула выглядит вот так:

Вот как влияет масштаб расстояний (тот, который DEPTH_DIFFERENCE_SCALE)

При уменьшении расстояние (при DEPTH_DIFFERENCE_SCALE 17 января 2015 (Обновление: 13 мар. 2015)

Ссылка на основную публикацию
Adblock
detector