UNIGINE 2 technologies: water system
Since version 2.2, UNIGINE allows you to visualize realistic water with complex behavior and support for two-way interaction with solids, as well as create various types of water basins: oceans, seas, lakes. As of version 2.15.1, large bodies of water can create waves using wave layers, Beaufort presets, or manually, and provide smooth transitions between different surface states. At the same time, there is no visible tiling at a long distance.
Water in UNIGINE is implemented as 2 types of objects: Global Water and water mesh. Global Water is an infinitely stretched mesh with automatic tessellation, which allows you to create an endless ocean. However, Global Water only supports one level of water, so a Water Mesh object should be used to create mountain lakes, rivers, or other bodies of water with elevation changes.
The surface of the water supports reflections in screen space and the effect of refraction of light rays (caustics), which makes it truly photorealistic. There is also procedural foam generation.
In addition, the Global Water object has support for underwater mode, which makes it possible to lower the camera below the waterline with a seamless transition in the real world (you can even stop the camera in the middle and see the waterline itself).
Realistic real-time wave simulation is based on a fast Gerstner model where all heights are calculated mathematically. Each parameter is configurable through an API, so you can apply the results of calculations using different hydrodynamic models. This level of control opens up a wide range of possibilities for simulators, allowing you to simulate almost any state of the water surface and sea weather in real time. Flexible quality settings are available to optimize performance.
For those who just want the sea to look believable and realistic enough, without having to adjust a lot of sliders and combo boxes, there is an automatic wave generation mode with presets on the Beaufort scale (from calm – 0 to hurricane – 12).
An object is used to simulate diverging waves from solid bodies and a wake during the movement of ships field height. It allows you to modify the current height map of the Global Water surface by overlaying it with your own. In this way, it is possible to define zones for changing heights under the side of ships or the hull of other floating objects. Within the marked zone, the height map gradually changes from the center of the zone.
Any body of water has shores and the coastal strip should also look natural. In the real world, waves hit the shore and then move away. This wave behavior can also be modeled in UNIGINE by using the object Field Shoreline high and low tide zones near the coast. Moreover, the earth, sand, stones and everything else on the shore will remain wet after the onset of the wave.
UNIGINE SDK version 2.15 introduces precise control over the wave spectrum via API. Wave generation is now flexibly configured in real time: from the direction of movement and amplitude to shaping factors. In addition, it became possible to create and control entire groups of waves (from small to large). The maximum number of simulated waves is 256, but a maximum of 100 is recommended for optimal performance.
UNIGINE also implements detection of intersections with the water surface (intersection detection). This algorithm can be used, for example, to simulate a splash at the point of contact of the projectile with the water surface, as well as for the correct placement of ships, taking into account the visibility and height of the sides above the water. In SDK 2.15, intersection detection is up to 10 times faster and there is more flexibility in performance tuning, as well as significantly improved procedural foam.
We plan to further improve the water visualization system in future versions of UNIGINE. Work is underway to improve rendering to increase performance and quality of rendering. Improvements are also expected for local water bodies (created using the Water Mesh object) such as rivers or lakes.