Как создать эффект «пламени», как на титульном экране Ocarina of Time?

102

Я бы хотел воссоздать пламенный эффект, подобный эффекту логотипа на титульном экране игры N64 «Легенда о Зельде: окарина времени», показанной ниже:

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

Беглый взгляд на текстуры, используемые в ПЗУ, дает единственную текстуру 32x32, которая выглядит похожей на эффект, но я не знаю, как это изображение (при условии, что оно правильное) преобразуется в эффект, видимый на логотипе.

Как я могу реализовать нечто подобное?

nathanburns
источник
2
Я немного скорректировал ваш вопрос, чтобы спросить, как добиться подобного эффекта, так как мы не рассматриваем вопросы о том, как другие игры реализовали конкретные результаты, чтобы они были тематическими.
Джош
Вы просите о процедурной технике или достаточно простых заранее сделанных эффектов?
Балинт
У меня нет времени и знаний, чтобы написать полный ответ, но, возможно, это можно сделать с помощью цветового цикла .
Александр Vaillancourt
@JoshPetrie Спасибо, это то, что я действительно после
nathanburns
1
Из того, что я помню о технике, сложность заключается в создании изображения с пикселями, используя соответствующую палитру, а не цвета как таковые. Циклирование выполняется в коде по подмножеству цветов.
Александр Vaillancourt

Ответы:

248

Сначала сделайте белую на черном маску вашего логотипа / текста и размыте ее.

размытая форма логотипа

Затем создайте повторяющуюся (мозаичную) текстуру сплошного шума (здесь используется GIMP)

текстура шума

Используйте фильтр Map-> Tile ... для создания мозаичного шаблона 3x3 (в этом примере 128x128 x 3 = 384x384) для следующего шага, чтобы гарантировать, что наша текстура будет повторяться - мы оставим только центральную часть.

предыдущее изображение выложено плиткой 3 на 3

Используйте Blur-> Motion Blur ..., чтобы размыть текстуру вверх и сохранить только центр 1/3-й (обратно до 128x128)

шум плюс размытость

Умножьте обе текстуры вместе на GPU и используйте это для непрозрачности.

маска в сочетании с шумом

Затем анимируйте его, перемещая текстуру шаблона вверх по текстуре маски:

маска в сочетании с движущимся шумом

Сделано для анимационной части.

Затем вы можете применить карту градиента (черный -> красный -> желтый -> белый), чтобы придать ему огненные цвета:

форма логотипа с огненными цветами

Другие цвета могут быть использованы для создания ужасного голубого огня, светло-желтого поля ауры, более дымного эффекта и т. Д.

Теперь, если вы объедините это в качестве добавки к вашему логотипу и 3D-рендерину, вы получите желаемый эффект:

фон+ логотип+ Пожар=пылающий логотип на фоне

Эффект можно затемнить, отрегулировав яркость маски и / или рисунка, и / или цвета вершин, и / или градиентной карты цветов до заданного уровня.

Вы даже можете использовать два текстурированных рисунка вместе (Маска * Шаблон Огня * Шаблон Огня) на разных скоростях и направлениях, чтобы создать более сложный эффект огня.


Технически на N64 они могли создать аппроксимацию маски, используя треугольную сетку и цвет вершины вместо текстуры маски из-за аппаратного ограничения N64 в отношении текстур, но конечный результат тот же ((цвет вершины * текстура образца) vs ( маска текстуры * рисунок текстуры)).

Цветовой макет Vertex

Мы по-прежнему можем использовать цвет вершин, но 20 лет спустя мы можем упростить нашу жизнь и просто использовать 2 или более текстур, даже современные мобильные графические процессоры могут без проблем обрабатывать дополнительные 256x128 серых текстур.

Стефан Хоккенхалл
источник
3
Я думаю, что у нас есть победитель - спасибо @StephaneHockenhull, это именно та техника, которую я искал
nathanburns
7
Святая корова, это хороший ответ!
Джон Гордон
1
«страшный» или «призрачный»?
CJ Деннис
1
Это также имеет значение «ужасный на вид». «Не надевай галстук, это ужасно». Я интерпретировал ваше предложение как «Другие цвета могут дать очень плохой эффект или эффект дыма». «Призрачный» однозначен, даже если он не так силен, как хотелось бы.
CJ Деннис
1
Хотел бы я дать вам второе повышение за очень серьезный розыгрыш лошади.
распознаватель
2

Есть несколько способов, которыми ты мог бы сделать это, но с моей головы,

1) Имейте пламя + логотип все в одном изображении и по существу спрайт лист оживить его.

2) Визуализируйте логотип в слое пользовательского интерфейса и разместите вокруг него эффекты частиц слоя пользовательского интерфейса.

Судя по внешнему виду этого изображения, это выглядит так, как будто есть 3 слоя слоев щита и меча, пламени, текста (упорядочены сзади и вперед).

Будет много способов получить подобный эффект, который вы выберете, в зависимости от того, какой движок вы разрабатываете и что вы можете реализовать.

unknownSPY
источник
0

Если в ПЗУ есть небольшая текстура пламени, то я думаю, это делается с помощью какого-то эффекта частиц.

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

Вот пример использования эффектов частиц GameMaker для создания пламени, которое может дать вам некоторые мысли о потенциале этого подхода ...

http://martincrownover.com/gamemaker-examples-tutorials/particles-fire/

Тим Холт
источник
Спасибо за предложение - если предположить, что текстура не похожа на ту, что была в учебнике, с которой вы связались, а вместо этого заполнила пространство 32x32 без прозрачности, есть ли очевидный способ сделать это с частицами?
Натанбернс
Я бы просто создал свою собственную текстуру пламени для частицы, если у оригинала нет прозрачности. Мое предположение здесь состоит в том, что, если оригинальный заголовок не сделан с полным анимированным спрайтом (который включает в себя эффект пламени), это, вероятно, эффект частицы.
Тим Холт
@TimHolt Возможно, вы переоцениваете аппаратные возможности Nintendo 64. Для создания эффекта «твердого» пламени таким образом, вероятно, потребовалось бы намного больше частиц, чем аппаратное обеспечение могло визуализировать.
сумерки
1
@duskwuff - правда, но я не думаю, что пользователь реализует это на старом оборудовании. Ответ остается актуальным для любой приличной (современной) системы.
Тим Холт
@duskwuff вопрос в том, как это реализовать сейчас. Вопросы (и ответы) о том, как другие игры делали что-то, здесь не по теме. Аппаратные возможности N64 здесь не имеют значения. (См. Комментарий Джоша Петри к вопросу)