Shark creature or spine. Not really sure where this is going, just playing around
Today’s most exciting structure (tagged as sevenBurst)! This is a ‘plant’ that has two types of nodes: The first, I will call Growy, moves towards a weighted average of 1) the average direction of collided spheres and 2) the previous internode direction. The other, lets call it Branchy, generates a little ‘star-burst’ pattern. Each Growy node knows how many nodes it is away from the last branchy node. When a growy node gets created that is n nodes away from its branchy predecessor, it creates a new branchy node. In this case n=8. Branchy nodes spawn n=7 growy nodes in a radial pattern orthogonal to the internode vector.
Notice that all the branches maintain their distance from one-another. This is a nice result of using this diffusion-limited-aggregation-like method with the spheres; the structure blocks other parts of the structure from the jittering spheres, so it self-avoids. Of course, this 7branching structure could very easily be expressed with an l-system, but forcing an l-system to self-avoid and have all these organic curves would be a bit clunky. Perhaps I am just trading one type of clunky for another: The length of the first paragraph suggests the definition of such a structure requires a lot of code. Well it does, at the moment. But all of this is practice for create a neural-net like genetic code which takes in particle collisions and decides what to do (where to spawn a new node, die, etc.) Then I don’t have to write the growth rules; they get generated!
Today I learned how to animate growing structures in blender! The yellowish one is more reflective of how the growth simulation actually works: nodes (or vertices) keep getting added, and the line segments are between nodes. The rainbow one uses blender’s skin modifier with a subdivision surface modifier for smoothing. Both animations are constructed using the build modifier. The build modifier re-constructs the mesh according to the order in which elements were added, in this case by the script.
These structures are generated using a growth rule that determines where new nodes are added when a spherical-particle collides with a pre-existing node. The position relative to the collided-node is a weighted average of two vectors. The first is the vector defined from the parent-node to the collided-node, A. The second vector is that from the collided-node to the center of the particle (B).
The particles are moving mostly in a random-walk, very slightly biased downwards.
All other parameters equal, these structures were run with different weights for the A and B vector. From top to bottom, the structures are generated with an increasing proportion of the weight on the B (particle position) : weightA,weightB = (0.95,0.05) (0.7,0.3) (.5,.5) (0.05,0.95)
To me these structures are a sort of visualization of the different levels of abstraction from the growing structure and its environment.
you are welcome to play with this project yourself!: https://github.com/jlopezbi/PlantGrower
Today I was mostly trying to figure out how to encode a ‘genetic language’ that can express a wide range of growth rules in PlantGrower. But that got tiresome so here is a shape discovered by making the particle size really small.
screen shots from today’s development of PlantGrower. Happy to see structures beginning to get more reminiscent of corals
first steps on a project to generate plant-like forms: https://github.com/jlopezbi/PlantGrower