Floraform is a computational simulation of differential growth on a thin surface. Our system includes a physics simulation of a thin shell or elastic surface with a curved rest configuration, and a model of growth. The surface is modelled as a triangle mesh represented as a half-edge mesh structure. It evolves through time and on each timestep, forces are computed on each vertex of the mesh, new positions are integrated for each vertex, and growth rates expand each edge of the mesh. Many of the techniques used are based on discrete differential geometry. The system can be broken down into several components.
The physics of the surface are based on “Discrete Shells” by Eitan Grinspun, et al. Each edge of the mesh is modelled as a spring which resists stretching of the surface. The edge between two faces also has a bend energy proportional to the angle between the faces that resists bending. These forces are then integrated using an overdamped implicit Euler solver.
In order to prevent our surface from intersecting itself, we need a way to detect collisions between parts of the surface as it grows and to introduce forces to prevent it from overlapping. We use a particle-based collision system. Each vertex of the mesh has an ellipsoid-shaped collision body around it, which has a radius equal to some collision distance normal to the surface and a radius proportional to the ring of vertices around it in the tangent plane. When two collision bodies intersect, we introduce a stiff spring-like force that pushes them away from each other. Detecting nearby collision bodies is accelerated with a simple spatial binning structure.
The growth rate of the surface is controlled by the distance along the surface from the edge or some other specified growing zone. We then expand the length of edges based on a function of this distance. The distance along a surface is known as the geodesic distance, and unlike distance through normal space, it can't be computed directly from the positions of the vertices. To compute this, we use a technique from a paper called "Geodesics in Heat" by Crane, et al. It employs a novel method to compute geodesics using heat flow to calculate the gradient of the distance, rather than directly computing it through a Dijkstra-like search.
As our surface grows, we need to maintain the level of detail of our mesh in order to have a smooth surface and a stable stimulation. Any edge that grows above a threshold length is subdivided such that each neighbouring triangle is split in two. To maintain good triangle shape, an edge is only split if it is the longest edge in a triangle. Additionally, we introduce edge flipping to balance the topology of the mesh as it subdivides.