[Перевод] Создание процедурной анимации смерти при помощи автоматов падающего песка

В этом посте я покажу, как использовал автоматы падающего песка для генерации анимаций смерти монстров в моей игре Vagabond.

Автомат падающего песка — это клеточный автомат, симулирующий перемещение песчинок и создание куч песка под действием гравитации.

Правила просты:

  • Если ячейка под песчинкой пуста, то песчинка движется в пустую ячейку (см. (a)).
  • Если ячейка под песчинкой заполнена, но свободна ячейка внизу слева или внизу справа, то песчинка движется туда (см. (b)). Если свободны обе, то одна из них выбирается случайным образом.
  • В остальных случаях песчинка не движется.

Если вы хотите узнать об автоматах падающего песка подробнее, то изучите эту статью.

С помощью этих простых правил можно получить вот такие анимации:

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

Принцип заключается в том, чтобы считать непрозрачные пиксели изображения песчинками и заставить их падать, создавая кучу «песка» из трупа монстра. Единственное отличие от представленных выше правил заключается в том, что каждая песчинка теперь имеет цвет. Вот что мы получим:

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

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

Чтобы получить изображение из 3D-состояния клеточного автомата, я проецирую состояние в 2D, беря для каждой пары координат (i, j) первую непрозрачную ячейку, где переменная k выполняет итеративный обход слоёв. Вот результат для трёх слоёв:

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

При этом во время расщепления монстра при падении создаются дырки.

Далее я пропускаю некоторые кадры, чтобы анимации состояли ровно из 6 кадров. Вот готовый результат:

В среднем песчинки падают с постоянной скоростью, однако гравитация должна их ускорять. При желании для симуляции ускорения можно пропускать больше кадров в конце анимации.

Полный скрипт выложен на GitHub.

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

Let’s block ads! (Why?)

Read More

Recent Posts

Объем рынка нативной рекламы в Telegram составил 2 млрд руб. в 1 квартале 2024 года

Объем рынка нативной рекламы по итогам первого квартала 2024 года достиг 2 млрд руб. Такую оценку сделали платформа управления интернет-рекламой…

3 часа ago

Стартовал прием заявок на конкурс сайтов и приложений «Рейтинг Рунета-2024»

Стартовал прием заявок на Всероссийский конкурс сайтов и приложений «Рейтинг Рунета-2024». Участвовать могут и создатели, и владельцы проектов. Для приложений…

11 часов ago

VK купила 40% билетной платформы Intickets.ru

VK объявляет о приобретении 40% компании Intickets.ru (Интикетс). Это облачный сервис для контроля и управления продажей билетов на мероприятия. Сумма…

3 дня ago

OpenAI готовится запустить поисковую систему на базе ChatGPT

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

3 дня ago

Роскомнадзор рекомендовал хостинг-провайдерам ограничить сбор данных с сайтов для иностранных ботов

Центр управления связью общего пользования (ЦМУ ССОП) Роскомнадзора рекомендовал компаниям из реестра провайдеров ограничить доступ поисковых ботов к информации на российских сайтах.…

4 дня ago

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

1 неделя ago