80 lines
10 KiB
Markdown
80 lines
10 KiB
Markdown
---
|
||
id: render2d.PostProcess
|
||
search_names: [блум, свечение, ореол, эффекты камеры, постобработка]
|
||
title: Постобработка камеры
|
||
summary: Добавьте Bloom и цветовые эффекты камеры; проверьте экземпляры, типизированные параметры и ошибки назначения шейдера.
|
||
---
|
||
# Постобработка камеры
|
||
|
||
Запустите пример, переведите фокус в Game View и нажимайте пробел. Последовательно включаются Bloom, Color Grading, Vignette, Chromatic Aberration, Pixelate, CRT, пользовательский фильтр и исходное изображение. В примере есть линейная identity LUT и собственный материал. Изменённая насыщенность позволяет увидеть Color Grading даже с нейтральной LUT.
|
||
|
||
## Минимальная настройка камеры
|
||
|
||
Добавьте Post Process (`render2d.PostProcess`) на узел с [Camera2D](ref:engine.Camera2D). Включите компонент, добавьте один Bloom и включите этот экземпляр. Начните с непрозрачного вывода камеры и яркого спрайта. Понижайте Threshold до появления ореола вокруг яркой области, затем настройте Intensity и Radius. Выключите экземпляр для сравнения. Bloom размывает яркие пиксели готового изображения; для освещения соседних поверхностей нужен [Light2D](ref:engine.Light2D). Сам по себе Bloom не создаёт источник света.
|
||
|
||
Один логический выход камеры может занимать только один включённый стек. Если эффекта нет, проверьте выход камеры, Enabled компонента и экземпляра, порог и [PFX001](ref:PFX001). Для Custom нужен материал с postfx-шейдером; перед изменением назначения шейдера прочитайте [MAT004](ref:MAT004).
|
||
|
||
## Ореол вокруг лампы
|
||
|
||
Откройте основную сцену examples/platformer, выберите Camera и раскройте Post Process. У Bloom заданы Threshold 0,75, Intensity 0,22 и Radius 6. Понизьте порог, чтобы ореол появился вокруг большего числа ярких поверхностей. Увеличьте радиус, чтобы он стал шире. Сравните лампу и искры при включённом и выключенном стеке. Откройте настройки игры и проверьте чёткость текста. Для освещения соседних поверхностей у лампы есть Light2D.
|
||
|
||
Стек выполняется один раз после отрисовки мира всеми камерами одного выхода. Включите компонент на одной из них. Группа SceneLinear получает цвет до экспозиции и тональной компрессии. Группа DisplayLinear работает после них, до кодирования для вывода. Переставляйте эффекты внутри совместимой группы. Линейный offscreen-выход сохраняет значения сцены. Bloom и разделение цветовых каналов рассчитаны на непрозрачное изображение.
|
||
|
||
## Пользовательский фильтр
|
||
|
||
Добавьте Custom Material, выберите материал с шейдером `#pragma postfx` и включите эффект. Готовый пример лежит в `examples/platformer/assets/postfx/cold.aemat`. Шейдер читает предыдущий результат через `aego_sample(aego_uv)`. Сохраните материал, шейдер и сцену, затем проверьте результат в экспортированной игре. На камере есть и выключенный Color Grading с LUT. Подходят отдельные линейные data-текстуры 256×16 или 1024×32.
|
||
|
||
Для Animation и Tween параметр задаётся через ID экземпляра. Например, на камере платформера путь `render2d.PostProcess.ef120d00000000000000000000000002:Intensity` ведёт к интенсивности Bloom. При перестановке цель сохраняется. У копии эффекта появляется собственный ID. Undo восстанавливает удалённый экземпляр вместе с его ID.
|
||
|
||
## Материалы в примерах игр
|
||
|
||
В `examples/platformer/assets/materials/character_flash_lit.aeshader` показано сочетание освещения, нормали текущего спрайта и параметра Flash. Клип Hurt анимирует параметр Flash в компоненте переопределения материала игрока. У соседей с общим материалом сохраняются их собственные значения. Для контура выделения сохраните текущий материал спрайта, назначьте встроенный Outline и верните прежний материал при снятии выделения. В examples/topdown фонарь Torch поворачивается вместе с прицелом меча. Его свет получают пол и стены.
|
||
|
||
## Инспекция проходов и команды
|
||
|
||
В секции Lighting профайлера включите просмотр проходов и выберите логический выход. У Bloom видны выделение ярких областей, два направления размытия и композиция. Выключите стек и сравните следующий кадр. Время прохода появляется после получения достоверной выборки от драйвера. У окна показан размер области вывода, у текстуры также указан формат.
|
||
|
||
Команда `aego postfx get scenes/main.aescene Camera` выводит ID экземпляров. В платформере `aego postfx set scenes/main.aescene Camera ef120d00000000000000000000000002 Intensity 0.35` меняет интенсивность существующего Bloom. Эти команды доступны по MCP. При привязке к редактору изменение попадает в открытый документ и его историю Undo.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetEffectEnabled
|
||
---
|
||
|
||
`instanceID` — постоянный ID существующего эффекта, а не его тип или позиция в стеке. Если экземпляр не найден, скрипт сообщает об ошибке до изменения. Метод меняет переключатель экземпляра; сам компонент тоже должен быть включён.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetFloat
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`: например, ID экземпляра Bloom и `:Intensity`. `value` должен соответствовать типу и ограничениям вещественного поля. Неразрешённый экземпляр, отсутствующее поле или несовместимое значение вызывают ошибку скрипта без применения этого присваивания. Меняется экземпляр, а не общий материал.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetInt
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`. Целое должно помещаться в знаковый int32 и соответствовать описателю поля. Выход за диапазон или неразрешённая цель вызывают ошибку скрипта до присваивания.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetBool
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`; целевое поле должно быть булевым. Неизвестная цель или несовместимый тип поля вызывают ошибку скрипта до присваивания.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetVec2
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`; `value` содержит два компонента вектора. Описатель поля должен принимать такое значение. Неразрешённая цель или несовпадение типа вызывают ошибку скрипта до присваивания.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetVec3
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`; `value` содержит три компонента вектора. Описатель поля должен принимать такое значение. Неразрешённая цель или несовпадение типа вызывают ошибку скрипта до присваивания.
|
||
|
||
---
|
||
id: render2d.PostProcess.SetVec4
|
||
---
|
||
|
||
`key` имеет вид `instanceID:Field`; `value` — [material.Vec4](ref:aego/material.Vec4) с компонентами X, Y, Z и W. Описатель поля должен принимать такое значение. Неразрешённая цель или несовпадение типа вызывают ошибку скрипта до присваивания.
|