Полезное

Мы Вконтакте

Discord канал

Пост-обработка

Окт 20 2015

Vignette – Виньетирование. Эффект затемнения по краям изображения при использовании обычных линз. Высококачественные линзы стараются компенсировать его.

Настройки виньетирования можно найти в настройках постобработки под вкладкой Scene Color.

Свойство Описание
Vignette Intensity Обеспечивает затемнение по краям экрана. Не влияет на блюм (из-за возможных проблем с производительностью, но при необходимости, можно изменить настройку). Возможное использование: симуляция несовершенств камеры.

Нулевое затемнение
0.0
Затемнение виньетирования
1.0
Добавил: Flakky Категория: Пост-обработка Читать дальше »

Окт 20 2015

В Unreal Engine, термин Цветокоррекция (Color Grading) включает в себя Тональную компрессию (Tone Mapping; трансформация HDR в LDR) и Коррекцию цвета (Color Correction; трансформация из гаммы LDR в гамму монитора).

Тональная компрессия (Tone Mapping)

Цель тональной компрессии в том, чтобы перевести цвета широкого диапазона HDR (Высокий Динамический Диапазон) в более узкий LDR (Низкий Динамический Диапазон). Это позволяет монитору правильно отображать цвета. Процесс происходит после обычного рендеринга в процессе постобработки.
Глобальная тональная компрессия – это функция, имеющая три входа (RGB) и три выхода (RGB). Локальная, помимо этого, учитывает свойства окружающих пикселей, что, естественно, ведет к большему количеству вычислений (и падениям производительности). В идеале, тональная компрессия обязана сохранять цвет пикселя даже в том случае, если он крайне яркий.
Следующий график показывает, как каждый канал в диапазоне от 0 до 5 преобразовывается в диапазон от 0 до 1:

newtone

В данном случае используется функция:

Код:
Гамма-цвет = ЛинейныйЦвет / (Линейный цвет + 0.187) * 1.035
(GammaColor = LinearColor / (LinearColor + 0.187) * 1.035)

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

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

Свойство Описание
Scene Color Tint Цвет, являющийся фильтром, применяемым к HDR-сцене.

Color Tint Full
Color Tint Quater
Tonemapper Toe Factor Корректирование оттенков темных цветов. Значения в промежутке [0.0, 1.0]

Color Tint Full
Color Tint Quater

Коррекция цвета

Коррекция цвета реализована как таблица поиска (lookup tables; LUTs). Причем, вместо использования трех 1D-таблиц, у нас применяется всего лишь одна, но 3D-таблица, благодаря этому становятся возможным более сложные и комплексные трансформации цвета (такие как обесцвечивание).
Следующее изображение показывает, как таблица нейтрального цвета размером 16x16x16 развернута в текстуру размером 256×16 (схоже с браузером текстур):
RGBTable16x1

Вы можете использовать изображение RGBTable16x1.png с этой страницы, но для этого загрузите исходный файл, показанный выше. Для этого нажмите на него ПКМ -> Сохранить как.

Измененная текстура может выглядеть так:
LUT_Sepia
Для того, чтобы использовать таблицу поиска (LUT), вам необходимо применить LUT-текстуру к волюму постобработки.

Свойство Описание
Color Grading Intensity Свойство, регулирующее силу цветокоррекции.
Color Grading LUT LUT-текстура, используемая как таблица при цветокорреции.

lut_nonelut_greenlut_redRGBTable16x1LUT_GreenishLUT_Reddish

Создание LUT-текстур

Инструкция:

  1. Сделайте скриншот сцены, вставьте его в документ Photoshop для дальнейшей настройки.
  2. Загрузите в Photoshop нейтральную LUT-текстуру размером 256×16.
  3. Взять её можно с этой страницы. Будьте внимательны: загружайте исходный файл, а не тот, который представлен на странице.
  4. Вставьте LUT-текстуру в документ Photoshop со скриншотом («Выбрать все» в LUT-документе, «Скопировать», переключиться на документ со скриншотом, «Вставить»)
  5. Применить манипуляции с цветом (Color Manipulatuins). Лучше всего сделать это добавлением отдельного слоя, иначе процесс осложнится)
  6. Скопируйте «слияние» (Edit/Copy Merged)
  7. Вставьте и сохраните получившуюся текстуру размером 256×16 в каком-нибудь несжатом формате, принимаемым движком.
  8. Выполните импорт текстуры в редактор и назначьте ей группу текстур для таблиц поиска (ColorLookUpTable Texture Group).

Возможны различные изменения цвета. Вот несколько примеров:

  • Яркость
  • Насыщенность
  • Простой контраст (линейный с ограничениями)
  • Высококачественный контраст (кривые с крутой линейной частью посередине)
  • Выборочные изменения темных, средних и светлых областей изображения.
  • Выборочные изменения определенных цветов (лучше всего подходит то цветовое пространство, в котором яркость выделена в отдельных канал, к примеру, LAB)
  • Корректировки могут быть даже выполнены в различных цветовых пространствах (так, в LAB яркость и цвет независимы друг от друга, что крайне полезно)
Добавил: jQuest Категория: Пост-обработка Читать дальше »

Окт 20 2015

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

Наши дисплеи (ТВ, TFT и другие) обычно не поддерживают HDR (Высокий Динамический Диапазон, High Dynamic Range), поэтому мы не можем по-настоящему рендерить крайне яркие объекты. Вместо этого, мы симулируем сопутствующие эффекты, которые воспринимаются нашими глазами (подповерхностное рассеивание; subsurface scattering). Эффект, вероятно, физически не особо правильный, но он помогает передать необходимую яркость объекта и привнести реализма в LDR-изображение (Низкий Динамический Диапазон; Low Dynamic Range).

Эффект Bloom

Свечение можно реализовать с единичным размытием по Гауссу. Но для лучшего качества, комбинируются несколько подходов с различным радиусом. А для лучшей производительности – создается большее размытие при меньшем разрешении. В UE3 у нас имелось 3 размытия по Гауссу в разрешении ¼, 1/8, 1/16. Теперь же – 5 видов. От Blur1 до Blur5, от ½, до 1/32, соответственно. Более того, если потребуется, можно добавить Blur0 для исходного разрешения.

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

Свойство Описание
Intensity Масштабирование цвета всего bloom-эффекта (линейно). Возможное использование: продолжительное исчезновение или появление, затемнение.

Intensity 0
Anti-Intensity 1.0
Anti-Intensity 5.0
Threshold Определяет, как много единиц яркости необходимо цвету для создания свечения. В дополнение к порогу (Threshold), существует часть, где цвет частично подвергается воздействию эффекта. Чтобы передать все цвета сцены в свечении, требуется использовать значение -1.
Tint Модификатор яркости и цвета каждого эффекта bloom.
Size Размер в процентном соотношении от ширины изображения. Если вам необходим больший размер, используйте меньшее разрешение размытия (большее значение блюма).

Size 1
Size 2
Size 3
Size 4
Size 5

Маска загрязненности блюма (Bloom Dirt Mask)

Bloom Dirt Mask использует текстуру для выделения определенных зон на дисплее. Это может использоваться для создания дефектов камеры или впечатляющего HDR-эффекта

Свойство Описание
Dirt Mask Texture2D используется в качестве маски. Рекомендуется использовать две текстуры, так как это помогает лучше распределять пространство экрана. Текстура низкого разрешения подходит для имитации грязи на камере, так как навряд ли она попадет в фокус и все равно будет размытой. Создать текстуру можно с помощью фильтра Photoshop Lens blur. Хроматическая аберрация может помочь улучшить эффект, однако, остерегайтесь артефактов сжатия. И, кстати, это свойство не может участвовать в смешивании. Но не волнуйтесь: мы планируем в скором времени сделать настройки более гибкими с помощью шейдеров.
Dirt Mask Tint Color Это свойство можно использовать для изменения цвета маски, её яркости.
Dirt Mask Intensity Увеличивает контрастность эффекта (линейно).
Добавил: jQuest Категория: Пост-обработка Читать дальше »

Окт 12 2015

Blendables – ассет, имеющий свойства, позволяющие ему аккуратно смешиваться с другими такими же. Мы в Epic Games чаще всего используем Blendables для PostProcessMaterials, но эта система подходит для всего, что зависит от вида (т.е. в основном, для связанного с камерой).

Blendable

Ассеты Blendable уже реализованы в движке, хотя и используются только для PostprocessMaterils / PostprocessMaterialInstances. Тем не менее, по идее, основная задача Blendable – предоставить возможность смешивать произвольные данные (как наиболее подходящие примеры: линейные значения, цвета) для выдачи результатов любой из подсистем.

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

Blendable – это объект, который имеет IBlendableInterface, в данный момент реализованный следующими типами ассетов:

  • PostprocessMaterials
  • PostprocessMaterialInstances
  • LightPropagationVolumeBlendable

Контейнер Blendable находится в PostProcessSettings, которые имеются у следующих объектов:

  • PostProcessVolume
  • PostProcessComponent
  • SceneCaptureActor
  • CameraComponent

Ассет LightPropagationVolumeBlendable создан как пример создания нового blendable и замены существующих PostProcessSettings. Эта система работает хорошо с малым количеством настроек, в других случаях нужна более сложная система.

Blendable в контент-браузере имеют собственную категорию – «Blendable». Можно использовать кнопку «Add New» или отфильтровать ассеты по категориям.

Плюсы новой системы:

  • Простота расширения и обновления (нет необходимости менять целую единую структуру, можно просто создать отдельный модуль)
  • Гибкие связи между пакетами позволяют работать с контентом без определенного уровня доступа (СКВ)
  • Они же дают возможность использовать один ассет во многих случаях (уменьшение избыточности, большая гибкость)
  • Возможно создание отдельного UI для каждого blendable (гораздо сложнее делать это с единой структурой)
  • Каждый экземпляр blendable имеет свой «вес», как и ассеты (см. LightPropagationVolumeBlendable), благодаря чему легко определить «вес» каждому свойству
  • Разбиение крупной структуры упрощает работу с блупринтами, делая её эффективнее и лаконичнее.

Контейнер Blendables

Контейнер реализован как массив «весов» и ссылок на lendableInterface.

Открыв параметры PostProcessVolume и посмотрев на массив blendable, вы увидите массив «весов» с ссылками на ассет blendable. Значения «веса», как правило, располагаются в промежутке от 0 до 1. А ссылки указывают на ассеты, расположенные в пакете (созданном в браузере контента) или в объекте, содержащем массив blendables.

Blendables-контейнеры можно найти в настройках пост-обработки. Массив здесь имеет три элемента: LightPropagationVolumeBlendable (из объекта волюма), пока не используемый элемент массива и ссылка на ассет LPV0 из пакета. Значение веса равняются 1.0.

Когда вы создаете новый элемент массива, можно выбрать: создать blendable определенного типа (на данный момент только LightPropagationVolumeBlendable), либо использовать (LightPropagationVolumeBlendable, Material, Material Instance). Время от времени нам приходится создавать новые типы blendable (к примеру, Bloom, SceneColor, DepthOfField и другие). Ссылка может быть любого типа blendable (если реализовывается IBlendableInterface). Порядок в массиве обратен тому, как устроены слои, поскольку смешивание применяется к ним сверху вниз, перезаписывая прежние данные. Запомните, данные множества волюмов (или других объектов) комбинируются.

Примечание: Хорошим тоном считается иметь несвязанный «глобальный» PostProcessVolume с низким приоритетом на уровне. Для получения полного контроля над всем уровнем вы можете добавить несвязанный волюм с высоким приоритетом. Тогда, для проверки наличия эффекта у blendable, вам достаточно изменить его вес до 0 и обратно.

Blendable в пакете: как часть объекта (к примеру, волюма)/динамически созданные в блупринте

Это ваш выбор, но мы советуем метод с пакетом (ссылаться на ассет в пакете), так как это позволяет минимизировать конфликты в системе контроля версий. Для максимальной гибкость, конечно, можно создавать blendable прямо в блупринте. Так как блупринты, по сути, форма программирования, передача параметров в UI равносильна их жесткому определению в коде. Хотя последний метод считается менее гибким для других разработчиков.

LightPropagationVolumeBlendable описывает свое отображение в редакторе. Неважно, был ли создан blendable в контент-браузере (слева) или в объекте (т.к. волюм постобработки): пользовательский интерфейс не меняется. Хорошим тоном считается давать каждому свойству свой чек-бокс (weight=0 или weight=1), а всей структуре – смешанный вес.

Примечание: Параметры LightPropagationVolumeBlendable до сих пор существуют в PostProcessSettings для обратной совместимости. Однако мы планируем удалить их и сделать blendables одним методом.

Как создать свой собственный Blendable (в C++)

На данный момент мы советуем скопировать плагин LightPropagationVolumeBlendable. После создания ассета вы можете отбирать данные таким же способом, каким это делает Light Propagation System. Метод GetSingleFinalDataConst() используется для получения данных после их смешивания. Для лучшей производительности, возможно, вы захотите избежать ненужных вызовов этой функции (слишком часто).

Блупринт

Блупринт AddOrUpdateBlendable обеспечивает удобный доступ к контейнеру blendables. Вы передаете объекту, содержащему контейнер blendables, вес и ссылку на blendable. При наличии этих параметров они просто обновляются. Элементы контейнера не удаляются, так как это может привести к нарушению работы другого кода и сборки мусора. Удаление элементов не является необходимостью, ввиду малых затрат ресурсов.

Здесь вы можете увидеть, как ссылаться на ассет blendable в контент-браузере:

Переменная ‘BlendableVar’ типа LightPropagationVolumeBlendable (Object Reference) используется в качестве ссылки на ассет под названием LightPropagationVolumeBlendable ‘LPV0′.

С блупринт-функцией ConstructObjectFromClass вы можете создавать новый blendable непосредственно в блупринте. Соединяя вход «Outer» нового объекта с объектом, имеющим контейнер blendable, вы добьетесь аналогичного поведения, если бы создавали объект в UI.

Здесь мы создаем объект типа LightpropagationVolumeBlendable, получаем настройки и определяем членов с функцией SetMembersIn.

Примечание: Вам понадобится вручную определить флаг как true (установленный чек-бокс), иначе свойство с тем же именем не будет выбрано.

В качестве эксперимента вы можете использовать showflag VisualizeLPV (в редакторе: Visualize/Light Propagation Volume) для отображения смешанных параметров. Это реализовано в коде на C++ и только для данного типа blendable, но позже мы реализуем подобную возможность для каждого свойства без необходимости привносить в код какие бы то ни было изменения.

Showflag Visualize отображается смешанные значения, что полезно при отладке.

В будущем

  • Контекстно-зависимый просмотр пока не работает при работе с функцией AddOrUpdateBlendable (совет: отключайте чек-бокс ‘context sensitive’).
  • Мы собираемся преобразовать все PostprocessSettings в объект, как и LightPropagationVolumeBlendable, поэтому однажды PostProcessSettings могут быть удалены. Старые уровни конвертируются без потери данных при загрузке. Чтобы избежать спама пакетов контента, мы предпочитаем создавать объекты как часть уровня.
  • Мы хотим еще лучше отладить взаимодействие блупринтов для упрощения использования.
  • Сделаем доступным Blendable массив в настройках сцены и всего проекта.
  • Для придания большей прозрачности, получаемой при их применении необходимы виды отладки, показывающие веса, имена и типы ассетов/объектов.
Добавил: Flakky Категория: Пост-обработка Читать дальше »

Сен 30 2015

График постобработки (Post Processing Graph)

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

Граф создает временные render targets (без смешивания буферов кадров (framebuffer blending). Это значит, что, если вам необходимо изменить исходный цвет объекта, то придется пользоваться шейдером.
Использовать материалы постобработки необходимо в малых количествах и лишь в случае крайней необходимости. Когда бы то ни было, будь то цветокоррекция, блюм, глубина резкости или что-то подобное, используйте волюм постобработки, который был специально оптимизирован для этих целей.

Использование материалов постобработки

Посредством настроек постобработки (обычно определяемых в волюмах постобработки или параметрах камеры) возможно смешивание, так называемых, «смешиваемых» ассетов («blendable assets»). Движок уже имеет несколько материалов постобработки, но эта его особенность позволяет создавать, рендерить и смешивать пользовательские PostProcessing Material без помощи программистов.
Достаточно применить один или несколько материалов (в качестве смешиваемых) к эктору волюма постобработки в секции «Misc» («Разное»). Для этого сначала нажмите +, чтобы добавить новый слот, затем выберите материал в браузере контента и нажмите стрелочку, дабы применить его. Стоит знать, что неиспользуемые слоты будут просто проигнорированы движком.

Пример материала постобработки

Вы можете посмотреть пример постобработки в этом уроке: «Пример материала постобработки».

Важные настройки

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

Материал должен использовать только свойство EmissiveColor.

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

Blendable Location Описание
Before Tonemapping PostProcessInput0 обеспечивает доступ к данным о цвете сцены со всем освещением в HDR. Используйте этот параметр для исправления артефактов, связанных с временным сглаживанием (temporal antialiasing) и lookups G-буфера, такими как глубина, нормали и подобное.
After Tonemapping Предпочтительное расположение прохода для производительности, поскольку цвет представлен в LDR и, естественно, требует меньшей точности и пропускной способности. Применяется после тональной компрессии и цветокоррекции.

Обычный вход постобработки находится перед проходом. Поэтому при использовании PostProcessInput0 цвет может быть применен через SceneTexture. Использование SceneColor в некоторых случаях не даёт правильного результата.

Смешивание различных типов материалов

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

Для каждого волюма мы определяем различный тип одного и того же материала. Цвет указывается как параметр, что и позволяет иметь различные настройки для разных типов материала.

Основываясь на положении камеры, используются настройки одного волюма:



При движении – уже двух.

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

Блок материала «SceneTexture»

Вы можете добавить блок материала «SceneTexture» к своему материалу и выбрать, какую текстуру необходимо использовать:

Нода имеет необязательный вход и несколько выходов:

UV-вход определяет, в каком месте вы хотите сделать lookup-текстуру (используется только для цветового выхода). Выход «Color» состоит из четырех выходов, выделенные (в зависимости от ID текстуры сцены (Scene Texture)) под отдельные каналы. Выход «Size» – это 2 компонента вектора: ширина и высота текстуры. Обратную им величину (1/ширина, 1/высота) можно получить на выходе «InvSize».
Это полезно в подобных случаях:

В примере выше, блок материала просчитывает разницу глубины данного пикселя и соседнего.

Использование параметров G-буфера

G-буфер состоит из нескольких текстур, которые содержат материалы (к примеру, подповерхностный/отраженный цвет, шероховатость; subsurface/specular color, roughness) и атрибуты объекта (нормали, глубина) без данных об освещении и его взаимодействии с материалом. В различных рендерерах мы сначала рендерим G-буфер, затем просчитываем все освещение (отложенное) с атрибутами G-буфера. Так как UE4 использует отложенное затенение (DirectX 11 или последние версии OpenGL), мы получаем доступ к данному буферу в процессе постобработки.

Но здесь нам несколько мешает сглаживание, поскольку пиксель/тексель G-буфера больше не относится как 1:1 с итоговым пикселем (смотрите секцию ниже).

CustomDepth

Эта особенность предоставляет возможность скрывать определенный объект путем его рендера в буфер глубины, называющийся пользовательским буфером глубины (Custom Depth Buffer). Этот метод увеличивает количество вызовов отрисовки при том же количестве материалов. Рендеринг получается крайне дешевым, поскольку на выходе лишь глубина.
Функция активируется для мешей («Static Mesh Properties / Render Custom Depth»; Настройки статичного меша/Рендер пользовательской глубины):

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

Здесь вы можете посмотреть пользовательскую глубину:

А это материал, который мы использовали для визуализации:

Временное сглаживание или Почему G-буфер «дрожит»

Временное сглаживание – это уникальная особенность UE4, которая отлично влияет на качество изображения, потребляя при том среднее количество ресурсов.
По умолчанию, материал постобработки вставляется в конец графа (после тоновой компрессии). Это означает, что вы получаете финальное LDR-изображение после тоновой компрессии, цветокоррекции и применения временного сглаживания. И это лучший вариант для простых эффектов постобработки с точки зрения производительности и легкости использования.
Здесь вы можете увидеть, как мы использовали вход пользовательской глубины для визуализации силуэта определенных объектов:

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

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

Известные проблемы

  • Блок материала SceneTexture
    • Separate Translucency не работает.
    • Отфильтрованные (билинейно) lookups не работают.
    • Определенные lookups не работают в некоторых проходах (возможно, не все из них будут исправлены, ввиду больших затрат ресурсов компьютера).
    • MaterialFunction может выдавать ошибку, хотя и продолжать работать с доменом постобработки.
  • Материалы
    • UV в PostProcesMaterial не может принимать значения из промежутка от 0 до 1(например, при уменьшении размеров вьюпорта).
    • Миниатюра ассета с материалами постобработки отображается неправильно.
    • Альфа-канал в качестве выхода пока не поддерживается (используйте «Opacity» (Непрозрачность).
    • Предпросмотр материала в редакторе материалов отображается неправильно.
    • В некоторых случаях изменение материала ни к чему не приводит в постобработке. Для исправления – перезагрузите редактор.
    • Браузер контента должен позволять легко фильтровать материалы постобработки.
    • Режим смешивания материалов не работает для материалов постобработки.
  • Смешивание
    • При смешивании двух волюмов постобработки, возможно проявление неаккуратного перехода. Это можно избежать, если использовать непривязанный волюм со стандартными настройками материала.

FAQ

  • Можно ли указать текстуру «Lighting only mode» (только освещение) как вход?
    Нет, поскольку отсутствуют данные этой промежуточной стадии. Для этого режима просмотра мы генерируем текстуру, игнорируя цвета материала. В противном случае, пришлось бы реструктуризировать большой объем кода рендеринга.
  • Почему SceneColor lookup отображается некорректно, но при использовании PostProcessInput0 это незаметно?
    Когда используется SceneColor, создается низкокачественная копия всей сцены, для поиска текстуры, которую мы записываем в данный момент (что невозможно выполнить иным способом, к примеру, при рендеринге любого меша). Так что в постобработке вы должны использовать PostProcessInput0.
  • Сколько памяти уходит на постобработку?
    Затраты зависят от разрешения экрана. Перед тональной компрессией мы используем HDR (8 байтов на пискель), после – LDR (4 байта на пискель).
  • Как снизить стоимость рендера для постобработки?
    Зависти от целевой платформы. В любом случае, уменьшайте количество lookup-текстур, избегайте случайных lookup (может снизить производительность из-за потери кеша текстур).
  • Какое количество проходов можно использовать?
    Каждый проход увеличивает стоимость рендера. Попробуйте комбинировать проходы и активировать их только тогда, когда необходимо. Ключевые игровые особенности, такие как шум, можно выделить в отдельный проход для большей производительности.
  • Какова нагрузка на ЦПУ при постобработке и смешивании?
    Смешивание материалов довольно легкий процесс. Все настройки материалов смешиваются, и в проход попадает лишь один материал постобработки.
  • Мне нужно использовать положение «До тональной компрессии» («Before Tonemapper»), чтобы получить качественное временное сглаживание. Но при изменении цвета, я получаю нежелательный результат. Как это предотвратить?
    Это не простое решение. Вы должны обратить тональную компрессию (дорогая операция). Цвет также может отличаться в зависимости от настроек адаптации глаз: необходимо проверить параметр EyeAdaptationlevel.
  • Как получить полный дамп графа постобработки?
    r.CompositionGraphDebug – вывод графа в консоль. Пример:
Добавил: Flakky Категория: Пост-обработка Читать дальше »

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница