2 Units: Rise and Shine - Stage 1
Part 1: It’s Spongebob Time. “Aye-aye, captain!”
For this assignment, I have used a similar underlying logic across parts 1 and 2 of stage 1. Specifically, for this part:
- I have first selected an image that could be suitable for the task. For this step, I have deliberately chosen images characterized by clearly defined features and contours to facilitate the pixelization / panelization process happening at the later stages.
- Then, I have gathered the image information by extracting its dimensions (width and height), as well as the aspect ratio (width-to-height ratio).
- I have then defined a wall arc with customizable parameters such as arc radius, start and end angles. I have chosen to define the starting angle within the range of 0 to 90 degrees and the end angle within 100 to 360 degrees. This deliberate choice ensures both a distinct separation between the arc's starting and ending points and a minimum length for the arc segment, thereby preventing any inconsequential or excessively brief sections.
- I have then extruded such arc along the z direction to create the curved wall surface. Important note #1: instead of incorporating an explicit slider for adjusting the height of the wall, I opted to adjust the wall height based on the width-to-height ratio (calculated at step 2) and the arc length (calculated at stpe 3). This ensures that the right proportions are respected when overriding the panel colors at a later step
- I have then panelized the wall surface by dividing it into square panels.
- I have then overridden the panels original colors with the colors obtained from the custom image. To match the colors from the custom image, I mapped the list of color values to the adaptive panels and then applied the overrides.
Note: at this step, the arc length is defined in terms of radius, starting angle, and ending angle.
Important note #2: I developed a custom node to intelligently determine the u and v inputs based on the arc curve's length and the wall's height. By adjusting the number of panels along the vertical direction, I ensured that as the wall dimensions change, the number of panels updates dynamically to maintain nearly square shapes. This method keeps the panel layout flexible while ensuring the panels stay nearly square, maintaining a visually pleasing appearance!
The resulting design looks as follows:
The original image is displayed below for completeness:
Please note that to achieve an even more aesthetically pleasing result, one could increase the number of panels for a finer panelization resolution. For the result above I have used 42 panels along the vertical direction (height). Increasing this number lead my computer to crash however, so I kept it at 42 which is already a very good resolution.
Part 2: It’s Painting Time!
The logic I have used for this part, is very similar to the logic employedin part 1. Specifically:
- At the beginning of this task, I set up two options/choices in the code. These choices help demonstrate how brightness and hue affect (individually) the panel heights at a later step. By incorporating these choices, the aim is to provide a structured platform for exploring and comprehending the diverse effects they yield.
- Option 1 (Select it by using Index 0): A landscape image. For Option 1, the brightness values of the landscape image will determine the variation in panel height.
- Option 2 (Select It by using Index 1): A hue color scale image. For Option 2, the hue values of the color scale image will dictate the variation in panel height.
- I have gathered the image information by extracting its dimensions (width and height), as well as the aspect ratio (width-to-height ratio). (Same as Stage 1 Part 1)
- I have then defined a line using one customizable parameters: the wall length. I have used this line as a base to create a sine wave curve that can be adjusted by customizing number of waves and amplitude parameters. Note: I have kept the curve as a simple sine curve, as I found it already aesthetically pleasing for the purpose of this assignment.
- I have then extruded such curve along the z direction to create the curved wall surface. (Same as Stage 1 Part 1)
- I have panelized the wall surface by dividing it into square panels (Same as Stage 1 Part 1).
- I have then overridden the panels original colors with the colors obtained from the custom image. To match the colors from the custom image, I mapped the list of color values to the adaptive panels and then applied the overrides. (Same as Stage 1 Part 1). Additionally, I have implemented a custom node that allows the user to select how to flip the image on the wall (horizontally, vertically, or both horizontally and vertically).
- Finally, I have remapped the brightness / hue values from the image into a range of heights from 4” to 36”, depenting on the option selected 1/2.
The resulting designs are illustrated below:
Option 1: Landscape Image (Brightness-based Panel Height)
To improve the visual appeal, one could increase the panel count even more for finer detail, similarly to what discussed for part 1. For this result, I have used 50 panels vertically, balancing detail and computational resources. Overall, I really like this result, as it gives me a vibe of relaxation and calmness. 🧘🏻🌸
Option 2: Hue Color Scale Image (Hue-based Panel Height)
Note: I crafted this design purely for illustrative purposes, demonstrating how hue mapping creates smooth transitions between the panel heights (hence why the choice of image of hue scale colors).
3 Units: Gonna Need Shades - Stage 2
For this task, I have implemented the following logic:
- First, I have created the two rectangles that will serve as the footprints for the lower level and the upper level. Each rectangle can be varied in terms of dimensions and it is extruded to create a two-level building form. The adjustable parameters are:
- Lower Level - Rectangle Width
- Lower Level - Rectangle Length
- Lower Level - Wall Height
- Offset: the offset of the upper level rectangle footprint with respect to the lower level rectangle footprint. Note that if the offset is set at a negative value, the upper level footprint will be smaller than the lower level one.
- Upper Level - Wall Height
- Then, I have created a custom node to calculate the number of panels along the two individual horizontal dimensions (length, width) and the vertical dimension (height). The separation into length and width dividers was done to ensure consistency in panel width along both the length and width of the walls. I have applied such node to both lower and upper level walls. This node has one adjustable parameter, which is the panel width. The panel height was set to be the same as the height of the respective level.
- I have panelized each wall using Rect_Panel with Rotating Shade panels.
- I have placed a custom node to allow the user to rotate the adaptive panel placement points to create the desired rotation of the panels. For this node, I have selected value 1 to place the hinges on the left side of the panel.
- I have set the sun position and the project location to be in Stanford, California.
- I have used the Panels.ComputeSunDirectnessOutwardNormals.dyf custom node to point all the panel normals toward the outside of the building. This computes the directness values, either as dot products, or as scaled directness values.
- I have used the Panels_ComputeAngleBetweenSunAndNormal.dyf custom node to calculate the angle between the sun and the normal to the shade panels.
- I have adjusted the shades height to match the height of the panel, which is also the height of the respective wall (can differ between lower and upper level).
- I have changed the color of the surface panel elements based on the computed directness values.
- I choose a dark color (dark blue) to indicate the panels with the least direct orientation.
- I choose a bright color (yellow) to indicate the panels with the most direct orientation.
- I have changed the shades width according to the sun position. The user can specify in my custom node an index:
- 0 to have a variable width according to computed sun directness value (dot product).
- 1 to have a fixed width equal to the maximum panel width
- I have changed the shades orientation according to the sun position, allowing the user to specify in my custom node an index:
- 0 to use the dot product calculated at step 6
- 1 to use the computed angles calculated at step 7
Note, that I have deliberately chosen to use the dot products (calculated at step 6) instead of the scaled values, because believe they provide a more accurate representation of the relationship between the panel orientation and their directness values (and I could capture intermediate values, represented by intermediate colors between blue and yellow like green).
As a personal choice, I have decided to have a variable width according to computed sun directness value, and to use the dot product instead of the computed angles to change the shade orientation. For simplicity, I am going to display these results below.
Note that my code offers the possibility of changing the shades orientation using the computed angles as well (I have checked these results, and they are also good).
The resulting design and behaviors are illustrated below:
May 2, 2024, Stanford CA - Early Morning
May 2, 2024, Stanford CA - Noon
May 2, 2024, Stanford CA - Afternoon
From the images below, it is clear how:
- When the sun hits directly the panels, the shades are displayed in a bright yellow, they have a full width and they cover completely the glass panel, hence preventing light from going in.
- When the sun does not hit directly the panels, the shades are displayed in dark blue, and have no width to allow the most light to enter the glass panels.
- When the sun hits the panels at an angle, the shades appear in a shade between bright yellow and dark blue. These shades have a partial width, allowing some light to enter the glass panels while still providing some coverage.
4 Units: Shield Your Eyes - Stage 3
For this taks, I have used a similar logic to the one followed for stage 2. Specifically:
- First, I have created a set of adjustable parameters that allow to define the tower shape and dimensions. These parameters are used to firstly create three polygons at three different levels (lower, mid, upper). These adjustable parameters are:
- The number of polygon sides (choice between minimum 3 and maximum 20)
- Lower-level polygon radius
- Mid-level polygon radius
- Upper-level polygon radius
- The tower height (which is the height of the plane where the upper polygon lies)
- These three polygons are then used to create a surface by loft, representative of the tower envelope (walls).
- I have implemented a custom node logic that allows me to define the dimensions of the triangular panels. Specifically, I ensured that each triangle panel is about 8’ tall x 8’ wide.
- I have panelized the surface using panels with resizable openings at each wall panel location. Specifically, I have used “Triangle_Panel with Resizable Opening - 3 pt”. Note that I have implemented a node logic that allows the user to choose between three different triangular panel configurations, defined by the nodes Panel.PanelTriangleA, Panel.PanelTriangleB, and Panel.PanelTriangleC.
- I have set the sun position and the project location to be in Stanford, California.
- I have changed the color of the surface panel elements based on the computed directness values.
- I choose a dark color (dark blue) to indicate the panels with the least direct orientation.
- I choose a bright color (yellow) to indicate the panels with the most direct orientation.
- I have adjusted the panel geometry (the size of the shutter) based on the directness of each panel to the sun.
For the final design, I have deliberately decided to have a dome-like shape rather than a prism. The parameters were set as following:
- Number of polygon sides: 7
- Lower-level polygon radius: 10
- Mid-level polygon radius: 13
- Upper-level polygon radius: 8
- The tower height: 10
The resulting design and behaviors are illustrated below:
May 2, 2024, Stanford CA - Early Morning
May 2, 2024, Stanford CA - Noon
May 2, 2024, Stanford CA - Afternoon
Similarly to what already seen in Stage 2, from the images above, it is clear how:
- When the sun hits directly the panels, the panels are displayed in a bright yellow, and the shutter is closed at its maximum (Panel Frame Width Parameter = 0.49) to prevent sunlight to enter the building.
- When the sun does not hit directly the panels, the panels are displayed in dark blue, and the shutter is open at its maximum (Panel Frame Width Parameter = 0.02) to allow the most light to enter the glass panels.
- When the sun hits the panels at an angle, the panels appear in a shade between bright yellow and dark blue. The shutters have a partial width, allowing some light to enter the panels while still providing some coverage.