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

How would I avoid issues like this between planes? the bones controlling the edges are synced, but this still happens.

1 Like

I “fixed” this literally by putting a bone on every vertex.

Wow! It’s just soo cool what you are able to do with PBR and skinned meshing. Roblox is really making its engine more powerful for us developers. Great work!

1 Like

Very nice work, I always like seeing amazing examples of work, and I can tell your team put a lot of effort into this.

I’m not doing anything specifically, but it would be AWESOME to just have lol. Maybe do a few showcases with.

So you used an armature to animate the water? Sounds super tedious, but how? I tried using the ocean modifier in blender and put it into an animation, it didn’t have bones though so I don’t think it can be used in roblox. Looks great though!

WOW! This is the definition of innovation. Skinned bone meshes are amazing, and I hope your game is successful. Good luck!

1 Like

Maybe this resource I made could help everyone here wondering how to make this.

@Eth_r , @Alphirex , @TheOriginalGMW , @Sir_Highness , @EtiTheSpirit , you guys were wondering how to make this, hopefully this post helped!


Thank you sooo much, I’ll check this out ASAP tomorrow morning.


Hi @tyridge77.

I am trying to implement a system like this and I have a few questions:

  • How do you get 2 ms update time?
    When using around 4000 bones, and updating them every frame, I get around 20 ms update times. This is using three gerstner waves.
    Do you have some magic formula that speeds this up?

  • How does your fast height lookup work?

What exactly do you do with the bones nearest to the camera? Do you use trigonometry to calculate the height from a triangle?
What if the server doesn’t see the bones? Does it use a different method?

Keep up the amazing work!
I’m excited to see this game when it’s playable.


Ty, huge fan of ur work. How many bones did u set the plane to be so u could animate it and make it seamless?

1 Like

That’s absolutely amazing! It’s a real shame that it’s not open source, but oh well. Looks amazing anyway!


Nice! I’ve always wanted an ocean like that in roblox, Guess i just have to hire someone once my game gets popular.

This is a really cool concept for what’s gonna be a really cool game! I really like the effect that the mesh deformation gives. Really good!

Keep up the good work! :slight_smile:

1 Like

Could it be possible to get a tutorial for how you made this endless? Ive been struggling with my own. Ive rewrote streaming enabled, and redid my code countless times but keep falling upon the same issue. When loading in a bone plane, the render label (in microprofiler) jumps and causes the other planes not to update for a split second causing issues.
(Ive made it so that a queue is made for all the waves that need to be loaded into the workspace (pulled from replicated storage). And I one at a time in over each frame (ive even given buffer room)

Anyway to circumvent the long render times?

Wow that’s amazing! I’m just wondering… how did you make the mesh deformation of the waves looks so smooth?? I am currently working on a similar system and these are the best results I could produce:

As you can see, mine is very choppy and has very hard/sharp edges. I really wish I knew how to get my waves that smooth. Is it the perfection of wave settings? How the waves are calculated themselves? A visual trick with the texture? I’m really curious.

Use LOD & a chunk system so that the waves closer to you have a higher bone count then the ones further away. Although this can create clipping at the chunk border.

The way I’ve preferred to use is the further away from the camera, the less the amount the waves move so that eventually the just level out to be flat in the distance, sorta like in graph below but over a shorter range.