К содержимому

Практика игровых эффектов

Почему у прозрачных частиц тёмные края

Перед перерисовкой дыма проверьте, как соединяются RGB и альфа. Правильное изображение может выглядеть неверно из-за способа смешивания.

Попробовать в браузере Без аккаунта. Локально до выбора Save online.

Straight и premultiplied RGB — разные данные

Пиксель со straight alpha хранит цвет отдельно от прозрачности. В premultiplied RGB цвет уже умножен на альфу. Оба варианта могут давать одинаковый видимый результат, но им нужны соответствующие blend factors.

Возьмём линейный красный RGB (1, 0, 0) с альфой 0,25 на чёрном. Straight-alpha blending даёт красный 0,25. Если в исходнике уже записано 0,25 и снова умножить его на альфу, получится 0,0625. Повторное умножение затемняет край. Это пример в линейном пространстве: не смешивайте сырые sRGB-байты с линейной арифметикой.

Straight:      RGB = (1, 0, 0), alpha = 0.25
Premultiplied: RGB = (0.25, 0, 0), alpha = 0.25
Верно на чёрном: red = 0.25
Повторное умножение: 0.25 × 0.25 = 0.0625

Согласуйте формулу смешивания с текстурой

Для обычного straight-alpha цвета исходный RGB умножается на альфу и складывается с фоном, взвешенным по one minus source alpha. Для premultiplied источника RGB-множитель обычно One. Изменение соглашения изображения без изменения шейдера поэтому меняет результат.

При рендере в прозрачную текстуру отдельно важен альфа-канал. Если для него использовать исходный RGB-множитель, альфа может возводиться в квадрат. Отдельные alpha factors One и OneMinusSrcAlpha сохраняют ожидаемую накопленную прозрачность в типичном source-over случае. Точные настройки зависят от материала и пайплайна: одну формулу не стоит бездумно переносить во все эффекты.

Пример source-over для straight RGB:
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha

Пример source-over для premultiplied RGB:
Blend One OneMinusSrcAlpha, One OneMinusSrcAlpha

Отличайте фильтрацию от ошибки blending

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

Проверьте разумность RGB в прозрачных пикселях рядом с краем. Alpha Is Transparency может помочь обычным импортированным текстурам Unity, но не является универсальным исправлением premultiplication mismatch. Изображению без альфы всё равно нужен осмысленный источник прозрачности.

Дым и аддитивный огонь требуют разных решений

Дым обычно перекрывает сцену за ним. Аддитивные огонь и искры преимущественно добавляют светящийся цвет: на чёрном они могут быть сильными, а на белом — слабыми. Это часть назначения материала, а не обязательно ошибка экспорта.

В glTF OPAQUE, MASK и BLEND задают разные способы работы с альфой материала. Спецификация также требует хранить texel base color без premultiplication. Это правило данных материала glTF, а не всех пользовательских текстур частиц в Unity.

Повторяемый порядок диагностики

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

  1. Проверьте исходную альфу и один показательный кадр.
  2. Определите, хранится RGB как straight или premultiplied.
  3. Проверьте blend factors, включая альфу прозрачного render target.
  4. Сравните чёрный, серый и белый фон без постобработки.
  5. Проверьте масштабированные и повёрнутые виды на артефакты фильтрации.
  6. Только затем корректируйте художественный цвет, эмиссию и прозрачность.

Читайте дальше

Практические руководства, ограничения и проверяемые примеры.

Проверьте на своём эффекте

Сохраните исходный .2vfx и оцените результат в целевом проекте Unity.

Открыть редактор ↗