If you’re really set on making water that way I’d personally suggest using triangles to connect the points, it makes for a better looking surface with no jagged bumps. As for having boats float on top you may want to cast a ray to find what the elevation of the bow and rear of the ship should be then use bodymovers to achieve the right rotation and such.
You could avoid casting an excess of rays by having the boat remember the tiles under it and updating these tiles once the section of the boat has traveled into the region of a new tile.
I used this tutorial to generate some 2D water a while back. I wouldn’t imaging that it would be too hard to convert to 3D. https://gamedevelopment.tutsplus.com/tutorials/creating-dynamic-2d-water-effects-in-unity--gamedev-14143
Instead of making it react to player movement, you could apply an impulse to one side of the water every X seconds to continuously generate waves, or do multiple points (possibly at different intervals) to generate more advanced effects.
Yeah, you could do that. I’m trying to get back into ROBLOX so I did it as an exercise. The current script doesn’t support any methods of controlling the ship the user, but if you just edit the CFrame the boat’s rotation and height will be adjusted on the next RenderStepped frame. Unfortunately, any rotation the boat has before the next update will not be preserved, but it shouldn’t be too hard to add that functionality. I just need to go to bed right now so I can’t do it . You could also look into adjusting the positioning so the waves come from a corner instead of one direction, which should just take some trig.
Anyways, I have a sample below, which you can download a copy of (game.StarterPlayer.StarterPlayerScripts.Waves) here: Basic Wave Test - Roblox
I can’t think of any other equations off the top of my head, aside from the first tutorial I mentioned. You could use that to move the water in a realistic fashion, then position the boat off the points surrounding it. If you store the current water nodes in a 2D array with their position’s as the array’s indexes, you could use modulus on the boat’s position to determine the nodes (if blocks are positioned at 0, 10, 20, 30, 40, …, boat.X % 10) surrounding it. This helps make the script a lot quicker since you don’t need to raycast or use Lua to iterate through anything. Then do some averaging and trig/CFrame-pointing to determine how position and rotate the boat. Just make sure you take into account that the boat is anywhere between the two waves, not directly in the middle, so you can get some nice smooth transitions.