Около полутора лет назад на Хабре был размещен пост про уникальные карты китайского поисковика Baidu (для тех, кто не видел, вот он: http://habrahabr.ru/post/115107/). Я был поражен тем, насколько кропотливо, детально и красиво эти карты сделаны, поэтому однажды мы, вместе с группой товарищей, решили разобраться в процессе создания Baidu-карт и сделать собственные карты всего мира, которые выглядели бы так же круто. Под катом много картинок, раскрытие секрета Baidu-подобных карт и то, что получилось у нас.
Поиски решения (как китайцы это сделали?)
Всем очевидно, что подобные вещи — что-то совсем новое для картографии. Они красивые, они интересные, их можно рассматривать часами. Они понятные, в конце концов, ведь наверняка легче найти здание, где у тебя назначена встреча, если на карте размещена его детальная копия, а не унылый серый прямоугольник. Похожие карты делают не только Baidu; вот навскидку несколько примеров: Edushi (shanghai.edushi.com), город Керчь (http://gorodkerch.com/map/), даже Bing на некоторых уровнях зума показывает не аэрофотографии (http://binged.it/O3F5Ez)
С первого взгляда ясно, что создание карты такого уровня детальности требует огромных ресурсов. Первым делом в голову приходят мысли о труде миллионов специально обученных китайцев, которые старательно, по пикселю отрисовывают каждое здание, дерево и скамейку. Мы начали именно с этого (не с поиска лишнего миллиона китайских художников, а с отрисовки зданий методом пиксель-арта).
Очень скоро стало ясно, что создание даже одного домика требует невероятных затрат времени и сил. Мы все больше убеждались, что Baidu — это 3d-карты, что они рендерятся, а не рисуются пиксель к пикселю старательными китайскими ребятами. На самом деле, о том, что карты были созданы в 3d, говорит многое: затенения между близстоящими зданиями, одинаковые детали и предметы, которые расположены к камере под разным углом. В конце концов, на сайте http://www.o.cn/ (производитель карт для Baidu) мы нашли страницу, которая полностью подтвердила догадки: http://gis.o.cn/en/3d-process.html. Итак, сомнений не оставалось, Baidu — это просто очень качественно отрендеренные 3d- карты.
Наши эксперименты
Но даже выявление технологии не решало всех проблем — оставался открытым вопрос, кто и каким образом станет наполнять подобные карты. Окей, каждый объект не нужно рисовать руками, одинаковые здания можно не перерисовывать с нуля, а лишь перерендерить… Тем не менее, где брать настолько детальные, красивые и подробные модели зданий?
Такие вопросы и поиски привели нас к решению сделать карту коллаборативной, то есть создавать ее вместе с пользователями. Только представьте себе: пользователи рисуют не линии и прямоугольники в OpenStreetMap или Викимапии, а красивые, почти игрушечные модели реально существующих домов!
В качестве тестового объекта был выбран кампус Стэнфордского университета. Чтобы понять, насколько крутые карты можно производить, и разобраться в процессе их создания, мы решили сперва смоделировать местность самостоятельно. За время работы над картой университета было выяснено, что получить картинку уровня Baidu абсолютно реально силами v-ray:
Мы можем рендерить не единственный взгляд на город с севера на юг, а все четыре его вида, а то и больше:
Меняя свет в сцене, легко получить ночной вид:
3d оставляет бешеный простор для детализации и задротства — можно рисовать разметку, фонари, кусты, скамейки, прочие вкусные штуки:
Итак, мы смоделировали на пробу Стэнфордский университет и перешли к созданию карты Сан-Франциско, решив дать доступ к этому процессу всем желающим. Теперь сборка карты происходит следующим образом: пользователи в приложении-3d-конструкторе (мы выбрали Unity 3d) создают модели домов, а на сервере в пакете v-ray standalone рендерятся и отправляются на общую карту красивые картинки.
В итоге, полный цикл работы приложения выглядит так:
- Пользователь рисует периметр дома поверх спутниковых карт, как в OSM. Мы строим замкнутый контур и передаем его в Unity, а также запоминаем расположение дома на карте.
- В конструкторе юзер создает модель дома: текстурирует её, размещает окна, двери, эркеры, карнизы, задает форму крыши — словом, превращает прямоугольник в высокодетализированную модель. Когда модель готова, она отправляется на карту. Unity экспортирует сцену в obj и пересылает на сервер.
- Сервер принимает obj, вычисляет положение дома на карте, размещает его в сцене с картой города, где уже настроен свет и созданы v-ray материалы. Затем сервер высчитывает, какие тайлы карты изменились из-за постановки дома, потайлово рендерит его, рендерит SVG для хайлайтов и отправляет всё это на web-сервер.
Заключение
Сейчас мы готовим к релизу в AppStore бета-версию приложения, с помощью которого пользователи смогут создавать карту Сан-Франциско. Мы научились делать картинки превосходного качества, с мельчайшей детализацией и точным соответствием географическому положению.
В самом начале мы предположили, что пользователям будет очень интересно делать такие карты, но никогда не проверяли это допущение на практике. Сегодня мы первый раз показываем свою работу широкому кругу людей, и поэтому хотим спросить: было бы вам интересно (да-да, лично тебе, читатель) участвовать в наполнении подобных карт? И у нас есть еще один вопрос: как/для чего конкретно вам было бы интересно использовать эти карты/технологию?
Будем рады любому фидбэку!
Посмотреть наши карты вы можете здесь:
- cutetown.net — сайт с картой Стэнфордского университета
- cutetown.net/hires — хайрез. На нем можно разглядеть все мелкие детали типа велостоянок, столиков в кафе, разметки и т.д.
- cutetown.net/sf — карта Сан-Франциско, для которой готовится релиз приложения
p.s. Предвосхищая холивары на тему “фу, карта лишь с четырьмя видами — это фигня, ничто и никогда не заменит real 3d”: просто взгляните на картинку. Здесь изображено одно и то же здание Стэнфордской церкви. Так оно выглядит на свежих 3d-картах от Apple и на нашей карте. Мы думаем, разница очевидна.
p.p.s. Вчера мы уже пытались публиковаться на Хабре, но подвел биллинг GAE и мы вышли из квоты.
Автор: Vatis