Amazing progress here. I am curious about adding outdoor spaces that have relationship requirements to indoor rooms. A garden next to the kitchen, A attractive view, A unattractive view, etc.
@baswein this latest work is purely deterministic, you draw the rooms and the generated building is constructed from rules - the idea is that this is a quick and easy interactive way to design buildings without having to draw any of the detail.
My other Homemaker work (which uses the same tools to assemble the IFC file, which is why it looks similar), uses a fitness function to evolve buildings without any interaction at all - this fitness function evaluates things like having the kitchen next to a garden and (potentially) things like attractive views.
The latest work has no concept of room types, they are all just 'rooms'. But it won't be hard to be able to manually assign room types, which will initially just control the placement of doors and stairs. A garden in this model will be just another cell in the mesh with the type 'garden'. One potential with having a high-level model like this is that it will be possible to reintroduce the fitness evaluation, so the tool will be able to tell you that the circulation doesn't work, or there isn't enough daylight in the kitchen, or the bathroom is too far from the bedrooms - all in an interactive way, giving hints to the designer rather than taking over the design.
@brunopostle said:
all in an interactive way, giving hints to the designer rather than taking over the design.
This is the way to go for sure. If AI takes over the design the architecture world will be unemployed. We are already struggling for projects and fees against each other. Struggling against free fees from machines will be bad.
Some would say that they don't believe machines will be able to have the creativity of humans, I would not. Besides that most architectural work isn't particularly creative and so most will be at risk when your work will be finished.
You'll be able to produce projects faster than people's need for them and shred the market altogether.
I see two signs in @brunopostle's project that ensures me his approach is good but follows the somewhat wrong path
And the third one is this one:
The latest work has no concept of room types, they are all just 'rooms'. But it won't be hard to be able to manually assign room types, which will initially just control the placement of doors and stairs.
However, personally like what he does. And an article from him about "perspective" gave me some new ideas to examine
Here's a more complex building, this mesh took about 30 minutes to model in Blender, note that I have drawn faces for all internal walls and floors, so this is non-manifold:
The urb-topologise.pl tool identifies 88 internal cells:
There are still some glitches, but here is the model rendered as an IFC file using the default Homemaker style:
We have IFC wall, slab, window, door, space, storey etc.. elements:
Can we connect this to a data mining app and generate a perfect house for every person on the planet based on their social media profile? And then finally get rid of architecture forever.
@JanF said:
Can we connect this to a data mining app and generate a perfect house for every person on the planet based on their social media profile? And then finally get rid of architecture forever.
Getting rid of architecture would be awesome :) but unfortunately this isn't automated design (other than trivial rules-based stuff like placing windows and doors) - it is just a way of drawing buildings so that the model is semantically complete - i.e. it's BIM
@paullee@Moult I'll try and describe the workflow tomorrow somehow. It just requires Perl and four Perl modules from git (and their dependencies).
The workflow kind-of sucks at the moment as I use DXF as input geometry, so I'm using the copy-paste trick to transfer the model from blender 2.83 to 2.79, as I need the older DXF exporter to correctly save quads rather than triangles. I can't find an easy way to simply get a list of nodes and faces out of blender, as this is all I really need (though ultimately I would like to be able to tag each of the spaces with the room 'type'), also it would be simpler to support arbitrary polygons rather than just triangles and quads - any ideas?
The roof generation is a bit glitchy, my roof pitch code was never intended for such complex shapes, so only some of the roofs come through. The IFC file crashes freecad, though I had success in the past with similar files, and I am using freecad nightly snapshots.
It's a proof of concept really, ultimately I would want the IFC elements to be updated in real-time in blender/freecad - so you can see the building result as you draw.
@brunopostle This is really a fantastic proof of concept. I can imagine how this would work great with topologic. Topologic has dictionaries for space types and apertures which are placed on any face. These can be readily translated to windows and doors. I am also thinking you can manually place/model pitched roofs same as walls with simple surfaces to avoid the glitches you mention.
I am not familiar with how IFC interprets elements: did you have to worry about trimming/pulling back interior surfaces when they meet exterior surfaces? I assume interior walls are centred on the parent surface while exterior walls are aligned on their exterior surface?
@topologic said:
I am not familiar with how IFC interprets elements: did you have to worry about trimming/pulling back interior surfaces when they meet exterior surfaces? I assume interior walls are centred on the parent surface while exterior walls are aligned on their exterior surface?
I'm letting the ends of walls overlap slightly as this doesn't seem to be a particular problem with IFC. Though where the walls form a chain (such as the external envelope) I mitre the corners as this works-out nicely.
In this model the interior walls are offset 80mm either side of the centerline, exterior walls are inset 80mm and outset 250mm - this results in clean wall junctions, though I would need a different strategy for a building with variable width internal walls.
The usual situation with masonry buildings is that you don't really want to centre walls on gridlines, normally you want to align the face of blockwork with a gridline, as this is easy to not screw up on-site, but I think we don't worry about stuff like this yet.
@ReD_CoDE said: @topologic could you please share that part about space types? I would be happy to see its granularity
Of course everything is on github so you can examine how the code works in detail. Conceptually, any “Topology” in Topologic has an associated key/value dictionary. We are limited to normal values (float, int, string). We build a dictionary object (ByKeyValue) and then we use Topology.SetDictionary. To retrieve we call Topology.Dictionary and then we get the value for a particular key.
If you want to associate one topology with another (eg for an LOD implementation) you can add one Topology to the Content of another topology. In the work presented here, I can imagine different ‘styles’ saved with the topological entity and called on demand.
To get this tool working, you need current snapshots of four perl modules: File::DXF, File::IFC, Molior and Urb from http://bitbucket.org/brunopostle/
Basic instructions for installing a perl module are:
git clone https://bitbucket.org/brunopostle/file-dxf.git cd file-dxf perl Makefile.PL
..at this point perl will tell you if you are ready to install or if you need to fetch some dependencies first. So for example if you need to install the 'Polygon' module, you can install it with this command (use sudo if necessary depending on how permissions are setup on your system):
cpan Polygon
Now if the dependencies are installed, you can install the module (again, you may need to run this as root or use sudo):
make install
That's it, remember this is very unfinished and I may commit something that breaks it at any time! The File::DXF module will install all sorts of half-baked scripts that I have used for particular jobs and abandoned over the last twenty years, so don't ask me how any of that stuff works.
You guys are hilarious :) like Autodesk community, just clap for nonsense things :))
Don't remember that you want to implement OpenBIM/BIM not be "3D modelers" who do workflows "MANUALLY"
I checked the video, it's still preliminary, and mostly "manual" than "automated"
@ReD_CoDE said:
You guys are hilarious :) like Autodesk community, just clap for nonsense things :))
Don't remember that you want to implement OpenBIM/BIM not be "3D modelers" who do workflows "MANUALLY"
I checked the video, it's still preliminary, and mostly "manual" than "automated"
I respectfully disagree. I checked the video and for about an hour looked at the code. There is a LOT of smart automation here and a great combination of manual modelling of a conceptual model followed by an automatic conversion into a very impressive IFC model. Plus there is some interesting topological derivation to find exterior vs. Interior surfaces and derivation of Cells. I know because we had to write similar code.
@topologic It's somewhat good, but just in a small area of a generative/evolutionary approach
I don't see many other things like "subdivision strategy", a well defined "growth strategy", ...
@ReD_CoDE said: @topologic It's somewhat good, but just in a small area of a generative/evolutionary approach
I don't see many other things like "subdivision strategy", a well defined "growth strategy", ...
Yes these would be quite interesting areas to pursue. It is open source so the community can add to it anything they see is missing.
Personally I'm interested both you share the workflow your solutions follow?
Does it have "data storage?"
How does its selection work? 1st Generation? 2nd Generation? ..., Fitness Function? Which kinds of Parents? Which Children? ...
Breeding?
Generation?
Evaluation?
...
Other techniques?
The work of @brunopostle is amazing.
IMHO the strong potential here, as @topologic already insinuated, is on the conversion of the model into actual topologically defined entities and once done that, the translation to IFC entities should be trivial (though awfully hard) .
I'm working on the conceptual side of this line of work and this practical applications are a huge GO, GO, GO!
I really want to help, but if you share the workflows and techniques you use, not presenting 3D models
However, about topology and geometry parts, I think non-manifolds are good choices, however, still, there are some considerations about non-manifolds, but most of the geometric kernels support or somewhat support them
@ReD_CoDE said:
I really want to help, but if you share the workflows and techniques you use, not presenting 3D models
However, about topology and geometry parts, I think non-manifolds are good choices, however, still, there are some considerations about non-manifolds, but most of the geometric kernels support or somewhat support them
For topologic everything is on github. Documentation and sample workflows are on https://topologic.app website. The following video might be helpful to explain the basics of Topologic
Comments
Amazing progress here. I am curious about adding outdoor spaces that have relationship requirements to indoor rooms. A garden next to the kitchen, A attractive view, A unattractive view, etc.
@baswein this latest work is purely deterministic, you draw the rooms and the generated building is constructed from rules - the idea is that this is a quick and easy interactive way to design buildings without having to draw any of the detail.
My other Homemaker work (which uses the same tools to assemble the IFC file, which is why it looks similar), uses a fitness function to evolve buildings without any interaction at all - this fitness function evaluates things like having the kitchen next to a garden and (potentially) things like attractive views.
The latest work has no concept of room types, they are all just 'rooms'. But it won't be hard to be able to manually assign room types, which will initially just control the placement of doors and stairs. A garden in this model will be just another cell in the mesh with the type 'garden'. One potential with having a high-level model like this is that it will be possible to reintroduce the fitness evaluation, so the tool will be able to tell you that the circulation doesn't work, or there isn't enough daylight in the kitchen, or the bathroom is too far from the bedrooms - all in an interactive way, giving hints to the designer rather than taking over the design.
Looks great ! Look forward it being loaded in FreeCAD :)
This is the way to go for sure. If AI takes over the design the architecture world will be unemployed. We are already struggling for projects and fees against each other. Struggling against free fees from machines will be bad.
Some would say that they don't believe machines will be able to have the creativity of humans, I would not. Besides that most architectural work isn't particularly creative and so most will be at risk when your work will be finished.
You'll be able to produce projects faster than people's need for them and shred the market altogether.
This is scary work, to be honest.
I see two signs in @brunopostle's project that ensures me his approach is good but follows the somewhat wrong path
And the third one is this one:
However, personally like what he does. And an article from him about "perspective" gave me some new ideas to examine
Here's a more complex building, this mesh took about 30 minutes to model in Blender, note that I have drawn faces for all internal walls and floors, so this is non-manifold:
The
urb-topologise.pl
tool identifies 88 internal cells:There are still some glitches, but here is the model rendered as an IFC file using the default Homemaker style:
We have IFC wall, slab, window, door, space, storey etc.. elements:
Note double-height spaces, corridors, funny-shaped room plans:
Can we connect this to a data mining app and generate a perfect house for every person on the planet based on their social media profile? And then finally get rid of architecture forever.
Getting rid of architecture would be awesome :) but unfortunately this isn't automated design (other than trivial rules-based stuff like placing windows and doors) - it is just a way of drawing buildings so that the model is semantically complete - i.e. it's BIM
Looks great !
@brunopostle can you describe the workflow ? Hope this can be reproduce in FC :D
Thanks
@brunopostle can you do a short recording demonstrating how this is done? Is the only "extra" requirement for Perl to be installed?
@paullee @Moult I'll try and describe the workflow tomorrow somehow. It just requires Perl and four Perl modules from git (and their dependencies).
The workflow kind-of sucks at the moment as I use DXF as input geometry, so I'm using the copy-paste trick to transfer the model from blender 2.83 to 2.79, as I need the older DXF exporter to correctly save quads rather than triangles. I can't find an easy way to simply get a list of nodes and faces out of blender, as this is all I really need (though ultimately I would like to be able to tag each of the spaces with the room 'type'), also it would be simpler to support arbitrary polygons rather than just triangles and quads - any ideas?
The roof generation is a bit glitchy, my roof pitch code was never intended for such complex shapes, so only some of the roofs come through. The IFC file crashes freecad, though I had success in the past with similar files, and I am using freecad nightly snapshots.
It's a proof of concept really, ultimately I would want the IFC elements to be updated in real-time in blender/freecad - so you can see the building result as you draw.
@brunopostle This is really a fantastic proof of concept. I can imagine how this would work great with topologic. Topologic has dictionaries for space types and apertures which are placed on any face. These can be readily translated to windows and doors. I am also thinking you can manually place/model pitched roofs same as walls with simple surfaces to avoid the glitches you mention.
I am not familiar with how IFC interprets elements: did you have to worry about trimming/pulling back interior surfaces when they meet exterior surfaces? I assume interior walls are centred on the parent surface while exterior walls are aligned on their exterior surface?
@topologic could you please share that part about space types? I would be happy to see its granularity
I'm letting the ends of walls overlap slightly as this doesn't seem to be a particular problem with IFC. Though where the walls form a chain (such as the external envelope) I mitre the corners as this works-out nicely.
In this model the interior walls are offset 80mm either side of the centerline, exterior walls are inset 80mm and outset 250mm - this results in clean wall junctions, though I would need a different strategy for a building with variable width internal walls.
The usual situation with masonry buildings is that you don't really want to centre walls on gridlines, normally you want to align the face of blockwork with a gridline, as this is easy to not screw up on-site, but I think we don't worry about stuff like this yet.
Of course everything is on github so you can examine how the code works in detail. Conceptually, any “Topology” in Topologic has an associated key/value dictionary. We are limited to normal values (float, int, string). We build a dictionary object (ByKeyValue) and then we use Topology.SetDictionary. To retrieve we call Topology.Dictionary and then we get the value for a particular key.
If you want to associate one topology with another (eg for an LOD implementation) you can add one Topology to the Content of another topology. In the work presented here, I can imagine different ‘styles’ saved with the topological entity and called on demand.
@brunopostle fantastic stuff!! The "everything is a dxf profile" philosophy is really interesting..
OK, I did a ten minute walkthrough
To get this tool working, you need current snapshots of four perl modules: File::DXF, File::IFC, Molior and Urb from http://bitbucket.org/brunopostle/
Basic instructions for installing a perl module are:
git clone https://bitbucket.org/brunopostle/file-dxf.git
cd file-dxf
perl Makefile.PL
..at this point perl will tell you if you are ready to install or if you need to fetch some dependencies first. So for example if you need to install the 'Polygon' module, you can install it with this command (use
sudo
if necessary depending on how permissions are setup on your system):cpan Polygon
Now if the dependencies are installed, you can install the module (again, you may need to run this as root or use
sudo
):make install
That's it, remember this is very unfinished and I may commit something that breaks it at any time! The File::DXF module will install all sorts of half-baked scripts that I have used for particular jobs and abandoned over the last twenty years, so don't ask me how any of that stuff works.
@brunopostle should we call you Bruno the sorcerer or something ? :D :D
Amazing stuff really
"Someone tell me if there is a better way of doing this" - yes, shift d, then RMB.
then G(rab) + Z(lock to Zaxis)
Thanks, also shift-d then Esc does the same (duplicating an object without any translation transform)
You guys are hilarious :) like Autodesk community, just clap for nonsense things :))
Don't remember that you want to implement OpenBIM/BIM not be "3D modelers" who do workflows "MANUALLY"
I checked the video, it's still preliminary, and mostly "manual" than "automated"
I respectfully disagree. I checked the video and for about an hour looked at the code. There is a LOT of smart automation here and a great combination of manual modelling of a conceptual model followed by an automatic conversion into a very impressive IFC model. Plus there is some interesting topological derivation to find exterior vs. Interior surfaces and derivation of Cells. I know because we had to write similar code.
@topologic It's somewhat good, but just in a small area of a generative/evolutionary approach
I don't see many other things like "subdivision strategy", a well defined "growth strategy", ...
Yes these would be quite interesting areas to pursue. It is open source so the community can add to it anything they see is missing.
Personally I'm interested both you share the workflow your solutions follow?
Does it have "data storage?"
How does its selection work? 1st Generation? 2nd Generation? ..., Fitness Function? Which kinds of Parents? Which Children? ...
Breeding?
Generation?
Evaluation?
...
Other techniques?
The work of @brunopostle is amazing.
IMHO the strong potential here, as @topologic already insinuated, is on the conversion of the model into actual topologically defined entities and once done that, the translation to IFC entities should be trivial (though awfully hard) .
I'm working on the conceptual side of this line of work and this practical applications are a huge GO, GO, GO!
I really want to help, but if you share the workflows and techniques you use, not presenting 3D models
However, about topology and geometry parts, I think non-manifolds are good choices, however, still, there are some considerations about non-manifolds, but most of the geometric kernels support or somewhat support them
For topologic everything is on github. Documentation and sample workflows are on https://topologic.app website. The following video might be helpful to explain the basics of Topologic