Can BIM be free from complex standards and concepts? Can we actually attach the data we want to the geometries that represent building elements freely and without reading hundreds of pages of documentation?
At the beginning of 2022, a new file format was released for the BIM industry. It’s called dotbim (extension: .bim). The project is 100% free and open and was created to go in a completely different direction, different from the solutions that are already existing.
Dotbim project was created to make BIM files simple. That’s why the manifesto that includes rules regarding it looks like this:¨
- Transfer geometry and data
- Free and open
- Make it possible to write tools for it in a couple of hours
- 1-page documentation
- Make sure all others can support all of its features
So the schema of .bim files is as simple as it gets. The documentation page is 1 page long, so let’s go through it with a couple of comments.
Geometries in a new BIM file format
Such an approach makes it extremely easy from the importer’s point of view. Most of the CAD file formats support multiple different geometry types, but that means each one has to be supported by the importer. It is often a big challenge to make it possible to support all of them properly. That’s one of the reasons why every CAD/BIM user is familiar with cases when some of the elements disappeared during export/import. Or that it displays geometry in a slightly different way.
Another thing is: that meshes are probably the most straightforward geometry type that you can get in 3d. So if the importer of .bim files will support proper mesh import, which is a relatively easy task: then it will import all geometry properly! Not only some parts of it.
Some might say that sure: meshes are cool, but BREPs can describe a 3d shape more precisely. That’s true, but in my opinion in the AEC industry, in most cases, we don’t need that infinitely precise model of a wall, beam, or rebar. For coordination and often even for manufacture we will be fine with discretized geometry only. Actually, BIM coordinators can’t tell if they’re looking at the mesh or BREP most of the time. It’s different from automotive/naval industries or furniture manufacturers where these BREPs are in great demand.
Transformations in .bim format
There are only two transformations allowed in .bim files: translation and rotation. These are stored as elements’ properties, and they are called “vector” and “rotation” there. So each of the mesh stored can be simply placed using these two. Each element stores the id of the mesh which is used to describe this element and then it’s moved and rotated into the correct place. That also means that reusing the same mesh multiple times in different places in the model is possible! It’s really useful if you’d like to have a smaller file size because that means that mesh will be stored once but will represent multiple different elements. E.g. Let’s imagine a stadium with thousands of the same chairs. Then only one mesh that represents a chair will be stored in a file, and later using its id it will be referenced in these thousands of different places.
Data
Example file
Let’s see a simple Teapot.bim file to find out what it looks like inside. At the top, we see the schema version which is “1.0.0” and the start of the mesh definition. You can see that mesh_id is 0, and in fact, in this file, this is the only mesh stored. You can see coordinates there, saved as one big list of all coordinates. They are in fact grouped as in the picture below:
That’s the whole definition of mesh. Let’s go to the elements then. In this example again: there is only one element. It represents a teapot indeed.
That’s the whole definition of mesh. Let’s go to the elements then. In this example again: there is only one element. It represents a teapot indeed.
And that’s all. In fact, if you get it already, it means that you fully understand the .bim file format, cause there is nothing more. Obviously typical .bim files contain much more meshes and elements and more data attached to each element, but if you get this simple example – you already understand the whole schema.
As a result, we have a model that looks like this:
More example files can be found here LINK: https://github.com/paireks/dotbim/tree/master/test/ExampleFiles
Bridge example
Marcin Woch created amazing example of a .bim file which you can explore right here:
Manipulate 3D model below by yourself!
Once you click on the Online 3d Viewer icon – it will open in a new tab the whole model. Then you can explore all data attached to different elements once you click on them. For a few of them, you will even find some links to some websites. So you can even attach some URL as a property of an element.
Goal of BIM file format
Aim was to introduce an open, free and easy to read and write file format for the BIM industry. Simple file format = simple development of reliable software.
I believe that making it simple for developers impacts the experience of the end-user. It’s quite a challenge to build reliable tools on top of the complex file formats.
It’s also good to mention that the file format itself is meant to stay the same just as it is right now. There is no plan to increase the number of its features over time or to break the userspace somewhere. Such a decision was made in favour of developers as well. I can’t expect every developer to update every software based on .bim every time I decide that I should rename something or organise something slightly better. There is a schema_version that makes it possible to introduce some sort of an update in case we’d really need to add something, but ideally, it will stay “1.0.0”. That approach is also much different from many file formats that constantly try to improve, which forces all other software to update functionality constantly.
Comparison to IFC
You probably already can find many differences between dotbim and IFC schemas, but to sum it up:
Where to start
If you’d like to check out general information about the file format itself, check out the website:
There are some developer tools, importers, exporters and converters for .bim files already. All libraries and applications that are using .bim files can be found listed here in the main repository:
https://github.com/paireks/dotbim
This main repository also contains documentation of the whole schema. If you’re a developer, there is also some guidance for you:
https://github.com/paireks/dotbim/blob/master/DeveloperTips.md
Thanks to Viktor Kovacs, Online 3D Viewer can read .bim files, so you can already drag and drop these files in the browser on that page:
Future plans of file format
Obviously what makes file format truly powerful is the number of platforms that support it. That’s why I will be extremely happy if anyone would like to try it or develop tools around it for different platforms! Without the help of the community it won’t be possible to make it happen, so if you’d like to try it: just contact me, I will also try to help you with it, as much as we can.
It’s amazing, the good part is when I read that there is no intention to develop it which means it’s going to make it easy for software and for engineers too.
Its like a foundation for the new future that you can not change !
Hey Ibrahim! Thank you for appreciating this decision! Not many people get why it is so important 🙂
Hey,
very interesting and minimalistic format.
How can one learn how to “show” a 3D model (.bim) in a blog post/homepage? Is there a guide/tutorial somewhere?
Cheers!
Laurin
Hey Laurin!
There is no tutorial I believe, but I can show you if you’re interested, mail me here: [email protected]
Best regards, Wojciech 😉
How can I represent relationships between objects? Or only attributes?
Hey Michel,
it’s up to you 🙂 You can add such information in attributes, e.g. if you have a window and you need to say that this window belongs to this wall, you can add attribute inside the window with the value of the GUID of the wall. Generally dotbim encourage people to store data however they’d like, while IFC encourage people to do it in a standardized way. Depending on a tasks sometimes you need more this or more that 🙂
One of other ways how to link some objects together is described there: https://github.com/paireks/dotbim/blob/master/LinkingData.md. This is also some of the methods that allows to point from one object to another, so also it can represents some kind of relationships.