Современная терминология 3D графики — Postprocessing
В широком смысле, постобработка — это все то, что происходит после основных действий по построению изображения. Иначе говоря, постобработка — это любые изменения изображения после его рендеринга. Постобработка представляет собой набор средств для создания специальных визуальных эффектов, и их создание производится уже после того, как основная работа по визуализации сцены выполнена, то есть, при создании эффектов постобработки используется готовое растровое изображение.
Простой пример из фотографии: вы сфотографировали красивое озеро с зеленью при ясной погоде. Небо получается очень ярким, а деревья — слишком темными. Вы загружаете фотографию в графический редактор и начинаете изменять яркость, контраст и другие параметры для участков изображения или для всей картинки. Но вы уже не имеете возможности изменить настройки фотоаппарата, вы делаете обработку готового изображения. Это и есть постобработка. Или другой пример: выделение заднего плана в портретной фотографии и применение blur фильтра к этой области для эффекта depth of field с большей глубиной. То есть, когда вы изменяете или подправляете кадр в графическом редакторе, вы и делаете постобработку. То же самое может делаться и в игре, в реальном времени.
Существует множество разных возможностей по обработке изображения после его рендеринга. Все видели, наверное, в графических редакторах множество так называемых графических фильтров. Это как раз то, что называется постфильтрами: blur, edge detection, sharpen, noise, smooth, emboss и др. В применении к 3D рендерингу в реальном времени это делается так — вся сцена рендерится в специальную область, render target, и после основного рендеринга это изображение дополнительно обрабатывается при помощи пиксельных шейдеров и только потом выводится на экран. Из эффектов постобработки в играх чаще всего используют Bloom, Motion Blur, Depth Of Field. Существует и множество других постэффектов: noise, flare, distortion, sepia и др.
XNA Draw или пишем систему частиц. Часть II: шейдеры
Привет всем разработчикам игр и просто людям, которые интересуются геймдевом.
Пришло время рассказать вам о пиксельных шейдерах и о том, как сделать post-proccesing. Это вторая часть статьи о графических методах в XNA, в прошлой статье — мы рассматривали методы Draw и Begin у spriteBatch. Для примера: улучшим нашу систему частиц добавлением пиксельного шейдера, который будет искажать пространство.
- Что такое пиксельный шейдер
- Что такое post-processing
- Кратко: Что такое RenderTarget2D и с чем его
едятзаправляют - Искажающий шейдер с Displacemenet-map
- Практика: дорабатываем систему частиц
Шейдер
Немного поговорим о шейдарах. Существуют два типа шейдера (в Shader Model 2.0, её то мы и используем): вертексный и пиксельный.
Вершинный шейдер оперирует данными, сопоставленными с вершинами многогранников. К таким данным, в частности, относятся координаты вершины в пространстве, текстурные координаты, тангенс-вектор, вектор бинормали, вектор нормали. Вершинный шейдер может быть использован для видового и перспективного преобразования вершин, генерации текстурных координат, расcчета освещения и т. д.
Пиксельные шейдеры выполняются для каждого фрагмента в фазе растеризации треугольников. Фрагмент (или пиксель) — точка, с оконными координатами, полученная растеризатором после выполнения над ней ряда операций. Проще говоря, результирующая точка буфере кадра, совокупность этих точек потом формирует изображение. Пиксельные шейдеры оперируют над фрагментами до заключительных стадий, т.е. до тестов глубины, альфы и stencil. Пиксельный шейдер получает интерполированные данные (цвет, текстурные координаты) из вершинного шейдера.

Если сказать очень коротко про пиксельный шейдер, то это обработчик готового изображения.
В случае с Displacement-шейдером — вершинные шейдеры не нужны, рассмотрим пиксельные.
Post-processing
Если быть ленивым лаконичным человеком, то Post-processing шейдеры выполняются тогда, когда вся картинка игры уже отрисована: шейдер накладывается сразу на всю картинку, никак не на отдельные спрайты.
-Ведь у spriteBatch.Begin есть параметр, effect, не проще применять шейдер сразу, как мы его рисуем?
Отвечаю: вот именно, что такой шейдер применяется к единичным спрайтам, как итог, Displacement-шейдер будет функционировать криво.
Для создания Post-process обработки, нужно сначала рисовать то, что должно быть нарисовано на экране — на отдельную текстуру, а потом рисовать эту самую текстуру с использованием Post-process шейдера. Таким образом, шейдер воздействует не на единичные спрайты, а на картинку в целом.
-Стоп, а как рисовать на отдельную текстуру?
Отвечаю: знакомьтесь — RenderTarget2D
RenderTarget2D
И опять, привет мой друг — лаконичность. RenderTarget2D — по сути является текстурой, на которую можно рисовать.
Идем туда, где обычно мы рисуем сцену, перед отчищением вставляем:
Теперь все будет рисоваться не на экран, а на RenderTarget2D.
Чтобы переключиться опять на экран, используем конструкцию:
Не забудьте очистить RenderTarget, перед прорисовкой.
Искажающий шейдер с Displacemenet-map
Идея такого пиксельного шейдера очень проста: на вход поступает текстура, которую нужно «погнуть», на второй вход — карта, о том, как гнуть.
Карту мы будем генерировать, о том как — в практике.
Кстати, о карте. Карта представляет собой такое же по размерам изображение, как и текстура сцены, за исключением того, пожалуй, что нарисованного изображения — не увидим.
Более подобно о карте и о том, как действует шейдер:
В процессе обработки изображения — получаем текущую позицию пикселя, получаем цвет. Тоже самое делаем и для карты. Т.е. в конечном итоге, у нас будет доступно для модификации: цвет пикселя, позиция пикселя, цвет пикселя на карте соответствующего позиции пикселя на изображении.
Будем использовать цвета карты, чтобы передать информацию шейдеру, как погнуть пиксель.
К примеру, R-канал (красный) получает значения от 0f до 1f. Если мы видим на карте искажения R=0.5f, то просто сдвигаем позицию пикселя изображения на 10f * 0.5f пикселя. 10f — это сила, с которой мы сдвигаем.
Соответственно, R-канал будет соответствовать X координате, а G-канал — Y.
Если вам нужны картинки, получите их:
Исходная картинка: 
Карта: 
Итоговая картинка: 
Так, с теорией вроде разборались, сейчас попробуем это все реализовать кодом.
- Программируем шейдер.
- Реализуем post-processing
- Создает еще одну систему частиц, но на этот раз необычных, эти частицы будут рисоваться в карту для шейдера.
- Передаем шейдеру карту и применяем c рисованием Post-process.
- .
- PROFIT!
Практика: дорабатываем систему частиц
Дорабатываем исходный код из прошлой статьи.
Сразу добавим какую-нибудь картинку, чтобы искажения были заметны, например эту:

Копируем ParticleController и называем его ShaderController, в нем нам нужно изменить только сам процесс создания частицы, а конкретно:
Реализуем post-processing, создаем новые переменные:
Идем к методу Draw главного класса и пишем:
Post-processing готов, теперь создадим шейдер.
Создаем новый Effect (fx) файл (это файл шейдера, написанного на HLSL), вписываем туда, что-то вроде:
Шейдер создан, загрузить его можно так же, как и обычную текстуру, за исключением того, что тип не Texture2D, а Effect.
Теперь обновим наш Draw:
Запускаем, любуемся красивыми, реалистичными животными искажениями (лучше посмотреть демо): 
На самом деле, эта реализация системы частиц (не шейдеры, а то что было в первом уроке) в целом — не совсем хороша для производительности. Сущесвтуют другие методы, более сложные в понимании, о них я расскажу как-нибудь потом.
Прикладываю исходники и демо (на этот раз, запустится на любом компьютере с XNA 4.0 и аппаратной подержкой DirectX9, inc sh 2.0)
Может быть на этой неделе, может быть неизвестно когда — расскажу о методе Update и как реализовать физику, используя Box2D.
Удачи вам и еще раз с праздником программиста 0xFF+1 днем! 😉
Постобработка и полноэкранные эффекты
Unity предоставляет ряд эффектов постобработки и полноэкранных эффектов, которые могут значительно улучшить внешний вид вашего приложения с минимальными затратами времени на настройку. Вы можете использовать эти эффекты для имитации физической камеры компонента, который создает изображение определенной точки обзора в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
Просмотр в Словарь и в свойствах фильма или для создания стилизованных изображений.
Эта страница содержит следующую информацию:
На изображениях ниже показана Сцена Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь с постобработкой и без нее.
Сцена без постобработки
Сцена с постобработкой
Совместимость конвейера рендеринга
Доступные эффекты постобработки и способы их применения зависят от того, какой конвейер рендеринга вы используете. Решение постобработки из одного конвейера рендеринга несовместимо с другими конвейерами рендеринга.
Эта таблица содержит информацию о том, какие решения Unity для постобработки совместимы с каждым из конвейеров рендеринга Unity.
| Конвейер рендеринга | Поддержка постобработки |
|---|---|
| Built-in Render Pipeline | Встроенный конвейер рендеринга по умолчанию не включает решение для постобработки. Чтобы использовать эффекты постобработки со встроенным конвейером рендеринга, загрузите Post-Processing Пакет версии 2. Для получения информации об использовании эффектов постобработки во встроенном конвейере рендеринга см. публикацию -Обработка документации Версии 2. |
| Universal Render Pipeline (URP) | URP включает в себя собственное решение для постобработки, которое Unity устанавливает при создании проекта с использованием шаблона URP. Информацию об использовании эффектов постобработки в URP см. в подпапке Документация по постобработке URP. |
| High Definition Render Pipeline (HDRP) | HDRP включает в себя собственное решение для постобработки, которое Unity устанавливает при создании проекта с использованием шаблона HDRP. Информацию об использовании эффектов постобработки в HDRP см.HDRP post-processing documentation. |
Примечание. Версия стека постобработки 1 устарела и не должна использоваться.
Доступность и расположение эффектов
Эта таблица содержит информацию о том, какие эффекты постобработки и полноэкранные эффекты доступны в различных решениях постобработки Unity, как найти эти эффекты и какие другие эффекты можно использовать для достижения аналогичного результата.
В предыдущих версиях Unity все эффекты постобработки и полноэкранные эффекты применялись одинаково; путем добавления компонентов в камеру. В более поздних версиях Unity вы можете применять эти эффекты по-разному.
Обратите внимание, что Unity по-разному реализует эффекты в зависимости от используемого вами пакета. Это означает, что эффекты различаются по производительности, внешнему виду и конфигурации в разных пакетах.
You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion
Choose from SSAO using a Volume Override, or Ray-Traced Ambient Occlusion
You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion
See Post Processing: Ambient Occlusion
You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion
FXAA and SMAA can be enabled in the Camera component
You can also configure MSAA (hardware anti-aliasing) in Quality Settings
FXAA, SMAA, and TAA are implemented in Project Settings > Frame Settings > HDRP Default Settings; see Anti-aliasing in the High Definition Render Pipeline
Вы также можете настроить MSAA (аппаратное сглаживание) в HDRP Asset — см. Сглаживание в конвейере рендеринга высокого разрешения.
You can also configure MSAA (hardware anti-aliasing) in Quality Settings
Постобработка в играх FPS — стоит ли ее использовать? | Профессиональный ответ (2023)
На игровой сцене всегда есть два типа геймеров. Некоторые понятия не имеют о программном и аппаратном обеспечении и просто играют в игру, в то время как другие постоянно возятся со своей системой и пытаются получить каждое маленькое преимущество, которое они могут.
Я принадлежу к последним.
Меня всегда беспокоило, что у соперника может быть техническое преимущество в 1 против 1. Вот почему я всегда просматривал все возможные настройки и тратил много времени на исследования и тестирование, чтобы получить максимальную отдачу от моего существующего оборудования.
Конечно, правильные настройки не сделают вас суперзвездой.
Ваш талант, навыки и опыт помогут.
Но мысль о том, что моя система работает оптимально и, следовательно, зависит только от моих навыков и навыков соперника, всегда заставляла меня чувствовать себя лучше и увереннее, потому что все, что может положительно повлиять на мою производительность, я сделал, и я знаю, что мне тяжело. бить.
Мы уже рассмотрели различные параметры настройки в нашем блоге, и вы можете найти наши предыдущие статьи на эти темы. здесь.
Сегодня мы поговорим о настройке постобработки, которая присутствует почти в каждом шутере от первого лица.
Примечание: Эта статья написана на английском языке. Переводы на другие языки могут не обеспечивать такое же лингвистическое качество. Приносим извинения за грамматические и семантические ошибки.
Что такое постобработка?
Как следует из названия, постобработка — это набор видеоэффектов и фильтров, применяемых к кадрам игры после рендеринга.
Image Source
Другими словами, постобработка относится к полноэкранной обработке изображения, которая происходит после захвата изображения камерой, но до его отображения на экране.
Цель постобработки — улучшить качество изображения до того, как оно будет показано зрителям. Это достигается добавлением дополнительных эффектов к изображениям/видео.
Каковы различные эффекты постобработки?
Постобработка — это сложный процесс со множеством эффектов, и мы более подробно рассмотрим некоторые из них.
В зависимости от игры эффекты, описанные в оставшейся части этой статьи, объединяются в параметре настройки постобработки или могут быть установлены отдельно в настройках графики вашей игры.
Окружающая окклюзия
Этот эффект отбрасывает тени на края различных объектов. Он затемняет отверстия, складки, грани и пересечения, расположенные близко друг к другу.
Глубина резкости
Глубина резкости — это специальный эффект, имитирующий свойства резкости объектива камеры. Это означает, что, изменив это свойство, вы можете изменить общий внешний вид объектов с точки зрения того, насколько они кажутся поверхностными или глубокими.
Цвести
Блум создает особый эффект, когда свет выходит из более ярких частей изображения. Это создает впечатление чрезвычайно яркого света, проникающего в камеру, и создает утонченный вид.
Если вы хотите узнать больше об эффекте Блума и о том, следует ли его включать, прочитайте эту статью, в которой мы более подробно объясняем эффект Блума:

Цветокоррекция
Цветокоррекция — это процесс изменения внешнего вида изображений, чтобы они лучше выглядели на разных устройствах. Он включает в себя настройку таких элементов изображения, как контрастность, насыщенность, цвет, уровень черного, точка белого и детали.
Размытие движения
Размытие в движении — это еще один эффект постобработки, имитирующий эффект размытия, который возникает, когда перед нами движется быстро движущийся объект.
Виньетка
Виньетка — это эффект, имитирующий затемнение объективов реальных камер. Эффект наиболее заметен по краям изображения.
Туман
Эта функция, как следует из названия, накладывает один цвет на другой. Это также добавляет размытости изображению.
Отблеск от линз
Блики возникают, когда яркий источник света падает прямо на объектив. Эффект ослепления похож на то, что испытывает человеческий глаз, когда видит яркий свет.
Стоит ли использовать постобработку?
Следует ли вам использовать постобработку, зависит от ваших личных предпочтений. Если вам нравятся результаты без постобработки, нет необходимости ее включать.
Некоторые игры, на мой взгляд, отлично справляются с цветокоррекцией и размытием в движении, что улучшает общий игровой опыт.
Однако в некоторых случаях эффекты постобработки, такие как виньетка и блики, имеют тенденцию быть чрезмерными.
Низкий динамический диапазон — еще один аспект постобработки, негативно влияющий на качество изображения у некоторых геймеров. Эта функция подстраивает яркость под ситуацию в игре.
Для некоторых все эти эффекты невыносимы. Однако мы должны признать, что эти функции имитируют повседневную жизнь, если вы хотите получить реалистичный опыт.
Например, настройка Low Dynamic Range ведет себя точно так же, как человеческий глаз реагирует на свет. В результате получается очень реалистичный эффект.
Поэтому, если вы хотите, чтобы игровая графика была максимально реалистичной, вам следует включить эффекты постобработки.
Когда постобработка включена, полированные изображения придают ощущение реалистичности. Например, эффекты дыма обычно выглядят намного естественнее.

Твой никнейм слишком скучный? Ссылка на вы получаете новые интересные идеи!
Когда следует отключать постобработку во время игры?
Если постобработка — такая замечательная функция, и цель ее использования — улучшить игровой процесс, зачем вам отключать ее во время игры?
Это хороший вопрос.
Но также легко ответить.
Хотя приятно получать отличные игровые впечатления с реалистичной графикой, особенно в шутерах от первого лица, больше эффектов в графике означает, что врагов становится труднее увидеть.
Поэтому, особенно если вы хотите быть конкурентоспособным, обычно это означает отключение как можно большего количества эффектов.
Вы действительно хотите соревноваться с противником, если он размывается, когда двигается по вашему экрану, но может видеть вас четко в любое время?
В киберспорте, где в шутерах от первого лица на счету каждая миллисекунда, лучше обойтись без красивых эффектов.
Однако, если вы стример и хотите показать своим зрителям отличное изображение, вы можете активировать тот или иной эффект.
А если вы играете в шутер от первого лица в режиме истории против ИИ-противников и имеете хороший ПК, то пусть грохочет с эффектами постобработки.
Стоит ли постобработка производительности или FPS?
Постобработка — ресурсоемкий процесс. Кроме того, он требует применения различных эффектов к изображению перед его отображением. Таким образом, влияние на производительность является значительным.
Конечно, это также зависит от игры, но обычно вы заметите значительное падение производительности при включении постобработки.
В целом можно сказать, что более высокая постобработка снижает FPS.
Постобработка — это задача с большим объемом графического процессора, которая, как правило, снижает нагрузку на ваш процессор.
Так что, если у вас есть мощный графический процессор, вы можете позволить себе поиграть с постобработкой, а также потеряете меньше FPS, чем младшая система.
В шутерах от первого лица скорость кадров в секунду (FPS) всегда является важным вопросом, и каждый амбициозный геймер хочет иметь как можно больше FPS.
В этой статье, мы объяснили, почему это так.
В этом видео NVIDIA показывает вам, почему вы всегда должны беспокоиться о своем FPS…
Вызывает ли постобработка задержку ввода?
Да, это тоже, постобработка вызывает задержку ввода. Это связано с тем, что шейдеры добавляются к уже обработанному изображению.
В зависимости от того, сколько эффектов применяется, задержка может варьироваться. Например, в сцене, где выполняется всего несколько постобработок, задержка ввода меньше, при этом она автоматически увеличивается по мере увеличения постобработки.
Опять же, я хочу отметить, что величина задержки ввода, которую вы испытываете при включении этой функции, зависит от вашего оборудования.
Если у вас есть высокопроизводительное оборудование, которое подходит для этой задачи, вы, вероятно, не почувствуете никакой разницы с точки зрения задержки ввода, независимо от того, включаете ли вы эту функцию или отключаете ее.
Однако со средним ПК все может быть совсем иначе, и вы можете столкнуться с огромной задержкой ввода.
Кроме того, конечно, чем больше эффектов постобработки активно, тем выше задержка ввода.
В некоторых случаях речь идет о задержке до 80 мс.
Звучит не очень, но часто это будет означать вашу смерть без возможности дать отпор вообще, особенно в шутерах от первого лица.
Кроме того, вы должны учитывать, что многие процессы на вашем ПК приводят к задержке ввода, которую в настоящее время нельзя уменьшить по техническим причинам, например, из-за времени отклика вашего экрана или вашего интернет-соединения с игровым сервером. Так что у вас всегда есть задержка ввода.
Кроме того, предположим, что существует также «ненужная» задержка ввода из-за постобработки. В этом случае вы даже можете почувствовать это при наборе текста с помощью мыши и клавиатуры во время игры (тогда игра кажется совсем не гладкой).
Как уже объяснялось, вы ставите себя в существенное невыгодное положение по сравнению с оппонентами, у которых нет задержки ввода.
Заключительные мысли
Эффекты постобработки позволяют сделать игру более красивой и реалистичной. Если вы играете в сюжетном режиме своего шутера от первого лица, не стесняйтесь включать столько эффектов, сколько может обработать ваш ПК, без падения FPS. В результате игра определенно станет более захватывающей.
Однако, как только вы попадаете в соревновательную ситуацию с другими игроками, речь идет уже не о красивой графике, а о производительности (больше FPS, меньше задержки ввода) и быстром обнаружении ваших противников, поэтому в таком случае вам следует обойтись без всех эффектов постобработки.
В мое время профессионального игрока в CS 1.6 и как конкурентоспособный игрок в PUBG и Valorant я ВСЕГДА отключал все эффекты постобработки. Однако я должен признать, что некоторые хорошие игроки в PUBG используйте эти эффекты, по крайней мере, с «низкой» или «средней» настройкой, потому что это помогает им в ситуациях с большими расстояниями и множеством деревьев и т. д. распознавать противников.
Особенно в PUBG, такие ситуации очень часты; поэтому вы должны проверить, может ли постобработка даже упростить насмешки над противниками в таких играх.
В играх типа CS:GO или Valorant, с короткими дистанциями и небольшим количеством объектов, вам всегда следует обходиться без эффектов постобработки, по крайней мере, если вы хотите играть соревновательно.