Humpalumps/Ultra-Water

多媒体与设计

面向 three.js 的实时 FFT 海面渲染器,含碎浪、泡沫、焦散与水下效果及演示岛屿。

162
26
JavaScript
MIT
今天创建

Ultra Water 是一个基于 WebGL2、面向 three.js 的实时海面渲染器,附带一个演示岛屿场景。它适合正在制作交互式 3D 水体的人——浏览器海面场景、游戏原型或视觉研究——希望直接获得波浪、泡沫和水下效果,而不是从头实现。它是渲染器与场景素材集,不是成品游戏或产品。

它能做什么

波浪来自 Tessendorf FFT 模拟,四层级联(从 600 m 到 2.1 m 毛细波带)堆叠进一张图集。表面着色器在此基础上加入逐像素法线、粗糙度感知的 Fresnel、太阳闪光、半分辨率平面反射、带深度校验的折射、次表面散射和空气透视。岸边碎浪依据海底地形上的程函走时场计算,因此波前在近岸会减速、聚集并折射;泡沫从白水侵蚀到蕾丝状,沙滩上还有冲刷水膜与湿痕。焦散以面积比泼溅生成,海床、漂浮物和水下光柱都采样同一图案;水下通道处理斯涅尔窗、全内反射、太阳光柱和海洋雪。漂浮刚体以 240 Hz 子步获得浮力,水位由 GPU 查询后异步回读。Hillaire 大气、程序化岛屿、岩石与后期(自动曝光、泛光、AgX)组成演示场景 README。

如何运行

这是一个 JavaScript 项目:npm install 后 npm run dev,打开打印出的 localhost 地址。用鼠标或手指环绕观察;页面左上角的性能面板显示 fps、每帧毫秒数和 20 秒曲线图,其基准测试渲染 300 帧,运行期间画面会冻结约一秒 README。

手机和平板会被识别并启用更轻量的配置(降低分辨率、2× MSAA、缩减反射、关闭泛光),并可选自动降分辨率。URL 加 ?mobile 或 ?desktop 可强制任一配置 手机与平板说明。

性能数据

作者报告的基准测试条件是 RTX 3060、Chrome 经 ANGLE/D3D11、4× MSAA、全部特性开启、1954×1692(3.3 MP):不同镜头下不锁帧约 208–303 fps,Breakers 镜头约 240 fps README。在一台 OnePlus Nord 4 上,移动配置所有镜头都保持 60 实时 fps;同一手机用桌面配置则为 41–50 实时 fps。README 说明峰顶泡沫升级是在那次测量之后加入的,尚未干净地重新测量;此前公布的偏低 2–4 倍的数字来自有问题的回读式基准——这些是特定硬件上的作者自报数据,不是普适保证。

限制

移动物体后的尾迹尚未实现;漂浮物只在下落时扰动水面。漂浮物之间没有碰撞。碎浪是高度场波浪,会倾斜但不会卷成管状。相机位于水面线上时,以相机为中心的网格在镜头附近较粗糙 README。

许可

MIT 许可证;改编自其他项目的代码列在 第三方声明 中。

本文由 AI 根据项目 README 生成,更新于 2026年10月29日,以项目官方文档为准。