Решили: боевой профиль пост-обработки BattlePostFX_Base наполнен настоящим подассетом Bloom (порог 1.0, интенсивность 1.0, scatter 0.7). До этого в файле лежали четыре висячие ссылки {fileID: 0} и ноль компонентов — и на диске, и в памяти редактора.

Почему: без bloom всё, что мы намеренно уводим за 1.0 (свечение части на касте ×2.5, осколки ×2.75, вспышка смерти ×1.8), просто клампится — то есть половина боевого VFX была физически невыполнима. Это ВТОРОЙ заход тех же грабель: в первый раз bloom лежал с intensity: 0, теперь профиль оказался пустой оболочкой. Порог 1.0 держит правило «bloom только на VFX»: обычный арт под единицей не светится сам собой.

Грабли: VolumeProfile.Add<T>() создаёт компонент ТОЛЬКО в памяти. Без AssetDatabase.AddObjectToAsset он не становится подассетом, файл сохраняется со ссылкой в никуда, и после ближайшего reload профиль пуст — молча, без единой ошибки. Так, судя по всему, профиль и родился пустым в коммите, который его завёл.

Второе: снимок из редактора без renderPostProcessing врёт в меньшую сторону. Кадр, снятый голой камерой, показывает арт почти без свечения, и по нему легко решить, что эффект слабый. Честный кадр требует URP-камеры с постом и временного глобального Volume с профилем — оба создаются на время рендера и удаляются, чтобы не осесть в чужой открытой сцене.

Осталось незакрытым: ни одна сцена этот профиль не использует — Volume в WorldScene и MaxSceneForTests ссылается на MapPostFX, который тоже пуст. То есть в игре пост-обработки нет до сих пор; куда вешать боевой Volume и что должно лежать в профиле карты — вопрос к Максу.

Владелец правды: Assets/Settings/PostFX/BattlePostFX_Base.asset.