Как стать автором
Обновить

Drawn Story: распознавание изображений как основа игровой механики

Время на прочтение 4 мин
Количество просмотров 8.5K


О чем игра?


Кратко игру Drawn Story можно описать как квест, в котором вместо того, чтобы искать необходимые для продвижения по сюжету предметы, нужно эти предметы рисовать самому.

Это игра о мире, нарисованном на листе бумаги. Вы управляете двумя персонажами: одним из человечков, живущих в этом мире, и художником, который смотрит на лист бумаги откуда-то сверху. В роли художника Вы рисуете предметы, которые затем могут подобрать и использовать жители этого мира.

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




Цель игры — создавая подходящие предметы, помочь живущему в нарисованном мире человечку разобраться со всеми его бытовыми проблемами: добраться куда-то или, наоборот, сбежать, победить врагов или подружиться с ними, спасти принцессу или найти клад. Настоящим художником для игры быть необязательно, подойдут и грубые наброски предметов. Главное — это ваше воображение и здравый смысл.

Как всё начиналось


Последние несколько лет я разрабатывал эту игру в пассивном режиме, совмещая с основной работой программистом. И вот уже несколько месяцев, как я уволился и стал уделять разработке игры больше времени.

Идея создания подобной игры вырисовывалась постепенно. Когда-то я участвовал в создании сервиса поиска картинок по наброску, занимался как раз вопросами распознаванием изображений. Сервис не имел ошеломительного успеха. Но тогда мы заметили, что многие пользователи заходят на сайт, чтобы просто поиграться с технологией — нарисовать что-нибудь и посмотреть, что получится найти. Тогда и возникли мысли о том, чтобы развлекательную составляющую процесса сделать основной.

Также я вдохновлялся очаровательной игрой Crayon Physics Deluxe. В каком-то смысле, мой проект является развитием её идей.

А ещё в детстве я любил рисовать и часто садился за чистый лист, ещё не представляя, что собираюсь изобразить. Придумывал сюжет по ходу дела: вот крепость, вот её защитники, вот другие человечки её штурмуют; вот тут они пробили в воротах брешь, а вот тут приставили к стене лестницы, защитникам надо как-то отбить все эти атаки… Было интересно через какое-то время разглядывать такой рисунок и разбираться в сюжете заново.

Постепенно все эти предпосылки оформились в желание сделать игру про рисование с необычной механикой.

Технические подробности


Фреймворк

Игра разрабатывается на C++ с использованием фреймворка Qt для основных настольных ОС: Windows, Mac, Linux. Также есть перспектива когда-нибудь сделать версию и для планшетов. Возможно, выбор какого-нибудь специализированного игрового движка (Unity, например) был бы более рационален, но когда я только начинал разработку, хотелось разобраться во всех нюансах создания игры самому: вывод графики, таймеры, анимация и т.д. К тому же я не был уверен в возможностях кастомизации готовых решений под нестандартную игровую механику. Так что Qt я выбрал, исходя из личных пристрастий. Хоть он и не заточен для создания игр, это продуманный и проработанный фреймворк с удобным механизмом слотов и сигналов. К тому же позволяет практически прозрачно использовать аппаратное ускорение графики, не прибегая к прямым вызовам библиотеки OpenGL.

Распознавание изображений

Для распознавания предметов, которые рисует игрок, используется самописная библиотека и алгоритм. В целом схема следующая. Имеется база эталонных изображений различных предметов (меч, щит, пила, лодка, ключ и т.д.), для каждого предмета возможно несколько различных изображений (например, щит ведь можно изобразить совсем по-разному) и несколько углов поворота, под которыми они будут узнаны. В ранних прототипа предметы не распознавались, когда люди их рисовали развёрнутыми на 45 градусов, что весьма огорчало игроков, которые пытались пририсовать человечку меч прямо в руку. Алгоритм, выделяет определенные характеристики рисунка, сопоставляет их с образцами из базы и находит лучшее соответствие. Таким образом, можно определить тип предмета и в какую сторону он повёрнут. Далее в игре создаётся физическая модель нарисованного предмета (за физику отдельное спасибо библиотеке Box2D!) и модель его поведения. Благодаря последней нарисованный предметом, опознанным, например, как меч, можно будет махать, а предметом, опознанным как щит — отражать удары. Всего на данный момент в игре можно создать около 40 различных предметов.

Разумеется, алгоритм распознавания не идеален. В настоящий момент точность распознавания составляет по моим оценкам 83% — это процент правильно классифицированных предметов. Это не та цифра, которой я был бы полностью доволен, поэтому периодически я возвращаюсь к работам по улучшению точности алгоритма. Так, в последней итерации удалось увеличить точность примерно на 10% за счет использования другой функции сходства изображений. В целом, с точки зрения игрока, неправильно опознанный предмет — это далеко не всегда источник фрустрации. Иногда это просто дополнительный источник веселья в игре.

Графика

Изначально графику в игре я планировал сделать весьма примитивной, чтобы она соответствовала черно-белым наброскам, которые рисует сам игрок. Выглядело это примерно вот так:


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


Сами игровые персонажи также подверглись улучшению. Было:


Стало:


Тем не менее, уровень графики остаётся весьма любительским — всё-таки, художник из меня не очень. Сейчас я начал задумываться, не привлечь ли к проекту профессионального дизайнера.

Текущее состояние


К настоящему моменту готова демо-версия игры с 5 уровнями (и еще одним «секретным»). Скачать её можно на сайте игры: drawnstory.com/Downloads.html (Windows, Mac, Linux 64-bit)

Также я недавно запустил кампанию в Steam Greenlight. Если игра вам приглянулась и вы хотите поспособствовать дальнейшей разработке, можете проголосовать на этой странице: steamcommunity.com/sharedfiles/filedetails/?id=568322436

Основная работа по созданию игрового движка сделана, в дальнейших планах добавление новых уровней и усложнение существующих.
Теги:
Хабы:
+13
Комментарии 13
Комментарии Комментарии 13

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн