RTFSS project


12 December 2006: Video of HDR caustics posted!! (H.264 1280x800)(25 Mbytes) Well a year has passed since last post.. The project is not dead, but since March/April I have made no real progress.. Inhome code (tentatively 1.5) supports filtered HDR caustics and also features a smoke solver and renderer. The video I have posted shows the first added feature.. And now some time for photos..

Full HD photo (1920x1200) Full HD photo (1920x1200)
Full HD photo (1920x1200) Full HD photo (1920x1200)

12 December 2005: RTFSS 1.2beta released!!(25 Mbytes) which features an HDR pipeline for achieving more realistic apperance in "pool demo".. This beta only works with Nvidia cards.. Perhaps final version will add support for ATI cards.. This beta version has some bugs or issues.. Please see more info about 1.2beta release on changelog file. This version it is aimed for users wanting too see HDR working in RTFSS (not concerned about some present bugs)..

12 December 2005: WMV9 Video (640x480) showing HDR support in RTFSS 1.2 posted!! (12 Mbytes) and Quicktime MP4 video (1280x1024) showing RTFSS 1.1 caustics support posted!!(20mbytes)

6 December 2005: WMV9-HD Video (1280x1024) showing HDR support in RTFSS 1.2 posted!!(40 Mbytes)

RTFSS wanted to be no less than Half-Life2 Lost Coast :-) and add HDR to their graphical pipeline (with all the bells and whistles like automatic exposure, effect of eye adaptation to exposure (not instaneous), bloom, tonemapping, (all this effects before mentioned can be disabled or enabled and all this combinations have dedicated/optimitzed shaders for running at full speed..), HDR water reflections and refractions, HDR caustics, HDR cubemaps, and more.. ) All of this features and effects are programmed to run at full speed on the underlying graphics hardware (recompiled using the best profile avaiable in CG to each hardware and taking use of bilinear filtering of floating point textures if avaiable (currently only avaiable on Nvidia Geforce6 series or higher) or if not using highly tuned shaders for making bilinear filtering of 2D textures and cube map textures ( can be a good idea to reuse it in your pojects ..) Today I have posted a video showing HDR support that is coming in RTFSS 1.2. Currently I have some issues in ATI cards (altough it was programmed from the ground up to be a compatible implementation of HDR, but I can't test on ATI hardware as much as I want), and some other minor bugs, but for impacient people I will post the new version (beta) this week.. It will be almost feature complete with final version.. RTFSS 1.2 will add also enhancements to Soundblaster X-Fi users, and much more!! See it!!

24 October 2005: RTFSS 1.1 released!! with support of simulating viscoelastic fluids and a realistic pool demo featuring raytraced refractions and caustics computed on GPU and enviromental 3d audio and more.. See changes and release notes(PDF). All users should upgrade.

23 September 2005: RTFSS 1.0 Demo released !! This release should give a taste of the RTFSS simulator (not the viewer features) without having to download +7mb(only 700Kb). I hope it'will be welcomed to users having narrow bandwith connections..

22 September 2005: RTFSS 1.0 released!! with support for non-Nvidia cards and non-shader capable cards and more changes. All users should upgrade.

Beta version: 1.2 Download it all (Windows installer)

Current version: 1.1 Download it all (Windows installer) Pool Demo version Download source code only

Old versions: 1.0 Windows installer (Recommended for win users) Demo version Download it all(RAR file) Download source code only

Visit Sourceforge Project page for news on upcoming releases,forums,etc..

Future plan

See videos and screenshots of RTFSS in action.

Here we are keeping track of some bugs (at the moment only of the release not source code).

Main developers: Ivan Barenys Garcia i Oscar Barenys Garcia.

Contact developers

Project Resume

The project is for creating a fast open source free surface fluid solver based on MAC grid. The last versions add capacity to simulate viscoelastic fluids too.

For the average user this just says that is a general solver of fluids (water, gas phenomena, etc..) on arbitraty situtations.

This project aims to be the first, or one of the first open source implementations freely avaiable of a free surface 3d fluid solver.

The languages used are C and Cg for shaders.

For the real-time visualitzation uses the OpenGL API. OpenGL Logo

The platforms supported will be Unix/Linux,Windows and Machintosh (the initial version has been tested only on Windows and Linux platforms).

The data formats in use are:

Support for JPG,TGA,DDS file for textures,cubemaps and logos.

This three formats has been selected with care for their special features.

JPG has been selected for being a good compression lossy codec and their support from image manipulation packages.

TGA has been selected for their ability to retain alpha chanels (util for translucent textures and logos in OpenGL) and lossless capabilities and easy to implement a reader.

DDS is the standard of fact for DirectX textures and OpenGL. It abilities are a lot and include:

easy readying of it (see nvidia.developer.com)

ability to store compressed textures in the internal format that supports hardware cards (S3TC). This avoids compressing the applications to send to the videocard and low memory footprint on the graphics card.

alpha channels

support for storing mipmaps in one file.

in one file you can have 6 faces of the cubemap stored with mipmaps and in a compressed format.

Wavefront OBJ (.OBJ) for 3d objects description. We have selected this format for being "simple" to implement and retaining a lot of features via material files (.MTL) like textures,bumpmaps,etc.. Material files it is also implemented

For sound data we have supported OGG Vorbis (.OGG). Ogg Vorbis sound format is enabled via libvorbis. It has been selected for three reasons: For having good compression (some people say better than mp3 at same bitrate specially for low bitrates) Open source format Easy to learn and use librares..

Support for .lzma format of lzma SDK for loading compressed scenes descriptions and OBJ's and fonts. It is one of the more efficient lossless compression scheme with an "avaiable" SDK which is easy of use and small in C++ and C. Decompresses on a Pentium 4C 3.0Ghz at +20Mbytes/s.

This reduces space of the demo on disk reducing OBJ files for initial sample scene from +20MBytes to 3-4Mbytes.

glf format of the font of glfont library.

scn Internal file format developed for storing most of the state of the demo.

Grid format. Internal file format developed for storing the grid to apply

The main (technical) specifications currently implemented in the solver are:

3D MAC grid solver.

Supports free surfaces and obstacles.

Viscoelastic fluids (v1.1 or higher only).

Shallow water equations explicit solver (in time) (v1.1 or higher only).

Pressure laplacian solution via SOR,conjugate gradients and conjugate gradients with custom preconjugate matrix solver using sparse structures for speed/low memory use.

Obstacles can be made at runtime from Wavefront OBJ models. The core of it is a 3d resterizer of triangles. It builds from a 2d rasterizer (analogous to the used in hardware graphic cards).

Includes an automatic scheme for linearly and adaptatively adjust the discretitzation of second derivatives between a donnor cell discretitzation an a estandard one. That enhances stability under agressive/high time steps ..

Adaptative time step for improved quality.

Boundary surface stress conditions can be added easy.. (had been keeped in mind..)

Trilinear interpolation of the velocity of particles from the grid.

All the code made keeping in mind the goal of interactive rate and some hot-spot functions had been rewritten from scratch specialy the last feature.

Surface tracking and evolution made by surface markers or volume markers in the first mode with adaptative number of particles and a new reflagging algorithm.

Surface extraction made by fast marching cubes custom implementacion with caching with automatic setting of the isovalues based on gird parameters.

Real-like scene visalitzation of the scene made of OBJ models with material and textures loading and water with advanced shaders and realistic cubemaps.

The reader of OBJ can read transparent textures and virtually with faces made with a unlimited number of vertexs (divides into triangles for speed in opengl visualitzation)

Supports built-in video recording using a VFW compatible codec. (this feature only works on windows 95 or higher).

Must be portable (once removed MKL) to MAC,Unix/Linux,Windows currently tested on Win Xp and SUSE Linux 9.3 and

Supports logo appending in visualitzation and beautiful statitisc info printing with glinfo library.

Includes makefiles for windows/unix, and Microsoft Visual Studio Net project ( has been tested with GNU/GCC,Intel C/C++ and Microsoft to compile good.).

Includes system and OS,compiler used, and CPU info.

Automatic grid files resampling (linear interpolating) to match the simulating grid desired dimensions.

Fast implementation sparse matrix-vector products, conjugate gradients with or no preconjugate steps. The last is almost interface compatible with the one provided in Intel MKL 8.0 beta.

Scene file loader with the most important features setting avoiding excesive recompilation (including support of C and C++ comments inside it for removing and changing config fast..).

OpenGL viewer features:

Anisotropic filtering enabled if hardware supports it and multisampling too. The last can be activated via driver or with authors modified GLUT library(see readme.txt). Uses fastest loading/display of vertices avaiable. It uses VBO or vertexs arrays,normal arrays,etc.. It uses compiled display lists too.

Support for shadows. Ccurrently uses shadows map algorithm (hard shadows). Uses framebuffer object extension if avaiable for the shadow depth map. It uses for educational purposes stencil buffer too.

Static/dinamic light, and uses point sprites for displaying it if avaiable.

Split screen rendering (with different viewer options).

Options for rendering(almost all boolean variables): textures enabled, lighting enabled ,culling enabled, wireframe, wireframe occluding more depth wires.

Spline unit an for building spline coefs. a optimal solver of tridiagonal matrices (linear in incognites).

Supports specifing a path for the camera setting points and building a spline(natural o of user choice of the remaining two free equations).

Automatic selects best profile for shaders.

Features environmental 3d audio engine (via OpenAL). (v1.1 or higher)

"Pool demo mode", which comes with state of the art techniques like raytraced refractions and caustics computed on GPU,for relatime realistic water simulation. (v1.1 or higher)

and many more..

Future specs may be (TODO list):

User can choice or set the implicit basis function for the particles and the isolevel to apply marching cubes.

Multiple lights with path selection via keypoints like the camera, soft shadows,realtime caustics on GPU..

Porting some fixed parts of the viewer to shader based.

Level set methods for surface evolution.

Built-in video recording for all platforms supported via using a open source codec.

Dynamic obstacles (fluid-obstacle coupling)

Clean and comment the code for make it more easier to maintain (HIGH PRIORITY).

Rewrite some code for make it a solver for 2D and 3D using a #define clause..

Make it portable for 64-bit platforms (may be minor fixes..)

Parallelize the code that can gain performance from it for making use of future/presente multicore CPU's.

Currently all the source code lacks of exhaustive error handling which can cause hangs so including more error handling will be ok..

Suggested improvements..

One of the competitive aspects of the solver is that is the designed to at moderate grids (40x40x40) reach interactive rates 30fps or more on a "standard" 3GHz Pentium4 with all eye-candy features activated..

It includes very nice custom made libraries like a very fast marching cubes implementation, fast sparse matrices, wavefront OBJ reader, etc.. all used by the solver in some steps.

The libraries used(current) in project are:

OpenGL 1.4 or higher.

CG language libraries by NVIDIA 1.3 or higher.

GLUT 3.7 or higher.

GLEW 1.3 or higher.

Lzma SDK (7-Zip) 4.23 or higher.



OpenAL v1.0 or higher.

Ogg Vorbis libraries like: LibVorbis,LibVorbisfile,Libogg. v1.0 or higher.

Intel Wincpuid lib.

Intel MKL libraries 8.0 beta or higher.

The use of last library is not necessary but optional.

SourceForge.net Logo Support This Project
Get Firefox! Open Source
Valid XHTML | Valid CSS