Pull to refresh

Comments 17

UFO just landed and posted this here
В OSM данных нет 3D моделей. Все объекты строятся из простеших примитивов — node (точка), полилиния (way) + группа примитивов (relation). Эти примитивы имеют специфичные тэги, как, например, высота (height), высота над землей (min_height), для зданий тип крыши (dome, mansard, gabled,..) и т.п. Таким образом можно построить достаточно сложные модели (см демо билд с Кремлем).
UFO just landed and posted this here
Да, можно сказать, что пришлось «все ваять руками»: вот, как пример, из чего состоит Храм Василия Блаженного.

По поводу самих моделей не могу ничего сказать точно. Вроде, некоторую полезную информацию можно найти здесь и здесь.
Строго говоря, кое-какие модели там все же имеются. Иногда — достаточно грубые, иногда — весьма детальные (учитывая, что OSM для этого не особенно-то и предназначен).


А где на втором примере модель?
Здание с секциями переменной этажности крупным планом в центре. Во всяком случае, это не в меньшей степени «модель», чем то, что видно на третьем примере.
Это все весьма условно можно называть моделями, как уже сказано выше — здания могут быть составлены из сечений путем экструзии и смещения относительно нулевого уровня, не более того (ну плюс еще разные формы крыши).
На третьем примере видна труба с дымом, а также дома с треугольной крышей. Последние, конечно, могут быть автоматически созданы на основе атрибутов, но это всё же не просто поднятое основание :)
Дома с треугольной крышей строятся по атрибутам, которые описывают крышу (тип, угол, ориентация относительно здания). Трубы (как и теплообменники ТЭЦ) — экструзия основания (когда оно есть) с учетом типа объекта. Это фича конкретного способа визуализации.
Я так понимаю, что под моделью понимался файл (obj, fdx и т.п.), который можно открыть с помощью Blender, 3D Studio Max, Unity Editor и т.п., чтобы реиспользовать его в других приложениях без необходимости обработки «сырых» OSM данных.

В OSM сложные объекты составлены из примитивных объектов в своем «формате» и скачивание, например, xml с описанием только определенного здания, в целом, бесполезно — нужно писать свой конвертер в известный формат, если есть необходимость редактировать или визуализировать в популярных программах.

Скриншоты выше, похоже, из f4map. Насколько я понимаю, у них для определенных OSM объектов (труба, памятник, стадион) заготовлены 3D модели (либо они их генерируют налету). Но это специфика визуализации данных конкретного проекта.
Вы неправильно понимаете. Модель — это любое описание геометрии, более подробное чем bounding box или проекция на горизонтальную плоскость. Так что модель — это не обязательно данные в принятом трехмерном формате.
В f4map действительно есть встроенные модели в вашем понимании этого термина — например, краны, которые этот визуализатор ставит на территориях, которые отмечены как строительные площадки. Но многое другое строится по куда более подробным описаниям. См., например, Останкинскую телебашню.
Очень интересный проект, так как я работаю с 3D ГИС в Unity, для меня было только мечтой интеграция OSM или Google earth, но теперь вижу, что все иначе. Спасибо автору. Как вы планируете развивать проект?
И кстати в демо проекте столкнулся со следующей ошибкой компилятора:
Internal compiler error. See the console log for more information. output was:
Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)

at System.Reflection.Assembly.GetTypes () [0x00000] in :0

at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in :0

at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in :0

at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in :0

at Mono.CSharp.Driver.LoadReferences () [0x00000] in :0

at Mono.CSharp.Driver.Compile () [0x00000] in :0

at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in :0

Что я мог сделать не так?
Возможно, проблема в версии Unity? Я использую 5.0.1f
Дело в том, что сами библиотеки ASM собраны в Visual Studio с помощью компилятора от Microsoft, с добавлением UnityEngine.dll в зависимости. Данный подход очень сильно ускоряет разработку, позволяет тестировать логику вне контекста Unity процесса и использовать встроенный в VS профайлер…
Но вот такие ошибки возможны при попытке собрать проект в другой среде.
Спасибо, действительно в Unity 5 все работает отлично! Вы не планируете вовлечь в разработку сторонних разработчиков? Создать сообщество?
На самом деле, было бы неплохо. Главная проблема здесь, что это требует огромного приложения сил, особенно в начале (необходимо подготовить исходники хоть минимально, объяснить основные принципы), а т.к. проект разрабатывается в свободное от работы время, то с «силами» бывают проблемы.
Однако, сообщество заинтересованных людей может достигнуть чего-то большего :)

Сейчас я работаю над добавлением простейшего UI, чтобы продемонстрировать некоторые скрытые возможности (например, можно использовать не только оффлайн карты, но и тянуть данные с сервера osm по мере надобности небольшими порциями; reverse geocoding с помощью nominatim; импорт карт с pbf, o5m, xml форматов).

Следующий шаг — исправление ошибок и улучшение рендеринга зданий (иногда здания «врастают» в землю либо висят над ней) и других объектов. А также генерация специфичных объектов для разных POI (разные типы деревьев, модель фонтана, памятника, светофора и т.п. вместо текущей модели куба с текстурой).

Далее: мне сильно не нравится как проработана сама сцена — освещение, использование самого примитивного vertex шейдера. Все это необходимо сильно улучшать, чтобы сделать результат поприличние (как ориентир — PolyWorld проект для Unity). К сожалению, пока у меня нет необходимых знаний, как это сделать.

Ну и где-то затем можно подумать об добавлении AI и поддержки мультиплейера…

Вообщем, хватает, что делать на годы вперед :)
Sign up to leave a comment.

Articles