Subject: Tools for complex 3D building modeling: Beyond iD and UrbanEye?
Hello everyone!
I am looking to learn from your experience regarding 3D building modeling in OSM. Recently, I’ve been looking at some incredibly detailed 3D objects, like the Parthenon:
I find it almost impossible to achieve this level of precision using the standard iD editor. I’ve been researching alternative workflows, but many established tools seem to have compatibility issues:
Kendzi3D (JOSM): Seems to be unsupported in newer versions (unless using a legacy JOSM build).
SketchOSM: Also appears to be outdated/unsupported.
UrbanEye: A bit more user-friendly, but struggling with heavy, high-detail models.
RapiD: The 3D render is very helpful for visualization, but the modeling tools feel limited for complex architectural structures.
Does the community have any recommendations or modern “best practices” for large-scale 3D projects? Are there specific JOSM plugins or external scripts that you currently use for intricate building:part tagging and complex roof shapes?
I would appreciate any ideas or insights into your workflow!
In my personal opinion, complex 3D Buildings like the Parthenon should be edited by tools like Blender as a GLB file and uploaded to 3dmr.eu. There should not be an editor for OSM at this level.
But anyway, you may ask the mapper of buildings like the Parthenon ( Edited over 10 years ago by @Kanenas), how they did it. What viewer did they use? F4map is slow, OSMgo.org is rudimentary and UrbanEye is new but “may be” on the way to become a complex WYSIWYG editor.
A complex 3D editor for OSM would need quite some functions like copy and rotate a set of parts. No-one will spend time for this. (You may do it with JOSM, but need an immense imagination how it will come out in 3D.)
Or a Blender export to OSM? The same overwhelming effort.
I would like to 3D edit by gestures in my VR headset. There even is one, but not for OSM-Output. That’s just a dream - or are there some of you, to join and start this project?
In my opinion, the Urban Eye 3D plugin for JOSM is currently your best option for something integrated into an editing tool.
There’s also the alternative of using OSM2World. However, at the moment that requires setting up and running a second program in addition to JOSM, so the workflow is less convenient:
The comparison images really show the difference - the 3DMR/Blender approach definitely looks more professional, but there is something impressive about “coding” a building like the Parthenon using only tags and imagination.
I agree that mapping complex structures in JOSM/iD is like flying blind. Your VR/Gesture editing idea sounds like a dream! It would solve the spatial visualization problem instantly. While it might be a “dream” for now, it’s exactly the kind of innovation the 3D community needs.
I’ll take your advice and reach out to some experienced 3D mappers like @Kanenas to see what their specific workflow was back then. Hopefully, tools like UrbanEye will continue to evolve and make this easier for everyone.
I’ll definitely give Urban Eye a closer look since it stays within the JOSM environment. As for OSM2World, the extra setup does sound a bit inconvenient for a smooth workflow, but it’s good to have it as a backup option for high-detail visualization.
JOSM was, and still is, my editor, if anyone asks .
I couldn’t agree more to moving 3D data outside OSM.
Not just edit but store them too and maybe create references in the map or something.
But I spent a lot of time on this. I’ts my pride & joy.
Do any modifications if there is an already established system to store and visualize this kind of data.
Lots of reading, lots of calculations, lots of helping lines, lots of trial and error, and mostly copy & paste of the same things. Tried to use as much detail as OSM could allow for features that would look cool and discarded details that seemed unnecessary.
There was a plug in for Josm back then (probably Kendzi3D) that didn’t have support for all the 3d features documented in OSM wiki but it did the trick. F4 was my final testbed.
Well, if you would like to go beyond iD and UrbanEye, you should look for something like CityEngine. (See wikipedia or official page). Unfortunately CityEngine is not capable of exporting models to OSM, not considering that it is absurdly expensive.
Luckily, there is a homebrew clone, called ocga-cli.
I’ve created several cool models in OSM using it. It is capable of converting this
# OCGA rules example for osm-cga project
#see https://github.com/Zkir/ocga
#
# Moscow Manage
# https://en.wikipedia.org/wiki/Moscow_Manege
#(c) Zkir 2024
ocga 0.1
rule building:
align_scope geometry
# define the buidling height expicitly,
# overwriting what is specified in the source file
tag height, 24
# we will start from the rectangle and will rebuild the form
# basing of this very algorithm
outer_rectangle mass_model
#massModel mass_model
rule mass_model:
split_z 10:roof | 2.25: entablature | ~13: main_part
rule roof:
create_roof gabled, scope_sz-0.40
colour white
roof_material metal
roof_colour darkgreen
rule entablature:
scale scope_sx-3, scope_sy-3
split_z ~2: fries | ~1: architrave
rule fries:
scale scope_sx+0.1, scope_sy+0.1
colour white
rule main_part:
scale scope_sx-2.5, scope_sy-2.5
comp_edges 1.5, colonade
restore
scale scope_sx-1*2, scope_sy-1*2
rule colonade:
# we can use repetion in the split pattern ()*
split_x (1.5: column_pre | ~4.5: wall_block)* |
1.5: column_pre | ~4.5: door_block | 1.5: column_pre | ~4.5: door_block| 1.5: column_pre | ~4.5: door_block |
(1.5: column_pre | ~4.5: wall_block)* | 1.5:NIL
rule column_pre:
colour white
roof_colour white
split_z 0.3:abacus| 0.2:echinus | ~11: column | 0.3: abacus | 2: stylobate
rule wall_block:
split_z ~11.5: NIL | 2.3: stylobate2
rule column:
primitive_cylinder '0.7
rule abacus:
scale '0.95, '0.95
rule echinus:
primitive_cylinder '0.85
rule stylobate:
#scale scope_sx-2, scope_sy-2
colour grey
material granite
rule stylobate2:
colour grey
material granite
roof_colour grey
roof_material metal
create_roof skillion, 0.3
#roof_direction 16-90
roof_direction 180 #magic. direction is in local coordinate system, so it is the same for all parts!
rule door_block:
colour maroon
roof_colour maroon
material wood
scale '0.8, '0.1, '0.9
create_roof round, scope_sx/2
tag roof:orientation, across
translate 0, 0.25, 0
rule architrave:
nope
rule NIL:
nil