Что такое постпроцессинг в играх
Что такое постпроцессинг в играх
Это вторая часть нашего гайда. Первая, где собраны основные настройки вроде разрешения, качества текстур и теней, вы можете прочитать по ссылке.
Качество освещения (Lightning Quality)
То, насколько правдоподобно симулируется освещение в игре. Если это единственный подобный параметр в игре, то именно в эту настройку заложили уйму других, будь-то и объемный свет, и рассеивание лучей, и отражения, а иногда даже глобальное затенение. Освещение — это, пожалуй, вообще едва ли не самое основное из всего, что влияет на красоту картинки: оно делает ее объемной, натуралистичной, правдоподобной. Но и ресурсов все это дело «кушает» тоже немало. Именно поэтому, например, Nvidia так расхваливает свои новые RTX-видеокарты — они изначально разработаны под Ray Tracing — метод рендеринга, предполагающий правдоподобную симуляцию каждого луча.
Влияние на производительность
Зависит от движка, но почти во всех современных играх — очень сильное. Симулировать свет — это очень непросто, так что врубайте «ультра» только если у вас действительно мощная видеокарта.
Качество эффектов (Effects Quality)
Влияние на производительность
Тоже зависит от игры, чаще всего не особенно высокое. Но чем выше этот параметр, тем сильнее будет нагружаться ваша видеокарта в загруженных сценах, например, при масштабных перестрелках. Так что если игра начинает «подлагивать» в особо динамичные моменты, можно попробовать поиграться с этим ползунком, прежде чем снижать, например.
…Качество шейдеров (Shader Quality)
Шейдеры — это специальные программы для вашей видеокарты, исполняемые ее процессором. Грубо говоря, это такие «инструкции» от игры вашей GPU, по которым та понимает, как именно нужно отрисовывать тот или иной эффект. Чаще всего шейдеры используются для улучшения освещения, затенения, создания эффектов преломления лучей в воде (помните, как взрывала мозг та самая «шейдерная водичка из Half-Life 2: Lost Coast?), отражений, рассеиваний и так далее. Так что да, эта опция работает в тандеме с другими параметрами: качеством освещения и качеством теней. Существует три вида шейдеров: вершинные, геометрические и пиксельные, но игры, где можно отрегулировать качество каждого из них отдельно, встречаются невероятно редко.
Соответственно, чем выше качество шейдеров, тем лучше описанные выше эффекты, красивее тени и свет, реалистичнее геометрия — и тем сильнее нагрузка на видеокарту. Именно на видеокарту — потому что шейдеры считаются только GPU.
Влияние на производительность
Чаще всего — высокое. Например, в GTA V это один из самых «тяжелых» параметров в игре — снизив качество шейдеров с «Ультра» на средниее значение, вы получите прирост больше, чем в 15 FPS. Но бывает и так, что снижение этого параметра почти ничего не дает, как, например, в Mass Effect Anromeda.
Что такое постпроцессинг в играх
На текущий момент, в современных играх используется достаточно большое количество эффектов и технологий, улучшающих картинку. При этом не все понимают, что же именно они делают и на что влияют. Решил обобщить известные сведения максимально доступным языком.
1) Анизотропная фильтрация спойлер Наиболее продвинутый способ. Устраняет заметные искажения на объектах, сильно наклоненных относительно камеры. При использовании билинейной или трилинейной фильтрации с увеличением расстояния текстура становится все более размытой, анизотропная же этого недостатка лишена.
Учитывая объем обрабатываемых данных (текстуры высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. На современных начиная с среднего уровня производительности видеокартах она почти не влияет на fps.
Анизотропная фильтрация имеет лишь одну настройку – коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. 2) Шейдеры спойлер Небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.
Шейдеры делятся на три типа:
А) Вершинные (Vertex Shader) оперируют координатами;
Б) Геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин;
В) Пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.
Так же как и тесселяция требует видеокарту с поддержкой DirectX 11. 6) HDR (High dynamic range) спойлер часто используется в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. HDR часто применяется для реализации эффекта приспособления зрения, когда герой в играх выходит из темного туннеля на хорошо освещенную поверхность.
Включение HDR в зависимости от настроек может значительно понизить FPS. В некоторых случаях его совместная работа с Anti-Aliasing невозможна в принципе. 7) Bloom спойлер нередко применяется совместно с HDR, ( не путать с Glow).
Bloom симулирует эффект, который можно наблюдать при съемке очень ярких сцен обычными камерами. На полученном изображении кажется, что интенсивный свет занимает больше объема, чем должен, и «залазит» на объекты, хотя и находится позади них.
При использовании Bloom на границах предметов могут появляться дополнительные артефакты в виде цветных линий. 8) Glow спойлер визуальный световой эффект в трёхмерной или растровой графике. В трёхмерной графике, эффект заключается в том, что у ярких областей объекта наблюдается засвеченность по периметру этих областей, из-за чего создаётся впечатление, что на поверхности яркого объекта виден световой ореол. Часто путают с Bloom. 9) Film Grain спойлер зернистость – данный эффект влияет на восприятие и не везде применим, например в Silent Hill, шум на экране, добавляет атмосферности, а в FEAR 2 лично мне он абсолютно не понравился. 10) Motion Blur спойлер эффект смазывания изображения при быстром перемещении камеры. Применим, когда сцене следует придать больше динамики и скорости. Опять же лично по мне прекрасно выглядит в гоночных симуляторах, а в шутерах я его отключаю.
Правильное применение Motion Blur способно добавить кинематографичности в происходящее на экране, завуалировать низкую частоту смены кадров, добавить плавности в игровой процесс. 11) Ambient Occlusion спойлер модель затенения, используемая в трёхмерной графике и позволяющая добавить реалистичности изображению за счёт вычисления интенсивности света, доходящего до точки поверхности. В отличие от локальных методов, как например затенение по Фонгу, AO является глобальным методом, то есть значение яркости каждой точки объекта зависит от других объектов сцены. В принципе, это достаточно отдалённо напоминает глобальное освещение.
При включении AO, нагрузка на компьютер существенно возрастает.
12) SSAO (Screen Space Ambient Occlusion) спойлер техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света. Является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.
Не смотря на работу по упрощенной схеме, у SSAO есть множество преимуществ: метод не зависит от сложности сцены, не использует оперативную память, может функционировать в динамичных сценах, не требует предварительной обработки кадра и нагружает только графический адаптер, не потребляя ресурсов CPU. 13) V-Sync (вертикальная синхронизация) спойлер синхронизация кадров игры с частотой вертикальной развертки монитора. Ее суть заключается в том, что полностью просчитанный игровой кадр выводится на экран в момент обновления на нем картинки. Важно, что очередной кадр (если он уже готов) также появится не позже и не раньше, чем закончится вывод предыдущего и начнется следующего.
Если частота обновления монитора составляет 60 Гц, и видеокарта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.
Следует понимать, что при включенной вертикальной синхронизации fps в игре не может превышать частоту вертикальной развертки монитора. Если же число кадров ниже этого значения, то во избежание потерь производительности необходимо активировать тройную буферизацию, при которой кадры просчитываются заранее и хранятся в трех раздельных буферах, что позволяет чаще отправлять их на экран.
Главной задачей вертикальной синхронизации является устранение эффекта сдвинутого кадра, возникающего, когда нижняя часть дисплея заполнена одним кадром, а верхняя – уже другим, сдвинутым относительно предыдущего.
На заметку:
— в случае избыточной производительности видеоадаптера, V-Sync снижает нагрузку на GPU и как следствие, продлевает жизнь вентиляторам;
— в редких случаях активация V-Sync может снижать FPS;
— при тестировании видеоадаптера бенчмарками, V-Sync следует отключить. 14) Post-processing спойлер общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры. Применим в случаях, когда для дополнительных эффектов требуется полная информация обо всей сцене.
Изолированно к отдельным 3D-объектам такие приемы не могут быть применены без появления в кадре артефактов. 15) Anti-Aliasing спойлер технология, использующаяся в обработке изображений с целью сделать границы кривых линий визуально более гладкими, убирая «зубцы», возникающие при растеризации на краях объектов. В большинстве случаев, а так же в зависимости от типа (об этом ниже) может существенно снижать fps в играх, хотя при должной оптимизации, что встречается сейчас крайне редко, влияет на количество кадров незначительно.
Типы сглаживания (Anti-Aliasing)
15.1) SSAA (Super Sampling Anti-Aliasing)
известный также как Full-Scene Anti-Aliasing (FSAA). Его применение приводит к значительному снижению быстродействия. Учитывая, даже то, что за последние несколько лет быстродействие видеокарт заметно увеличилось, полноценно использовать данный тип сглаживания в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, в NVIDIA функционирует также в режимах DX10 и DX11.
15.2) MSAA (Multisample Аnti-Аliasing).
Несмотря на, то что данный способ даёт худшие результаты относительно SSAA(FSAA), он гораздо производительнее. В отличие от SSAA(FSAA) сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.
15.3) CSAA (nVidia) / CFAA (Radeon)
15.3.1) CSAA
запатентованная технология nVivia. По сути является расширением MSAA позволяющий выбирать дополнительные отсчёты «перекрытия» пикселя, по которым можно уточнять итоговое значение цвета попадающего на край треугольника экранного пикселя.
NVIDIA создала небесспорную, но сравнительно стройную линейку режимов:
•Off
•2x (MSAA)
•4x (MSAA)
•8x (4x MSAA + 8x CSAA)
•8xQ (8x MSAA)
•16x (4x MSAA + 16x CSAA)
•16xQ (8x MSAA + 16x CSAA)
Спорным в этой схеме выглядит расположение режима 16х выше, чем режима 8xQ, так как «настоящий» MSAA 8x зачастую оказывается лучше CSAA 16x, в котором используется только 4 отсчёта цвета на пиксель. В принципе достаточно уяснить, следующее. Все режимы от 4х до 16х по сути – MSAA. Но в случаях 8х и 16х это «4x MSAA с улучшением (CSAA)». Так же, видно, что режим 8xQ это 8xMSAA, а 16xQ – «8xMSAA с улучшением (CSAA)».
Все режимы выше MSAA 4x выдают очень близкое качество сглаживания, а в динамике разница будет еще меньше, чем на статичных скриншотах.
15.3.2) CFAA (custom-filter antialiasing)
является технологией расширения MSAA от АМД.
По сути, CFAA включает в себя три метода сглаживания, достаточно сильно различающихся между собой:
А) фильтр wide tent;
Б) фильтр narrow tent;
В) с адаптивным детектированием граней (adaptive edge detect).
Режимы narrow и wide tent, которые можно активизировать в сумме с любым из режимов MSAA, представляют собой MSAA с захватом цветовых отсчётов из соседних пикселей. Это позволяет улучшить качество сглаживания (за счёт использования в расчёте цвета пикселя дополнительных значений), однако приводит к «замыливанию» картинки, поскольку значения цветов соседних экранных пикселей, по сути, перемешиваются. По этой причине эти фильтры в основном попросту бесполезны.
15.4) TXAA
Технология от nVidia. По заявлениям разработчиков, TXAA доступно в двух вариантах: TXAA 2x и TXAA 4x. TXAA 2x обеспечивает четкость изображения, сравнимую с 8xMSAA, при равных с 2xMSAA затратах производительности, а TXAA 4x обеспечивает четкость изображения выше, чем при 8xMSAA, при этом затраты производительности сравнимы с 4xMSAA.
Для сглаживания пикселей в TXAA используется выборка субпикселей как внутри так и снаружи пикселя, да ещё в сочетании со значениями из предыдущих кадров (опциональная временная компонента), что обеспечивает отличное качество фильтрации. В сценах с движением камеры, при помощи TXAA достигается качество сглаживания, аналогичное тому, что мы видим при оффлайновом рендеринге, например, в 3D-мультфильмах.
Сглаживающий фильтр методом TXAA работает качественнее, чем MSAA, и особенно это заметно на растительности и прочих подобных объектах.
К сожалению, есть и небольшой недостаток — TXAA-фильтрация многим пользователям покажется слишком «замыливающей» изображение — оно немного теряет в резкости из-за того, что берутся сэмплы вне пикселя, а также из предыдущих кадров.
TXAA поддерживают новые карты Geforce 600 серии.
Фильтр работает покадрово с уже отрендеренным изображением, и его производительность можно чётко просчитать заранее. Она не зависит от сложности сцены, так что можно гарантировать отсутствие «подтормаживаний» в любой момент.
Все технологии сглаживания могут существенно снижать fps в играх, а так же, при увеличении значения, требуют все больший объем видеопамяти. Просьба отписываться в теме о нюансах с настройками графики в отдельных играх. Т.к. есть ситуации, когда технология призванная улучшить качество картинки в итоге просто до безобразия ее портит либо не адекватно занижает FPS. Так же в некоторых моментах будут не лишние скриншоты для понимания разницы от эффектов, это надо добавить.
Примеры:
А) Метро 2033 при включении АА4Х картинка сильно замыливается, а технология DOF сильно снижает FPS, притом, что всю её красоту можно увидеть только на открытых пространствах. Учитывая, что 99% времени мы проводим в тоннелях включение данной технологии в данном случае не оправдано.
При выявлении неточностей, противоречивых ситуаций, более логичных пояснений, а так же арфаграфических ошипак, не стесняйтесь, отписыватесь в теме. Сам вникнул еще далеко не во все, потому просьба сильно не пинать. Было бы не плохо, если есть грамотно подкованный камрад, по совместительству желающий стать куратором темы! Если администрация не против могу взять на себя данную обязанность.
Убедительная просьба воздержатся в теме от извечного противостояния AMD/nVidia/Intell, а так же давать непроверенные либо ложные рекомендации, не имея понимания и представления технической стороны вопроса.
Улучшаем стандартную графику Unity за несколько минут
Привет. Недавно решил начать делиться накопленным опытом по разработке, и записал своё первое видео. Статья прилагается. 🙂
Принято считать, что графика в движке Unity не сравнится с картинкой Unreal Engine. Но так ли это? Попробуем сегодня понять, почему проекты на Unreal выглядят лучше.
Один из секретов Unreal Engine — сразу после создания нового проекта в нём уже включены эффекты пост-обработки. Пост-эффекты обрабатывают финальное изображение игры перед выводом на экран, улучшая внешний вид игры. Даже плохие модели и текстуры иногда можно немного вытянуть правильно настроенными пост-эффектами.
В Unity тоже есть эффекты пост-обработки, но они не активируются при создании проекта, более того — их даже нет в самом движке и их нужно скачивать отдельно. Ну, на текущий момент.
Это можно сделать через Package Manager, набрав в поиск Post Processing. Устанавливаем найденный плагин и теперь мы можем пользоваться пост-эффектами в юнити. У меня он уже установлен, поэтому я перейду к настройке.
К слову, я добавил в проект ассеты скал и неба для демонстрации, все их можно загрузить на Unity AssetStore для вашей игры бесплатно. Сейчас можно видеть, как выглядит сцена без настройки:
Для того, чтобы настроить плагин, добавляем на объект с основной камерой компонент Post-Processing Layer, в нём задаём Layer на Everything (и заодно сглаживание, которое уберёт лесенки с краёв моделей).
Затем создаём новый пустой объект с компонентом Post-Process Volume, в котором включаем галочку Is Global, что будет означать, что он влияет на всю вашу сцену. Нажатием кнопки New создаём новый профиль с эффектами.
А, и да, для игр на ПК стоит в Project Settings сменить Color Space с Gamma на Linear, это значительно улучшит общий вид игры, рекомендую почитать об этом в справке Unity, а может я даже сделаю отдельный материал по этой теме.
Возвращаемся к нашему объекту с Post Process Volume и сразу добавляем 4 новых эффекта:
Теперь настраиваем их по порядку. Начнём с Bloom. Для включения эффекта ставим галочку возле Intensity, а затем прибавляем значение для того, чтобы усилить действие эффекта.
Сразу можно заметить, что мой эффект огня на сцене, если его можно так назвать, преобразился и стал гораздо сочнее. Так же это повлияло на небо на заднем плане, создав небольшую «дымку» от него. Этот эффект очень хорошо подходит для визуальных эффектов вроде пуль, огня, неона и прочих источников освещения, он добавляет кинематографичности сцене. Играясь с его параметрами можно получить голливудскую картинку на бликах и не хуже, чем в Unreal Engine.
Ambient Occlusion даёт дополнительное затенение, имитируя скопление теней в выемках в реальном мире, только немного сильнее для художественного эффекта. После применения эффекта окружение приобретает глубину.
Color Grading позволяет применить к изображению игры дополнительную цветокоррекцию и набор параметров тут очень обширный. Подобным эффектом пользуются при пост-обработке фильмов и видеоклипов, что намекает на его немалый функционал. Например, можно добавить художественности сцене, добавив какой-то цветовой оттенок.
Vignette имитирует виньетку от объектива камеры. Этот эффект может добавить кинематографичности, хотя в кино он наоборот является нежелательным.
Теперь можно сравнить картинку с исходной, отключив компонент Post-Process Layer на камере.
Сразу видно, что пост-эффекты, настроенные за несколько минут, неплохо меняют итоговый вид игры. А я показал всего лишь минимальный набор, параметров у них гораздо больше. При должной сноровке, можно добиться впечатляющих результатов, а применять их можно, как в трёхмерных, так и 2D-играх.
Для большего эффекта, покажу так же сравнение со сценой без Linear Color Space, настроенного в начале.
Напоследок хочу отметить, что существует ещё множество способов улучшить картинку и придать ей художественный вид, ведь не только технологии делают игры на Unreal Engine красивыми, но и люди, что стоят за созданием графики. Для создания красивых уровней можно настроить красивое освещение, использовать туман для объёма, добавить мелкие частицы пыли в воздух с помощью системы частиц и многое, многое другое.
Заголовок немного кликбейтный, а сама тема — избитая, и всё же о таких вещах многие начинающие разработчики попросту не знают, из-за чего дефолтные настройки графики просто не дают получить хорошую картинку, а у Unity с очередным инди-релизом увеличивается репутация движка с плохой графикой. Однако, меня радует, что с каждым годом общий визуальный уровень проектов на различных движках от независимых разработчиков только растёт, и я бы хотел тоже сделать небольшой вклад в это.
И там и там, можно делать красиво, просто где-то какие-то инструменты легче и удобнее, где-то через заднее место реализовано. ред.
У тебя есть примеры картинок на Unity которые можно спутать с анрилом? Я тоже раньше утверждал что «юнити тоже может», пока не поспорил с одним товарищем. Мы перерыли интернет на тему различных интерьеров в реалтайме, анрил был лучше. Да что и гоорить, можно зайти в ассетстор и посмотреть что там продают под видом «фотореализм». Глаз видит что сделано на компе. В случае с анрилом глаз всё таки иногда обманывается думая что это фото.
Из последнего, что ОЧЕНЬ сильно впечатлило. Выкрутить. Можно.
Так же про что значит «лучше»? На субъективный ваш взгляд? У каждого свой вкус. Меня лично раздражает сильный блум и моушнблюр. + еще несколько дефолтных (или нет) эффектов.
те или иные ассеты «фотореализма» практически всегда с обильным поливанием постобработки, и та том и на другом сторах. Обработка нужна, дабы картинка выглядела сочнее и с повышенным шансом ее купили. имхо ред.
interes2012
Важен сам факт, но всегда интересен сам процесс
Как оптимизировать графику в играх. Настраиваем производительность
На заре сетевых битв по локалке обиженный сосед выдал мне претензию, что у меня стоит 800 на 600, а него 1024 на 768 и поэтому у меня фмгурки крупнее и мне легче попадать.
Снижение разрешения всегда улучшает производительность. Дело в том, что в картинке хочешь не хочешь, а надо загружать каждый пиксель, и чем больше разрешение, тем больше пикселей надо загружать.
Самую оптимальную картинку в игре можно получить, если разрешение соответствует максимальному стандартному (заводскому) разрешению монитора. Также рекомендуется выставлять одинаковые частоты обновления экрана, в игре и на рабочем столе.
Parallax mapping – это модифицированная версия bumpmapping, используемой для придания текстурам рельефности.
Parallax mapping существенно экономит вычислительные ресурсы компьютера, поскольку при использовании объектов-аналогов со столь же детальной 3D-структурой, производительности видеоадаптеров не хватало бы для просчета сцен в режиме реального времени.
Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.
Вода, гильзы, и всё такое ради производительности
Также есть абсолютно не оптимизированные игры, типа халтурно сляпанной Gothic 3 или Crysis, и надо подбирать самому настройки.
Post-processing
Это общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры.
Этот эффект нужен.
Постпроцессинг
Привет, делаю 2д-игрушку. Вопрос вот в чем: постпроцессинг ли то, что я сейчас опишу и как лучше его реализовать. И делают ли так вообще.
У меня есть набор объектов, у которых есть метод update() и какой-то менеджер, который вызывает этот update().
Представим, что каждый объект рисует какой-то спрайт. Ситуация такая: в определенный момент (какой-то из объектов) должен получить готовую картинку, которая была отрендерена предыдущими объектами за этот кадр, чтобы обработать её и вернуть + далее остальные объекты должны дорисовать.
Если кто не понял, попытаюсь наглядно продемонстрировал цикл рендера:
Мой глобальный менеджер цилом проходится по объектам и вызывает update()
Объект1.update()
— Рисование спрайта
Объект2.update()
— Рисование спрайта
Объект3.update()
— Получаем то, что нарисовали предыдущие объекты (1, 2), передаем в шейдер, обрабатываем, возвращаем и рисуем результат.
Объект4.update()
— Рисуем далее, уже к тому, что вернул шейдер
.
А теперь по поводу постпроцессинга. Из названия видно, да и реализации, как я знаю, что это обработка финальной картинки. Здесь у меня нет проблем в реализации. Просто в моем менеджере переводим рендер всех объектов в текстуру, обрабатываем её в шейдере и рисуем вручную на экран.
А что делать в описываемому мной случаем? Конкретно в реализации объекта я не смогу получить доступ к рендеру остальных объектов, а менеджер не должен знать на уровне объектов, что им нужно.
—————————————————
UPD:
Как вариант пришла идея: сделать постпроцессинг, т.е. рендер всех объектов в текстуру, но сделать доступ к этой текстуре открытым из любого объекта. В итоге, каждый объект на этапе апдейта сможет получить текстуру и, соответственно то, что там уже нарисовано до него. Это верно?