Три в ряд, эксперименты с нейронками

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

Немного предыстории. Начинал своё путешествие по игровому миру ещё с Atari и ZX Spectrum, потом были первые консоли — NES, Sega. Но больше всего запомнился настоящий прорыв в графике, когда появилась платформа 3DO. Просто крутейшие синематики по тем временам. Позже это всё перебила PS и Nintendo 64, но сейчас я хочу остановиться именно на 3DO.
В то время были распространены игровые салоны, в которых мы ломали джойстики на турнирах. Мне тогда было лет 15, и я как раз подрабатывал после школы в одном из таких салонов. Среди всего разнообразия игр на платформе 3DO мне особенно запомнилась игра Trip'D. Почему? Да просто в ней было всё не так, как мы привыкли. Странная музыка, странные персонажи, и самое главное — это была одна из первых игр в жанре «три в ряд», да ещё и PvP, с которой мне посчастливилось тогда познакомиться. Короче, выбор для эксперимента пал именно на неё.

17029900-tripd-3do-the-blocks-are-well-stacked.png

Механика игры не очень сложная. Есть блоки пяти разных цветов. Блоки падают в стакан, как в тетрисе, тайлами по три блока. Наша задача — собрать 4+ блока одного цвета вместе, тогда они пропадают, место в стакане освобождается, очки прибавляются. Есть и небольшая особенность: если собрать блоки в квадрат 2×2, они трансформируются в один мега-блок. Ну а так как это ещё и PvP, у мега-блоков есть определённые свойства. Их уничтожение запускает разные сценарии, которые воздействуют либо на твоё игровое поле, либо на поле противника: уничтожить нижний ряд, скинуть ряд сверху, отправить какой-нибудь мега-блок сопернику и т. д.
Я собрал материалы по игре и сделал небольшой документ, в котором описал базовые механики: как должно выглядеть игровое поле, как должны падать и вращаться тайлы. Заодно решил сразу проверить внедрение анимации на спрайт-щитах. Передал этот документ товарищу Igor Belenko, и он на его основе собрал первый прототип. Впоследствии он ещё много раз помогал мне с работой над этой игрой и помогает до сих пор.


Далее начались поиски того, какими должны быть персонажи, игровое поле и т. д., с учётом того, что теперь это будет не консольный, а мобильный проект. То есть всё нужно уместить в вертикальный, продолговатый экран. А это у нас не просто сингл-тетрис, это ещё и PvP.
Я пытался генерировать что-то в нейронных сетях, брал персонажей из других проектов, проводил эксперименты — как быстро делать анимации персонажам и так далее. В итоге набрал кучу всякого мусора и попытался представить, как всё это должно выглядеть в финале.

2026-01-21_14-52-53.jpg

Несмотря на то, что очень хочется сделать объёмных, детализированных персонажей, студийно подсвеченных, контрастных и т. д., этого делать нельзя. Они будут сильно рябить, и пострадает читаемость на игровом поле. Надо сказать, что «три в ряд» — это постоянный компромисс между тем, что хочется, и тем, как надо. У жанра есть свои стандарты, выработанные годами.
Первые персонажи были с разными волосами, рогами, какими-то ножками и лучами. От всего этого я методично избавлялся, максимально резал форму, приводя её всё ближе к простому квадрату с нужным мне цветом.

Trip_02.png

Один из стандартов жанра — статичность фишек на игровом поле. Они могут взрываться, падать и т. д., но сами фишки должны оставаться статичными, так игрок их лучше считывает. Я это понимал, но у меня же живые персонажи — а значит, идём нарушать сложившиеся устои 🙂
Как сделать персонаж живым? Нужна анимация. Как сделать анимацию? Можно пойти классическим путём: кости, нарезка персонажа на слои, отдельные веки, полость рта, риг, ключевые кадры. А можно отрисовать спрайтовую анимацию покадрово, разложить её на спрайт-щит и потом крутить, например, через шейдер. Этот способ я и выбрал. Только решил не рисовать всё руками, а попросить это сделать нейронки.
Мне нужна цикличная анимация персонажа в пределах одной клетки, без выхода за границы, и так, чтобы это потом легко собиралось в спрайт-щит. Я взял персонажа, поместил его на фон, который по цвету сильно отличается от самого персонажа (если персонаж зелёный — фон красный, если персонаж красный — фон зелёный и т. д.), после чего скормил всё это Midjourney с простым промтом: персонаж открывает рот, моргает глазками, покачивается и т. п.
Можно воспользоваться чем-то другим, собрать свой пайплайн, например в ComfyUI, или пойти ещё каким-то путём. Но в этом плане мне понравился Midjourney: картинка получается чёткой, без сильных артефактов и мыла.


На выходе получаем анимацию длиной 121 кадр, из которых один — начальный или конечный — лишний, так как они повторяются. Кадрируем персонажа, подрезаем всё ненужное пространство. Получаем секвенцию, выкидываем один кадр — остаётся 120. Из них можно собрать спрайт-щит 12×10. Если для вас это много, можно удалить каждый чётный кадр — получите 60 кадров, и так далее. Я решил использовать все 120 кадров в этом случае.
Собирать спрайт-щит руками? Нет, не наш выбор. Загружаем секвенцию в Photoshop, используя сценарий сборки файлов в стек. Дальше идём в ChatGPT и просим написать скрипт, который в Photoshop по заданным нами критериям (размер блока и количество столбцов) автоматически соберёт нужную текстуру из слоёв стека. Нам остаётся только удалить фон.

Blue.png

Имея уже более-менее продуманный рабочий процесс, собрать, например, мутацию — когда 4 блока в квадрате превращаются в 1 блок — труда не составляет.


Закидываем всё это в Unity, собираем простейший шейдер для проигрывания спрайт-щита — и вуаля.

2026-01-21_17-33-02.jpg

Для работы над самим проектом я плотно использую Cursor AI. Я вообще ни разу не программист, но это чудо чудесное очень серьёзно развязало мне руки. Я могу создавать и модифицировать в проекте все необходимые инструменты и скрипты, и это уже совсем другая история, о которой, надеюсь, смогу рассказать вам как-нибудь в следующий раз.
Билд с тем, что получилось, можно скачать под Android здесь. На этом не останавливаюсь — эксперимент явно продолжится. Есть ещё много проблем: нужен интерфейс, нет SFX и VFX, попадаются баги в игре, нет меты, надо реализовать бусты и т. д. На всё это предстоит потратить ещё не один час жизни…


661 0 850 7
1
2026-01-26
Симпатяги получились класс, была ещё подобная игра называлась "Доктор марио". Но вы пошли дальше анимация класс 👍! А я раньше в "R-TYPE" ЗАЛИПАЛ вот это были приключения на каждом уровне босс!
RENDER.RU