IRREGULAR (2020)
Generative Design
Team: Aditi Shetye, Seongguen Hur, and Sierra Heckman
Instructor: Danil Nagy
SPATIAL OPTIMIZATION FOR IRREGULAR PLOTS
This project explores computational optimization of floor plans for small, irregularly shaped lots in New York City, using tools such as Rhino, Grasshopper, Python, and Discover. The process involves manual input for lot boundaries and egress types, parameterization for room shaping, subdivision in Python to create a functional layout for a two-bedroom apartment, and optimization in Discover to ensure access to light, proper room ratios, and squareness of rooms. The result is a set of optimized floor plans that address challenges of natural light, ventilation, and usable space, demonstrating the benefits of computational design in making the most of awkward plots while leaving final aesthetic decisions to designers.
Introduction
Small, irregularly shaped lots are abundant in New York City, and in residential districts, they are often left vacant due to the awkward corners, narrow spaces, and limited square footage (less than 2000 square feet). Often, too, these irregular lots are located directly adjacent to existing buildings, restricting a designer’s opportunity to implement proper light and air.
We asked ourselves: if we had to design the floor plan for a lot like this, what would we want solved or automated for us? One design factor we discussed was the issue of natural light and ventilation. New York City building code states that “every habitable room shall be provided with natural light”(NYC 1968 Code, Vol 1, Subchapter 12, Article 3). Therefore, we knew we wanted to find a way for the computer to optimize a program plan according to each room’s need for access to light and/or air, while maintaining certain adjacencies. Our project uses Grasshopper, Discover, and Python to computationally generate these steps of the design process and identify ideal scenarios.
We asked ourselves: if we had to design the floor plan for a lot like this, what would we want solved or automated for us? One design factor we discussed was the issue of natural light and ventilation. New York City building code states that “every habitable room shall be provided with natural light”(NYC 1968 Code, Vol 1, Subchapter 12, Article 3). Therefore, we knew we wanted to find a way for the computer to optimize a program plan according to each room’s need for access to light and/or air, while maintaining certain adjacencies. Our project uses Grasshopper, Discover, and Python to computationally generate these steps of the design process and identify ideal scenarios.
Methodology
Manual Inputs
We first determined which components of the design process would be handled by a person and which would be handled by the computer. We concluded that it would be easiest for a person to create the lot boundary in Rhino with a simple polyline, and also to choose the type of egress that best suits the plot shape (e.g., straight stair versus switchback stair) — we consider these “manual inputs” that will then be referenced in Grasshopper.
Parameterization
Once we had our manual inputs in place, we used Grasshopper to idealize the plot shape for rooms by identifying the angles at each plot corner and chamfering any corner that did not meet the minimum threshold of 50 degrees. This step allows for more ordinarily shaped rooms, mitigating awkward and unusable space.
We also knew that distinguishing party walls from exterior walls would be important to us so we could place programs with their respective adjacencies for window openings. Because the plots we are dealing with hover around 1,700 square feet, we created a set of five programs to implement a two-bedroom apartment for each plot: living room, bedroom 1, bedroom 2, kitchen, and bathroom. The living room and bedrooms are considered “habitable” spaces and thus must be located along exterior walls. In Grasshopper, we were able to shatter the plot boundary using context polylines to distinguish which parts of the plot can have window openings and which are solid party walls.
Next, we placed the egress, considering two things: centralizing the stairs for the safest, easiest path of egress, and shifting the stairs away from a party wall so we don’t lose valuable space along exterior walls. We located the stairs centrally by connecting the defined starting point of the stairs to the plot's geometric center. From there, we moved the stairs along a party wall by ensuring the exterior points of the stairs aligned with the nearest party wall curve.
Moreover, we wanted to consider the thickness of the exterior wall, as it directly affects the amount of square footage a designer has to work with. We achieved this step by offsetting the plot boundary by a standard dimension of 1 foot and trimming it to the stair boundary; however, the 1-foot dimension can be adjusted as needed for whichever type of building construction a designer chooses.
From all of these steps, we get one important output: the apartment's floor area. This will be the geometric space that Python will use to subdivide into a program.
From all of these steps, we get one important output: the apartment's floor area. This will be the geometric space that Python will use to subdivide into a program.
The next step in setting up the computational process was to bring the boundaries of the resulting floor areas into Python for subdivision. As mentioned earlier, we defined a set of five rooms per plot, each with a two-bedroom apartment. We also assigned these programs fixed ratios so they always maintain livable, occupiable proportions within the plot’s square footage.
We split the floor area using four curves, knowing that the number of spaces created would be one more than that, giving us our five rooms. We used Python to run this split recursively according to our set of parameters, while Discover would optimize three things: room ratios, façade adjacencies, and room squareness.
Optimization
To achieve our targeted room ratios, we minimized the difference between the two by dividing them; the overarching objective is that this ratio equals 1, though realistically, this is not a constraint—we are only trying to get as close to 1 as possible.
As discussed earlier, from the beginning, it was important to us to ensure that all living rooms and bedrooms received natural light in compliance with the New York City Building Code. This meant that these rooms would need to share at least one side with an exterior wall curve. We addressed this issue by extracting room areas from our subdivided spaces, then constraining the three largest rooms to be adjacent to the exterior wall curves. This works because we have defined the three largest room ratios as our “habitable” rooms, so without stating that a living room needs light and bedrooms need light, we still end up with the living room and bedrooms having access to the exterior because they have the largest room areas.
One issue we ran into during the subdivision process was that we were getting rooms that technically met our requirements for ratios and façade adjacencies, but were not occupiable; for example, we would get rooms that were 3ft x 20ft, which is clearly not realistic. Thus, we knew we needed to control the “squareness” of rooms. By minimizing the length differences for each segment along the room boundary curve, we can ask Discover to optimize this parameter as an objective.
As discussed earlier, from the beginning, it was important to us to ensure that all living rooms and bedrooms received natural light in compliance with the New York City Building Code. This meant that these rooms would need to share at least one side with an exterior wall curve. We addressed this issue by extracting room areas from our subdivided spaces, then constraining the three largest rooms to be adjacent to the exterior wall curves. This works because we have defined the three largest room ratios as our “habitable” rooms, so without stating that a living room needs light and bedrooms need light, we still end up with the living room and bedrooms having access to the exterior because they have the largest room areas.
One issue we ran into during the subdivision process was that we were getting rooms that technically met our requirements for ratios and façade adjacencies, but were not occupiable; for example, we would get rooms that were 3ft x 20ft, which is clearly not realistic. Thus, we knew we needed to control the “squareness” of rooms. By minimizing the length differences for each segment along the room boundary curve, we can ask Discover to optimize this parameter as an objective.
Results
At the end of our computational process, we produced a set of six subdivided plots that optimize access to light for habitable rooms, room area ratios, room squareness, and the building's corner angles. It was our intent that, if the computer could generate a diagrammatic plan after solving the issues mentioned earlier, the designer could take it and apply it to produce a more realistic plan. In sum, we are using computation as a schematic step in design, so the designer can jump straight into a more developed stage.
The resulting floor plans pleasantly surprised us, as they achieved everything we set out to; most importantly, the spaces are, for the most part, occupiable and clean-cut, which was the biggest problem we faced during the development process.
We noticed that Discover seemed to have an easier time achieving square plots than mitigating area differences in most cases, as indicated by the vertical trend of dots in the Discover images below.
The resulting floor plans pleasantly surprised us, as they achieved everything we set out to; most importantly, the spaces are, for the most part, occupiable and clean-cut, which was the biggest problem we faced during the development process.
We noticed that Discover seemed to have an easier time achieving square plots than mitigating area differences in most cases, as indicated by the vertical trend of dots in the Discover images below.
The highest performing designs seemed to be the most irregularly shaped plots. Of the six plots we tested, the rectangular plot was the least successful at providing occupiable, square spaces, whereas the triangular and L-shaped plots were quite successful at achieving squareness of space, targeted room ratios, and proper room-to-façade adjacencies. If we were to take this project a step further, we would like to test out a large number of plots, 50 or more, to identify more trends and a more comprehensive understanding of the success rate of our optimizations.
Conclusion
Optimizing floor plans for irregular plots computationally proved rewarding, automating a step of the design process, as shown by the six floor plans we generated using Rhino, Grasshopper, Python, and Discover. For designers in New York City, especially, there are bound to be encounters with awkwardly shaped lots like the ones we’ve explored, and by taking the time to solve this step of the design process once, we save several iterative steps in the future. However, as designers, we must also know to take these resultant floor plans with a grain of salt; in the end, it is the architect who is designing space in terms of atmosphere, touch, and emotion. This is why we chose to leave the final steps of the design process, the design of spatial quality, in the designer’s hands.