Interactive water splashes for Astragon's Seafarer ship sim.
We used NVidia Wave Works for our project's water simulation. Among my tasks was to create convincing water splashes for all ships, both player and NPC.
The final result is a relatively light-weight GPU particle system that can be attacked to any object.
The system contains two emitters, the first samples a spline to generate anchors which in turn can sample the waveworks water height at their respective position, essentially repeating a process that happens for each individual pixel anyway, just only a couple hundred times instead of hundreds of thousands, depending on presence on screen. Anchors calculate and store data such as velocity, water depth, etc. The second emitter creates water splashes based on the anchor's values, firing new particles when the anchor breaches the water surface.
The system is super flexible, a single ship can - and often does - hold multiple splash controllers and can be adapted to other sampler sources than splines as well, such as skeletal meshes. Splines were favored, because many of our game and level designers were already using them extensively.
Authoring has been simplified to the point that other non-vfx members of the team can implement them into new ships without having to consult with FX.
The entire asset is done in inside Unreal Engine, with the water splashes being baked from a more complex sim and the baker tool.
Huge shout-out to Marvin Pohl from Lab132 who's been helping us with this project and who built the Nvidia Waveworks Niagara Interface custom module. You can find him here: https://mindyourbyte.de/
Initial mock-up with a static texture sample. Spawning logic is essentially done at this point, spawning particles whenever a spawn anchor's "submerged" state changes frame over frame.
Splash Controller's sampling anchors based on spline location with an offset. This is essentially all other team members needed to interact with in order to add splashes to a boat.
Adapted Splash Controller on Skeletal Mesh.