创建降雨效果/水滴的算法?

Sah*_*bov 5 algorithm effects

无论使用何种语言,创造降雨效果或水滴的原理是什么?我在Flash中看到了一些令人印象深刻的雨水效果,但它实际上是如何工作的?

雨效果示例

雨滴水效果示例

Unr*_*son 3

你问的问题好像这两个例子是相关的,但你实际上有

1)模拟空气中看到的雨滴(水滴轨迹;简单,但真实性很大程度上取决于光照)

为此,您可以模拟以下事件:

for each time step:
    create new drops
    move existing drops vertically down
    remove (or/and animate) the drops hitting the ground
Run Code Online (Sandbox Code Playgroud)

正如其他答案中指出的那样,可以使用各种算法创建新的水滴(大小和位置)。至于速度,它们以恒定的速度移动。最后,要显示您的踪迹,您需要查看简单的投影

2)模拟飞溅波(水模拟,示例中显示了反射面)

为此,您只需要知道水滴落在哪里以及它们有多大,剩下的就是波的传播。然而,只有存在反射时,这才真正可见,这可能有点棘手。

注:决定真实性的因素有很多,但主要归结为细节。例如,通常只有在奇怪的照明条件下(靠近灯或在高对比度背景下)才能清楚地看到雨。不然的话就相当惨淡了。

还有交互中的细节 - 溅到它撞击的表面上,这可能会留下气泡(如果足够近可以注意到),或产生波浪。

另一个例子 - 如果您看一下本教程,这并不现实,但它确实说明了一点,您会发现即使雨看起来更像雪,它也会暴露第一个示例的“平坦度”(这绝对是)没有深度)。

所以,一切都与细节有关。

尝试根据必须模拟的事件对您所拥有的内容进行建模,然后分别模拟每个事件来解决问题 - 例如,使用分形来播种降雨可能是一种矫枉过正,但如果您很好地对您的工作进行建模,那么您可以从随机播种开始,然后替代使用更准确/复杂的方法。