真实的海浪是由风吹拂产生的,所以波浪的主要传播方向应该与风向 一致。但风是混沌的,波浪不会 100% 笔直地顺着风走,而是会以风向为主轴,向两侧呈扇形发散。

实现起来也比较简单,只需要计算波矢量风向夹角,夹角越大,能量迅速衰减,夹角超出 $[-90^\circ,90^\circ]$ 的频谱能量直接赋

$$ S(k)=S_0(k)D(\theta) $$

$D(\theta)$ 会使用一些非线性函数来表示迅速衰减的过程,如,

$$ D(\theta) = \begin{cases} \cos^2(\theta) & -90^\circ \le \theta \le 90^\circ \\ 0 & \text{Other} \end{cases} $$

$$ D(\theta)=D'(\hat{k},\hat{w})=max(0, \hat{k} \cdot \hat{w}) $$

示例代码

HLSL
float WindAngle; // 风向 (弧度)

...
{
	...
	float DirectionalSpreading(float2 k)
	{
	    float cosAngle = cos(atan2(k.y, k.x) - WindAngle);
	    if (cosAngle > 0.0)
		    return cosAngle * cosAngle;
	    return 0.0;
	}
	
	jonswapResult *= DirectionalSpreading(k); // * 2.0 / PI
}
点击展开查看更多

2.0 / PI:这是一个归一化系数,保证引入方向扩散后,整个半球的能量积分总和依然等于 $1$,确保总能量不增不减。

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/18612316/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键