Paraform with 3D Voronoi Projection
Last updated
Last updated
Jeremy Roh has a youtube series that explores creation of Paraforms in grasshopper. Roh considers a paraform to be a parametric geometric object, his video series creates a grasshopper tool for creating and working with these 3D forms.
In this section, the focus is on creating a 3D extruded surface that has holes cut based on a 3D voronoi partitioning of the form.
In Jeremy Roh's tutorials, he begins by creating 2 grasshopper curves using math expressions, and then creating a lofted surface between the curves. For my example, I've defined 2 nurb-curves in Rhino that correspond to a tracing of part of a dragonfly wing.
Image 1
Image 2
Step 1: After creating the 2 curves, where the curves have points defined in x,y and z planes, then the curves are referenced in the grasshopper definition, I add 2 rebuild curve components to simplify the curves; restricting the curve degree to 3 seems to improve the final structures.
Step 2: Create a lofted surface between the curves and provide that geometry to the populate point cloud, we're able to generate random points to act as voronoi sites.
Image 3
Step 3: Create a bounding box around the lofted surface, use this as the bounding box geometry for 3D voronoi cells in conjunction with the 3D points generated in step 2.
Image 4
Step 4: Find Projection of 3D voronoi cells on lofted curve surface. The image below shows that the lofted surface and 3D voronoi cells are inputs to the Brep - Brep intersection component. The output is then sent to the discontinuity component which acts to find all curve intersection points.
Image 5
Image 6
Step 5. The curve intersection points are used as input to create closed polyline objects, these are the voronoi cells along the surface.
Step 6. The polyline geometry is used as an input the scaled geometry component, these shapes will create a perforation of the surface. The scale component creates a smaller object within each voronoi cell, these will be voids in the 3D geometry. The Arithmetic Mean component determines the center-point for each set of vertex points which were calculated as intersection points from the discontinuity component. The scale component is parametrically controlled by a number slider, we can see the current value on the slider is 0.6, these scaled cells are the inset green shapes on the diagram above.
Image 7
Image 8
Step 7. As shown in the image below, the list of scaled curves are passed through the fillet-curve component where a numeric slider gives control over rounding of curve's angle, shown in green in image 10. The Weave component takes both lists of curves as inputs: the upper input are the voronoi boundry curves, the lower input are the inset, scaled and filleted green curves. The Weave component matches these curve geometries as pairs, these paired curves are fed into the loft component so surfaces are rendered between each pair of curves.
Step 8. In the image below, the lofted surface is passed into the extrude component. The Unit z vector, combined with a vector amplitude component extrudes the geometry in the z direction. The extruded voronoi surface is seen in Image 13. The output form does have some design instabilities, depending on number of voronoi sites, random seeding of point cloud, etc. Rebuiding the initial curve surfaces seems to help minimize the likelihood of final objects with defects.
We are creating a parametric tool that allows us to play with variations of this object. Rather than creating just one unique artifact, for example, we can modify the size of those cells using the slider. The number sliders and boolean toggles displayed in the Grasshopper definitions provide dynamic UI control of the generated geometry. Learning to think parametrically means: as we progress through the design process/ creation of an object, we want to identify properties that we'd like to have parametric control over. We need to consider how to create associations between objects to allow these parametric modifications to bubble through the definition's data via our designed associations.
Image 9
Image 10 and 11
Image 12
Image 13