Игра на основе карты реального мира
Наверное, каждый мечтал загрузить в любимую игру свой родной город и побегать по знакомым улицам. Скоро у вас появится такая возможность. Встречаем: Generation Streets, игра на основе OpenStreetMap. Суть такова: берём карту, превращаем домики в трёхмерные, натягиваем текстуры, расставляем деревья, уличные фонари, опоры ЛЭП и прочий визуальный мусор. Получается примерно так:
Москва:
Тольятти:
Кинель-Черкассы, село в Самарской области:
Ну и так далее.
Кстати, в игру будут встроены инструменты для экспорта сгенерированных 3D-моделей в любые форматы, а это значит, что народные умельцы получат возможность создавать моды для других игр, загружая в них карту реального мира. Позднее я, скорее всего, вообще открою весь код под свободной лицензией. Но это потом.
Отмечу, что хоть многие населенные пункты в OpenStreetMap прорисованы достаточно детально, геоданных почти никогда не хватает для того, чтобы отрисовывать объекты такими, какими они являются в реальной жизни. Скажем, у зданий очень часто не указана ни высота, ни количество этажей, ни тип здания (жилое, промышленное, еще какое-то), ни уж тем более цвет и материал отделки. Все эти параметры движку приходится в буквальном смысле угадывать либо просто выбирать случайным образом. Поэтому, загрузив свой город и найдя свой дом, не надо ждать стопроцентного совпадения. Будет похоже и узнаваемо, но не более. Не говоря уже о том, что некоторые населенные пункты могут быть вообще не прорисованы.
Между прочим, псевдо-постапокалиптический сеттинг выбран именно из-за недостатка данных, с его помощью маскируются неизвестные параметры. А еще он позволил рисовать все мосты и эстакады полуразрушенными (это гораздо проще, чем анализировать плоскую карту и пытаться понять, где и как идут съезды с эстакад; и все равно не факт, что угадаю).
Вид от третьего лица с отдаленной камерой также выбран из-за низкой детализации. На самом деле визуального мусора можно было нагенерировать и побольше, но я уже упёрся в возможности своего самописного движка, который и так не особо блещет производительностью.
# Про геймплей
Геймплей я сделал максимально простым и ненапряжным - это экшн с массовым отстрелом условных пришельцев и собиранием выпадающих из них кусочков энергии. Никаких прокачиваний и никакого доната с лутбоксами. Геймплей сделан почти для галочки, его основная задача - придать смысл беготне игрока по игровому миру и приукрасить процесс разглядывания местности.
# Про OpenStreetMap
OpenStreetMap - открытая карта, которую рисуют сами пользователи. Как Википедия, но в мире географических карт. Главное отличие OpenStreetMap от, например, народной карты Яндекса в том, что геоданные распространяются под свободной лицензией ODbL, а это значит, что можно скачать исходник всей планеты (около 50 Гб сжатых данных) и делать с этими данными что угодно. Например, вот такую игру.
На основе OSM работают многие сервисы. Вы, возможно, сами пользуетесь каким-нибудь сервисом на основе OSM и даже не знаете этого.
Детализация и точность данных варьируется на разной местности. Некоторые населенные пункты прорисованы с точностью до каждого дерева, на некоторых висит только пара центральных дорог. Крупные города, как правило, прорисованы более детально мелких деревень и сёл, но есть и исключения. Самую знаменитую историю про картографирование села Краснохолм можно почитать на Хабре: https://habr.com/post/211430/
# Про рельеф
OSM не хранит данные о рельефе, поэтому за картой высот пришлось обращаться к другим источникам. В глобальном масштабе планеты данные весьма детальные, но при приближении всплывает много неточностей и смещений. Например, в Тольятти у Комсомольского района есть крутой склон к Волге. Возвышение на карте высот смещено к югу, из-за чего вода затекает прямо на склон. Такие нестыковки приходится ретушировать при помощи шейдера:
На этом пока всё, как только игра будет опубликована в Steam, напишу пост с анонсом.
Лига Разработчиков Видеоигр
7.5K поста22.5K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"