Пилю новые эффекты взрывов в свой космосим ч2: Как углубить эффект
Ничего не могу с собой поделать, но уже третий день идёт с момента, как я решил полностью с нуля создать спец-эффекты разгерметизации и уничтожения кораблей в моей игре.
В первой статье я кратко пробежался по основе эффекта, на которой строится вся его механика и физика - разделение корабля на части и генерация срезов корпуса, которые являются источником для 90% веселья, которое происходит за считанные секунды, пока корабль доживает последние мгновения своей истории.
Сегодня я продолжу погружать вас в контекст тонкостей создания этого эффекта, возможно вам будет интересны мои наблюдения и выводы. :)
И начинаем мы с переделок
Первое что я понял, когда вернулся к работе после перерыва на сон - это неприятности в основном элементе эффекта:
Этот маленький но неприятный нюанс застопорил всю работу - нужно было срочно переписать алгоритм генерации сетки. Кружка кофе, час работы и результат уже лучше:
Из чего строится эффект?
Прежде чем набрасывать системы частиц, подбирать текстуры, создавать анимации - нужно определиться со структурой эффекта, акцентами, драматургией и еще множество слов которые сюда можно приписать. Одним словом - нам не нужна просто вспышка, нам нужен процесс разрушения корабля, и одна из самых важных задач - красиво должно быть и вблизи и вдали.
И если в предыдущей статье вся соль была только в одной детали - в горящих кусках корабля, то теперь нам нужно создать акцент, обратную связь, правильные ощущения. Немаловажно создать эффект который каждый раз будет играть разными красками, даже если мы взрываем два одинаковых корабля.
Одной из причин всей затеи с взрывами послужила вот эта сцена из фильма "Интерстеллар" - да и весь фильм, в целом, сильно повлиял на тот факт, что Spacerift вообще существует.
Я подошел к работе не последовательно. Просто детализировал разные аспекты по мере осознания и понимания того, чего именно не хватает. Я не сильно опытен в подобных делах и чтобы сделать хороший эффект, нужно набить руку, потратить время. И ещё немного кофе :)
Маленькое отступление для понимания всего процесса: почти все частицы и объекты берут начало от вышеупомянутых разрезов корпуса корабля. Все обломки, пламя и дым, за исключением пары эффектов - вылетают из "внутрянки". Не знаю зачем я это подчеркнул, но возможно так будет интереснее читать дальше.
Итак, погнали делать красиво
Разрушение
Здесь я поставил перед собой задачу вывести в акцент внутренности корабля, которые должны молниеносно покидать эпицентр дискотеки.
И хоть корабль мы уже порвали, это еще пока не решает поставленную задачу. Следующий шаг - добавить чуть менее крупные обломки(они уже не являются частью модели корабля, это просто набор абстрактного мусора). Но вот незадача: они быстро теряются во мраке бесконечной пустоты.
Для того, чтобы подчеркнуть все детали и внутренний мир нашего подопечного, первым делом я создаю плоскость с текстурой свечения и помещаю её на каждый разрез корпуса, параллельно самому разрезу. То есть мы как бы имитируем объёмный свет который вырывается из эпицентра.
Таким образом у нас получается некая основа эффекта, которая выделяет сам корабль на тёмном фоне - мы видим яркое контрастное пятно. И сразу же добавляем следующий инградиент блюда - большую плоскость, но уже с текстурой чёрных мелких частиц обшивки и других кусочков корабля. (Да, плоскость мы делаем чтобы поберечь железо потенциального наблюдателя данного ивента - нашего игрока).
И на этом моменте я начинаю понимать, что детализация у эффекта уже появилась, но необходимо сделать яркое начало сего мероприятия- некий хлопок и точку отсчёта, ведь это всё таки должен быть взрыв.
Инициация разрушения, первая вспышка
Здесь стоит остановиться на секунду и указать на важный нюанс - мы хотим сделать взрыв ярким, но в то же время, нельзя увлекаться. Если мы добавим много пламени или дыма - мы мгновенно стираем акцент на деталях, которые уже сделали выше. Этот момент, описанный двумя предложениями, на самом деле стоил мне много времени, потраченного на раздумья о том, как же всё это уместить в одной-двух секундах всего спец-эффекта.
Если сократить всё до простого, то вот что я на эту тему придумал:
1. Вспышка и пламя должны появиться до основного разрушения и не перекрыть собой остальные частицы
2. Вспышка и пламя получают только часть инерции корабля, оставаясь позади него, дополнительно фиксируя момент входа в стадию разрушения.
3. Поскольку я очень люблю выкручивать HDR свечение в материалах, вспышку нужно сбалансировать так, чтобы она не привлекла на себя всё внимание из-за моей любимой пост-обработки с блюмом и высоким контрастом.
Инерция и кульминация
Хоть начало эффекта мне начало нравиться чуть больше, при тестировании в режиме игры я всё ещё не получил нужного эффекта. Всё как-то сухо и блекло. Даже врывы из прошлой версии игры были хоть и мыльными, полностью однородными и не интересными - но они были яркими. Конечно, всё дело в расстоянии - в игре мы смотрим на взрыв с 1000-1500м дистанции. Там все наши старания и мелкие частицы просто сживаются в одну точку. Здесь настало время применить козырь в рукаве, который одновременно с тем что просто яркий - ещё и физически достоверный, хоть и, возможно, слегка преувеличен.
Надо жечь кислород. Нужно пламя. Яркое, резкое, как удар серпом, хаотичное, вырывающееся наружу из тех кусков корабля, что уже отлетели на 30м вперёд, пока мы смотрели на вспышку.
Помните я вначале переписывал алгоритм создания среза? Так вот, на самом деле я еще в тот момент планировал много поджигать.
Поколдовав пару часов, получилось создать примерно то, что хотел. В процессе снова столкнулся с проблемой акцентов - вырывающееся пламя перекрывало разрушение корабля, да и анимацию увеличения и резкого появления пришлось долго балансировать так, чтобы это прилично смотрелось на кораблях разного размера (я говорил что создаю один эффект на все случаи жизни, который генерируется исходя из физических параметров кораблей и результата их разрыва на части?)
Так же хочу коротко упомянуть тот факт, что корабли взрываются на разной скорости. И на маленькой скорости были проблемы - обломки улетали от корабля слишком медленно, а пламя вырывалось огромное. В итоге я еще и прописал зависимость размера частиц от их импульса. По итогу получилось еще интереснее. Когда я смотрю на корабль, который взрывается на большой скорости, даже немного переживаю за него!
Итак, пора посмотреть на результаты труда. Тестовая сцена, первым делом протестируем на маленькой скорости - 10 м/с (это если нас подстрелили во время стыковки с доком)
Теперь немного увеличим скорость - до 50 м/с, а так же добавим вращения - всё таки в игре мы чаще подстреливаем пирата в движении.
Ну и еще один этап тестирования - скорость около 140 м/с, вращение тоже выкручиваем :)
Так же записал немного геймплея непосредственно в игре - с админскими пушками, у которых имбо-урон и сломанные SFX :)
Продолжение следует
Не могу сказать что я хочу на этом закончить - есть еще несколько аспектов которые нужно доделать:
- Отстреливающие модули корабля пламенем цвета рарности (синий генератор - синяя вспышка и тд)
- Добавить к отрезанным кускам корабля обломки на джоинтах, либо с простой анимацией, чтобы добавить массы и подчеркнуть физику происходящего
- Отдельно проработать разрушение больших кораблей - пока что на них этот эффект даже показывать нельзя.
Возможно еще доработаю текстуры, побалансирую параметры и добавлю еще какие-то детали.Об этом напишу третью статью и на этом завершу работу и над эффектом, и над обновлением, которое я приготовил игрокам на новый год :)
Спасибо за внимание! Как всегда - если вам интересен проект, приходите ко мне в телеграмм канал, смотрите на игру в стиме и вкплей.