Используя следующий параметр для эффекта частиц OpenGL:
SRC: GL_SRC_ALPHA
DST: GL_ONE
Создает аддитивную смесь, которая выглядит эффектно на черном фоне, но ужасно на ярких цветах, так как начинает исчезать до белого.
Затем я использовал альфа-смешение:
SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA
Это позволяет использовать другие фоны, не влияя на цвет частиц, но сами частицы выглядят тусклыми по сравнению с аддитивной смесью. Как я могу добиться хорошего эффекта огня с помощью альфа-смешивания и частиц?
Добавка:
Альфа:
ОБНОВИТЬ:
Следуя совету Дэвида ниже, я создал отдельную текстуру, а затем использовал добавочную смесь для эффекта частиц, прежде чем рисовать на текстуре. Проблема в том, что рисование на текстуре альфа = 0 приводило к тому, что перед моей картой мира появлялись только цветные части частицы, поскольку обычно у вас черный фон. Хитрость заключалась в том, чтобы использовать две текстуры. Я создал черную текстуру, а затем нарисовал на ней частицы. Затем я удалил альфа-слой частиц с этой текстуры, эффективно удаляя весь окружающий сплошной черный цвет и затухая частично видимыми частицами, оставляя при этом нижележащий черный цвет, как и следовало ожидать при создании аддитивных частиц на черном фоне. Короче, изнурительный процесс, но я в итоге добрался
Вот ветка, где я разместил свой процесс: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528
Посмотрите на предварительно умноженную альфу.
http://blogs.msdn.com/b/shawnhar/archive/2009/11/07/premultiplied-alpha-and-image-composition.aspx
источник
Как отметил Дэвид Гувейя, не существует удовлетворительной замены аддитивного смешивания на ярких фонах. Лучший результат, который я обнаружил (для которого не требуется что-то вроде рендеринга в буфер), это использование следующего blendmode GL:
Это не так хорошо, как смешивание добавок, но намного лучше, чем
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
. Если вы немного измените начальные и конечные значения альфа-канала и цвета, вы можете получить результаты, действительно близкие к аддитивному смешиванию.На рисунке выше
GL_SRC_ALPHA, GL_ONE
слева, в серединеGL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
и справа вы можете увидеть режим смешивания, который я бы предложил для этой настройки.источник
Вы пробовали использовать оба? Слой на несколько частиц с альфа-смешением, которые должны получить ваши цвета так, как вы хотите, а затем вернуться с некоторым аддитивным смешиванием, чтобы получить хороший основной момент, который вы ищете.
источник
Ну, во-первых, изображения частиц, которые вы используете, имеют черный фон, в результате чего на втором изображении появляются темные полосы. Не делай этого; то есть не рисуйте форму частицы на цветовых каналах. Вместо этого изображение должно быть сплошным цветом и определять только форму в альфа-канале.
Это значительно улучшит внешний вид альфа-прозрачности. Затем вы можете еще больше улучшить внешний вид общего эффекта, изменяя цвет частиц в течение всего срока их службы. Например, базовое изображение очень яркое, что дает вам центральную ярко-желтую область. Затем оттените частицы красновато-оранжевого цвета и увеличьте оттенок со временем. Таким образом, частицы будут темнеть, когда они выходят из центра.
источник