Как я могу достичь хорошего эффекта огня с альфа-смешиванием и частицами?

Используя следующую настройку для эффекта частиц OpenGL:

SRC: GL_SRC_ALPHA
DST: GL_ONE

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

Затем я использовал альфа-смешивание:

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

Это позволяет использовать другие фоны, не влияя на цвет частиц, но сами частицы выглядят скучными по сравнению с аддитивной смесью. Как я могу достичь хорошего эффекта огня с альфа-смешиванием и частицами?

Добавка:

Additive on black Добавка на синем

Alpha:

Альфа на черном Альфа на синем

UPDATE:

Следуя приведенному ниже совету Дэвида, я создал отдельную текстуру, а затем использовал аддитивную смесь на эффект частиц, прежде чем рисовать на текстуре. Проблема в том, что рисование на текстуре alpha = 0 привело к тому, что только цветные части частицы появились перед моей картой мира, так как обычно у вас есть черный фон. Хитрость заключалась в использовании двух текстур. Я создал черную текстуру, а затем нарисовал на ней частицы. Затем я удалил альфа-слой частиц из этой текстуры, эффективно удалив все окружающие сплошные черные и затухающие частично видимые частицы, оставив нижний черный цвет, как вы ожидали при добавлении частиц смешивания на черном фоне. Короче говоря, изнурительный процесс, но я получил там в конце концов:

Регулярная добавка и моя версия

Вот нить, где я опубликовал свой процесс: http : //www.cocos2d-iphone.org/forum/topic/28707 отвечает = 8 # пост-141528

Видео: http://www.youtube.com/watch?v=JptGbEO3b5E

40 голосов | спросил Aram Kocharyan 27 Jam1000000amFri, 27 Jan 2012 06:45:50 +040012 2012, 06:45:50

5 ответов


16

Я признаю, что не знаю идеального решения этой проблемы, поэтому я опишу обходное решение, с которым вам может быть удобно или нет.

  1. Отметьте все частицы, используя аддитивное смешение в отдельную текстуру (или объект рендеринга), очистив ее до transparent . li>
  2. Отметьте эту текстуру (или рендеринга) на top вашей сцены с помощью альфа-смешивания .

Я попробовал это в Photoshop, и вот что я получил - это не идеально, но по крайней мере он лучше сохраняет исходные цвета:

введите здесь описание изображения>> </p>

<p> Вот оригинальная текстура без добавления аддитивного смешения на частицах: </p>

<p> <img src =

ответил David Gouveia 27 Jam1000000amFri, 27 Jan 2012 08:16:27 +040012 2012, 08:16:27
9
ответил Tili 27 Jpm1000000pmFri, 27 Jan 2012 12:22:41 +040012 2012, 12:22:41
4

Как отметил Дэвид Гувейя, нет никакой удовлетворительной замены аддитивного смешивания на ярких фонах. Лучший эффект, который я нашел (который не требует чего-то вроде рендеринга backbuffer), заключается в использовании следующего GL blendmode:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

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

режимы смешивания частиц

На изображении выше есть GL_SRC_ALPHA, GL_ONE слева, в середине есть GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, а справа вы можете увидеть режим смешивания, который я бы предложил для этой настройки.

ответил bummzack 27 Jpm1000000pmFri, 27 Jan 2012 12:43:20 +040012 2012, 12:43:20
3

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

ответил notlesh 27 Jam1000000amFri, 27 Jan 2012 09:23:21 +040012 2012, 09:23:21
3

Ну, во-первых, изображения частиц, которые вы используете, имеют черный фон, в результате чего темные полосы в этом втором изображении. Не делай этого; т. е. не нарисовать форму частицы на цветовых каналах. Вместо этого изображение должно быть сплошным цветом и определять форму в альфа-канале.

Это улучшит внешний вид альфа-прозрачности. Затем вы можете улучшить внешний вид общего эффекта за счет того, что частицы изменяют цвет в течение всего срока службы. Например, базовое изображение очень яркое, что дает вам центральную ярко-желтую область. Затем окрашивайте частицы красновато-оранжевым цветом и увеличивайте оттенок с течением времени. Таким образом, частицы будут темнеть, когда они выйдут из центра.

ответил jhocking 27 Jpm1000000pmFri, 27 Jan 2012 18:39:40 +040012 2012, 18:39:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132