Як можна досягти хорошого вогняного ефекту за допомогою альфа-змішування та частинок?


41

Використовуючи наступне налаштування для ефекту частинок 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://www.youtube.com/watch?v=JptGbEO3b5E

Відповіді:


17

Я визнаю, що не знаю жодного ідеального рішення цієї проблеми, тому опишу вирішення, яке вам може бути або не подобається:

  1. Відображайте всі частинки, використовуючи добавку, що змішується, до окремої текстури (або візуалізації), її фон очищений до прозорого .
  2. Візуалізуйте цю текстуру (або візуалізуйте ціль) у верхній частині сцени, використовуючи альфа-змішування .

Я спробував це у Photoshop, і ось що я отримав - Це не ідеально, але принаймні він зберігає оригінальні кольори краще:

введіть тут опис зображення

Ось оригінальна текстура, не роблячи добавки на частинки:

введіть тут опис зображення


Чи розділило б їх на дві текстури і було б так, як якщо б я мав текстуру суміші добавок, намальованої на задньому плані?
Арам Кочарян

@AramKocharyan я насправді не пробував це особисто, окрім програми Photoshop, де результати здавалися розумними. Але я думаю, що це має виглядати як ваша перша картина, але всі чорні кольори замінені кольором тла. Іншими словами, частинки додаються разом, що призводить до великої родзинки в середині вибуху, але не на тлі. Тоді отриманий вибух наклеюється на ваш фон, не додаючи, який зберігає оригінальний вигляд.
Девід Гувейя

Завдяки цьому є сенс, це як звичайна суміш у Photoshop та накладка, але це схоже на зображення накладки, що сидить над фоновим шаром. Я спробую це і дам вам знати.
Арам Кочарян

@AramKocharyan Я опублікую результати, які я отримав у фотошопі за кілька хвилин, щоб ви могли порівняти.
Девід Гувейя

5
Просто викинувши це - ця методика може викликати занепокоєння щодо продуктивності ...
Нолеш

9

Погляньте на попередньо розмножений альфа.

http://blogs.msdn.com/b/shawnhar/archive/2009/11/07/premultided-alpha-and-image-composition.aspx


2
Це єдина правильна відповідь у цій темі. Прикро, що це так лаконічно, але всі повинні справді читати це. Попередньо розмножений альфа - це спосіб поєднання добавки та альфа-змішування, і це має багато інших переваг.
Джейк Макартур

4

Як зауважив Девід Гувейя, немає задовольняючої заміни для додавання добавок на яскравому тлі. Найкращий ефект, який я знайшов (для якого не потрібно щось на зразок рендерингу) - використовувати наступний 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і праворуч ви можете побачити режим суміші, який я запропонував би для цього налаштування.


Я згоден, що для тотального контролю над кольором цей метод чудово працює.
Арам Кочарян

Зауважимо лише, що я помітив, що за допомогою цього методу найкращим способом згасання вогню було його зменшення до нульового розміру, оскільки зменшення альфа призводить до вицвітання білого кольору.
Арам Кочарян

3

Ви пробували використовувати обидва? Накладіть на частинки з альфа-змішуванням, які повинні набувати ваших кольорів так, як вам потрібно, а потім поверніться з додаванням добавок, щоб отримати приємну родзинку, яку ви шукаєте.


Це може бути моїм наступним варіантом, хоча я хочу звести частинки до мінімуму. Сподіваюся, я можу наполовину обох.
Арам Кочарян

3

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

Це значно покращить вигляд прозорості альфа. Тоді ви можете додатково покращити вигляд загального ефекту, змусивши частинки змінювати колір протягом свого життя. Мовляв, базове зображення дуже яскраве, що дає вам центральну яскраво-жовту зону. Потім підфарбовуйте частинки червонувато-оранжевим і збільшуйте відтінок з часом. Таким чином частинки почнуть темніти, коли вони відсуваються від центру.


Так, текстура - лише кисть білого кольору з альфа-відмінністю від центру.
Арам Кочарян

так, якщо це правда, то мені дивно, що на екрані прозорості альфа-екрана є темні ореоли навколо частинок.
поштовх

Так, я не впевнений, чому вони утворилися навколо альфа-змішування. Але для того, що я маю зараз, це, здається, добре.
Арам Кочарян


Це виглядає досить добре, ви повинні помітити це в оновлення запитань.
поштовх
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.