While this site will stay as it is for the foreseeable future, I will be focusing my documentary efforts at aaronwestre.com from now on. I'm leaving this site as-is to serve as a record of my sparsely documented time as a graduate student at the University of Minnesota.
You will find links below to download the first release of the software I've been developing for my thesis project. The name has been changed to Complexity Machine 1 as a symbol of the ongoing nature of the investigation of which it is a part. Though intense efforts have been put into its development, those who download the software should be aware that it is not suitable for general use. There are still many bugs and missing functionality and it will probably crash on you. This however should not stop you from exploring what the software can do.
At this stage Complexity Machine 1 is outputting a wide variety of strange forms:
These forms are intriguing for their strangeness and how they record quirky behavior of the agents interacting in simulated space. My question to those of you who are willing to explore is: how can you imagine this software could be used to create architecture? Consider it a kind of speculative Rorschach test. Perhaps you don't consider it useful at all, or feel it needs some some vital piece of functionality before it's useful. Any and all suggestions, criticism or bug reporting are appreciated.
When you first start the software, you will see two windows: the main window where the simulation takes place and a second window that contains the controls. Dragging the mouse in the main window orbits the scene, which will be familiar to those who have used other 3D software. The control window has notes on other camera manipulations that are also possible. At the top of the control window you will notice a series of buttons that switch between different sets of controls, called tabs. Clicking the controls button will reveal common controls that govern the action of the simulation. Clicking on the play button will start the simulation and clicking it again will pause it. Clicking reset will cause the simulation to revert to its initial starting state. The environment tab controls how the ground plane and sky are rendered. The flock tabs contain parameters that govern the behavior and appearance of each flock, or group of agents, in the simulation. Flocks can be added to the simulation by clicking the add flock button in the controls tab.
As a starting point in your exploration, I've included a couple of preset simulation configurations, which can be used by clicking the preset_1 or preset_2 buttons in the default tab. Try running these simulations and then go to the flock tabs and make some adjustments to see how the behavior of the agents changes.
As you explore the software, be aware that at any point you may capture images, video or 3D files of what is currently displayed in the main window. To do this click the appropriate button in the controls tab. These files will be stored in the folder that contains the software. Please email any images, video or 3D files you generate to me along with your comments.
Thank you in advance to those who offer their feedback about this project.
No real installation is necessary to run the software. Just download the appropriate version corresponding to your operating system, unzip the file and run the cm1 application in the folder. In order to run Complexity Machine 1, your computer must have Java installed (most do these days). In order to capture video, Quicktime must be installed. Please email me with any questions or technical difficulties you encounter.
I'm writing the software for my thesis project in Processing, an integrated development environment created by Ben Fry and Casey Reas as a tool for artists and designers to explore software development as a part of their creative work. Processing employs the Java programming language along with code libraries that provide a quick start for creative types to build software that deals with visual effects and interaction.
In architecture, while two dimensional images are useful, being able to produce and manipulate three dimensional data is even more so. Luckily Processing includes the capabilities of OpenGL, industry standard software for visualizing and creating 3D scenes. While most development environments require a fairly deep knowledge of the mechanisms within OpenGL, Processing takes care of these intricacies for the developer. Perhaps even more importantly, there are a growing number of Processing users who contribute code and help to those who are new to the tool.
To get started, you can download Processing for free. As an effort to speed the uninitiated along, I've created a simple example program (called a "sketch" in Processing parlance), that you can use to start exploring. Before we begin you will need a few supplies:
Unzip it and place the "Processing" folder in with the rest of your applications (generally Program Files on Windows and Applications on Mac) and make a note of where you placed it.
- Kristian Damkjer's very helpful OCD Library
Unzip it and place the OCD folder in the libraries folder inside the Processing folder you placed in with your applications. (On Windows, something like c:\Program Files\Processing\libraries\ and on Mac something like /Applications/Processing/libraries/) This library makes moving around the 3D scene much less complicated.
- My 3D Processing Example
Unzip it and place the template3d folder on the desktop or similar location for now.
Start up Processing and select File > Open and locate the template3d folder. Select the template3d.pde file and then the Open button. What you'll be looking at is the Processing user interface with some sample code that I wrote to act as a starting point for 3D sketches.
Press the Run button (the one at the top with the triangle) and the sketch will start up. The sketch generates a series of random boxes, which can be regenerated by pressing the R key.
Try moving around the scene by dragging the mouse around, which orbits the camera around. Holding down the Shift or Alt keys down while dragging will pan or tilt the camera, respectively. Pressing the X key will export a DXF file of the scene to the template3d folder and pressing the I key will export an image of the current view.
The navigation and export functions included in this example are the primary elements that I've identified as crucial for any Processing sketch that will be used in an architectural setting. The random boxes in the example are included as a basic introduction to drawing 3D geometry in Processing. Try changing the maxDimension value at the top of the code to something like 20 to see how a small modification can have a big effect on the output. The Processing site has some good tutorials, should you want to explore more.
I'll be writing about more Processing techniques useful for architectural work in the weeks to come.
I will be using this site over the next few months as a platform to share my progress in developing a software application, tentatively called Weaver. This is my thesis project, the final requirement in the Masters of Architecture program that I'm a part of at the University of Minnesota. In short, the software is an agent-based simulation environment for three dimensional form finding. Since this definition will confound nearly all readers, a more verbose description seems to be in order.
Agent-based simulations are most typically used these days for system optimization. Suppose a company that delivers milk wants to make their delivery routes more efficient - eliminating unnecessary detours, saving time and fuel. The old method involved careful tracking of delivery routes and best guesses for changes that might increase efficiency. In agent-based simulation, however, this work is left to the computer. All of the deliveries that need to be made are input into the computer and agents - in this the drivers in their trucks - are created in the software to fulfill those deliveries. Agents have at their disposal only a few simple rules by which to make decisions: don't make a delivery if one's already been made, make the distance between deliveries as short as possible, avoid the territory of other drivers, etc. When the simulation is run a rather remarkable thing happens. The digital drivers start developing incredibly efficient routes with only a few simple rules to guide them. More times than not the routes created will be more efficient than the those the company came up with using the old methods. Using computer simulation in this manner has proven so effective that companies have been created with simulation consulting as their express purpose. The complex, intricately ordered, and often surprising results of these simulations are products of a phenomena called emergence. It is emergence that is the primary focus of complexity science, a field that's been around for a few decades, but which has experienced tremendous growth in recent years. Complexity scientists study emergent phenomena from crowd behavior, insect communication, patterns in economic markets, and many more.
One of the most interesting characteristics of emergent, also called complex-adaptive, systems from a design perspective is their propensity for created some of the most strikingly beautiful visual effects in nature. The intricate movements of flocks, swarms and herds are all emergent phenomena; as are cellular growth patterns, synchronization in firefly signaling, and the dynamics of a crowded train station. All of these effects are the result, not of any leader or other ordering force, but of each individual in the group following a small set of simple rules. For a brief introduction to emergence, listen to this show from WNYC's Radio Lab or read Steven Johnson's book Emergence.
The software application I'm building (with Processing) is a sort of generic environment for setting up and running the types of simulations that lead to emergent phenomena. It's my hope that the software will act as a platform from which designers, or anyone else, can explore the rich variety of forms that can be produced by complex-adaptive systems. As the project progresses I will post more explanations, key discoveries, visual output from the software, code samples, and thoughts I have along the way. More soon...
I've uploaded the software I made for the catalyst workshop, mentioned here. The file is a zip archive containing applications for windows, mac and linux, plus the source code. The application is a sort of single-purpose demo that I used for the presentation at the end of the workshop. It creates two LED screens that display a sequence of images, in this case a tv ad for Target and some graphics on the second screen commenting on the company (this data is for demo purposes only). To change the view in the application, use the arrow keys to rotate and the a and z keys to zoom in and out, respectively.
What may prove more useful - to someone - is the source code. The code was developed in Processing, a free and open source development environment geared toward artists and designers. Open the source code (led02.pde) in Processing and you'll find a generic object definition that can be used and extended in your own software.
This software was written as a quick hack for the workshop and is definitely not production quality. There is no warranty, support, etc. for this software. It is intended as a demonstration of a concept that may be useful to others developing similar software. Having said that, feel free to email if you have specific questions about it.