Thursday, October 30, 2014

Project 3 Chaos and Complexity: Progress

I begun with experimenting with gravitational attraction/repulsion of the particles from the mouse cursor. After some experimenting, I was able to get some interesting behavior from my particle simulation. The movement of the particles looks "chaotic," but strictly speaking, the system itself is not really chaotic. Nevertheless, I am happy with the shapes and forms I am able to achieve and I find the simple user interaction I included to be very rewarding and fun to play with.

Below is an example of just one of the many dynamic forms my system produces interactively.



Tuesday, October 28, 2014

Project 3 Chaos and Complexity: Idea

For project 3 I am interested in creating a chaotic particle system, and I was inspired by this work by Felix Woitzel:
http://www.cake23.de/fmx/turing-fluid-particle-projection-feedback.html

I plan on creating some sort of feedback loop that affects the particles, however, I don't have an exact plan and I will first just experiment and see if I can come up with something interesting.

In order to run a simulation with a large number of particles, I will look into how to do the simulation with shaders on the GPU. In the meantime, I will implement something CPU based to see what interesting behaviors I can achieve before worrying about the number of particles.

Monday, October 13, 2014

Project 2

I initially intended to to the bulk of this project as a custom python script in Houdini (which I had never done before), but I ran into difficulty and was not able to get the results I desired. I wanted to maintain a lot of control and have a custom Tree class that would have its own methods and logic, but I just could not seem to manipulate the geometry from my Tree objects. I'm fairly certain I was making some false assumptions about how python works and I decided that with the time left it would probably just be easier to implement my core concepts through the standard Houdini nodes. By doing so, however, I lost the fine control and had to sacrifice some features that I had wanted to implement.

I start by emitting points randomly from the terrain surface, and then placing a tree at that point. I also varied the size of the trees so that those that are lower and where more water would collect are larger.

I originally wanted the trees to have varying lifespans based on how optimal their location was, and then the trees that lived longer would produce more seeds. However, with my current implementation all the trees have the same lifespan. So to simulate the reproductive success of the trees, those that are in an optimal location spread more seeds over time. The seeds are spread by scattering particles in random directions from each tree and then projecting those particles back onto the plane. Once that is done, a tree is instanced at that point.

This first image is the initial condition with the trees scattered randomly across the terrain. Although, you can see that I have a treeline to prevent the trees from growing too high up on the mountain.


Advancing forward in time, you can see that the trees start to become more clustered and a structure appears.


Even further ahead in time, the trees become even more clustered in the optimal regions, however, I also check to see how many trees are near a given tree, and kill the tree if it is being crowded out.


I still need to work on the visuals so that I can render a timelapse, rather than showing these screenshots.

Tuesday, October 7, 2014

NetLogo

In anticipation of project 2, I tried to use NetLogo to emulate the effect I wanted to generate for project 2.
My idea for project 2 is to generatively create a forest on an arbitrary piece of terrain. I will use some  pseudoscience logic to control where the trees "grow." Basically, the lower parts of the terrain are where the water would collect and thus more favorable regions for trees to grow. However, too many trees near each other will compete for resources and block each others sunlight causing them to die. Therefore I predict that some sort of equilibrium could be achieved by balancing these parameters.

These parameters are what I attempted to simulate in this NetLogo model. I used the Rabbits and Grass model, but treated the energy providing grass as if it were water-rich soil and the rabbits were stand-ins for trees. I kept the grass fixed because the low areas of the terrain where the water collects would also remain fixed. For the rabbits, if they had enough energy they could reproduce like a tree spreading its seeds, but otherwise the remained still. I also queried how many neighbors each rabbit had so I could kill them off if they became to clustered.

Below is the initial condition for the model.

After running it briefly, the rabbit population seems to be skyrocketing. But they are mostly grouped where the grass is, which is what I intended.

 After letting it run some more, you can see the population does level off and approaches an equilibrium state.

I will be using these principles to help inform how I create project 2.