«Сколь бы многочисленной ни была толпа, вьющаяся вокруг тебя, в последний миг ты останешься в гордом одиночестве. Сколь бы несметными ни были твои богатства, в финале ты предстанешь нищим. Сколь бы ослепительной ни казалась удача, её крылья непременно обернутся прахом. Сколь бы радости ты ни сеял на своём пути, урожай будет горьким.»
PULMO — это атмосферная казуальная головоломка от российской инди-студии North Lab, созданная Эмилем Исмайловым и Денисом Петровым.
Игра продолжает философские истины, заложенные в их предыдущем проекте, ритм-пазле ALVEOLE (2021), и становится второй частью трилогии, посвящённой пути человека.

Если ALVEOLE исследовала одиночество и смысл движения в предельно минималистичной среде, то PULMO обращается к теме взаимодействия личности с обществом.
В ALVEOLE игрок был заперт в большом колесе. В PULMO он покидает свой круг. Чтобы взаимодействовать с безликой толпой:
Вы не сражаетесь и не спешите — ваша задача тоньше: изменяя окружение, вы влияете на поведение людей, решая пространственные загадки, в которых толпа то помогает, то мешает, но всегда реагирует на ваши действия.
Каждый уровень — это не просто головоломка, а часть глубокого нарратива, выстроенного через тщательно проработанные катсцены и визуальные метафоры. Время здесь течёт медленно, победа и поражение не имеют значения — важен сам процесс, тихий диалог между игроком и игрой, наполненный смыслом и эмоциями.
Визуально PULMO выделяется уникальным стилем, сочетающим трёхмерную графику с нарисованной от руки дудл-арт эстетикой. Музыкальное и звуковое сопровождение усиливает погружение, создавая ощущение уединённого странника, бросающего вызов молчаливой массе в череде загадочных испытаний.
Полная версия игры PULMO вышла в Steam 27 сентября 2025 года, где также доступна бесплатная демо-версия. Однако стоит уточнить: демо представляет собой повествовательный кликер, где игрок нажимает, чтобы герой прыгал на скакалке и получал фрагменты информации об основной игре.
Как поясняют авторы, такой формат был выбран, чтобы передать атмосферу и философский подтекст PULMO, не раскрывая при этом её истинного геймплея — глубокой пространственной головоломки, ожидающей тех, кто готов пройти этот недолгий, но пронзительный путь от начала до конца.
Кстати, чудесный саундтрек проекту подарили Артём Чубарков (archivariouss) и Арсений Шадрин (RocketMan.). Его авторы выложат отдельно позже. Как пишет сам Артём об игре:
"Господи, какая же классная вещь, вы бы знали... Невероятно медитативная, размеренная, ненапряжная вещь. Никакого "соулслайк" челленджа, только затягивание в атмосферу и внутренние концепты игры. Всего 10 уровней, проходится за 30 минут, с учётом, что я застрял немного на двух последних. У игры есть много красивых посылов, которые интересно поискать. И конечно, музыка, которую мы с Арсением написали, создала очень неплохую атмосферу и фон для прохождения. Я очень доволен нашей работой.
Огромное спасибо дорогим разрабам, и моему гениальному коллеге за этот проект, за этот опыт. Я очень рад быть частью PULMO."
Технические решения при создании PULMO
North Lab поделились интересными фактами разработки игры. Ниже приводим полное цитирование.
"Всем доброго времени суток! Сегодня хотелось бы затронуть тему технических решений, которые мы применили в PULMO, с какими сложностями сталкивались и как их решали."
Эффект «нарисованного» кадра
Думаю, ни для никого не секрет, что игра 3Д, хоть и очень сильно пытается выглядеть как 2Д. Этим стилем мы вдохновились от игры KIDS еще в первой части - ALVEOLE. И тут сразу встает вопрос, как сделать 3Д игру так, чтобы каждый кадр ощущался так, как будто бедолага художник специально для вас его нарисовал (и так 15 раз в секунду)?

Во-первых, для себя мы решили, что все модели, все текстуры должны быть Ч/Б и быть такими, как будто их нарисовали, не упарываться в пайплайн с хайполи, не упарываться в Substance Painter, максимально простые и читаемые формы.

Во-вторых - добавить аутлайн. Для аутлайна еще с первой части используем QuickOutline. И на самом деле в ALVEOLE нам его хватало с головой, но когда мы начали работать над PULMO начались проблемы.

Самой большой проблемой было что если несколько объектов с аутлайном подходят слишком близко, то их маска начинает сливаться. Это происходило из-за того, что шейдер работает через Stencil, для каждого объекта отрисовывается меш с увеличенным скейлом, а потом при помощи маски накладывается сверху основной меш.
К сожалению, это все было привязано к одному Stencil слою. Мы доработали шейдер и скрипт, что позволяло нам назначать отдельно для каждого объекта свой слой. Но решение до сих пор имеет один недостаток, максимальное количество слоев - 255, мы конечно столько актеров одновременно не показываем, но кто знает что будет в будущем?

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

Возможно стоит сделать форк репозитория аутлайна и добавить наши доработки для общего пользования.
В-третьих, имитация неровных линий и ограничение ФПС. Так как люди не роботы и не умеют рисовать абсолютно прямые линии, было принято решение добавить экранный дисторшн, чтобы имитировать руку художника. Помимо этого, мы сделали ограничение ФПС в 15 кадров (только визуально, игра работает на 60+ ФПС). Это всё было в ALVEOLE скажите вы, и будете правы, но реализация совершенно другая.
Раннее для дисторшена мы использовали экранный шейдер, а для ограничения ФПС мы создали систему из двух камер, одна занималась отрисовкой, а вторая получала текстуру от первой камеры и 15 раз в секунду ее обновляла. Решение было сомнительное, но рабочее. В PULMO хотелось что-то более приземленное и адекватное. Теперь, что и дисторшн и ограничение ФПС происходит через шейдер (и аберрация тоже).
Мы назвали это PULMO Effect. Теперь камера при вызове OnRenderImage не обновляла кадр, если не прошло достаточно времени. Очень просто и работает без двух камер и костылей(еще мам, пап и кредитов).

Именно так мы добились нужного нам стиля. Да, есть еще над чем поработать, и дать игрокам больше возможностей для настройки картинки.
Вода
Если вы были внимательны и смотрели наши трейлеры, то могли обратить внимание как поменялась вода.
Согласитесь, в первоначальном варианте выглядела плоско, и сильно выделялась от мира, к тому же, не ощущалась как вода, а как столешница на кухню. Для того, чтобы придать ей виду мы поработали над ее контрастностью, добавили отражений с дисторшеном(да, опять он), поработали с береговой линией и добавили реалтайм пену от объектов.

Для пены и береговой линии существует две отдельные текстуры. Если для береговой линии это просто картинка из фотошопа, то для реалтайм пены было написано решение, которое в режиме реального времени создает текстуру и вносит в нее изменения в зависимости от объектов, которые с ней взаимодействуют.
Добавлю сразу, да, манипулировать текстурами на ЦПУ очень дорого, возможно у меня хватит мозгов в будущем чтобы сделать всё через шейдер. К счастью, хватило мозгов оптимизировать скрипт и побороть просадки. Фокус очень простой, во-первых, текстура не обрабатывается каждый кадр и мы можем это позволить, так как у нас есть ограничение в 15 ФПС, во-вторых, текстура обрабатывается по чанкам, система видит в каком чанке надо вносить изменения и только его и обрабатывает.
Таким образом, мы получали реал-тайм пену без просадок, а игрок получил красивую воду. Результат меня очень порадовал, особенно Дениса.

Лица
При запуске, игрока встречают наши лица.

Тут всё довольно просто и интересно одновременно. Можно было пойти путем маски UI, и сделать отдельную текстуру для аутлайна, но вместо этого мы пошли путем шейдеров. Для отрисовки используется только две текстуры: само лицо и паттерн цветов. Аутлайн, маскинг и движение цветочков реализовано через шейдер. Также, для добавления плавного появления лица используется градиент, который работает как маска для всего. And all of this just works, нам только остается крутить слайдеры.
На удивление, когда я запустил игру на своем 11 летнем ноутбуке, эти лица сильно просадили ФПС)) Но в итоге удалось эту решить эту проблему.
Катсцены
Большая часть катсцен мы реализовали при помощи Timeline и возможностей Unity. Но, катсцена с пустыней и концовка сделаны через видео, потому что некоторые вещи мы или не смогли бы реализовать, или просто не успели бы.

Прожектор

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

На этом уровне мы решили взять паузу и вернуться к нему позже, за 2 недели до релиза мы вернулись к нему и идея пришла. Решили, во-первых, добавить анимацию персонажу, во-вторых, доработали освещение и, в-третьих, добавили рандомные волны с краев прожектора. Как же мы это сделали? На самом деле, это одно из тех решений, которое пришло просто случайно, при этом оно очень простое и элегантное, и им хочется гордиться.
Для начала сделали меш в виде кольца и отметили в нем внутренние вершины белым цветом.

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

Музыке было уделено отдельное внимание, ведь она создала половину (если не больше) ощущений от игры. Каждый трек был разделен на 3 части: интро, игровой-луп и концовка.

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

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