Ambient waves are animated with a technique widely used in the game and FX industry. This technique uses a Fast Fourier Transform (FFT) to generate a 3D displacement map corresponding to the superposition of thousands of waves. This map is computed in real-time on the CPU and then transferred to the GPU for further processing. GPU shaders filter the displacement map and generate additional textures used to render the water surface and to simulate optical effects like whitecaps, caustics and underwater godrays.
We support the following distributions:

Users can choose a wave spectrum and configure its parameters (wind speed, amplitude, choppiness, direction, spread, frequency cutoff, etc.). Thanks to this flexibility, Typhoon can simulate vastly different water conditions, from calm lakes to stormy oceans.
The FFT-based synthesis technique generates low resolution, tileable textures. In order to expand detail and suppress tiling artefacts, we employ a fractal model which computes ambient waves as a combination of multiple layers of progressively increasing frequency (detail). Each layer is characterized by user-defined amplitude, orientation, frequency and choppiness. Thanks to this strategy, Typhoon can render and animate vaste water areas with high fidelity at a minimal cost.


The engine also supports procedural waves. These are linear or circular Gerstner waves that can be used for specific effects, like scripted waves, swells and explosions. They are entirely user-defined and characterized by parameters like the origin, amplitude, frequency etc.


The engine simulates Kelvin waves and turbulent bow and stern wakes generated by objects moving on the water surface. The engine keeps track of the objects path and renders the associated wake effects with an adapative level of detail and with a mix of procedural and physically based formulas.


The water geometry is tessellated and sampled with a projected grid. Its advantages are an adaptive level of detail, lack of geometry aliasing and constant memory consumption. Contrary to other implementations, ours handles arbitrary camera orientations and large surface displacements.


For the rendering of ocean whitecaps, we extended the work published in the paper "" in order to integrate whitecaps in our generic wave layering system. Users can change various parameters that affect the whitecaps visuals, like their texture, generation threshold, scale, intensity, etc.


Distant reflections (sky and clouds) are rendered in real-time in a cubemap which is then filtered for physically based lighting. Local reflections, showing near objects, are rendered to a separate texture. The two textures are then combined in the water shader according to the Fresnel term. The engine also simulates underwater reflections and the phenomenon of total internal reflection (TIR) when the camera is underwater and looks at the surface.


The engine also simulates refractions, both seen above and below the water surface. The refraction shader supports chromatic dispersion.


The engine employs a physically-based model of the absorption and scattering of light underwater. Users can control parameters like the water color, particle density, scattering directionality, absorption coefficients in order to create the desired visuals, from blue tropical waters to greenish, polluted harbors.


The lighting engine can render underwater godrays, volumetric shadows, volumetric lights (point and area). It uses established physical models of these phenomena and highly optimized shaders for their simulation on the GPU, either by means of analytical formulas or ray marching.


The water surface is rendered with a sophisticated shader that combines all data generated in the previous rendering passes. The shader takes advantage of the latest research on specular anti-aliasing and physically-based-rendering in order to generate photorealistic visuals in real-time.


For the rendering of caustics, Typhoon uses a novel technique called Cascaded Caustic Mapping, inspired by cascaded shadow mapping and by ideas from published papers. The technique runs entirely on the GPU and generates caustic textures of variable level of detail in real-time which are then mapped on the underwater environment. The caustic shaders also support chromatic dispersion.


Typhoon is integrated with 3rd-party physics engines (currently ODE) for the simulation of rigid body dynamics, collisions and buoyancy. With regards to buoyancy, the engine approximates floating bodies as a set of spherical objects called "bobbies". On the GPU, a compute shader calculates the water displacement of all bobbies asynchronously (to prevent CPU/GPU stalls) based on their position and dimension. The CPU then calculates the analytical buoyancy force and center of buoyancy of each bobby and applies it to the associated rigid body. The engine also supports procedural buoyancy, a simplified technique that simulates floating objects without the use of a physics engine.