Ocean Physics for Ship Simulation


photo

Recommended Posts

We are about to start a job where you pilot a ship.

 

Has anyone done a working ocean simulation in Unigine, where the ship interacts with large waves (3 to 5m height), over a large area eg 2km x 2km. Options I have considered are:

 

- Somehow use a small physics water surrounding the ship and any items (ships, yachts, logs) in the immediate vicinity, around 2km x 2km tile. This may be a pain as we will still have to somehow have the objectwater, non physics ocean all the way to the horizon.

- some way to raycast objects onto the objectwater, non-physics ocean?? maybe from 3 points and average them for a ship.

 

The boat would need to be controllable in these alternatives and other objects would still likely follow paths or wayfinding.

 

I have looked at some of the demo samples and there appears to be 2 different options for a physical ocean. physicalwater and objectwatermesh. What is the difference and which is more suitable to a large scale ocean simulator?

Link to post

physicalwater and objectwatermesh. What is the difference and which is more suitable to a large scale ocean simulator?

 

ObjectWaterMesh uses a static - in most cases planar - mesh for water surface representation, therefore it will not allow to visualize oceans with dynamic large waves.

 

PhysicalWater does simulate dynamic waves based on some numerical approximation. Its for sure a nice solution for some small-size water interaction effects as shown in the demos. But I'am quite unsure that it can be used large-scale ocean simulation...this is a hell more complicated, especially when it comes to realistic braking waves with foam, spray effects and object interactions (google for "3d ocean rendering real time" to get a feeling)

 

There are some 3rd party toolkits specialized on ocean rendering available, but even these toolkits have some limits.

Link to post

Just found

showing above ocean rendering toolkit. Though I know that they work more than a year on that toolkit, the visual quality is still quite far away to be called realistic. Clear indication of the challenge and complexity of ocean rendering.
Link to post

Thanks Ulf, Im really hoping to find something that looks believable, rather than being physically correct, as I dont think Unigine is even close.

 

The objectwatermesh looks like the best option if we want a swell, but not breaking waves. I have started to run a few tests using this object type, but i really think i am going to run into problems when i try and scale it up. I was thinking of attaching an objectwatermesh to the boat and using a mesh with a very high subdiv at the middle and progressively getting lower to the horizon. Im not sure that would allow most of the physics computational power would be around the camera?

Link to post

which of the various water objects allows for casting intersection rays to get the exact position on the water mesh?

Link to post

Danni, there's no intersection by ray casting. However, you can check the height of each point (both for ObjectWater and ObjectWaterMesh) via getHeight().

Link to post

Thanks Ulf, Im really hoping to find something that looks believable, rather than being physically correct, as I dont think Unigine is even close.

 

The objectwatermesh looks like the best option if we want a swell, but not breaking waves. I have started to run a few tests using this object type, but i really think i am going to run into problems when i try and scale it up. I was thinking of attaching an objectwatermesh to the boat and using a mesh with a very high subdiv at the middle and progressively getting lower to the horizon. Im not sure that would allow most of the physics computational power would be around the camera?

 

Then maybe this GPU GEM article is of interest for you, as it uses a radial grid approach and some precalculated, animated wave height textures. Radial grid approach is only suitable if you want to render your ocean scene from a viewpoint on the ship (e.g. bridge).

 

If you have to provide some birds-eye-view that most probably projected-grid approach might be the way to go. See for example this article for a sample implementation.

 

UNIGINE ObjectWater also uses projected-grid approach, but only uses 4 sine waves for wave field simulation. While quite nice for small waves this is by far not enough to simulate realistically your 3-5m big waves. In our martime simulation we used 10-15 sine waves superpositioning (with different directions, amplitudes, frequencies and phases, similar to this approach) for big wave representation.

 

In any case be aware that you have entered a very, very complex area of 3D real-time graphics...

Link to post