4
\$\begingroup\$

Summary: I am looking at creating a large(ish) ocean which multiple ships will be present in doing their own thing. I want the ocean to be a life like as possible but without compromising too much on rendering speeds.

A Little more detail: I am using Unity to create the game in and ultimately I will need to be able to release the game as a web player to there lies my limitations of the water simulation.
For the actual simulation of the ocean I will need it to be able to react to the ships movement and vice-versa. The end product of the simulation I want to be able to look like this simulation of a ship in water (if possible) to be done efficiently. http://youtu.be/H4ACKAUU3O0?t=3m51s

I have started reading up on other information and looked at the other similar questions to mine:
1) Water/Ocean simulation and physics
- I have read this question fully, am looking at not using wind as said in this question but will use this as a reference when creating the final product. (I would like to add to the information from that question with the answers on this question.)

2) Resources of realistic water simulation?
- I have started going through the tutorials that the answer linked to and so far they seem good but do not look like they will answer my question.

The water will have splashes in reaction to the objects in the water (particle effects I believe) and small waves will come off the objects in the water e.g. ripples. Also if you are a smart cookie that wants to be awesome you should include in your answer about putting a shader on the water.

Also since the ships will be moving all at independent speeds and traveling through the sea, for efficiency I don't want to just make the water massive so is there a way to only render/simulate the water within a certain radius from each of the ships?

What I am looking for in an answer:

  • I would like to know the what tricks for making this type of simulation light-weight can be used for these types of water simulations and specifically in unity.
  • What limitations will I encounter when creating this and why they are limitations
  • The basic work flow of creating something like this step by step. (e.g. step 1: to make the object that will be in the water)
  • Are there any open source projects for these types of simulations?
\$\endgroup\$

closed as too broad by Trevor Powell, Seth Battin, bummzack, Anko, concept3d Dec 16 '13 at 16:29

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • \$\begingroup\$ I think your question is just too vague for such a broad range of topics, and you aren’t saying what you have tried to do already. I’ve worked on water physics simulations but I just can’t find the courage to answer all the points. Maybe you should split your question into specific issues you run into. \$\endgroup\$ – sam hocevar Nov 24 '13 at 11:13
5
\$\begingroup\$

I only have some mild knowledge in unity, but here are some suggestions I hope you find useful.

Split the whole simulation into a few things:

  1. Large waves
  2. Medium waves
  3. Small waves
  4. Boat's reaction water
  5. Water's reaction to boat

The first two can be done by moving a tiled displacement map over a plane mesh. You have a large, low detail map which represents large waves. You can tone this up for rough, stormy seas, or turn it down completely for a calm sea. The medium displacement map would be a smaller (to the scale of the ships) map which would show small waves and turbulence in the water. The effect of this would be added to the effect of the previous displacement map. You can also turn the map off when the camera is zoomed far out.

The third uses a bump map to simulate roughness in the water. Like the second map, this can be turned on only at closer inspection.

Ships should react to water via four points relative to the sea surface. Each point would be just inside the corners of the rectangle that bounds each ship at the XY (ground) plane. Each point would get the height of the water (via the large displacement map) and adjust the ship's pitch and roll accordingly. This would simulate the ship moving with the waves.

Trails left behind by a ship in the water can be simple particle effects emitted from the back of the ship and some flat animated decals along parallel to the surface (the standard triangular wave pattern.

You can forgo the second point if you want a simpler simulation. As for optimization, you can split the ocean into chunks and load them procedurally depending on what is being seen by the camera. Since the displacement and bump maps are tiled, they should line up seamlessly with each other. You may also want to look into randomizing the larger waves somehow, although I don't know how to implement that into Unity.

Hope that helps somehow! I would have posted more links in the writing to better explain some concepts, but this site is clearly too elitist or afraid of spambots.

Some additional notes:

If you want the ship's speeds to react to waves, you only need to take the large ones into consideration. Every few frames of movement, have the ship recalculate a friction variable based on the height difference of waves right at its front end, and a few meters in front of that. Since waves and ships move slowly, it should look realistic.

In that case, you may want the sea mesh deformed by some randomized noise algorithm rather than a displacement map.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.