Kaelen Raible

As part of VAST Lab, one of our larger projects is based around watersports, but Roblox’s water system is incredibly lacking in both options and visual fidelity. Therefore, I decided to create my own water system for the lab to utilize in the future.

This basic application of the Gerstner Wave algorithm uses a skinned mesh with approximately 1000 rigged bones to create a wave motion across the surface of the mesh. In this script, we can control the wavelength, velocity, direction, and other factors of the waves to create different types of motion across the mesh. After completing the base visual, I extended the project with a collision script for the mesh because Roblox does not support collision for skinned meshes like in the video.

A key issue with adding collision to these meshes is Roblox’s protection from vertex access on the mesh. This means that we must assume a uniform topology of the mesh to graph our own connections. Once these assumptions are correct, as in the video, we can estimate the closest plane to the ball, get the normal of that plane, and output the height value of the mesh at that location.