10 KiB
id, search_names, title, summary
| id | search_names | title | summary | |||||
|---|---|---|---|---|---|---|---|---|
| render2d.PostProcess |
|
Постобработка камеры | Добавьте Bloom и цветовые эффекты камеры; проверьте экземпляры, типизированные параметры и ошибки назначения шейдера. |
Постобработка камеры
Запустите пример, переведите фокус в Game View и нажимайте пробел. Последовательно включаются Bloom, Color Grading, Vignette, Chromatic Aberration, Pixelate, CRT, пользовательский фильтр и исходное изображение. В примере есть линейная identity LUT и собственный материал. Изменённая насыщенность позволяет увидеть Color Grading даже с нейтральной LUT.
Минимальная настройка камеры
Добавьте Post Process (render2d.PostProcess) на узел с Camera2D. Включите компонент, добавьте один Bloom и включите этот экземпляр. Начните с непрозрачного вывода камеры и яркого спрайта. Понижайте Threshold до появления ореола вокруг яркой области, затем настройте Intensity и Radius. Выключите экземпляр для сравнения. Bloom размывает яркие пиксели готового изображения; для освещения соседних поверхностей нужен Light2D. Сам по себе Bloom не создаёт источник света.
Один логический выход камеры может занимать только один включённый стек. Если эффекта нет, проверьте выход камеры, Enabled компонента и экземпляра, порог и PFX001. Для Custom нужен материал с postfx-шейдером; перед изменением назначения шейдера прочитайте 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 с компонентами X, Y, Z и W. Описатель поля должен принимать такое значение. Неразрешённая цель или несовпадение типа вызывают ошибку скрипта до присваивания.