Generative Design Process

Hello everyone,

I’m trying to study and understand the way to create a generative design with grasshopper. I found a website where I look often for some inspiration and also some documents on the internet that show some of the process used to create shapes with this new particular way.

The website I use as reference is http://object-e.blogspot.com/ and the explanation of some of the projects (http://object-e.blogspot.com/2010/07/glowing-cloud.html) are really usefull to understand the mental process that is behind this kind of design.

I saw that the “tools” used to create this kind of architecture are vector fields, environmental analysis, space organization with voronoi, behavior, cellular automata, human crowd analysis ecc.

Anybody knows any document or resource as videos or exercises where I could start to study deeper the mechanism and the process?
Or if someone can suggest me a path to follow so I could have a more clear idea about how to move in this field?

Thanks in advance for your help and sorry for the weird question!

1 Like

If you look halfway down this page there are archtypical strategy tutorials that may help: https://www.grasshopper3d.com/page/tutorials-1

Thank you @scottd for your answer! I’m watching at some of the tutorials you suggested right now.

But do you know any exemple of generative process explained step by step where to understand how to use different tools to generate a design? Because the tutorials are more about tools and I’m also looking for some application on real case of design.

Thanks again for your answer :slight_smile:

Knock yourself out:

http://papers.cumincad.org/cgi-bin/works/Search?search=generative&x=25&y=13

Lots of relevant papers on ResearchGate as well. Plus several of the conferences mentioned on CuminCAD have recently started making their proceedings available for free.

@AndersDeleuran Thank you!! I have tons of pdf to read now :joy:

1 Like

Even if it doesn’t solve your question, let me theorize a little to give you clues as to where the shots go.
At paradigm level, for me, generative design is algorithmic modeling applied to design and art, creating processes to build graphics, shapes or design utilities. The basic operator it uses is an input-process-output scheme, where processes can contain operators of this type inside, so from algorithms to functions they have this scheme, whose interaction flow can be in different ways, and the data or instances is what flows and is transformed by them. This scheme is applicable to any mundane process, algorithmic thinking helps to analyze all the components of a system to organize them in a way that solves a purpose. Most of the definitions I usually read about this seem arbitrary because they are limited to a certain type of process (iterative, recursion, optimization, etc), to me they are different techniques within a whole. And worse it seems to me to call it parametric design, although it is the most popular term, because it focuses the paradigm in the parameters or data, when this is the interface or the solution/consequence, not the subject itself. However, it is nuanced when we speak at the application level (not of software, but of execution), since an algorithm or process is parametric when it can be manipulated with parameters and an algorithm is generative when the processes that compose it can be manipulated. My approach is more general and blurs the separation with other paradigms in some cases, but it is logical if you consider that the important thing here is to work in terms of processes, rather than in terms of results or certain techniques/types of processes, since this does not give paradigm category, in my opinion.

So having said this, as you have mentioned, there are many techniques that are catalogued as generative design, but because they don’t fit into other paradigms, not because they have something common (apart from the above). So, you have a lot of subfields to learn, but the general thing, or the mental scheme, is to think algorithmically. When you approach it as a flow diagram, you have two fundamental constraints, the output or the solution (or set of solutions) that you expect to obtain (even emergently) and the inputs that you can or decide to have. In the middle of that, it consists of integrating the relationships necessary to solve the purpose, that is, to create the instructions or processes. To deeply learn all this, you must (or at least I recommend it) learn to code beyond grasshopper, since it is specialized in a certain type of flow and data, but it’s a great place to start. You need to know the data (geometry and others) to operate with them; get familiar with the batteries/components because they are like Lego pieces that you need to at least know that they exist to consider using them; and above all try to solve problems by yourself, like: I want to do this, how do I do it by myself? The answers to this is the experience to learn deeply.

3 Likes

Hi @Dani_Abalde thanks for your exaustive explanation!

I read your post and I fully agree with you. I loved the grasshopper concept since I saw it the first time and I started to learn it and understand it by myself. Now that I understood how the software works, I figured out that it has or could have a bigger potentiality in architecture or art or the field that it is applied, but most of the time or most of the tutorials you can find about it are about modeling parametric stuff, something completely different from Generative Design. Parametric (as you said when the model can be manipulated with parameters) are also Archicad or Revit in the architectural case, but grasshopper is a different tool and using it as the first two is, for me reductive. I think it is also not a good idea learning grasshopper to create a wall in a parametric way, when in the other softwares you can use just one command.

So that’s why I wanted to understand how to use it in it’s “full” potential or in a more proper way, and what I found and what I really think should be the right application is in my opinion Generative Design.

So for me generative design is what you said, it is a process and a sum of action, analysis, responsiveness and input that interacting with each other create something that you could have not imagined.

This is something that you can’t do with the other softwares, at least not in a parametric way as in grasshopper.

So again I totally agree when you say:

the important thing here is to work in terms of processes, rather than in terms of results or certain techniques/types of processes, since this does not give paradigm category, in my opinion.

And so:

you have a lot of subfields to learn, but the general thing, or the mental scheme, is to think algorithmically. When you approach it as a flow diagram, you have two fundamental constraints, the output or the solution (or set of solutions) that you expect to obtain (even emergently) and the inputs that you can or decide to have. In the middle of that, it consists of integrating the relationships necessary to solve the purpose, that is, to create the instructions or processes.

Maybe thanks to your words I understood that the real problem for me or what I was really looking for is:

Thinking about the relations that the inputs could have.

After reading your post I figured out that what I really appreciated from the link examples that I linked in the first post is the process that the architect followed to put the inputs in relations between them, creating a smart process to reach a beautiful result.

To close this long post I have to say that I see I need to be able to code if I want to reach another level of possible options to create relationships between inputs. Anyway I had already in mind to start learn coding.
So which coding language would you suggest me to learn? I was thinking about python that should be the easiest one.

About the algorithmical thinking or the creating process, do you have any suggestion on how to develope it or how to start thinking in a proper way for my future projects?

I really appreciated your answer so I better understood where the problem was! This is just another starting point! Thank you again!

I would recommend you to learn Processing, to understand how graphics programming and generative design works. It has a Java version (which is almost syntactically the same as C#) and another in JavaScript (the web language). If so, I recommend Daniel Shiffman’s videos, you can learn to program some sketches in a few days, and it will give you a great background on the basis of the graphics. To see what processing can do, explore here or this sample of mine.

I don’t use Python so I don’t have the knowledge to advise to start there. But I do know that Processing is very simple, because it was created thinking for artists and designers without previous experience in code.

3 Likes

Thanks a lot again for your patience!

Processing seems really interesting and the videos you linked should explain in detail what is a behavior and how to recreate it with coding! I’m just wondering if there is any possible connection between grasshopper and processing? Or a way to recreate what I will learn using processing in grasshopper? Because I saw there is no java script language in grasshopper and I don’t know how much could it be different compared with C# that is instead inside grasshopper.

It’s algorithm design applied to graphics. I don’t like Processing for 3d because Rhino is at another level in comparison, but when it comes to 2d things like particle systems, cellular automata, differential growth, or bioinspired algorithms like these, I usually use Processing to sketch because it’s faster and more visual. There is also a Processing app for Android (APDE), which is not bad, I usually use it in dead times. By the way, there are many apps to learn how to program. The case, there is no bridge between them except that it is algorithmic design and that C# is like Java.

I programmed with Visual Basic until I learned Processing with Java, then I realized that I had learned C# too (they change a couple of things syntactically) and now I only use C# in Grasshopper. So as for language, if you learn the original Processing that uses Java, you will be able to use C# easily in GH. But my recommendation was fundamentally at the level of basic concepts. Obviously you can learn to code using GH (as was my case), but I recommend it because it opened my eyes a lot to get out of GH and understand other ways of doing similar things. Consider it as a quick look for a few days, to open the mind.

In my oppinion an „algorithmic“ approach is how you should work always if your job description has something to do with design or engineering. You analyse the problem and learn about it, you develop a concept to solve the problem and you finally solve the problem iterative and recursive until you reach the point of satisfaction. How good and efficent you do this is up to „algorithm“ you are using and this is something which let engineers and designer have more in common as they typically think of each other.

Generative Design in particular brings this idea down to a computational level. There are two main directions this term is used.
The term „generative“ in first instance means you create an solution which is independent from actual parameters. So if you create an repetitive pattern, a classical example, you create an algorithm which draws you the geometry. In contrast to parametric (only) design, you can throw in inital geometry and the algorithm will (ideally) always build the same pattern. This is design or cad automatisation, which doesn‘t sound fancy enough for some people, but this is what it is. Its about using the computer to do stuff for you. Once you understand this, all the magic about gd disappears.
The second meaning is more about using the computer to help you out in finding a design. Genetic algorithms, machine learning or artificial intelligence in general are used to assist the designer in finding solutions. What most people don‘t understand is, that this is nothing you can‘t find by doing things traditionally. Often the traditional approach yields better results due to explicit control.
It is even worse, many people (including myself) don‘t know much about this topic to create something meaningful. So what they do instead, they create a meaning for their „optimisation“.
I‘ve recently had many discussions with people doing real ai development. What they all said is that the public has a completely wrong understanding of what (weak) ai is…Anyway this is drifting apart. You may understand that I‘m highly sceptical about letting a computational algorithm assist you in thinking.Which doesn‘t mean that there are no applications for it in design and engineering.

3 Likes

I agree with this take as it is human focused. Defining different design approaches by classifying all the different ways a computer can solve it is not a helpful exercise in my opinion.

This is a problem for me. Allow me to rant.

Adding the distinctions between ‘parametric design’ , ‘generative design’, ‘computation design’ or any other label that tries to further stratify the idea of tool-making is confusing. Each strategy is far too nuanced and is more hurtful than helpful in describing the design process, especially to people new to the concept. We don’t need more labels. So for the remainder of this post I will most likely use these terms interchangeably :slight_smile:.

The power in applications like Grasshopper is that it fills the gap between tool-developer and tool-user. I don’t have to petition Mcneel to create a specialized function that solves a very specific design problem for me. It doesn’t make sense for them to ever offer that type of service. Instead I’m given the ability to create the tool myself. This allows for a small niche of single-serve software where the scope is very specific and would never be filled because the economies of scale don’t make it practical for a traditional software developer. You don’t have to beta test or think of every use-case that could possibly occur because you are making it for yourself.

It’s easy to fall into the trap of thinking of GH definitions as refined software that can be shared and debugged and polished or even resold. There is no ‘final product’ because it is the malleability of the definition that is the value. You don’t like how Revit builds a wall? Too bad, go hunt forums for a work-around. You don’t like how a grasshopper definition defines a floor-plate? You can rebuild the definition in any way you want. The value is in the user’s control of the tool. Because the solutions are personal, trying to classify these solutions not helpful. And I’d argue that we are focused on the wrong issue.

I feel the focus for parametric designers should not be about creating and stratifying computational design strategies but rather focusing on accurate interpretation of data. The danger in any of these generative design strategies is that they require humans to define the fitness criteria or interpret data. And that is scary to me because we are not the greatest at that. Is the data valid? Is the approach scientific? Are the results being interpreted correctly? Massive decisions are based on one-off complicated models that are not vetted or tested. To me, these are the burning issues that such an intelligent parametric/generative/computational design community should be focused on.

Thank you for coming to my TED talk.

1 Like

Sorry to answer in late but I was busy with classes.

In my oppinion an „algorithmic“ approach is how you should work always if your job description has something to do with design or engineering. You analyse the problem and learn about it, you develop a concept to solve the problem and you finally solve the problem iterative and recursive until you reach the point of satisfaction.

That’s true and I agree that when you start a project you always should go step by step, going from a large scale till the little one. Analyzing the context to make your idea fitting with it and use what you have learned from the analysis as inspiration. And the creative process usually begin with having a problem and trying to solve it.

The second meaning is more about using the computer to help you out in finding a design. Genetic algorithms, machine learning or artificial intelligence in general are used to assist the designer in finding solutions. What most people don‘t understand is, that this is nothing you can‘t find by doing things traditionally. Often the traditional approach yields better results due to explicit control.
It is even worse, many people (including myself) don‘t know much about this topic to create something meaningful. So what they do instead, they create a meaning for their „optimisation“.

The danger in any of these generative design strategies is that they require humans to define the fitness criteria or interpret data. And that is scary to me because we are not the greatest at that. Is the data valid? Is the approach scientific? Are the results being interpreted correctly?

The problem is, as you said, trying to understand if this data are used or not in the right way. This data comes from the initial process of analysis and we can use this data in grasshopper as an input.

The difference that I see at this point between using a tool as grasshopper and doing it in a traditional way is the different level of accurancy. A stupid example could be that with grasshopper you have in a short time the possibility to know how the sun moves over the project’s area and the shadows it create, and starting from this you can start to place your building.

So as you said the problem for me is to understand how this information could be used. And for this reason I’m trying to understand more about this “generative design” and looking for some examples. What I think is good about this process is the possibility to deform your shapes or surfaces so that they are optimized for the problem you ask to grasshopper to solve.

Humans usually try to solve big problems starting to divide them in smaller problem that are possible to solve. This is also an alghoritmical way of thinking. If you think about an architectural project how complex it could be, you know that you have to divide it in many small situation to arrive to the final result. This could be a traditional way of thinking. But in this way, solving every problem doesn’t mean that you created a building that is perfect. This because every little problem that you solve risck to be an end in itself. Trying to make all the solution fitting together means that you have to create a system that react to every new single problem that you are trying to solve.

In this case grasshopper is a powerful tool because it allowd you to create a system that respond to every input that you add in.

So for me grasshopper and generative design is not an answer to everything because also this process is not pefect and it can not be perfect for the simple reason that are humans that create the alghoritm. But for sure it’s a different way to managing problems and finding a solution based on data and input.

I think generative design, thanks to the speed of analyzing data that you have and the speed that you have on controlling the model, allows you to put your attention in different things during the creative process and that’s why what you create and the result you have at the end is different from a result that comes from a traditional way. This is just my idea, I don’t know if it’s true or not.

1 Like