Tuesday, November 25, 2014

Project 4 Final Progress





 The flocking simulation is now running and displaying the trails for each particle. Initially I was drawing each trail every frame because my sketch was 3D and allowed for camera movement. However, that significantly slowed down the animation. I realized that I could significantly speed up the drawing by locking the camera and only drawing the changes every draw, instead of redrawing the whole frame.

Below is an example of the flocking behavior with the trails drawn as described above.



I'm still trying to decide where I want to go with this project. Right now the flock is just following a particle moving along a 3D sinusoidal curve. I know I want the flock to be influenced by something else, like an image, and have that source be revealed by the behavior of the flock.

Thursday, November 13, 2014

Project 4 Final

Idea
Create generative art piece utilizing the swarm behavior of a flocking system as part of the aesthetic.

Goals
Have the boids "paint" an image by leaving behind a colored trail or some other type of trail technique, such as a polygon trail or bezier curve.
Develop some way to control the boids in an interesting way, such as based off an image map, or just through user interaction.

Technical
Will be coded in Processing, and built on top of the flocking system I've already created. Or I may migrate my code to webGL so it is easier to be presented anywhere.

Presentation
My project would be either projected in real time, or shown on the big HVS screen.



Inspiration:

Golan Levin
Floccugraphs



585_Golan Levin_floccugraph_1_1999

Robert Hodgin
Magnetic Structures
585_robert hodgin_Magnetic Structures_2007

Daniel Shiffman
Swarm
 http://www.multimedialab.be/blog/wp-content/uploads/2007/03/swarm3_482.jpg

Thursday, November 6, 2014

Project 3 Chaos and Complexity: Progress

After presenting my last work in progress it was clear that merely looking "chaotic" was not enough and I needed to embed a true chaotic system into my simulator.

I found the interactivity of my piece very rewarding and did not want to give that up. However, when it was not in use, my piece was quite uninteresting and would not entice viewers to actually interact with it. So I decided to embed a chaotic system to drive the cursor position when there are no users interacting, and as soon as someone starts interacting with the mouse, it uses their input to drive the simulation.

For the chaotic system, I chose to implement a double pendulum especially since it has similar forms to what my piece was already generating and I thought the movement would go well together. I use the end of the double pendulum to drive the particles and I only display the endpoint of the pendulum, so it is not very visible that my simulation is using a double pendulum. And I have not yet decided if that is desirable, or if I want to make the double pendulum more apparent.

Also, in order for my pendulum to be stable, I needed to implement 4th order Runge-Kutta instead of just simple Euler integration.

You can see the trail of the double pendulum as the circle in the image below.



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.