Projects & Demos



Atmosphere Rendering

The atmosphere rendering is not designed to be perfectly realistic, but rather reacts in an interesting way with light sources. This is accomplished by implementing a post processing effect that reads the scene depth and direction of the light. The light is incrementally collected for each pixel. Refraction and scattering are both simulated. The wavelength of the light determines how much it is scattered, simulating this gives the sky a red color when the light arrives from a shallow angle, say during a sunrise or sunset.

PBR Materials

The native PBR rendering of Ripples.

Geometry Soup

This demo showcases the 2d physics and light mesh generation built into the engine. The collisions are fairly self explanatory. Collision detection, mtv calculation and overlap resolution are all written in-engine as a 2d physics library. The implementation of the light mesh generation can be outlined as follows:

Fast Multipole Method

This video shows an implementation of the Fast Multipole Method. Each object in the scene has its own gravitational potential, this would normaly grow in complexity very quickly as the number of objects increase. The FMM lets us calculate the gravitational potential much faster and for many more objects.

Even though the FMM allows for 10s or even 100s of thousands of objects to be simulated in real time, this application is bounded by the physics calculations and not the gravitational potential calculations.

Implicit Rendering

In this demo lots of objects were placed in a scene, each with their own position and mass. We let this mass potential decrease in a similar way to how the strength of gravity falls off. To render the scene we calculate the "potential", ie the sum of the influence of every object in the scene for each pixel.

If we let the strength fall off toward infinity we would need to calculate the potential for each object at every location, this would not be very fast. To avoid this issue we let the strength be zero at a distance relative to the size of the mass, like so:

This is obviously not how a graph of gravitational potential would look but that is ok, the goal is to make something visualy interesting.

To create some kind of gameplay we let the objects repell each other and if they collide with enough force they get combined into one bigger object. Finally the player can possess one of the objects and navigate through the landscape.