Links
course project blog for DH2323 VT26 Computer Graphics and Interaction.
Automated test suite validates the closed-form integrator against analytical solutions: sub-FP-noise force accuracy, 26.565° tilt match, and hard proof that the paper's printed torque formula has a typo.
Stress-testing 100 spheres exposes a GC bottleneck in the adaptive path, a closer look at what 'curving the waterline' actually means, and the definitive conclusion: linear clipping wins for games.
Adaptive clipping was sitting at 50 fps because per-vertex Gerstner sampling ate 50% of the frame. Moved that one loop into a Burst-compiled IJobParallelFor and got 300–500 fps back.
A per-triangle adaptive clipper that bends the straight-line waterline to follow the actual Gerstner surface. Catches a subtle asymmetry bug along the way that makes everything float a little too high.
Threw the Stanford bunny and the Stanford dragon into the wave tank, fixed a collider-driven inertia bug that launched them into orbit, and added runtime mesh simplification so the physics budget stays reasonable.
Plugged Catlike Coding's Gerstner waves into the project and rewired the DLL to read per-vertex water heights instead of assuming a flat surface at y=0.
Implemented Hirae's angular momentum damping, and learned why damping angular velocity directly is wrong.
Implemented Hirae's closed-form surface pressure integration, triangle clipping, and got a cube to float correctly with proper torque.
Built the P/Invoke bridge to wire up a C++ DLL, dealt with a lot of interop nonsense, and got a cube floating from native code.
Got the repo set up, CMake working, and a cube floating in Unity. Kind of.
My original DH2323 proposal for a real-time buoyancy simulation in Unity, based on Hirae's closed-form integrator and an adaptive curved clipping idea for waves.