Thursday 14 May 2009

Update 14/05

Well over the last few days I have spent alot of time revising for a maths exam. However today I have complete my introduction and conclusion and now have a first draft of my dissertation completed. I have also put all the sections together and have bega formatting it so that it meets the guidelines. This is taking longer than expected but I do hope to have a read over my dissertation and have it formatted by the weekend which will allow me enough time to create my poster and get the dissertation printed out and submitted on time.

Wednesday 6 May 2009

Update 06/05

Over the last week I have finished my Result and discussion section of my dissertation. Now all that needs to be done is the introduction and conclusion of which I have finished the future work section. Also I need to put all the sections together and format so that it meets the specification required.

Also I have done my presentation on Sunday which I believe went well and am pretty happy what was said.

Thursday 23 April 2009

Update 23/04


Gannt Chart for week commencing 20/04/09

This week I have been able to complete my Methodology and I am currently working on my results which I have still to take not of the frame rates for the different sizes of grids. Next week alot of work will be done on my presentation which is to be done on the 5th May.

Thursday 16 April 2009

16/04 Update

Currently I have been working on the write up for my dissertation. I have completed my literature review and now working on my methodology which I hope to have completed by the beginning of next week.

Thursday 9 April 2009

09/04 Gannt Chart

Above is my gannt chart for this week. Here you can see if complete the application sides of the project but have fallen behind on write up. I have therefore have had to change my gannt chart to combat this delay in the write up which is shown below:



Wednesday 8 April 2009

Update 08/04

I have made major progress on the application side of the project, with the openGL version of the simulation completed. I have managed to get a number of objects into the scene and have the fluid interact with the objects correctly. All that needs to be done now is to adapt this application so it runs with DirectX.

On the write up side I am still working on my literature review which is behind schedule but I have made alot of progress on my application and have done alot of work on my other coursework which I thought would take longer which has given me more hours to work on the dissertation.

My Gannt chart for this week should be up by tomorrow as I have left a copy on my Uni Drive and forgot to copy it over.

Thursday 2 April 2009

02/04 Update

Gannt Chart for Week Commencing 30/03/09

Over the last week I have been working a lot on my Literature which has required a lot more than what I was expecting due to large number of mathematical terms which I have to describe which has caused me to be slightly delayed due to it but I do plan on having it complete by this weekend.


A big break through has occurred on the programming side of things I have finally been able to complete the 2D grid and have the input in correctly. The only thing is that it is done on the OpenGL application and not the DirectX one but I believe I should get it done by the end of the day. However there is one problem the velocity is only moving up to the top right hand corner which means I have to look over the calculations code again which shouldn’t take that long as I’m looking only at the velocity not the density parts.


Once I have sorted these problems I'm going to do a quick research into boundary conditions and see if it feasible to have stationary objects within the application.


Tuesday 24 March 2009

Update 24/03

Gannt Chart week commencing 23/03/09

Above is the gannt chart which has some of the new colours which show where I am at this time (guide to the left of this blog). At the moment I am falling behind with the coding due to having problems with it not producing the right results. All it was doing is pushing the densities horizontally. However today I have manage to solve this problem but I have got another one at the moment which is that the gird is fuzzy. Hopefully this shouldnt take me too long and with me putting in more hours into it I should have it completed by Friday. Another problem is the grid currently I can't get it to fill the entire screen which I am looking to solve within the next few days.

On the writing side at the moment I have made a start at the literature review which seems to be going ok. Should hopefully have this done for Sunday if everything goes well.

Draft Abstracts

Version 1

In this paper we present a simple and fast implementation of a stable fluid simulator which can be used within a games engine. Here the technique is used to represent a water based fluid but the technique can be used to for a number of realistic fluid-like effects like swirling smoke. The technique uses simplified Navier-Stokes questions which are hard to solve with strict physical accuracy being their main goal. Our technique on the other hand gears towards the visual side of the equation and where stability and speed are the prime importance to the equations. We also show that our technique is easy to code by providing the source code for our technique along with this paper. Our algorithms run in real-time for 2D grids on a standard PC hardware which includes Direct3D.

Version 2

Simulating accurate representations of fluids in a real-time environment can be tricky and sometimes impossible to be included within a game due to the complex structure and physical equations which are required to represent them accurately. However, within a game environment it is not really necessary to have physically accurate representations of fluid but have something that looks like it and that has some of its physical properties. In this paper we present a fast and stable technique for representing fluids in a real-time environment which is based on Navier-Stokes equations but have been adapted so that visual quality and speed are the prime importance. We also show that the technique can be easily coded by providing source code to a demo application along with this paper. Our algorithm runs in real-time for a 2D grid of a reasonable size on a Standard PC which has DirectX included with it.

Tuesday 17 March 2009

Gannt Chart Update


Above is an update of the new project schedule which was altered due to the new deadlines for the dissertation and the date for the presentation. Also the Introduction write up has been put the end and every other section has been pushed forward.

Monday 16 March 2009

16/03 Update

Well I have made a lot of progress over the last week with my demo application. Here I have managed to have the program run without any errors. The program now runs with an example of a grid on screen and takes in an input from the user.
After my meeting with Dr Lucas some questions have appear about of the forces are going to be applied in term of direction and magnitude which I haven't really thought about. The way round this was an idea of having to clicks to apply the force. This in turn would give a direction and magnitude for these two coordinates and would be simple to calculate.
We also talk about me doing my report and how it would be best to do the introduction at the end of the schedule rather than doing it this week. Therefore my Gantt chart will be alter to effect this change which will be up tomorrow along with a progress report after my meeting with Dr Özveren.

Tuesday 10 March 2009

Gantt Chart


Progress Report

The honours project which I am currently carrying out involves a research into existing techniques for fluid simulations. These techniques are to be evaluated to determine if they can be used in a real-time environment with out tying up the CPU and also produce realistic visual results. A demo application of a technique will be produced to show a technique at work with the ability of user interaction included with it.

Work Done

Most of the work that has been done since the project began is research into the Jos Stam’s work especially into his techniques for stable fluids which is techniques required if the fluid is to be included in a game environment. Also research in to Navier-Stokes equations has been done to get a understanding how they are used and what each of the terms included in the equations mean. Once an understanding was developed then it was decided between me and my supervisor that it would be best to start building my application earlier because it will help me understand the functions of the Navier-Stokes equations more and also allow for more time if any problems occur. The class which contains all the functions of the Navier-Stokes equations has been created with some problems cropping up along the way. The main problem that occurred was the pointers used was not being evaluated correctly which took a couple of weeks to solve which is longer than I hoped but with me starting the application earlier and spending more time working on the application I believe I still have enough time to complete it.

Work in progress

Currently I’m working on creating the visual aspects of the fluid. I am trying to get a 2D grid which will show the changes of density within a fluid when a force is implied. This force will be applied by the use of a mouse click onto the grid which is something else that I am working on. The visual aspects are currently going to represent in DirectX.

Work still to be done

There is still work to be built into the application which will deal with stationary objects which I want to be included into the application. Another thing that needs to be achieved as well is the boundary calculations for the fluid. Currently at the moment it is set to a basic box but I plan on expanding it to have ‘free surfaces’ which is discussed by Nick Foster and Dimitri Metaxas. The application also has to be tested by looking at the performance of the application and the look of the fluid. Then once this application has been built the final report and presentation will be prepared and written up before the project completion date 22nd May.

Thursday 5 March 2009

05/03 Update

Well in this last two weeks I have been having a few problems with the application. The class that contains the Navier-Stokes equations was having errors about not being able to evaluate certain pointers when the application was being run. After a week on trying to fix it I have switched the pointers to arrays to represent the grid. Another problem came up with this but was due to putting the class as a pointer which was changed. Now the program runs without crashing but there is another problem and it is not representing the grid on screen. This I believe is to do with how im outputting the vertices on the screen.
So the goals to be achieved are:
Sort the problem with the output.
Get the mouse input included into the application.

Wednesday 11 February 2009

Update 11/02

Well there has been a lot achieved programming side this week. I have managed to implement some of the functions for the Navier-Stokes equation into my program. What is up is the Advection and Diffuse equations have been included along with the density calculation step for the entire grid. The velocity step still needs to be done but it similar to the density as it used Advection equation as well.
I have also came across the game called Hydrophobia (Blade Interactive) which has a game engine (HydroEngine) which provides realistic fluid dynamics technology for flowing water, allowing it to interact with the surroundings. The game is set to be released in March sometime so I do plan on having a look at the game to see how their fluid dynamics are represented.

Hydrophobia teaser trailer

This week's goals are:

  1. Get the velocity step for the application built in.
  2. Get a visual representation of the fluid done.

Tuesday 3 February 2009

Update 03/02

Well I have managed to achieve the goals which I set myself over the last two weeks. My application has been started which is a basic window which runs with DirectX. I have read up on GPU Gems 3 which was good but I have also read GPU Gems which was really good. It has help me come to terms with the ideas and terms behind Navier-Stoke equations. Also the steps you have to follow to produce the desirable fluid has been achieved. However the one problem with this book is that it uses the GPU to create the fluid rather than the CPU which is a type of code which I have not used before and is difficult to understand. However if I plan on building the fluid to run on the CPU first then convert it to the GPU. As it can run 6 times faster than the CPU.
I have also managed to get a demo application of Jos Stams work along with code which I plan on looking at to see how the equations are applied in his applications.

Goals for this week:
Build up on my application to include the functions of Navier-Stokes equations
Look it to the techniques used to represent fluids (Grids and Particles).

Wednesday 21 January 2009

21/01/09 Update

Over the Christmas period I have read up on several papers. Some have really interesting ideas. Stams' 'Stable fluids' which is something I should be aiming to achieve as Stable fluids can run for along time without 'blowing up'. Another paper by Foster and Metaxas goes on about the importance of boundaries and the different types you can have and how the effect the equations of motion.

Had my first meeting for this semester with Dr Lucas. He suggests that I start to implement some of the ideas which I think is a good idea, may help me to understand some of the equations more. Also he suggested reading a chapter in GPU Gems 3 on fluid simulation which I have had a quick glance at and seems really interesting.

So my goals for the next two weeks are:
Familiarise myself with Direct X
Get a basic window running up on Direct X
Read up on GPU Gems.
Read up and try to get some of particle engine implement in Direct X

Honours Project Proposal

Introduction:
“Fluid flows are everywhere from rising smoke, clouds and mist to the flows of rivers and oceans” (Stam 2003, p.1). The phenomena may seem simple in real-life but are complex and difficult to simulate in real-time. “The reason for the complexity of fluid behaviour is the complex interplay of various processes such as convection, diffusion, turbulence and surface tension” (Müller, Charypar and Gross 2003, p.1).
“One of the major goals of games is to immerse players into plausible virtual worlds. It is then desirable to include fluid flows into games engines” (Stam 2003, p.1) which is why for many years game developers have included some sort of fluid simulations within their games, from basic animated textures, which was basically used to give the essence of fluid to 3D fluid simulations, which had some of the physical properties of fluid included.
There are many algorithms for fluid simulation, most of which rely on the Navier-Stoke’s equations (named after Claude-Louis Navier and George Gabriel Stokes), which “simply account for all momentum exchange possibilities within a fluid” (Foster and Metaxas 1996, p.2). These equations are very good at describing a large number of simulations, for instance simulations of ocean currents and water flow in a pipe can use Navier-Stoke’s equations to accurately model the fluid. The accuracy of these equations comes at a price. They are very complex and time consuming and are pretty much impossible to use in real-time environments as frame-rates will be hit hard by the inclusion of them. They are usually used when great accuracy is necessary (e.g. designing aircrafts).
“In computer graphics and in games on the other hand what matters most is that simulations both look convincing and are fast” (Stam 2003, p.1). Therefore it is possible to have some simulation of the physical properties. These simulations do not have to be physically accurate but do have to look accurate enough to allow the player to believe that this substance is in fact a fluid. This allows the process of simplifying complex algorithms to allow the process of solving them to run a lot faster, improving the running of the game.
Even though fluid simulation has been around for many years is it still a hot topic within game development. As technology improves, what game developers can do with fluid simulation also improves. Many of the recent games which have been released have shown off their fluid simulation to advertise the game and the developers have been praised for it. One such game is BioShock (2007) developed by Irrational which was set in a under ocean city and not only used fluid simulation to model various fluids within the game but used it to set the “feel” of the game and to allow players to believe that they are in a city on the ocean floor, which may have been hard to achieve if the inclusion of simulation of fluid was not there.

Research Topic:
“Established engineering techniques for simulating and modelling the real world have been modified and applied to computer graphics more frequently over the last years” (Foster and Fedkiw 2001, p.1) . Therefore the main objective of this project is to not only perform a scholarly research into existing techniques and ideas for fluid simulations for current-state consoles and PCs but see if available real world techniques can be used in a real-time environment. Each of these techniques will be studied carefully to allow me to understand the equations and algorithms which are used for fluid simulation. Also research will be conducted to possibly improve current fluid simulation models. The kind of techniques which will be looked into are the ones which you uses versions of Navier-Stoke’s equations and Lagrange equations of motion which are “used to place buoyant dynamic objects into a scene” (Foster and Metaxas 1996, p.1).
Visual affects will also be looked into especially the laws which involve lighting like Snell’s law which can be used to produce the required underwater caustics by refracting and reflecting incoming light. This will allow the understanding of how fluid can get the visual simulation in a real-time environment.
The research will look in fluid as a whole but the algorithms and demo applications will be built around the physical properties of water rather than any other fluid (i.e. smoke).

Research Question:
“Can fluid interactions with objects be accurately simulated in a real-time environment?”

Addressing the Question:
Research will be conducted into existing techniques for fluid simulations and evaluations of these techniques will be done to determine what the best technique to use for the simulation is. What will determine a technique as the best is one that shows the physically properties of the fluid accurately enough and that it runs efficiently. For each technique studied determination of what is good about them and what is bad will be highlighted. Also, there might be possibility of combining a number of techniques to create a hybrid algorithm for fluid simulation which is better than a single technique.
A demo application will be built to show how the technique(s) are applied. The demo application will be built in Direct X and will show the fluid in a 2D environment and how the fluid interacts when it comes into contact with stationary objects. The fluid will also be represented by particles because this will allow it not to be restricted to a finite grid and only performs computation where necessary (Green 2008) meaning that it will be faster than using vertex grid. Frame rates will also be shown in the application to show the performance of this simulation.
A 3D application of the algorithms selected will also be built within the given time. Also as with the 2D simulation, the performance of the application will be shown in terms of frame rate being outputted to the screen.
The fluid that will be simulated in both these demo applications will be designed around the visual look and physical properties of water. This will allow a familiar visual comparison between real-life and the simulation to be made.

Project Evaluation:
The measure of success of my project will be shown through the demo applications. These applications will show clearly if the fluid technique is viable in producing accurate simulations in a real-time environment.
Frame rates will be measured as well for the application. For it to be used within a game engine then must have a suitable frame rate. In modern games frame rates can vary. Take Halo 3(2007) by Bungie for instance it runs at 30 frames per second while Call of Duty 4: Modern Warfare (2007) by Infinity Ward runs at 60 frames per second. So having a fluid simulation that runs at these frame rates or higher will be classified as a success.

Issues:
One main issue that needs to be addressed through this project is how physically accurate can fluid simulations be in real-time before the performance becomes a big issue. This balanced needs to be addressed through experimentation in order to determine the best technique to use for fluid simulation.
Applying the correct technique will be another issue which will have to be addressed during the course of this project. The techniques out there are mostly mathematical equations so they will have to be adapted so that they can be used with an application.

Resource Requirements:
The demo application will be built using Microsoft Visual Studios 2005 and Direct3D. The DirectX API has the ability of creating particles and is commonly used within the games industry.
Also as the demo application will be designed around the current generation of consoles and PCs, a modern PC preferably built for modern day games with appropriate graphics cards and processors will be required to run the application reasonably. These types of PCs are currently available at both home and the university game labs.