zubetto - Ocean Waves

This project works only with SM5 selected for DirectX 11, or SM6 selected for DirectX 12.

Ocean Materials

The main goal of this project is to visualize the ocean in real time at different scales, from camera positions directly on the water surface to views from orbit. For real-scale scenes (where planet radius is order of 1000 km or 1.0e8 cm), orbital flight implies that the camera can approach the surface of the water in regions very far from the world origin, which gives rise to all the challenges associated with a loss of precision of floating point numbers. In this regard, the default configuration of the ocean materials sacrifices certain fine detail effects (such as Lumen Reflections) in order to achieve an acceptable visual experience in any region of a planet. Please see NotesOnMaterials for more details.

Most ocean materials require special blueprints that configure material parameters during editing and update their values based on camera position and movement during gameplay. Therefore, such materials may appear differently during editing and gameplay.

In addition to the above, the certain type of blueprints is responsible for creating spherical meshes that approximate the surface of a perfect sphere at different levels of detail. All spherical meshes are created once during the game, and then their visibility is switched depending on the relative position of the camera. Depending on the number of vertices, creating the mesh can take a fair amount of time, given the fact that all the work is done in blueprints (although mesh creation in a packaged project with the Shipping configuration is noticeably faster than in the editor, for the number of vertices on the order of one hundred thousand it is still quite slow).

Buoyancy System

This project features a buoyancy system that implements two types of interactions with ocean waves: kinematic and physical. Kinematic interaction involves actors whose motion is not based on physics simulation, but is mainly defined by so-called surfing frames, each of which can be thought of as a reference frame fixed to a surfboard. Such kinematic actors cannot be lifted out of the water or washed ashore (furthermore, kinematic interaction can be purely a visual effect). In contrast, physical interaction involves actors whose motion is based on physics simulation, which implies calculating forces and torques acting on rigid bodies from ocean waves. Both of these interactions are one-way, meaning that objects interacting with ocean waves do not affect those waves.


Demo

Please try the demo to assess whether the trade-off between performance and visual quality this project offers meets your requirements. Note that performance and image quality may vary in projects with a configuration other than the demo configuration. In the demo, you can press Ctrl + Num 1 to toggle the FPS counter. Other information about the controls can be found in the main menu, which is opened by pressing the M or Escape keys.

Notes On Assets

This project includes blueprints of drivable watercraft along with the static meshes used in them. These static meshes are intended primarily for demonstration purposes as they use fairly simple shapes and materials and will likely require additional work for your final project. You are free to use these static meshes in your project, either as a starting point for creating your own watercraft or in their original form.

Please note, due to licensing requirements, the following assets are not included in this project (some of them are replaced with meshes derived from the Landscape tool and Geometry Brushes):

All four assets are licensed under Creative Commons Attribution and are presented in the images, videos, and the demo with modified textures and materials for the demonstration purposes.