可交互水面涟漪
实现难点:
多点水面检测,如何传递
- 个人想法:通过射线检测,配合差值器的数组类型进行实现,间隔检测时间比如0.1秒,避免数据过大
水纹相互扩散的实现
个人想法:
- 使用一个圆形 SDF 距离扩散,设定一个最大值,达到后消失
- 使用粒子系统,由粒子系统进行接管水纹扩散的大小曲线控制
调研的方法:
方法一:使用有限分差波模拟。 通过一张buffer,使用纹素移动,分别采样上下左右四次,然后进行相加并与上次结果相减,乘以阻尼后写回buffer https://www.shadertoy.com/view/4sd3WB https://rice.moonedit.com/edit/?h=W2L7zN
方法二:使用波动方程进行计算模拟
方法三:使用RT进行渲染
方法四:使用粒子系统,分层渲染
方法六:使用 sin 波叠加
[Ripple Water Shader - Unity CG/C# Tutorial [Part 1/3]
https://youtu.be/UfX9dzhBhg0

水纹扩散相交处的融合处理
- 个人想法:直接结果相加
- 调研的方法:直接相加
旧水纹与刚检测到的新水纹的叠加融合处理
- 个人想法:直接结果相加
- 调研的方法:直接相加
水纹
https://www.shadertoy.com/view/Xsd3DB
https://github.com/ya7gisa0/Unity-Wave-Propagation-Water-Ripple
上述效果的原始版本
https://www.shadertoy.com/view/4sd3WB
https://rice.moonedit.com/edit/?h=W2L7zN
源码
https://rice.moonedit.com/edit/?h=W2L7zN
2D波动方程