Я делаю медитативную игру про каплю краски: настоящая физика воды, акварель в шейдерах и музыка, которую играет игрок
Друзья, всем привет! Меня зовут Илья, я техноблогер и основатель ArtGeneration.me. Три недели назад я воскресил свою мобильную игру 12-летней давности - перетащил её со старого мёртвого движка на Godot и разослал по сторам. А потом сел делать новую, уже с нуля. Выше - четыре минуты живого геймплея, смотрите со звуком, там половина смысла. Игра бесплатная, билды под винду, macOS и линукс - ссылки в конце статьи.
Началась она с лава-лампы
Я всегда любил лава-лампы. Есть у меня проект с заставками на рабочий стол, ему всего пара лет, и один из первых скринсейверов, что я туда завайбкодил, была как раз лава-лампа. А ещё мне всегда хотелось поиграться с физикой. Так вот, эти слипающиеся капли называются метаболами - и ровно та же математика крутится сейчас в моей новой игре.
Почему вообще игра
Когда-то я начинал свой путь в IT с твёрдым намерением делать игры. Не задалось: своя студия была, игры издавал, но в итоге на геймдев я обиделся и ушёл в управление проектами и маркетинг. А сейчас у меня есть возможности делать всё самому. Я всегда восхищался инди-разработчиками, которые могут в одиночку создать целую игру от и до - и вот я вырос, и теперь сам такой. Да, до гениальности мне пока далеко, может быть. Но у меня есть интересные идеи, и с одной из них я планирую выйти в Steam.
Дизайнером я себя не считаю, поэтому в 3D не полез. Все ставки сделал на идею с акварельными шейдерами и водой.
Что это такое
«Osmo» - медитативная игра про каплю краски в акварельной луже. Завязка: ребёнок рисовал красками, макал кисточку в стакан и убежал, а сквозняк опрокинул воду с красками на стол. Игрок - кусок краски: плаваешь, глотаешь другие капли, растёшь.
Врагов нет и никто тебя не гонит, но и совсем уж курорта не будет: ты постоянно сохнешь. На сухой бумаге тело осыпается по кромке, салфетка пьёт воду ещё быстрее, по стеклу скользишь. Умереть можно - просто для этого надо постараться. А на месте гибели остаётся пятно засохшей краски: лист помнит, где ты не дотянул до воды. Провал при этом не обрывает сессию - впитался и собрался заново.
Дольше всего я искал форму
Что игре нужна цель, я знал и так - просто не сразу нашёл способ её дать. Начиналось всё как чистая песочница: плаваешь, ешь, растёшь, красиво. И этого не хватило: цикл «плыви и ешь» исчерпывается минут за десять.
Первым решением было «набрал размер - партия закончилась». Стало только хуже: игра обрывалась ровно на числе частиц, где бы игрок ни находился. У партии не было конца, была отсечка.
А потом появились ворота. Теперь набранный размер не заканчивает игру, а разводит створки: на столе лежит устройство - диафрагма, клин, затвор, задвижка или люк - оно открывается, когда ты дорос, и дальше надо доплыть до него и завести себя в воронку. Концовку делает не число, а дорога и осознанное действие.
Вода тут не нарисована, а посчитана
Жидкость считается частицами целиком на видеокарте, компьют-шейдером. Потолок - 592 000 частиц. Слоя два, и они не смешиваются: вода лужи и краска, то есть герой и еда. Краска лежит НА луже, а не растворяется в ней. Замер на моей 4090: 0.41 миллисекунды на кадр.
Единственное, что нарисовала нейросеть - это предметы
Ну, не считая кода, конечно. Всё остальное на экране рисует шейдер, ни одного спрайта. И акварель собрана по физике краски: поглощение света поверх белой бумаги, затемнение кромки, оседание пигмента в зерне бумаги, приливные кольца от влажности, обратные затёки, белильные блики гуашью.
Вещей почти три сотни, самой разной тематики - монеты, ключи, расчёски, крышки, кассеты, посуда, инструменты. Каждая снята «фотографически» сверху, вырезана по пурпурному хромакею, и ей посчитаны карта глубины и карта столкновений. По ним тело реально катится: с ребра крышки люка сползаешь, между зубцами расчёски застреваешь.
Лежит всё в натуральную величину: поле - лист A1, монета 24 мм, диск 120, лист стекла 300, и всё это соотносится честно. Отсюда то самое макро и, по-моему, какой-то oddly satisfying в разглядывании обычных вещей вплотную.
Звук: живой банк плюс настоящий синтез
Как фанат музыки я не мог обойти эту тему стороной. После Булки - моей платформы для лайвкодинга музыки - опыт в этом вопросе у меня был приличный, так что я основательно замарочился. Вся озвучка в игре программная: музыку играют настоящие синтезаторы прямо внутри игры, а не готовые записанные треки.
Инструменты при этом живые - банк Versilian под CC0, настоящие записи: 7399 файлов, 134 инструмента, в сборку едет выборка на 2150. Принципиально одна студия и один тракт, иначе тембры не сходятся ни по тону, ни по уровню и партия рассыпается. Нота играется ближайшей записанной, дубли идут по кругу - иначе повтор опознаётся ухом как машина.
А вот звуки воды - чистый синтез, и модель там одна на всё: звучит не вода, а пузырёк в ней. Схлопывающаяся полость звенит затухающей синусоидой с частотой, ползущей вверх: мелкий пузырёк - высоко и коротко, крупный - низко и долго. Капля это один пузырёк, плеск - россыпь из десятков, глоток - крупная полость с придыханием. Шум с фильтром так не умеет, он шипит, а не булькает.
Третий слой - гранулярный синтез, он держит всё непрерывное: ход в воде, трение по сухому, шелест высыхания, впитывание. Живая запись режется на зёрна по 12-180 мс и пересобирается заново.
И да, это ритм-игра. Только наоборот
В обычной ритм-игре музыка играет, а ты попадаешь в её ритм. Здесь музыка мелодию не играет вовсе: она даёт ритм и аккорды, а мелодию своими действиями ведёшь ты. Съел каплю - прозвучала нота, и она всегда попадает в текущий аккорд. Ешь подряд - складывается мелодия, и ошибиться в принципе невозможно, фальшиво не выйдет.
Сделано так намеренно: когда мелодию ведёшь сам, ты незаметно для себя начинаешь ловить ритм. Проверьте на себе и напишите в комментариях, получилось ли. А если не пошло - в игре есть авторитм: на паузе, слева сверху значок волны. Включаете, и персонаж делает всё сам. Но это скорее режим чистого расслабления: приятнее, когда звук издаёшь ты, особенно когда нащупываешь новую последовательность и мир вдруг начинает звучать по-новому.
И на максимум мир звучит именно тогда, когда ты его активно покоряешь - жмёшь на все кнопки и ешь капли. В спокойном режиме музыка звучит минимально и этим сама подталкивает тебя действовать.
Я хотел сделать добрую игру
Такую, которая не мучает игрока и не вызывает стресса. Стресса в нашем мире и без того хватает: игру, которая вас выбесит, вы найдёте без труда. А сможете ли найти ту, которая вас успокоит? (Postal 2 в режиме апокалипсиса не в счёт.)
Вот я и постарался сделать именно такую. Поэтому многого от неё не ждите: это то самое своеобразное задротское инди, которое поймут не все. Но я очень надеюсь, что своего игрока она найдёт.
Три недели и 413 коммитов
Разработка началась в начале августа - хотя сама идея давно сидела у меня в голове. Сегодня в проекте 413 коммитов и около 32 тысяч строк кода и шейдеров. Движок Godot, чистый GDScript, ни одного C# и ни одного нативного расширения: всё, что должно быть быстрым, вынесено на видеокарту.
И да, это пока не полноценная игра, а скорее демо и концепт. Работы ещё много: улучшить музыку, сделать поинтереснее уровни, добавить больше событий, да и физика иногда чудит. Но мне искренне нравится то, что получается.
Попробуйте сами
Я собрал три билда - для винды, macOS и линукса: планы у меня на Steam, поэтому стараюсь сразу делать кроссплатформу. Игра полностью бесплатная, я ничего лучше не придумал как сложить файлы в тг, подписаться туда не надо, качать:
Поиграйте и расскажите, как она вам: чего бы добавили, какие есть идеи. Наверняка я не один такой аутист, которого успокаивает игра с физикой и музыкой.
А вот на мой личный телеграм канал подписаться можно, там я рассказываю про нейросети и другие свои преокты. Всех обнял!
















