Mesh Weaves

I’ve been meaning to build some subdivision operators on top of the half-edge mesh class in SpatialSlur for some time now. Having finally made some visible progress in this direction, I though I’d post some images. The weave operator below is one of several that’ll make their way into the library for the next release which should be available in the not too distant future.

Update: Subdivision operators can be found under SlurMesh.HeSubdivide in the latest release.

a_05
Weave A_1
a_07
Weave A_2
a_06
Weave A_3
b_02
Weave B_1
b_04
Weave B_2
b_08
Weave B_3
a_03
Weave C_1
c_05
Weave C_2
c_01
Weave C_2

Differential Growth 3

I recently squashed a few bugs in the differential growth simulation that prevented me from sharing the source earlier. It was satisfying. With that out of the way, here’s a link to the Grasshopper definition (note that it makes use of SpatialSlur.dll which can be downloaded from the latest release).

Growth density variation

As mentioned in the previous post, the simulation uses a half-edge data structure to handle refinement of the surface mesh as it grows. When an edge exceeds a specified maximum length, it splits (along with the triangles on either side). Edges are also spun to unify vertex valence throughout the mesh, resulting in well-proportioned triangles that are ideal for all sorts of things. The video above shows the effect of different maximum edge lengths on the growth process (from large to small).

The half-edge mesh is particularly well-suited to this process because it allows such local topological modifications to be executed in constant time. In other words, splitting an edge will always take the same amount of time regardless of how many other edges are in the mesh. This property is especially important here since we’re working with an algorithm that tends to dramatically increase its own input size from one iteration to the next. Without constant-time topological operators, things would quickly get out of hand.

Frame_0250
Growth 2 iteration 250
Frame_0350
Growth 2 iteration 350
Frame_0450
Growth 2 iteration 450

Reference Documentation

Just a minor update in response to some emails I’ve been receiving – reference documentation will now be included with all future releases of SpatialSlur.

Reference_01

It’s pretty sparse at the moment but I’m hoping to gradually flesh it out over the coming weeks. For now, if there’s a particular part of the library you’d like clarification on, send an email or leave a comment.

Growing Dendrites

Since stumbling upon this paper by Ryo Kobayashi, I’ve been spending a shameful amount of time growing dendrites on my computer.

Isotropic dendritic growth

The process shown in the video above makes use of a phase field model to track the evolution of the interface between a supercooled liquid and a solid. While this seemed like unfamiliar territory at first, a quick look under the hood revealed a set of reaction-diffusion-like equations. The system is represented by two co-dependent scalar fields – one representing temperature and one representing the phase. The latter is either 0 (liquid) or 1 (solid) everywhere in the system except at the interface where it grades smoothly between the two extremes. At each step, the current temperature contributes to the change in phase and the change in phase contributes to the change in temperature. Over time, this feedback leads to instabilities in the interface which result in all the fancy branching patterns.

The Grasshopper definition is available here. Note that it makes use of SpatialSlur.dll which can be downloaded from the latest release.

d_02
Isotropic dendritic growth 1
a_04
Isotropic dendritic growth 2
b_03_2
Isotropic dendritic growth 3
b_04_2
Isotropic dendritic growth 4

Differential Growth 2

Below are a few more spoils from the differential growth studies – this time visualizing the collision spheres centered on each vertex which prevent the mesh from self-intersecting as it grows.

a_01
Surface growth self-collision 1

a_02
Surface growth self-collision 2

a_03
Surface growth self-collision 3

a_04
Surface growth self-collision 4

Differential Growth

Inspired by recent work from Nervous SystemDeskriptiv, Andy Lomas, and a few clever folks over at the Grasshopper forums, I decided to try my hand at simulating differential surface growth.

Differential surface growth 1
Differential surface growth 2
Differential surface growth 3

Besides being an extremely effective means of procrastination, it turned out to be a useful test for several classes within the SpatialSlur library – most notably HeMesh for the dynamic mesh refinement and SpatialHash3d for quickly handling vertex collisions.

Moving In

Welcome to the new home of Spatial Slur.

After fumbling around at Blogger for years, I decided it was time to relocate to a more hospitable corner of the internet. Here we are. Much like its predecessor, this website will function as a personal documentation tool for ongoing computational design research. For more info, visit the About page.

Alongside the new website, I’ve also published an open source code library by the same name on GitHub. I’ll be making use of it in many of the examples posted here, so if you’re interested in following along, check out the Code page.

Hashed_Packing_300_Crop_01
Spatially hashed circle packing