Fluid Ripple Interference Simulation

Hello everyone,

I am exploring ways to create a ripple interference simulation in Grasshopper, and I would love your insights.

Recently, I came across a WebGL/Java version of this idea, and it inspired me to ask:

  1. Importing and Control: Would it be possible to import such a simulation into Grasshopper and connect it with sliders so we can control and generate our own ripple experiments?

  2. Custom Shapes: How might we define different 2D or even 3D geometries to observe water-like interference patterns within various boundaries?

  3. Multiple Sources: As architects, we are especially interested in defining custom container shapes and experimenting with multiple wave sources to see how interference evolves inside these unique geometries as a part of our resonance architecture study.

So far, we have been working with the Pachyderm Acoustic Simulation plugin, which provides excellent 2D vector sound ray analysis. However, it does not generate the interference patterns where constructive and destructive waves overlap—those beautiful beat-like patterns we are eager to study.

Since sonic modeling is a vital part of our research into resonance science, we are very interested in how Grasshopper might be used to simulate these wave dynamics more realistically.

Thank you in advance for your guidance and ideas.

Warm regards,

Can

Some of the posts in this thread might be helpful for you: Ripple/Raindrop Pattern - #37 by DanielPiker

1 Like

Hi Can.

Like this:

(probably javascript…)

I’m not sure I follow your request precisely… but IF your goal are light caustics, really accurate simulation of the fluid to properly foresee caustics… it’s probably very hard and a gamble.

But with

I’m not sure if you are talking about just the fluid or a laser source :rofl: (where indeed destructive overlaps create a really funny texture “noise” lightning)

Thank you for your responses @maje90 & @Adam_M

What I’m after is to simulate the wave interfercen patterns sbased on diffrent shape containers.

Currently we are able to produce single source effects but not with itnerference patterns but just the ray trace of the sound particels..

Our primary intention is to generate diffrent shapes and obseve interference patterns in side of them

Currently, the webapp i shared is only doing a few forms like rectangle or ellipse- which is pretty cool but we want to take it further depths and test with other geometries with multiple sources.




Also we want to adjust the frequencies and simulate their behaviors

Hope that explains bit more further

Thank you for the support once again! :folded_hands:

In your model you are literally shooting particles, then you are making the particle “alive” by simulating its own reflections and path. But that would be only the initial positive wave without any negative wave.
(Where is the frequency? Amplitude? … is that really a wave?)

In the webapp instead , very likely there are no particles at all, but the computation is simulating the medium. Each and every pixel (2D) have a value at any given time, the amplitude, and its value is spread to neighbour pixels at each iteration (with laplacian operator or mask).
Speed of spreading is the medium wave speed, and frequency is simply achieved by forcing source pixel to a fixed value over time.
This is just a guess of mine. I may be wrong.

If my guess is right, I would try to make a 3D array of voxels to enclose your volume, and make them follow the same logic…
Calculating the caustics should be just evaluating the voxel values near the surfaces you are interested to…

Excalty! First videos are only single ray bounce and no interference at all..
Thats what we’d like to create like the other images.

Please forgive me but couldn’t really captured what you mean as a solution. Just still very beginner in GH and its capabilities :slight_smile:
Especially not sure how to simulate the wave/amplitude and +/- interference with itself..

I did make this to try diffuse reaction 3d:
diff-react-3d
not real waves, due the interaction between A and B elements… but the logic would probably work for simple waves too.
I used a laplacian operator of 5x5x5 here…

This is almost completely c#… vanilla grasshopper components wouldn’t be good imo because:
1- no native iterative methods (but you can install anemone plugin)
2- big lists make everything slow in grasshopper… and you will need big lists.

1 Like

This really insn’t GH’s strong suit. There are no native components for image processing or accessing the GPU to accelerate these kinds of highly parallel simulations. I’m sure you could hack something together but it would be achingly slow.

GH would be a reasonable tool for taking the results of the simulation (as a heightmap) and processing it into curves/meshes/surfaces, but not for generating them.

Anyway I still don’t follow you.
Your images show 3D waves, sound waves in air?
How are you gonna “appreciate” it?
Is this just a workflow to create later 2D patterns digitally and then printing/engraving them?

OP’s previous topic:

Useful, maybe:

Hi everyone,

First of all, thank you all for your responses and for sharing resources — really appreciated :folded_hands:.

We completely understand that Grasshopper might not be the strongest environment for this kind of simulation, but we were inspired by the examples shared and were curious whether something similar could be achieved here in some form. Our main interest is in exploring custom shapes and customly placed sources to simulate wave interference patterns.

@maje90 — Thank you for your helpful insights! Will check your links shortly. Just to clarify, what we are looking at is not simply fluid surfaces or caustics, but rather the wave intersection patterns inside certain geometrical rooms. Think of it less as “waves in the air” and more as fluid dynamics of the room itself — as if the space were filled with water and acted like a morphogenic field. The examples I shared were more like representational studies (rectangles, ellipses, etc.), but they are intentional starting points. Our real interest lies in expanding this into more complex or architectural geometries, with multiple sources interacting inside those boundaries.

@martinsiegrist Thanks for chiming in buddy - that’s a similar project but different parts - link you shared was about exporting the GH geometries for third-party animation platrofrms.


So in short:
  • Our primary intention is to generate and visualize these interference patterns, to better understand resonance in different container shapes.
  • We’d love to know if there is a way to implement or adapt such approaches into Grasshopper — even if simplified.

Again, thank you everyone for your support and insights — it helps us a lot in refining our direction :folded_hands:.

Warm regards,
Can

2 Likes

You have absolutely lost me. I reason with a real-life final target, if you can’t explain what it will be… we will all waste a lot of time talking about vague things.
Then, I tried to google:

?? … anyway…


This is a quick short simple implementation of Finite difference time domain (FDTD) to create simple “sound waves” in a 2D space:
waves
air pressure FDTD Finite-Difference Time-Domain V0.1.gh (12.8 KB)
Not working on the gpu, but at least it’s decently fast with simple multithreaded code… 3D computation speed will be a different story.
Currently values are looped (pac-man effect).
Nice to see ripples after the main first impulse.
Obstacles should be just assigning cells to have a fixed “speed” of zero (air can’t flow).

2 Likes

Interesting:


Barely realtime on my 5800X for a single soundwave generator and 250k cells…
… imo not worth it. :man_shrugging:

2 Likes

Hi @maje90

Thank you so much for taking the time to share your thoughts and the FDTD example — I really appreciate your effort to guide me here. :folded_hands:

Just to clarify briefly: what we are trying to simulate is the wave interference inside architectural spaces — essentially how the geometry of the room shapes the way sound waves resonate and overlap. This relates to our research in resonance science, where the interior field of a room can be tuned much like a musical instrument. Ancient temples are a powerful example: their proportions were often aligned with specific sound frequency octaves, so the architecture itself amplified and reinforced certain tones. Our goal is to understand and recreate this effect — to see how different geometries create constructive and destructive interference patterns, and how space itself can be “tuned” in this way.

I had a look at the FDTD file and video you kindly shared. It’s very helpful, though I wasn’t sure if I was missing something — I couldn’t quite see the bouncing and interference patterns at the boundaries. Is that just an example setup?

Also, the last simulation you shared looked fantastic. Are those colors represent different amplitudes of transverse waves? And does it show the interference once waves bounce back for the walls? If you happen to have a file of that, I would be very grateful to test it on my own system to learn from it directly.

Thanks again for all your support — your input is helping me get much closer to understanding how to approach this.

Warm regards,
Can