I’ve finally completed all of the basic topological operations for TopoSynth and am now moving on to treating the dynamics of the system. This last rule involved figuring out how to connect two extended vertices together when they collide.
For example, in the above image, there are 2 vertices that have been progressively extended, leaving a tail behind. The vertices being extended are at the tip. If these vertices happen to collide (or any other vertices for that matter), I want a way to merge them in such a way as to create a handle and thus preserve the 2-manifold nature of the mesh. Simply connecting them with an edge isn’t a solution since that would either break the 2-manifold or create an extremely awkward face. Instead, what I do is a multi-step process of deleting each vertex, which leaves 2 faces behind. This is a kind of reversestellate operation. Then, I join the 2 faces together with a pipe creating a seamless connection between the previously disjoint sections of the mesh.

As an illustration of the delete-vertex operation, imagine the mesh on the left and we want to delete vertex 93 in the middle. When the operation is done, vertex 93 will be gone and a new face consisting of all of the vertices connected to vertex 93 by an edge will be left behind. This operation is easily carried out by circulating around all of the face vertices of vertex 93 and successively adding the face vertices not connected by and edgeto vertex 93 to the new face. To finish, simply delete the vertex, all of its face vertices as well as the edges and the face vertices they link to vertex 93. The face vertices in dark blue circles are the ones that will be deleted in addition to the vertex 93 face vertices.
Cosm
One of the problems that came up when testing this out was how to direct the vertices near enough to each other to connect them in a nice way. There’s the typical procedural methods using splines to model the transition, but in TopoSynth, mesh vertices are more like a kind of super-particle that contain their own ways of interacting with the environment. Eventually, I’m going to be incorporating fields and other forces into the system, so I decided to integrate some previous particle dynamics work we’ve done in Cosm. Cosm already incorporates basic dynamics and most importantly collision detection. This allows me to direct the topological operations based on particle movements and collision events.
I incorporated Cosm into TopoSynth by replacing the notion of a vertex with a particle aka a cosm.nav (with nav being a directed point in space).
A cosm.nav consists of a position in world space and an orientation defined by a quaternion. This is why vertices are not drawn as points, but instead as circles with a perpendicular line. The line depicts the direction the nav is facing while the circle indicates xy-plane of the local coordinate system.
Right now, I’m trying to get more control over the dynamics (e.g. how one vertex meets another while both are moving), thinking over how rule definitions for dynamics and behavior will be described, and what the overall control flow of the system needs to be to make sure the mesh stays valid as do the elements rules are operating on. For example, if a rule deletes two vertices, that rule gets killed, but what happens to other rules that might refer to the vertex in some way? Another big challenge is figuring out how to provide a high-level interface to placing rules on the mesh without having to assign them individually by hand. There’s a lot of approaches to play around with, and now that the nitty-gritty of the topological operations is taken care of, the fun part of figuring out how to compose with the system begins. Here’s a first render of an example, perhaps a little hard to read, but I’ll post it anyway. Expect more soon…
















