Posted by Frank Kane on 4th July 2013

Ship Wakes in Triton 2.3: Kelvin wakes, bow wakes, propeller wash, and more.

Does your game or simulation include ships, boats, or other objects that disturb the water surface? If so, you know realistic wake and spray effects are difficult to produce – especially when your ships aren’t moving in a straight line, and when your water includes 3D waves.

The Triton Ocean SDK 2.3 includes a completely overhauled system for ship wakes, accurately simulating 3D Kelvin wakes, propeller wash, bow wake, spray, and foam effects for boats moving on arbitrary paths in any wave conditions. Since we apply these effects in the same rendering pass as the water waves, it’s fast too. Check out this video showcasing Triton’s new wake effects:

3D Kelvin Wakes

3D ship wake effects: Kelvin wakes, propeller washKelvin wakes are the V-shaped wakes behind a moving boat; they originate from the bow and stern of the ship, and are always at a 38.94 degree angle. In reality, it’s made up of the interference patterns of the many circular waves radiating out from the bow and stern as the boat travels. There’s a whole science to understanding how Kelvin wakes work, but Triton manages it for you. Both the bow wave and stern wave produce realistic water displacements, lighting, and foam behind your ships automatically. We don’t just attach a static displacement or normal map to your ship; individual waves are simulated, leading to realistic waves on ships moving on any arbitrary, curved path.

The waves from Kelvin wakes are added on top of the wind waves and swells in Triton, producing realistic results in any seas from calm to rough. And, since our wake effects are applied in the same vertex program as everything else for the water, you can maintain frame rates in the hundreds with these effects.

Propeller Wash / Turbulent Wake

Propeller wash, or turbulent wakes, behind a ship in Triton 2.3.Another aspect of boat wakes is the turbulent wake, or propeller backwash, behind a moving ship. This is the foamy disturbance created by a ship’s propellers (or “screws” in nautical terms.) We’ve implemented the available research on how prop wash expands and dissipates behind a moving ship, so it’s not just realistic-looking, it can actually be used in training applications where you estimate the size and speed of a ship based on its wake. The turbulent wake is often the most visible sign of a ship from the air, and it is an important cue for ship identification.

Like our Kelvin wakes, Triton’s turbulent wakes handle any path your ship might take. If your ship’s making a tight turn, the propeller wash behind it will reflect that curve. We automatically emit more prop wash segments when a ship is turning to ensure smooth looking curves, and we maintain performance by applying level of detail effects as the camera moves away from the ship.

Most games and simulations implement prop wash as a “decal texture”, or a flat 2D texture overlayed on the water surface. Since Triton produces 3D waves, this approach wouldn’t look right in high seas. Instead, Triton employs novel shader techniques to apply the propeller wash effect on top of Triton’s moving 3D ocean wave surface, all at the same time that the ocean waves are being drawn.

Accurate Bow Waves

The bow wake is accurately modeled in Triton 2.3.When the camera’s close to the ship, accurate bow wake effects are crucial for a convincing scene. They are even more important in training applications, since the height of the bow wave can be used to estimate the speed of a ship from a periscope. We’ve studied the existing literature on how the size and position of bow wakes vary as a function of the velocity and draft of a ship, and baked it into Triton’s wake system. As your ships’ velocities increase, the height of the bow wave will be accurate. We also increase the intensity of spray effects at the bow as the ship’s speed increases, providing an additional visual cue as to how fast the ship is moving.

We also generate spray along the hull of the ship, which also becomes more prevalent as the ship’s speed increases. It adds some additional realism and visual interest to the scene.

Geocentric Support

An additional challenge in implementing Triton’s wakes was supporting round-Earth coordinate systems. Many applications, especially in training and simulation, cover the entire planet and use large coordinates relative to the center of the Earth. These are known as geocentric coordinates, or Earth-centered-Earth-fixed (ECEF) coordinate systems. These often result in jittery motion due to loss of numerical precision, since GPU’s generally operate in single-precision floating point coordinates.

With Triton 2.3, we’ve solved this problem to give you stable wakes, waves, and propeller wash even in geocentric coordinate system. All coordinates in our shaders are relative to the camera position, having subtracted off the camera position on the CPU in double precision prior to handing positions off to the GPU.

Learn More, and Give It a Try

The Triton Ocean SDK does much more than just ship wakes – it provides the fastest, most realistic simulation of water you’ll find, with reflections, refractions, coastal effects, intersections, and more. Check out the Triton Ocean SDK product page to learn more.

Sundog Software is different from most other middleware companies – we offer free, time-limited evaluation versions of our software right on our website. You don’t need to talk to a salesman or even give us your contact information. Head to our download page to try out the latest version of the Triton Ocean SDK, or download our latest demo. Triton integrates with any OpenGL or DirectX based application on Windows, Linux, or MacOS X, and we have integrations available for the Unity, Havok Vision, OpenSceneGraph, and Ogre engines.

4 Responses to “Ship Wakes in Triton 2.3: Kelvin wakes, bow wakes, propeller wash, and more.”

  1. seamanj says:

    I really want to use triton in my round earth model,but i don’t know how,and the ship wake is always propeller wake,I want the kelin waves or bow waves.chris,why don’t you give me some demos to show how to do this, all I can do is to create a infinite flat ocean and a flat patch as the only two demos you giving,could you add more samples in the sdk?such as how to achieve round earth model,how to achieve 3d kelin waves,how to achieve rotated wash and so on,and I can’t see the sky beneath the water but the hydrax can do this,I know what i am saying!!!

  2. seamanj says:

    by the way,I need the source code of demos not only the effect.The effect maybe fantanstic,but I can’t create it,so it have no any help to pls provide mode more demos and the source code, if you want us to pay for the triton.

  3. Frank Kane says:

    Sorry to hear you’re having challenges in getting geocentric and wake effects working. These topics are covered in our documentation at , but you’re right that standalone samples would be more useful for some people. The reason we don’t provide these are licensing issues in redistributing ship models and imagery, but we will work on that. In the meantime, here are some tips.

    The height of the Kelvin wakes will depend on the velocity of the ship, so make sure a realistic velocity is being passed each frame into WakeGenerator::Update(). Kelvin wakes tend to get lost in rough seas, so as a test you might want to turn the wind speed down to zero to make them more visible.

    Using Triton in a round-Earth model is easy; all you need to do is specify WGS84 as the Coordinate System when calling Environment::Initialize().

    Again, feel free to send us code snippets, screenshots, or anything that might help us help you to I’d also be happy to send you our own code snippets from parts of our demo that you’re interested in seeing.

  4. Frank Kane says:

    One other thing – you might find it useful to look at the OpenSceneGraph sample included with the Triton SDK, even if you’re not using OpenSceneGraph. It has a -geocentric flag that toggles use of a WGS84 ellipsoidal coordinate system, and also feature a ship that leaves a wake behind it. Hope this helps.

Leave a Reply