The Physics Game
    Nicholas Penwarden and Mohamed Eldawy

The goal of this project is to give us a chance to explore the issues in doing simulation for animation. The idea is to simulate something very simple, but to simulate it using various methods to see the tradeoff between them.

Our aim is to build a game. The game features a main character moving in a 3D world and interacting with objects. The interactions will involve several cases that require physical simulation and collision detection.

Game Features

This is quick overview of the features we plan to implement in our game. This list is ascending in difficulty level.

1. The main character: The player can choose between 2 kinds of main characters. The first is a rigid ball. The second is a "soft" object consisting of springs connected together.
Pushing the arrow keys doesn't merely move the character in the world, instead it applies a certain amount of force on the object in this direction. The actual speed of the character will depend on the force applied and the friction of the ground and air.

2. Grounds: The game features different kinds of ground ranging in physical properties. These range from rough terrains like grass and concrete and ending with slippery icy landscapes.

3. Simple particle systems: The game will feature particle systems. This includes stuff like fountains. The fountain does interact realistically with the main character

4. Simple rope or chain: The character can use ropes to swing around. The swinging motion will be calculated realistically using different integration methods. We will compare in our results what we obtained using each different method. A difficult case we consider implementing is a hanging bridge, which is a set of rigid wood parts, connected together with 2 pieces of rope.

5. Interacting with other soft objects: The character can interact with other soft objects like pillows or spongy objects. When such an object hits the character, the interaction should be realistic.

6. Stiff objects: Next, we will focus our attention on stiff objects. We will try to implement stiff version of the above mentioned elements, in addition to elements like poles planted to the ground. The character can hit the pole, and it should interact realistically. The difficult part here is to maintain a constant frame rate. We may need to modify the linear system solvers available in order to maintain a constant frame rate throughout the game.

7. Simulating the wind: We should be able to simulate wind forces including storms (wind that keeps on changing its direction and force)

8. Simple cloth simulation: We plan to integrate simple cloth simulation in the game. This starts with simple objects like flags, and ends up with more complicated objects like bridges consisting of cloth. The cloth interaction with the character will be also integrated. Cloth pieces will have to be small in order to achieve an interactive rate.

Challenges

We foresee two major challenges facing our project

1. Maintaining an interactive frame rate: Maintaining an interactive frame rate could be a challenge, especially with the physical simulation of cloth and other systems with big amount of particles.

2. Maintaining a constant frame rate: It is difficult to maintain a constant frame rate especially when using implicit integration techniques.

We plan to do our best to achieve those 2 goals. But, if things get out of control, we plan to at least be able to record a game and re-play it at a constant frame rate. Doing all the necessary optimizations and hacks to achieve a true constant and interactive frame rate could be difficult in the short time of this project.

Methods

For our implementation, we will be using OpenGL. We will make use of linear system solvers available in the lab common code.