Роман Шувалов: «Мне пришла в голову идея — сделать трехмерный рендер карты OpenStreetMap»
Роман Шувалов — разработчик инди-игр из Тольятти, который в начале этого года выпустил игру «Generation Streets», основанную на данных OpenStreetMap. Не так давно он открыл часть кода своего проекта. Зачем он это сделал, как появилась игра и почему выбор пал на OSM — обо всем этом Роман рассказал в интервью.
— Как и когда вы узнали о проекте OpenStreetMap?
— Это случилось около 5 лет назад — в 2014–2015 годах, когда я искал решения, которые бы позволяли пользователям создавать карты для собственных нужд. На тот момент у меня уже был небольшой веб-проект — карта дорог и тропинок тольяттинского леса. Он был выполнен на сервисе Яндекс.Карты, поверх стандартной подложки которого накладывался векторный слой с нужными мне объектами. Кстати, этот слой был сделан на основе GPS-треков, записанных мною и участниками нашего велоклуба. Это было нечто похожее на тепловую карту Strava. В какой-то момент я понял, что мне хочется чего-то большего и стал думать, как модернизировать свою карту.
В итоге узнал про OpenStreetMap. Когда впервые увидел его, очень удивился: меня поразила невероятная открытость и гибкость проекта. Я мог не только свободно использовать его исходные данные, но и принять участие в отрисовке карты, что для меня было достаточно важным.
Постепенно, по имеющимся у меня GPS-трекам, отрисовал в OSM тольяттинский лес и связанную с ним инфраструктуру. После сделал свой собственный рендер, его можно увидеть на Велосипедной карте Самарской области. Его особенность состоит в том, что даже на маленьких масштабах (начиная с 10) отображаются тропинки и иные объекты, которые могут быть полезны велосипедисту. В то время как на стандартных рендерах на 10-м и даже 12-м масштабе карта имеет довольно низкую детализацию, что особенно заметно при попытке построить веломаршрут по полям и лесам.
Велосипедная карта Самарской области. Мелкие тропы и населенные пункты видны даже крупных масштабах.
— Почему в итоге остались в проекте? Ведь могли отрисовать только нужные вам дорожки и всё.
— Рисовать карту в OSM — опасное занятие, так как оно невероятно затягивает, потом сложно остановиться. Как обычно это происходит? Отметил тропинку, но увидел, что рядом есть здание, а на карте его нет. Добавил. Затем понял, что тут еще должен быть тротуар, а за ним дорога… и так далее. Тобою движет чувство прекрасного: хочется, чтобы всё было красиво, причем не только в том месте, где ты живешь, а всюду. Поэтому я и остался в проекте. Правда, сейчас уже не так много рисую как раньше, но все равно потихоньку продолжаю делать OSM точнее. В основном, исправляю мелкие неточности или актуализирую карту — добавляю новые объекты, которые постепенно появляются в интересующей меня локации.
— Чем вам интересна картография? Всё-таки достаточно необычное хобби.
— Наверное, это исходит из внутреннего желания знать, что находится вокруг тебя, причем гораздо дальше, чем видят твои глаза. И это чувство у меня было всегда. Помню, что уже в старших классах школы я экспериментировал с ГИСами, например, написал на Delphi (тогда я умел программировать только на нем) приложение, которое строило трехмерную карту Самарской области. Причем тогда еще не было открытых наборов данных, или я о них просто ничего не знал, а потому данные о высотах я взял из обычного бумажного атласа. Отсканировал его и с помощью какого-то плагина построил 3D-модель. Так что интерес к картографии, а вернее к визуализации окружающего мира, — у меня давно.
— Давайте поговорим о вашей 3D-игре — «Generation Streets», в основе которой данные OSM. Как она появилась на свет?
— Отмечу сразу, что разработкой игр я занимаюсь с 2010 года. Что же касается конкретно этой игры, несколько лет назад совершенно случайно мне пришла в голову идея — сделать трехмерный рендер карты OSM. Причем всей планеты сразу. Я посмотрел уже имеющиеся аналогичные проекты (F4map, OSM Buildings), но, к сожалению, ни один из них меня не удовлетворил — они слишком схематичные. Мне же хотелось более реалистичный рендер: с текстурами, визуальным мусором в виде деревьев, фонарей и пр. Одним словом с той ерундой, которую мы обычно не замечаем, но без которой мир не выглядит живым.
— И с чего вы начали разработку?
— С поиска метода массовой обработки данных, так как мне хотелось сделать всю планету разом. На это у меня ушло достаточно много времени. Поначалу я пытался это сделать через базу данных на основе osm2vectortiles. Но ничего не вышло, потому что у меня был слабый компьютер.
В итоге я остановился на двух маленьких программках: Osmconvert и Osmfilter. Для их работы не требуется поднятие БД. Они берут данные OSM в формате PBF и позволяют через параметры командной строки вырезать нужные кусочки. Таким образом я получил возможность без лишних проблем нарезать всю планету на тайлы.
Но тут же столкнулся со следующей: формат PBF не совсем удобен для генерации трехмерного рендера, а потому нужно было его преобразовать в подходящий для этого формат. Для этого мне пришлось написать несколько вспомогательных утилит, исходный код которых я уже выложил под свободной лицензией на GitHub. Отчасти они основаны на библиотеке ogr2ogr.
В результате у меня получилось создать собственный формат векторных тайлов, который, как мне кажется, весьма удобен для чтения внутри рендерера и генерирования трехмерных моделей. Кроме того, он позволяет объединять тайлы в большие архивы, что упрощает их хранение. Благодаря этой функции у меня не миллиарды файлов, а всего несколько сотен.
— Почему решили придумать свой собственный формат? Предполагаю, что уже есть готовые решения.
— Да, вы правы: готовые форматы уже есть, в том числе и векторные, например, у Mapbox, но всё дело в том, что они ориентированы на плоское — двухмерное — изображение. И у них есть одна неприятная особенность: если здание попадает на стык тайлов, то оно разрезается. Для меня это было абсолютно неприемлемо, так как для того, чтобы я потом смог сделать 3D-модель здания, оно должно было быть целым. Готового решения этой проблемы не было. Думаю, что просто ранее никто с этим не сталкивался. Потому я решил сделать что-то свое.
— Поделитесь статистикой по игре? Какие отзывы?
— С момента публикации игры на Steam (ранний доступ — октябрь 2018 года, «полноценный» релиз — февраль 2020 года) ее скачало около 3 тысяч человек. Для такого типа игры — инди — это достаточно неплохо. Важно еще учесть следующий момент: у игры слабый геймплей. И я сразу понимал, что в рамках этого проекта у меня никак не получится сделать его увлекательнее. Поэтому он такой, какой он есть.
Главный интерес в этой игре состоит в том, что у пользователя есть возможность скачать интересную для него территорию на планете Земля и полетать там. У большинства игр такой возможности нет. Например, те, кто живет в Нью-Йорке, регулярно радуются тому, что вышла очередная игра, в которой этот город воссоздан достаточно детально. А те, кто живет в Тольятти, вряд ли когда-нибудь дождутся игры созданной в локациях их города. Вот именно на это я и делал ставку.
Но поскольку многие, помимо возможности загрузки собственного города, еще ожидали и тщательно проработанный геймплей, то по этой части я получил несколько отрицательных отзывов. Они вполне заслужены. Я изначально к этому был готов, так как моя игра не про геймплей, как бы это странно не звучало, а про визуализацию данных и возможность полетать в любой точке планеты.
— Ваша игра использует данные OSM. Можно ли через неё править его?
— Изначально я хотел встроить редактор OSM, но после небольшого эксперимента решил этого не делать. Какое-то время у пользователей была возможность вносить правки. Эти правки не шли напрямую в OSM, они «оседали» в локальной БД. Оказалось, что игроки далеки от мира OSM, а потому к карте они отнеслись весьма безответственно. Сейчас думаю о том, чтобы отключить даже и этот экспериментальный редактор, а всех желающих направлять в JOSM.
— Насколько понимаю, вы открыли код своей игры и выложили его под открытой лицензией. Почему вы так поступили? Сложно ли было принять это решение?
— Я открыл не всю игру целиком, а только код, отвечающий за генерирование трехмерных моделей. Во-первых, я это сделал для того, чтобы поделиться своими наработками с сообществом, так как я ощущал некий долг перед ним, ведь я сам использовал открытый код, написанный другими программистами. Во-вторых, скорее всего, я уже более не буду вносить в этот продукт серьезных изменений, но при этом предполагаю, что он может быть кому-то интересен и даже кто-то возьмется его развивать. В-третьих, мне хочется, чтобы моим кодом пользовались и он помогал людям в решении их задач. Глядишь, так станет больше проектов, связанных с 3D-рендерингом, и может быть в них будет мой родной город Тольятти.
— Что вам нравится в OSM?
— Нравится открытая лицензия и возможность получить данные, а не только готовые тайлы. Я, например, сделал видеоигру. Ни один другой картосервис не позволил бы мне так просто это сделать. Как минимум, пришлось бы связываться с разработчиками и просить предоставить исходные данные. И я не уверен, что гиганты отрасли пошли бы мне навстречу. Тут же я взял и скачал всю планету и делал с ней всё то, что мне было нужно.
Еще мне нравится, что любой может принять участие в проекте и сделать карту точнее. Редактор JOSM не такой уж и сложный. И при этом не нужно ждать пока твои правки примут или одобрят — как только ты их отправил, они тут же находятся в основной базе, а это значит, что ты можешь их немедленно использовать для своих нужд. Например, обновить карту в своем навигаторе.
— Что не нравится?
— Изобилие и несистемность тегов. Не всегда это хорошо. Помимо этого, пора уже что-то придумать со смещениями. Иногда открываешь город и понимаешь, что человек отрисовал его без учета этого нюанса. И ты не знаешь как поступить: переносить всё или продолжить рисовать в неправильном смещении? Конечно, я понимаю, что мир несовершенен, приходится переступать через какие-то проблемы. Если же говорить в целом, то у OSM больше плюсов, чем минусов.
— Что бы сделали лучше?
— Хотел бы увидеть хороший веб-редактор. Да, уже есть iD, но он ориентирован на новичков. Хочется что-то поудобнее. Также, мне кажется, что было бы намного лучше, если бы объекты внутри OSM были как-то связаны между собой. Сейчас если вносятся какие-то изменения в форму здания или меняется положение дороги, которая проходит рядом, то это изменение никак не влияет на соседние объекты. Даже если после изменения, например, дорога стала проходить поверх дома. Пока не знаю каким именно образом подобное взаимодействие можно реализовать, но вот хотелось бы, чтобы информация о зависимостях была. Тогда, например, не ломались бы маршруты общественного транспорта в случае редактирования дороги. Предполагаю, что это сделает данные OSM еще более удобными для редактирования и их дальнейшего использования.
— Используете OSM в личной жизни? По работе? Кроме игры.
— В повседневной жизни использую мобильные навигаторы OruxMaps и Maps.Me. Оба — оффлайновые, то есть позволяют работать с картой без интернета, в основе их карт — OSM. Чем мне нравится OruxMaps, так это тем, что он еще позволяет использовать собственные карты в векторном формате mapsforge.
— Что посоветуете новичкам? Или тем, кто только думает: связываться с проектом или нет.
— Если вы используете какой-либо мобильный навигатор, в основе которого OSM, подумайте о том, чтобы начать делать карту, которую, кстати, вы используете, еще точнее. Ведь многие просто не знают, что карту можно редактировать, причем прямо с телефона.
Тем же, кто уже знаком с OSM и даже немного картирует, первый и главный совет — прежде чем редактировать карту, почитайте WikiOSM. Там почти всё есть. Это спасет вас от многих ошибок, а также позволит перенять культуру картирования и в большей степени осознать свою ответственность перед теми, кто после будет пользоваться картой, которую вы редактируете. Никогда не забывайте, что данные OSM используются в огромном количестве проектов, а потому всегда старайтесь поддерживать высокую планку качества вносимых данных.
— Что скажете в завершении беседы?
— Как бы это громко не звучало, но на данный момент OSM — это единственный открытый и свободный картографический проект в мире. Это независимая альтернатива коммерческим картосервисам. Именно поэтому в нем нужно принимать участие и всячески его развивать. Ведь если OpenStreetMap перестанет существовать, мы все будем вынуждены пользоваться коммерческими картами на тех условиях, которые нам будут кем-то навязаны. А о свободном использовании геоданных можно вообще будет забыть.
Общение российских участников OpenStreetMap идёт в чатике Telegram и на форуме.
Также есть группы в социальных сетях ВКонтакте, Facebook, но в них, в основном, публикуются новости.
→ Присоединяйтесь к OSM!