Tes2Mod:DFRemake/Exterior Water

Like Original Water
Originally in DF the exterior water was just a flat plane upon which you sunk slightly and had reduced movement (felt like walking in mud).This is a very simple approach to implement as the landscape mesh will just be made flat, textured with water, and the appropriate adjustments made to the camera position and movement. While this is a simple design and faithfully reproduces the original game, it may be better to try to create a better system.




Separate Water Plane
This is a more complex design but is one seen in a variety of games (such as Morrowind). For this approach the base land generation is the same underwater as it is above water. A semi-transparent water plane is created, typically at Z=0 for convienence. When the player is under the water plane their movement is adjusted appropriately along with basic display effects (a blue fog, bubbles, and blue tint for instance).




Adjustable Water Plane
This is an extension from the previous design with the change that the water plane is not held to a constant Z=0 position, but can vary as we go in-land. This creates the possibility of more realistic in-land lakes and rivers (as opposed to the fake textured water tiles as used in DF).

There are a few ways the water level can be adjusted. One is to have the water flat on the sea but be at a slight angle underneath the land. This is relatively simple but does require the engine have some knowledge of where the land and sea is. Another idea would be to have the water level simply mirror the average land level, offset by a set amount (like a water table). This is actually quite easy to do and the offset can be adjusted a variety of ways to create different shore lines (for example, in the desert the water table would be much lower than the land while in the jungle it would be much closer and for towns it could be adjusted down as needed).




Dynamic Water Effects
If we decide to use a separate water plane, it will rather boring to just have it static. Real water has waves and undulates rather than sitting still. There are a few ways we can achieve this.

Move Water Plane Up/Down: This is the simplest design and is easy to do, though the quality of the animation may not be very impressive.
Create Waves: A much more involved process which would require the adjustment of water vertices up/down to simulate waves. This can result in a very good effect but requires a good deal of processing power. There is also the problem of not being able to directly manipulate mesh vertices in DB (recreating the water plane each frame from a memblock is likely too slow).

Pixel Shader Effects
It is likely possible to apply some simple pixel shader effects to the water to make it more realistic (like in Morrowind for example). More experience with DB's shader capabilities is needed to determine how effective and possible this is.


In-Land Water Texture Tiles
Originally, DF simply used basic textures to simulate water in-land. If the in-land water effects work well with a water plane, these textures can be ignored, making landscape texturing a little easier. Otherwise, a method of creating a consistent pattern of water textures in-land will have to be devised.


ToDo
Test how a water plane intersects with land to see the shore line quality.
How good/bad does simply moving a water plane up/down look?
How difficult is it to adjust the water plane vertices to create waves? How long does it take?
What is the effect on performance of a seperate water plane (both transparent and not)?
Experiment with pixel shader water effects (including some performance metrics for comparison).