Seamless, endless, and performant custom water using skinned meshes and PBR

well you can check when it starts, and when it ends, with accuracy to 0.001 of a second

1 Like

This is what roblox needs to have, developers should be able to achieve same water quality and mechanics regardless if some end users will not be able to handle it. In reality we all want water physics for years now and with roblox’s restrictions on how high your tides can be or other limiting factors sets this as example roblox should be heading to re-create.

4 Likes

It looks Fantastic! The only thing I would do is change the speed of the waves.

How high can you go and still be able to see the water? Does it still look infinite from any height and distance. (I’m thinking airplanes here with 10K stud height and vis out to 50K)

Is that possible with your system?

When will this be posted to Community Resources? Just kidding(sort of(not really)).

:slight_smile:

3 Likes

Very nice system you got there. Nice to see other pirate games in development not saying you will have competition :wink:

Competition is welcome! Nothing is a race. I’m very excited to have inspired some developers to pursue these ideas as well. Roblox really could use some more naval games

5 Likes

Haha thank you!! I have a team who has made a pirate game as well for about 6 months now.

(Still love that system. My team was figuring out how to make one like that!)

1 Like

Was researching such a mechanic lately. Is the height level of the ocean at any given point in the same timeframe always the same when calculated multiple times, like Perlin noise? It would explain why the synced clock allows you to sync the waves.

bro even the flags and sails are moving! Great job!

1 Like

Yes it’s deterministic, it’s based off a gerstner/trochoidal wave function

1 Like

Where is the ship hosted? Is it hosted on the captain’s client, verified by the server, and replicated to other clients, or is it hosted on the server and replicated to the clients?

Glad you add the background sound for it, because that make it looks more real to the water mecahnics, of its movement, the splash, etc

Just asking btw, is there any way we can see a crystal clear blue water which I meant the type of water on a real life beachside, and not the same thick blue water?

Just wanna clear my doubt…

Do I really have to say it? tyridge77 and his team once again with some insane work, I believe that the Wild West Team is probably the best development team. And the fact that tyridge77 has the time to help anyone that needs help is insane, I’ve seen lots of posts with people asking questions and tyridge77 helps. THANKS! :slight_smile:

2 Likes

The ship is on the server and replicated normally , but the water waves are synced on the server as well as all the clients as well as possible using a synced clock. So ultimately everyone sees the same thing. Server uses servers water simulation to add buoyancy physics to server physics objects, and the client uses it for underwater effects, any local physics, and replicated character buoyancy

2 Likes

So you basically take a mesh part whose mesh is a grid from Blender that has a certain number of vertices (say, 100x100), then you place a bone on every vertex (same 100x100), and finally you adjust the mesh by adjusting the bones? Sounds awesome.
Only issue I see with this is that the chunk size isn’t adjustable (would require a new grid mesh), there is an absurd amount of bone instances (10,000 just for a single 100x100 chunk) and the demos I see have visible seams at the chunk boundaries. How’d you avoid that?

For foam would it be possible to duplicate the same process for water, but turn it white and layer it under. Then do the same process you did with the water for waves for foam?
Sorry if that sounds dumb but I mean it’s a possibility.

1 Like

Seems like it, but I don’t think that would be enough. How would you have the foam appear only where you want it to? Have the mesh poke out above the water? This would work but it would look ugly due to the sharp cutoff where it disappears under the water, without a way of making it fade out.
I think the best way would be to use particles, like this demo does: Realistic Sea Simulator - Roblox
Its not very graphically polished but it shows the idea.

Roblox only allows 10k triangles in the mesh. Since each square in the grid is 2 triangles, that means that the maximum chunk size is 70x70 vertices. How’d you fix the seam issue when the chunks are that small?

Are you sure you wrote the update time correctly as 2ms? What did you use to measure this time?
To me, simply indexing the position of every bone in a 45x45 grid (for calculating the waves) takes 2-3ms alone!

1 Like

@tyridge77, good work! I wonder what you will sail our way… :pirate_flag:

2 Likes