Проект «Москва в 3D»

Здрасьте!

Работаю курьером. Взбрела мне значит как-то идея, сделать Москву в 3D и чтобы 1к1, ну или 0,9к1, со всеми высотами, дорогами и домами. Моделировал дома в SketchUp и экспортировал их в Blender.

Пример

Пример

Начнём по порядку. Решил делать всё по районам и начал со Строгино, потому что там много типовых домов, позже объясню почему. Карту высот я брал с помощью программы Global Mapper:

Global Mapper с наложенными слоями карты высот и сетки для экспорта

Global Mapper с наложенными слоями карты высот и сетки для экспорта

Выгружал в формате .stl, Blender импортировал его криво, поэтому использовал вначале SketchUp, там увеличивал размеры и переносил на нулевую координату. После чего экспортировал и его уже нормально видел Blender. Поверх накладывал текстуру, на которой план города:

5316cc692bbc3d2af0fa9a60f4f02bf5.jpg

Теперь по поводу домов. Типовые панельки проще моделировать, т.к. несложно найти их планировку с размерами. Для определения серии дома я использовал сайт https://gsps.ru/tipdoma:

c57e42bc3330e439c941246f601265c9.jpg

…и группу ВКонтакте  https://vk.com/tiparh, где эти планы собраны и структурированы по сериям:

76ace31097b6263f892beb54e9595c66.jpg

Как и писал выше, моделировал их в SketchUp, т.к. в ней несложно разобраться и она, по сути, создана для «дизайнеров и архитекторов». Когда-то давно, во времена дисков и ключей активации на коробках от них, и диски видеомании с уроками по 3dMax и Maya можно было брать в прокате (тогда я ещё умел ими пользоваться). Но прошло много времени, а осваивать тот же Blender с неудобной камерой у меня особого желания нет. Поэтому и использую SketchUp, и в ней есть одна такая удобная функция «Компонент», где объект можно размножить и при редактировании одного все изменения применяются на другие, поэтому достаточно было сделать 1, 2 этаж и крышу, и далее как конструктор собирать дома. Правда, под некоторые серии домов приходилось делать по 5–6 разных этажей.

Первоначально я собирался делать дома, скажем так, со всеми квартирами и комнатами, но когда я так смоделировал дом, то SketchUp начал дико виснуть. И тут следует уточнить, что при экспорте необходимо было объединить всю модель, т.к. компонент, по сути, не являлся отдельным объектом. И когда при выделении дома тебе показывали, что выделено, условно, 100 объектов, а при объединении в один, то их количество могло выйти и за 10 000. Поэтому при экспорте SketchUp вылетал и просил отправить отчёт к какой-то там матери. Поэтому я решил отказаться от квартир и комнат и оставить только подъезд, шахты лифтов и лестницы. А выглядело первоначально совсем неплохо:

d87a14ca0b3a292e75b458d533a175e9.jpg760f99ba22d59c3ae2b82e7792e932ab.jpg

Также надо уточнить, что делаю я всё на нетбуке, ибо другого у меня нет, система там слабовата, и видеокарта Intel HD 600, поэтому и в дальнейшем не будет рендера от Blender, а только скрины. Если что, вот полное название нетбука Acer spin 1 sp114–34n:

44ae579b67512227b6766a59d6bbc180.jpgb9caa865689e237f322d3a0a916d6482.jpgc303d14543ca427fc26e8510684e8789.jpg072aae05bc0dabbd3514ac1f3a67513b.jpg

А вот уже пример другого дома, где я уже набил руку, это Неманский пр. 5к1, и сравнение его с фото от «Панорамы улиц» от Яндекса (да, его тоже использовал):

Одна из самых распространенных серий домов «Тип 1605АМ/12»

Одна из самых распространенных серий домов «Тип 1605АМ/12»

d58ef2885bcab8de3ec562d7c5d25d35.jpg9ce3e16aef50341d1db5ca64fef9afc8.jpg51cb253d721533f6998bfd7d463b0ae5.jpgfdf7cc582ca845558ce5f724b8d42b79.jpg

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

6b786ec8b8eb839b0033591b2faedcd5.jpgb46631d93afa9d1aebba9cc5e07c940c.jpg

Но если делать Москву в 3D, то уже по путёвому, поэтому подумываю купить себе какой-нибудь туристический альтиметр, и проехаться по дорогам и по ключевым местам — замерять высоту над уровнем моря. Хотя есть ещё идейка использовать Arduino с модулями альтиметра, GPS/Глонасс и акселерометра с возможностью записи маршрута и его выгрузки, но я в этом не разбираюсь, от слова совсем, поэтому дальше видно будет.

Сделал, пока что, небольшой квартальчик, попрактиковался и набивал руку на нём, вот пример с наложенной текстурой со спутника:

7d91c6fcbefb610f594a56969d84f304.jpgb85d1e87c902ab4d63c33f695d24d9e4.jpg

Конечно же, можно было не заморачиваться, сделать коробки с текстурами, но это скучно, примитивно и не интересно, и это, скажем так, место занято Мосгоргеотрест https://mggt.ru/projects/3-d-moskva/ и навряд ли сможешь получить их наработки с исходниками:

eccc7022bfd491f69072089001da0fff.jpg

Ну, а мне интересен скорее сам процесс, жалко, что нет возможности делать дома с квартирами, возможно, найдётся способ это оптимизировать. Ещё хотел выгрузить карту в Unreal Engine и в Unity, но моя система это всё не потянула. Так что, кому интересно, держите проект, ну, а я пока буду думать, что делать с картами высот, хотел использовать данные с топографических карт и моделировать их в SketchUp, с нанесённой текстурой плана, но она накладывается в низком разрешении и ничего не видно.

Проект не коммерческий, в общем, нашёл себе занятие на ближайшие года 3–4.

© Habrahabr.ru