Пилю новые эффекты взрывов в свой космосим ч2: Как углубить эффект

Если в игре есть что-то, что часто мельтешит у игрока перед глазами - надо сделать его глазам приятно!
Если в игре есть что-то, что часто мельтешит у игрока перед глазами - надо сделать его глазам приятно!

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

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

Мне было приятно увидеть позитивные отзывы, советы и обратную связь под первой статьёй  - большое вам спасибо! Некоторые советы я учёл и нашел способы их применения.
Мне было приятно увидеть позитивные отзывы, советы и обратную связь под первой статьёй  - большое вам спасибо! Некоторые советы я учёл и нашел способы их применения.

Сегодня я продолжу погружать вас в контекст тонкостей создания этого эффекта, возможно вам будет интересны мои наблюдения и выводы. :)

И начинаем мы с переделок

Первое что я понял, когда вернулся к работе после перерыва на сон - это неприятности в основном элементе эффекта:

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

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

Оставляя за скобками еще пару нюансов с геометрией эффекта, можно сказать что с этим на сегодня я закончил - можно продолжать работу.

Из чего строится эффект?

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

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

И хоть в тестовой сцене взрывы выглядели вполне сносно, то в условиях игры  - они не вызывали у меня никаких эмоций, кроме одной: надо экспериментировать и развивать идею

Одной из причин всей затеи с взрывами послужила вот эта сцена из фильма "Интерстеллар" - да и весь фильм, в целом, сильно повлиял на тот факт, что Spacerift вообще существует.

Одна из задач нового эффекта - смоделировать разрушение корабля изнутри, соблюдая некую простую последовательность: повреждение, инициирующее хлопок>разгерметизация и разрушение>выгорание кислорода>инерция и обломки

Я подошел к работе не последовательно. Просто детализировал разные аспекты по мере осознания и понимания того, чего именно не хватает. Я не сильно опытен в подобных делах и чтобы сделать хороший эффект, нужно набить руку, потратить время. И ещё немного кофе :)

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

Итак, погнали делать красиво

Разрушение

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

И хоть корабль мы уже порвали, это еще пока не решает поставленную задачу. Следующий шаг - добавить чуть менее крупные обломки(они уже не являются частью модели корабля, это просто набор абстрактного мусора). Но вот незадача: они быстро теряются во мраке бесконечной пустоты.

Да, если глянуть скриншот из первой <a href="https://dtf.ru/indie/3285756-pilyu-novye-effekty-vzryvov-v-svoi-kosmosim-ch1-kak-vam-promezhutochnyi-rezultat" rel="nofollow noreferrer noopener" target="_blank">статьи</a>, всё выглядит красиво. А вот так выглядит, если отдалить камеру :)
Да, если глянуть скриншот из первой статьи, всё выглядит красиво. А вот так выглядит, если отдалить камеру :)

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

Кстати, во многих аспектах мне помогает товарищ с никнеймом Antonio Di - здесь он нарендерил мне прикольные текстуры свечения. Какое то волшебство вообще делает человек.:)

Таким образом у нас получается некая основа эффекта, которая выделяет сам корабль на тёмном фоне - мы видим яркое контрастное пятно. И сразу же добавляем следующий инградиент блюда - большую плоскость, но уже с текстурой чёрных мелких частиц обшивки и других кусочков корабля. (Да, плоскость мы делаем чтобы поберечь железо потенциального наблюдателя данного ивента - нашего игрока).

Чтобы было ощущение разлёта частиц, плашка получает анимацию увеличения в размере.

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

Инициация разрушения, первая вспышка

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

Если сократить всё до простого, то вот что я на эту тему придумал:

1. Вспышка и пламя должны появиться до основного разрушения и не перекрыть собой остальные частицы

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

3. Поскольку я очень люблю выкручивать HDR свечение в материалах, вспышку нужно сбалансировать так, чтобы она не привлекла на себя всё внимание из-за моей любимой пост-обработки с блюмом и высоким контрастом.

Пламя генерируется по форме всего корабля
Пламя генерируется по форме всего корабля
По итогу добавлены ещё "искры", которые линиями расходятся по сторонам. Они так же получают около 20-40% инерции корабля, в отличие от ореола свечения и мелких обломков.
В движении выглядит как-то так. Если у вас возникают сомнения по поводу искр - это нормально. У меня тоже они есть :)

Инерция и кульминация

Хоть начало эффекта мне начало нравиться чуть больше, при тестировании в режиме игры я всё ещё не получил нужного эффекта. Всё как-то сухо и блекло. Даже врывы из прошлой версии игры были хоть и мыльными, полностью однородными и не интересными - но они были яркими. Конечно, всё дело в расстоянии - в игре мы смотрим на взрыв с 1000-1500м дистанции. Там все наши старания и мелкие частицы просто сживаются в одну точку. Здесь настало время применить козырь в рукаве, который одновременно с тем что просто яркий - ещё и физически достоверный, хоть и, возможно, слегка преувеличен.

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

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

Помните я вначале переписывал алгоритм создания среза? Так вот, на самом деле я еще в тот момент планировал много поджигать.

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

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

Так же хочу коротко упомянуть тот факт, что корабли взрываются на разной скорости. И на маленькой скорости были проблемы - обломки улетали от корабля слишком медленно, а пламя вырывалось огромное. В итоге я еще и прописал зависимость размера частиц от их импульса. По итогу получилось еще интереснее. Когда я смотрю на корабль, который взрывается на большой скорости, даже немного переживаю за него!

Итак, пора посмотреть на результаты труда. Тестовая сцена, первым делом протестируем на маленькой скорости - 10 м/с (это если нас подстрелили во время стыковки с доком)

В какой то момент у меня заболела голова - весь день слушал и смотрел на это всё

Теперь немного увеличим скорость - до 50 м/с, а так же добавим вращения - всё таки в игре мы чаще подстреливаем пирата в движении.

Пламя здесь видно чуть лучше - да и я забыл сказать, я к нему ещё дым прикрутил, чёрненький

Ну и еще один этап тестирования - скорость около 140 м/с, вращение тоже выкручиваем :)

Кстати в видео есть еще звук взрыва

Так же записал немного геймплея непосредственно в игре - с админскими пушками, у которых имбо-урон и сломанные SFX :)

Продолжение следует

Не могу сказать что я хочу на этом закончить - есть еще несколько аспектов которые нужно доделать:

- Отстреливающие модули корабля пламенем цвета рарности (синий генератор - синяя вспышка и тд)

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

- Отдельно проработать разрушение больших кораблей - пока что на них этот эффект даже показывать нельзя.

Возможно еще доработаю текстуры, побалансирую параметры и добавлю еще какие-то детали.Об этом напишу третью статью и на этом завершу работу и над эффектом, и над обновлением, которое я приготовил игрокам на новый год :)

Спасибо за внимание! Как всегда - если вам интересен проект, приходите ко мне в телеграмм канал, смотрите на игру в стиме и вкплей.

2020
33
4 комментария

Вдохновение Интерстелларом? Уважаю)))

1

камерой потрясти бы)

Я как раз отключил тряску) иначе эффект не видать)