Here’s a quick test of simulating the joints between rigid panels.
- Hold right MB and drag to rotate the view
- Zoom with mousewheel
- Left Ctrl + Left MB on a panel or joint and it will become a moveable handle (object will turn yellow). Repeat to disable.
- Left Shift + Left MB on a panel or joint and it will become a positional restraint (object will turn red). Repeat to disable.
- Add a uniform force upwards using the buttons on the top left of the screen
- Adjust the force necessary to break the joints with the scrollbar
Although by no means the bleeding edge of SPH simulations, it does implement a tweaked Kd-Tree search for n nearest neighbours, the standard SPH functions (kernels, viscosity, and pressure), and runs at interactive rates.
Click on the image to try it out:
I’ve been playing around with SPH simulations, and in SPH as in any physics based simulation, the length of the time step in the integration process is critical. So, this video shows what happens right at the edge of numerical stability. With a fixed time step, the force calculation sometimes gives a force that’s too large to be reasonably dealt with – this then causes a little chain reaction and results in some pretty wild behaviour….I should say that not everything in the video is cause by numerical instability – I’ve implemented a basic user force input that acts on the particles when the user clicks the screen.
Simulations are used for predicating things (i.e. how a structure will deform, how a fluid will flow, etc…). However, their predictive qualities are always subject to conditions and restrictions – there is no perfect physics engine (yet), and we are certainly a long way away from human interaction simulation (another one of my favorite topics…). As a result, simulations are often used simply as a starting point, sometimes for more rigorous analysis, but also for purely aesthetic choices. From that perspective, perhaps studying very “unrealistic” applications of simulation engines will open some new geometrical directions….
We’ve just uploaded a small but important update to the component set. Basically, the major reworking of the components in the last update messed with the actual integration functions – this has been fixed. More specifically, we’ve settled on a leapfrog integrator for a force based simulation and the RK4 integrator, with a fast option, for regular integration.
In general, we are shifting our focus away from adding new functionality (check out the dynamics source code – you can write your own!) towards optimizing performance. This release is a first step in that direction. Also, some updated example files have been added – more to come.
Check out the new Distance Binning component. At only %30 speed increase, it’s still a WIP.
This release features a major reworking of the component set. Yes, we managed to break all functionality during the refactoring; No, we couldn’t figure out how to fix it for a quite while…..In the end, it all came together, though. The biggest change is that we combined the Static and Dynamic Integrators into one. This means you can toggle between the two modes on the fly. Beware, though, if you leave the timer enabled and switch to the static integration, you’ll rebuild the solution at every time step (i.e. crash)!
We have also decided to release our code for the dynamics. This means that if you adhere to structure, you can build your own dynamics.
- Acceleration component has been removed. By default, the simulation assumes all vectors are forces. This can be toggled in the settings if you simply want to integrate.
- The settings component has been broken out into three components and a few menu options.
- Inter-particle forces have been added. This is meant more as a prototype for future developments (flocking has been done many times before…more on this later). These dynamics are SLOW!
- Dynamic Emitters! These are really fun…
Surface Attraction: Turns any list of surfaces into gravity attractors or repellers.
Surface Flow: When particles are close, they flow along any list of surfaces.
Separation: Assign a distance to be maintained between particles within a given radius.
Cohesion: Particles will tend towards the average of their neighbours.
Alignment: Particles will tend towards travelling in the same direction as their neighbours.
Dynamic Keyframe: Give collections of dynamics time intervals to be activated.
Michael Braund, Chris Walsh, and I just presented a paper at this year’s iteration of ACADIA, a conference focusing on digital tools and techniques in architecture. Our submission was a paper featuring a human- space interaction analysis tool called, for lack of a better or even relevant name, “Dragonfly”. I will be posting some videos and hopefully a live demo over the next few days. We received some great feedback (mainly urging us to differentiate ourselves from existing tools and to do more testing), and we will certainly take those suggestions to heart.
Some of the outstanding papers for me were Achim Menges and company’s work with wood, Maciej Kaczynski’s (et al) work with digital fabrication (i.e. Robots!) of thin masonry vaults, Skyler Tibbits’ work on large-scale self-assembly, and of course Mark Foster Gage’s keynote talk telling us all to shut up about computation. Actually, I think he was telling Patrick Schumacher to shut up about computation….but perhaps it goes for the rest of us as well.
[vimeo http://www.vimeo.com/28353918 w=720 &h=480]
Although using the vector display with a gradient significantly decreases the performance of GH (video has been sped up 1.5x), it looks great!
I only wish I could customize the sprites, or at least make mesh vertices transparent….