How to georeference 3D data generated using BlenderGIS?
I generated a 3D model (terrain + extruded buildings) using BlenderGIS,and I was wondering if I could integrate them into an ifc project having the right georeferencing using BlenderBIM. The problem is, BlenderGIS does not georeference the model, but only stores the coordinates of the origin of the geoscene. So when I assign ifc classes to my 3d objects, they maintain their relative coordinates to the origin of the scene, and not the coordinates of the GIS data from where they originated.
Tagged:
Comments
Hi @aogino,
This is what you can do:
Choose coordinates near your project (as a new "false origin") and fill the Coordinate reference system and "Geocoordinates" data (like the image). This coordinates are placed in the blender origin in the scene.
Import your terrain with BlenderGis choosing the same coordinates and reference system. This creates a mesh (terrain) and you can import a image mapped over the mesh.
You can create the ifc project or link other ifc projects considering this coordinates as a "false origin".
Hello @avico,
If I understand well, when I include these meshes in an IFC project and export it, it will be georeferenced ?
When you add the mesh with BlenderGis, the object is a "blender object". You need assign ifc properties (define ifc class, etc.). After thah it behave like a other ifc object and coordinates are relatives to the "false origen".
To get real coordinates use ifcPatch (OffsetObjectPlacements) and translate the "ifc terrain". Usually the ifc terrain file generated are big.
In this GIF, you can see that using BlenderGIS I check if the coordinates of my scene are valid or not (you can hover your scene and check the coordinates of each point). It seems to me that the coordinates are valid, but they are not inherited by my BlenderBIM project even though I assigned IFC classes to all my objects (terrain and buildings). How does georeferencing work in BlenderBIM? Since I have the right coordinates of my scene origin (from blenderGIS), how can I transfer them to the my IFC project ? @Moult have you any idea?
@aogino,
I think the easier way for you is test that.
After import objects in BlenderGis you have "blender objects" in the scene. When you make active Geocoordinates button you can see real coordinates at top left possition but blender objects coordinates are relative to the blender origin. In the gift you sent, the blender origin in the scene (0,0) have real coordinates (X,Y).
With these objects, create an ifc project (assign classes to the objects, properties, etc.) and save it. You will have the terrain in ifc format but in non-real coordinates. To have it in real coordinates use IfcPatch (OffsetObjectsPlacement) using as parameters the real X,Y coordinates of the origin of the scene in Blender. This will create a new ifc file with the terrain in its real coordinates. You can link this file to your Ifc project in real coordinates and it will be well georeferenced ("a federated terrain")
In IfcPatch, does the command need to look like this : ifcpatch -i input.ifc -o output.ifc -r OffsetObjectsPlacement -a [x,y] ?
and replace the x,y with their actual values ?
In BlenderBim, go to "Quality and coordination" tab, Patch -> Recipes -> OffsetObjectsPlacements to get a intuitive and usefull form.
Is IfcPatch stable? I'm getting this error :
Loading IFC file ...
Patching ...
Traceback (most recent call last):
File "C:\Program Files\Python39\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python39\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Users\atamort\AppData\Roaming\Python\Python39\site-packages\ifcpatch__main__.py", line 37, in
output = ifcpatch.execute(args)
File "C:\Users\atamort\AppData\Roaming\Python\Python39\site-packages\ifcpatch__init__.py", line 77, in execute
recipes = getattr(import("ifcpatch.recipes.{}".format(args["recipe"])), "recipes")
ModuleNotFoundError: No module named 'ifcpatch.recipes.OffsetObjectsPlacement'
And I made sure that I copied all the content, as you can see :

This is beyond me.
When I have used IfcPatch it has worked. Try to fill in all the data (with a value of 0 if it is not modified)
Got it, there is an error in the name of the file, the "s" should be added to "Objects" and deleted from "Placements"
what syntax did you use ?
I use the form (right side of the image)

I made it work, but when I verify the coordinates of my exported ifc model, only the origin point has the valid coordinates, the other objects are misplaced.
In the parameters, I entered only the X and Y, I filled the other parameters with 0.
What mean "only the origin point has the valid coordinates" ?
In the ifc file before apply IfcPatch, relative objects position are right ?
I doesn't know your mesh terrain origin but I use BlenderGis with imported asci files to made terrain (as comented above) and this process work well for me.
You only use X,Y right ? You fill the other parameters with 0 ?
I meant when I check the coordinates of other points in the ifc to which i applied the ifcpatch, the coordinates are wrong (there is some offset between them and the right coordinates)
Yes. I always use real z coordinate and X-Y axes like east-north
In general the advice given here is sound with perhaps a few missing details on using a projected CRS and map conversion in IFC, but otherwise OK. If there is still confusion, feel free to jump on the live chat https://osarch.org/chat and we can do a live screenshare to investigate where the misunderstanding is. I'm generally online in the Sydney timezone.
It would be a superb opportunity to cast some light on the subject, if possible the session (if it takes place) should be recorded, if not a tutorial at least some insight for those who struggle (like myself) to properly streamline the whole process.
The result being the beautiful image above of a bridge spanning across a terrain, starting from GIS data/contour lines and the model itself, very compelling and useful for Infraworks-like presentations, a big step ahead in BBIM implementation for me and maybe others dealing with infrastructure projects.
I have the model with coordinates in real world, I have the terrain from a GIS map or raster/point cloud from drone flight: what are the steps to combine the whole lot in BBIM?
If not a recorded video session at least a simple step-by-step list with snapshots from the UI would be great.
I hope it's not too much asking ;)
thanks
Hi @steverugi,
This is my workflow:
1.- Choose a point close to the project position as a "false origin" (with XY coordinates for example).
2.- Open the model in real coordinates in BlenderBim using "enable advanced mode" and entering the XY coordinates as false origin in the import form (the point 0,0,0 is replaced by X,Y,0).
3.- In the Geoscene panel (n key -> View panel) choose the reference coordinate system and enter the init origin (+ button) with the X, Y coordinates.
4.- Import the terrain (ascii file) with BlenderGis, entering the position data again. With this you have an object in Blender that is the terrain mesh in the correct relative position.
5.- Import the orthophoto with BlenderGis (again enter the position data) and choose to map it on the imported mesh. (the orthophoto must have a position file, *.jgw that can be created with Qgis. Consult the BlenderGis documentation for requirements).
6.- Enjoy the result obtained with these simple steps
I may have come to the conclusion that maybe my issue is not related to the georeferencing from local to projected coordinates that I do using IfcPatch. It's probably the GIS data that has heterogeneous coordinate systems and when combined and converted to 3D using BlenderGIS, there are a lot of distorsions. I checked horizontal distances between specific buildings in my .ifc and compared them with the same distances in a gis software (like QGIS) and there is a big offset.
Conclusion: Beware of 3D objects generated using BlenderGIS, we might need some expertise from people that have experience with it, for now the lead developper is not very responsive ...
thanks @avico
sorry, I don't mean to be ungrateful, thank you for taking the time to reply to my post
your list can be already found in the exchange above, I meant something more helpful to people who find hard to implement the process specifically in BBIM, snapshots from BBIM itself could be a step ahead for instance.
To give you an example: I use QGIS and C3D on regular basis, dealing with true north, false origins, projections..etc no problem, but I can't jump on your list and impement it right away (surely my bad), will try next weekend again
cheers
@aogino,
Sometimes I have found objects in Blender that have their origin at points far from the object itself and give position errors. You can try placing the origin at the center of mass of the object to see if it corrects it (Object menu -> Set Origin -> Origin to Center of Mass). This shifts the origin of the object in Blender to its center of mass.
The truth is that I have only used BlenderGis to import terrain from acii files (*.asc) without problems
@steverugi,






maybe this can help:
1.- Choose a point close to the project position as a "false origin" (in the image, false origin is the left bottom corner with coordinates value 447560, 4679700. In the qgis project are a raster file (MDT in *.asc format) and a jpeg image (Orto.jpg). Extract "Raster projection" with Raster->Projectios -> Extract projection).
2.- Open the model in real coordinates in BlenderBim using "enable advanced mode" and entering the XY coordinates as false origin in the import form (the point 0,0,0 is replaced by 447560, 4679700,0).
3.- In the Geoscene panel (n key -> View panel) choose the reference coordinate system and enter the init origin (+ button) with the 447560, 4679700 coordinates.
4.- Import the terrain (ascii file) with BlenderGis, entering the position data again. With this you have an object in Blender that is the terrain mesh in the correct relative position.
5.- Import the orthophoto with BlenderGis (again enter the position data) and choose to map it on the imported mesh.
6.- Enjoy the result (look at previous images) ;-)
This doesn't seem right to me. IFC can set a false origin which is akin to "setting the origin of the geoscene" as well as the CRS, and therefore will be georeferenced.
massive thanks @avico
it looks like you totally answered my request and in no time! most grateful for your help
Hi @steinryan28 ,
I don't understand the solution you propose as an alternative.
According to my experience, the objects imported with BlenderGis (the terrains that I have used so far) have a similar behavior to any other object imported into Blender (for example from Freecad) and their coordinates are correct with respect to the false origin defined. Their integration with Ifc is good and after adding them to the Ifc project (as a class IfcElemBuildingElementProxy for example) they work well. The project saved from BlenderBim in this way is correct and displays well from any viewer.
This is not georeferencing in IFC because the corresponding information is not defined, but the position of the objects is correct (with respect to the false origin chosen). To obtain the real coordinates just use IfcPatch as explained above.
I normally have to use IFC2x3 and it lacks information to georeference the project, but the models obtained have the correct coordinates even though information about the coordinate reference system used is not included. With IFC4 this information can be included and BlenderBim already incorporates it (see image).

Just to help reword this with more specific terminology, the IfcPatch suggestion merely means to make local engineering coordinates fully equivalent to map coordinates with no false origin, no project north, and no scale factor. Assuming a CRS is nominated, both options of using a false origin or having local coordinates directly in map coordinates are georeferenced correctly in the same spot from an IFC perspective.
Fun fact: the BlenderBIM Add-on supports the IFC2X3 fallback georeferencing method. And this integration has been made even more complete in the latest alpha builds. Just select your IFC project then add the georeferencing psets to them.
I found the issue, it lies within the basemap generation tool of BlenderGIS. It is hardcoded to web-mercator, and you'll need gdal installed to do the reprojection (I did the test and it failed, this error occurred : https://github.com/domlysz/BlenderGIS/issues/702). Since the basemap in in web-mercator, the terrain will also inherit that crs. That is what explains the offsets in (X,Y) coordinates after georeferencing using IfcPatch.
I've just posted a new discussion on "European Council on Computing in Construction 2024 Conference", which has lots of interesting research presentation vids across a wide range of Construction IT topics. One that is germane to this thread, is "2024 EC3 - PPM - Congiu, Eleonora - BIM-GIS Integration through Open Tools". She/team successfully swaps data between BlenderBIM and QGIS by exporting IFC geometry from Blender as .dxf, and geometryless data as .csv, and joining them in the attribute table in QGIS:
Authors: Congiu, Eleonora; Quaquero, Emanuela; Rubiu, Giulia
Affiliation: Department of Civil, Environmental Engineering and Architecture (DICAAR), University of Cagliari, Italy
Abstract: The implementation of effective workflows based on a fully open BIM-GIS integration is still an unsolved topic. This is due to the lack of freely available BIM authoring tools, as well as to still unfixed interoperability issues. This paper proposes a new methodology to integrate BIM and GIS without using commercial tools and proprietary formats. This workflow is enabled by the use of the add-on “BlenderBIM” for “Blender”, which allows to manage IFC models by updating non-geometric information through “.csv” files. Moreover, “.csv” files are assumed as main information exchange vehicle between BIM and GIS. The method is validated through a case study."
The process steps aren't fully shown in the video - or not enough for a beginner like me - but a competent person may be able to replicate from the video. I am writing to them to request a full methodology.
Their concluding remarks are shown below (or maybe not...):