Elysian Shadows

Basic Mass-Aggregate Physics Engine

Then, as I said, we can add gravity to the simulation with pretty much one line of code:

for(unsigned int i = 0; i < _partCount; ++i) { 	_partPool[i ]._forceAccumulator.y += 10000.0f; } 

The initial frame.

Everything is starting to fall.

Shit is colliding and bouncing around.

Bouncing and scattering more.

The final screenshot shows the simulation after all of the bouncing has been resolved. You'll notice that things still aren't quite resting on each other. This is a common problem in most physics engines caused by micro collisions between resting contacts. I haven't really begun to resolve this yet, but I'm definitely going to have to. Luckily for us, ES doesn't have gravity... but for the sake of having a kickass engine (and maybe some cool minigames/weird places in ES like a windy mountain), we need to support this.

To the left you can also see all of the beautiful floating-point linear algebra required to handle collision resolution. When a bunch of bodies are lumped together with resting contacts, the resolution process is the most intensive by tenfold for just a few contacts easily. The problem is that the resolution of one contact can easily push one of the other bodies deeper into another contact... so the resolution process is iterative through entire groups of bodies touching one another. Collision resolution is definitely the bottleneck of the simulation (and all physics simulations).

Anyway, time to get the fuck back to rotations. I'll be posting them just as soon as I finish.  :)

Discussion Topic

Falco Girgis
Falco Girgis is the founder and lead software architect of the Elysian Shadows project. He was previously employed in the telecom industry before taking a chance on Kickstarter and quitting his job to live the dream. He is currently pursuing his masters in Computer Engineering with a focus on GPU architecture.