evox-b: a next iteration

Erwin Driessens
5 min readDec 2, 2022

--

The single cell type approach of evox-a, while simple to implement, was deemed to be too limited in its potential. The bodies that grew tended to have a structural similarity in all their constituent parts. Likewise, their surface appearance was similar all over. The level of differentiation turned out to be less than expected.

The obvious step: try a generative system with multiple cell types. This possibility was already foreseen in the early stages of evox-a development, as a straightforward way to add more expressiveness to the growth models that can be generated by the evox system.
Supporting multiple cell types is such a fundamental change that it seemed wise to fork the code: create evox-b, a new major variant of the software, initially using the exact same source code as evox-a and then gradually modifying and adding to it. Much of the low-level code had to be changed to deal with more nuance than just ‘empty’ versus ‘full’ as possible grid cell states. The new code works with 4 cell types, it is easily adapted to handle 8, 16 etcetera.

(this article builds on the foundations of the previous one: https://notnot.medium.com/evox-a-types-of-interaction-b61dade96b01)

Sample of a multi cell-type growth. 4 possible cell types, here depicted as either red, green, blue or purple. We can observe that the red and the blue cells are organized differently.

As an example of the low-level work that was necessary, the voxel rendering code had to be upgraded. It can now create a separate mesh for each cell type, and render that mesh in a unique color, as seen in the above picture. The ability to create a mesh for each cell type is useful when we wish to study a multi cell-type body: we can visualize each cell type on its own. This can give some insight into the internal structures of the growths. By turning on/off the visibility of certain cell types, we can peek deeper into the body ‘tissues’.

Let us have a look at a complete body, and its 4 cell types individually:

A body consisting of 4 cell types.
Each of the 4 cell types rendered separately. Note that the purple cell type ‘stagnated´ in the early stages of development.

We can see how all kinds of cell type distributions can occur. Sometimes there will be regions of a single cell type, clearly delineated, sometimes there are mixtures of two or more types, more or less finely intertwined, all of this depending on the behavioral details of the body-bots that produce these cells.

Note that, even when the overall body shape appears to be simple, the internal structure can be quite complex, as shown in the following example, where the body as a whole takes on a spherical shape but the cell type clusters exhibit a more complex structure:

Somehow, in this case, cell type didn’t affect the externally visible shape of the growth, but it did lead to intricate internal activity. This internal activity can’t be seen in a single rendering. It is evident only when one witnesses the development of the body in time, in the evox-b display window.

The following illustration shows a body that has differentiated into two main regions: one with finely mixed cell types, the other with a more coarse mixture. It can be seen that the overall growth in each of these regions has different characteristics.

Sample with two cell type mixtures that differ a lot in granularity.

It is apparent that after the introduction of multiple cell types, the morphological complexity of the bodies that develop has increased. There are many more possible interactions of a body-bot and its local environment, now that the bot can take nearby cell types into account. The downside of this combinatorial explosion is that it becomes harder to find the truly interesting cases… Evolution might come to the rescue here!

Let us have a look at some of the outcomes, this time rendered in monochrome to see their overall structure better. Note that most of the renderings do not depict the raw voxels, but rather a smoothened shape that is the result of an iso-surface interpretation of the cells (subject of a future post maybe?). The smoother shapes have a lighter geometry which makes them easier for the printer to handle, and which could be the best way to achieve high resolutions, eventually.

Note that the evolutionary system is still being worked on. The following growths are just random samples from the huge space of possibilities.

While coding, we oftentimes need a diversion or two. I like to do some physical 3D printer compatibility tests of the simpler bodies that were grown virtually. The printer is a cheap and noisy Creality Ender 3, but I love its presence in the background, churning away without complaints so far. Cleaning the shapes from their temporary support structures is a welcome manual labour that is quite meditative. You end up with a collection of shapes that you can actually feel in your hand. Durable documentation as well!

3D printing compatibility checks on a cheap FDM printer. Each print fits in the palm of a hand.

(next: https://medium.com/@notnot/evox-b-the-processing-pipeline-1276a7743048)

This is a work in progress… to be continued…

--

--