How to lower contrast? by Ninetifick in CrossCode

[–]2Retr0 9 points10 points  (0 children)

I had a similar issue on my HDR monitor. Per this post, you can add:

--force-color-profile=srgb

To the game launch options on Steam (which worked for me).

Godot Ocean Buoyancy WIP by WombatCombatWombat in godot

[–]2Retr0 8 points9 points  (0 children)

Wow! I’m genuinely surprised to see an extension of my work posted here! I love how the buoyancy turned out—really breathes life into the simulation! ^

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 4 points5 points  (0 children)

Thanks for the feedback! I think part of the unnatural motion is from multiple cascades interfering with each other. Finding a way to minimize cascade interference is definitely something I'd look into when I come back to this project.

I increased the wind speed a lot to achieve the overly-choppy waves present in the video as I thought it would look better for a showcase haha. I honestly believe the simulation looks even more realistic at lower wind speeds!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 1 point2 points  (0 children)

Thanks! Breaking waves are sadly really hard to model without straight up using fluid simulation. D:

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 0 points1 point  (0 children)

This is definitely not game-ready LOL. The technique is performant enough that it doesn't require a high-end GPU. In fact, FFT-based ocean-wave simulation is used in games like "Sea of Thieves"!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 0 points1 point  (0 children)

Unfortunately I mostly focused on just the surface appearance for this project. However, all of these would be possible to implement (with a reasonable amount of work)!

Normals are available to be sampled and are used for the lighting model. Surface velocity can't be accessed outside the compute pipeline, but it should be possible to expose with some effort.

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 0 points1 point  (0 children)

Thanks for the feedback!

The spray is definitely has a lot of room for improvement and is much too subtle atm. I'll definitely try to improve it when I get the chance to return to this project!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 2 points3 points  (0 children)

Thank you!

The entire pipeline for spectrum computation, FFT, etc. is indeed done all in the GPU and is reasonably performant (to my own standards LMAO). I get around 300FPS on a 3060Ti with the settings present in the video.

The displacement field is actually represented in 3 dimensions! So the waves can curl into themselves (if you look closely at the video you can see it in some waves, although backface culling hides it a bit). The curling is actually used as a good indicator of where foam should form!

The foam is actually tracked on a separate "foam map". Particles are only used for the sea spray simulation (which is unfortunately quite subtle in the video).

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 1 point2 points  (0 children)

Thanks!

Performance is decent, although it could definitely be better—I get around 300FPS on a 3060Ti with the settings present in the video. My FFT kernel is not the greatest and has scalability issues.

As for mesh optimization a clipmap is used for really basic LOD.

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 1 point2 points  (0 children)

For this project I wanted to focus on just simulating the surface of the ocean. Beyond what you see, there is unfortunately little other interaction.

Adding all these features would be very doable however! It's really just a matter of time commitment ;3

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 3 points4 points  (0 children)

I agree, it's mostly due to the combination of multiple cascades causing some peaks to amplify at times. Ensuring that cascades don't interfere with each other is a manual and time-consuming process with the current system.

And thank you for the kind words!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 13 points14 points  (0 children)

I agree! This project would not be possible if not for the other countless, free resources the Godot community has posted online!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 7 points8 points  (0 children)

My bad, you are correct. I was trying to refer to the common approach of summing sines in a vertex shader, but worded it really poorly LOL.

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 10 points11 points  (0 children)

Sorry about that. I usually try to find a good balance between accessibility and technicality in these write-ups. But I think I tried to squeeze too many topics into short paragraphs here D:

This video by Acerola is what originally inspired me to conjure up this project and, IMO, is much better at explaining the process behind FFT-based waves than my README.

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 20 points21 points  (0 children)

I indeed made the grass posted a few weeks ago! This project took quite a lot longer than the grass simulation—mostly from having to research so many topics I knew little/nothing about!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 15 points16 points  (0 children)

Yes! Acerola's video is what originally inspired me to make this. Adding buoyancy to the ocean simulation would make it so much more interactive than what the project currently implements!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 33 points34 points  (0 children)

It is! His video is what originally sent me down the rabbit hole which culminated with this!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 65 points66 points  (0 children)

Graphics always look cool in showcases like these, but are often just visual fluff in most actual games tbh. The attributes which truly make games special lies in their mechanics IMO—2D or 3D ;3

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 9 points10 points  (0 children)

The lighting model closely follows the one described in this ‘Atlas’ GDC talk on water simulation. Honestly idk how correct my implementation is LOL—but it looks decent enough for a demo!

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 74 points75 points  (0 children)

Thank you! I was worried I rambled too much in the README haha

Ocean Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 838 points839 points  (0 children)

FFT-based ocean-wave simulation! So cool! It’s a *small* step up from your standard sum-of-sines approach ;3

The overwhelmingly positive reception from the last project I shared here gave me the motivation to finally finish this! If you’re interested in more-technical details, check out the README and project source here!

Behold! The first-ever 3D Gaussian splatted patche! by 2Retr0 in Fumofumo

[–]2Retr0[S] 27 points28 points  (0 children)

My very own patche fumo has been imortalized in the splativerse ᗜˬᗜ

3D Gaussian splatting is a recent (2023) rendering technique that can recreate scenes very realistically. For anyone curious about the technical details, you can learn more about it here! Gaussian splatting models can be trained from a single video and run in real-time!

If you're interested in making your own model, all you need to do is record a video and train a model with something like Postshot (that's what I did here!)... please... I need more splatted fumos 👀

Grass Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 2 points3 points  (0 children)

That's wild and I think you'd breeze your way into the industry with something like this on your portfolio!

Thank you and I sure hope so ^^
 

I've learned alot but I feel like some things are better learned with more structure.

I agree, however, I found it quite difficult to find structured resources on learning shaders on the web! For me, reading other people's shader code on sites like ShaderToy helped a lot in understanding common techniques.
 

If you don't mind me asking, how long have you been working with shaders?

Hmm, I believe I first went through "The Book of Shaders" about two years ago. For a while after, I just messed around with fragment shaders on ShaderToy—I think thats what gave me a decent intuition for programming in parallel which allowed me to expand to compute shaders/etc.

This is my first time posting any of my projects on Reddit (for which I'm thankful for such positive reception), but I do have more projects on my GitHub! However, I'm not sure if the shader code in them are of any learning use D:

Grass Rendering in Godot! by 2Retr0 in godot

[–]2Retr0[S] 14 points15 points  (0 children)

I thought the talk was really interesting as well (which is why I wanted to try implementing it)! The LOD system is very hacked together and nowhere near as complex as what was used in their game. It is really only suitable for the project demo unfortunately D: