# Ocean simulation

**URL:** <https://forum.babylonjs.com/t/ocean-simulation/48955>\
**Category:** Demos and projects\
**Tags:** water\
**Created:** [March 21, 2024, 10:58pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955 "2024-03-21T22:58:26Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 21, 2024, 10:58pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/1 "2024-03-21T22:58:26Z")

</div>

Hello everyone!

I made a small ocean simulation for a class project using Jerry Tessendorf’s FFT-based approach.

 ![cover](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/8/8/885add99c9ca76e3ddb422f0c838db60580b2fdf.jpeg)

The source code is available here:

> **[GitHub - BarthPaleologue/WebTide: WebTide is an ocean simulation based on...](https://github.com/BarthPaleologue/WebTide)**
>
> WebTide is an ocean simulation based on Jerry Tessendorf's paper, implemented on WebGPU with BabylonJS. - BarthPaleologue/WebTide

It is not as complete as @Evgeni_Popov [ocean simulation](https://github.com/Popov72/OceanDemo?tab=readme-ov-file) (i reused the WebGPU FFT algorithm btw ^^), but I tried to make it as easy as possible to use and integrate in existing projects so maybe someone will find a use for it!

It supports transparency based on depth and environment reflections using a skybox cube map.

I also used tri-planar mapping to make it work on a sphere because everything is more interesting and complicated on a sphere 😂

---

<div class="post-metadata">

**Author:** ![CodingCrusader](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/codingcrusader/32/29857_2.png) [@CodingCrusader](https://forum.babylonjs.com/u/CodingCrusader)\
**Post date:** [March 22, 2024, 8:12am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/2 "2024-03-22T08:12:00Z")

</div>

Kneel down and fold your hands! This is so beautiful!!! 💗

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 22, 2024, 9:54am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/3 "2024-03-22T09:54:39Z")

</div>

Are you making me a knight? I swear to protect the widows, the orphans and BabylonJS 😂

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/b/3/b3617f50a3cedd1b1312dbaf22f872f762690ec7.jpeg)

---

<div class="post-metadata">

**Author:** ![CodingCrusader](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/codingcrusader/32/29857_2.png) [@CodingCrusader](https://forum.babylonjs.com/u/CodingCrusader)\
**Post date:** [March 22, 2024, 10:33am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/4 "2024-03-22T10:33:20Z")

</div>

So be it and now stand up, Sir CrashMaster of Babylon!

---

<div class="post-metadata">

**Author:** ![simon](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/simon/32/45590_2.png) [@simon](https://forum.babylonjs.com/u/simon)\
**Post date:** [March 22, 2024, 11:03am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/5 "2024-03-22T11:03:36Z")

</div>

Impressive!

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 22, 2024, 11:44am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/6 "2024-03-22T11:44:00Z")

</div>

And so began the holy crusade against ThreeJS

---

<div class="post-metadata">

**Author:** ![mawa](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/mawa/32/12384_2.png) [@mawa](https://forum.babylonjs.com/u/mawa)\
**Post date:** [March 22, 2024, 3:17pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/7 "2024-03-22T15:17:18Z")

</div>

> [@CrashMaster](#):
>
> so began the holy crusade against ThreeJS

We started this long ago. But it isn’t a crusade. It’s natural selection…We’re just better 🤣

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [March 22, 2024, 4:12pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/8 "2024-03-22T16:12:33Z")

</div>

Superb!

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [March 22, 2024, 4:15pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/9 "2024-03-22T16:15:21Z")

</div>

@CrashMaster Tweeted about it 😉

> <https://twitter.com/deltakosh/status/1771208945744662993?s=20>

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 22, 2024, 4:38pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/10 "2024-03-22T16:38:07Z")

</div>

Thank you! I did not expect this class project to go this far 😊

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 22, 2024, 4:39pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/11 "2024-03-22T16:39:59Z")

</div>

they are probably afraid of Babylon 7 upcoming release right now x)

---

<div class="post-metadata">

**Author:** ![mawa](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/mawa/32/12384_2.png) [@mawa](https://forum.babylonjs.com/u/mawa)\
**Post date:** [March 22, 2024, 4:45pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/12 "2024-03-22T16:45:05Z")

</div>

LOL. I bet you. I double bet you 😂

---

<div class="post-metadata">

**Author:** ![sebavan](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/sebavan/32/57_2.png) [@sebavan](https://forum.babylonjs.com/u/sebavan)\
**Post date:** [March 22, 2024, 10:45pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/13 "2024-03-22T22:45:20Z")

</div>

The blog post is amazing !!! well done !!!

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [March 23, 2024, 11:01am UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/14 "2024-03-23T11:01:47Z")

</div>

Thank you! I hope my teacher will think the same xD

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [March 25, 2024, 4:18pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/15 "2024-03-25T16:18:32Z")

</div>

Tell them to connect to us if they disagree 😃

---

<div class="post-metadata">

**Author:** ![DWork](https://avatars.discourse-cdn.com/v4/letter/d/7993a0/32.png) [@DWork](https://forum.babylonjs.com/u/DWork)\
**Post date:** [April 2, 2024, 3:34pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/16 "2024-04-02T15:34:53Z")

</div>

Is there another version for WebGL2.0? 😃

---

<div class="post-metadata">

**Author:** ![CodingCrusader](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/codingcrusader/32/29857_2.png) [@CodingCrusader](https://forum.babylonjs.com/u/CodingCrusader)\
**Post date:** [April 2, 2024, 3:53pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/17 "2024-04-02T15:53:02Z")

</div>

sure.

[Water Shader Editor: 29.459420 (aaron-sp.github.io)](https://aaron-sp.github.io/water_tessendorf/index.html)

[Ocean Wave Simulation (david.li)](https://david.li/waves/)

[WebGL Water (madebyevan.com)](https://madebyevan.com/webgl-water/)

The animations with webgl are incredibly fast, maybe I should take a deeper look! 🙂

---

<div class="post-metadata">

**Author:** ![CrashMaster](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/crashmaster/32/23662_2.png) [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Post date:** [April 2, 2024, 4:57pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/18 "2024-04-02T16:57:00Z")

</div>

I don’t plan to support WebGL sadly 🥲

The only real bottleneck here would be to implement the GPU FFT with only fragment shaders as compute shaders are a WebGPU only feature. Although some people did it in raw WebGL, I am not sure how that would translate to BabylonJS.

The rest of the spectrum calculations can be made with procedural textures instead of compute shaders and it would work just fine.

Here is another WebGL example to find inspiration:

> **[Shadertoy](https://www.shadertoy.com/view/MdXyzX)**
>
> Build shaders, share them, and learn from the best community.

---

<div class="post-metadata">

**Author:** ![AncientA](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/ancienta/32/46615_2.png) [@AncientA](https://forum.babylonjs.com/u/AncientA)\
**Post date:** [April 2, 2024, 9:07pm UTC](https://forum.babylonjs.com/t/ocean-simulation/48955/19 "2024-04-02T21:07:58Z")

</div>

Super cool!
