Fantastic overview! I’ve worked a bunch with Gerstner waves in the past and have just started exploring the new water plugin tools (lots of interesting stuff in there). Your breakdown was excellent!
Thanks I bought it on patreon this has helped me better understand epic game waves and how it works (I don't recommend it for users looking to use it directly in their game this is for users looking for knowledge as performance is very unstable) Thank you very much for sharing these details, I will always support your work, the tutorials and guides are really good
Ty for the support and kind words! :) Yep right, it's meant to be educational first of all. I'm curious about the performance instability though, would you mind telling me more about it? In the viewport I can certainly agree, but in-game I've experienced quite a stable GPU and CPU cost. It jumps a little bit depending on the hardware occlusion culling and mesh drawn though.
It's a bit of an advanced breakdown yes so you might want to start with more beginner-friendly tutorials first. We'll see what coming up next, but I do have a couple more things in the works that is water-related yes. Also I covered some flowmap techniques in other videos.
do you know if there's a way for iterating through the parameters from parameter collection? or do i have to manually loop through them. seems like you did manually but if there is a way, please.. I would try to pack an array into a texture, but since they are not between 0 and 1, i can't use it. neither i can use color32 cuz its bytes. and increments by 1. so its like using ints. i refuse to do it by hand.
Hi. Uh, good question. There's no way to loop through a material collection parameter in vanilla BP afaik. Most surely doable in CPP though. You could maybe somewhat cheat and build an array of Parameter Names and loop through that list to query each parameter individually. And you could build that Names array somewhat automatically as long as you name your parameters with some sort of incrementation like "Param1, Param2, Param3" and so on. Not ideal but could be a solution?
@@ghislaingirardot by the way i found a solution. you can make a custom node and do everything inside. no need for visual scripting at all, by making structs inside of the custom node.
Dude, you did an incredible job! Does it support buoyancy? Can the waves be changed at runtime? Is it possible to create volumes with such details to use in the scene as local overrides?
Thanks! Only the steepness & amplitude can be changed at runtime with Gerstner Waves. Changing direction & wavelength comes with strong, nasty side effects. Regarding buoyancy, no, not as-is. But technically doable, have a look at my Niagara Buyoancy System. You could build buoyancy for this.
hi, im new to unreal and just wondering how do you update render targets in editor at real time, couldn't find how to do it anywhere. I've seen this in all kinds of projects but how?
Hey! You shouldn't have to do anything. As long as the scene capture component meant to output to that render target is in your scene and configured to capture at all times or when moved, the render target should be updated.
@@ghislaingirardot oh, it's scene capture component that capturing wpo texture? I thought it's draw material to render target. Hmm, but how do you capture wpo with scene capture, isn't it just a camera that renders what it's see?
@@alex3d847 Ohh my bad I hadn't paid too much attention to which video you were commenting & my brain kinda defaulted to scene capture component when you mentionned render targets, sorry. It's indeed draw material to render target here, no scene capture components. It's not updated in editor in my case here, I just play a PIE session and have the render target opened in another window. You could update the render target in editor by calling the draw material to RT function in a construction script or in a function callable in-editor afaik.
Highly depends on what you're trying to do but it can be somewhat complicated. There's some cheap buoyancy examples available in my project but it can be expensive to compute in blueprints. Usually, multiple points are scattered underneath an object and the water height is sampled at each of these points. If any is below the surface, some physical upward force is applied to the object at that location and the total upward force is added per frame to make the object float. The more points/samples the more accurate. Project is available as a tier 2 reward on my Patreon.
Hey man! amazing work!. do you think its possible to make one big wave on this ocean? a big wave like tsunami? i have been struggling for a month now. may be because i am new in unreal engine. but it would be amazing and id be very much grateful if you can help me with any information
To learn Gerstner wave and FFts is Probably Possible from home but to get further , become harder than the Animating and Sculpting ore Ui Part of game dev. I also would like to know more about Crystal structurs but it ´s Pretty hard to understand. Could i ask where you lerned all the techniks i work for over 3 years beside ,Studying Mechanik enfgineering with the Unreal engine. But even if i wanted to switch i wouldn´t know to what. Sorry for the prediction but your accent sound a bit French and i´m from Germany and live close the Border and if you guys would have a University over there i would learn french . Becouse here we still haven´t wifi in shools.
@@ghislaingirardot The ball ist still rolling faster. But i´m a bit Insecure becouse the Univerity is for me no Option anymore and I hadn´t start to sell anything till know. But Character UI, Blueprint, Modeling, shading, Texturing and animating is learned and Niagara is the last step on my list. It´s nice to hear that other decided to run this way like i do.
Thanks! Oof, good question :D This particular project I released will not work out of the box to create a spherical ocean if that's what you're asking but, technically yes, there's no reasons why you couldn't. You could sample the Gerstner waves in XY planar coordinates and remap that to polar coordinates. You certainly would have to come up with your own LOD system though, which'd be its own technical challenge. The above/below post process material would need to be reworked to support that as well. TLDL: no, not of the box. With some/lot of work and if you sort of know what you're doing, yeah I can see that being possible.
There's nothing to replicate though? It's just a shader. Do the same Gerstner maths on the server and you get the same wave offset and that's it? I'm not sure what you are asking for here.
Sample the waves in clip space to get the wave height on screen and create an above/below mask in a post process material. The technique can be found in UE's water plugin
@@nBodyResearch I'm afraid it's not exactly on my plans, sry. I did say a few words about that technique in my "Technical overview of my water system in UE" video I made a while ago, so maybe that'll give you a few hints. Investigating how it's done in UE's water plugin should give you all the information you need to adapt it to your own water. It's really all about sampling the wave height at clipspace to get the wave right in front of the camera. Anything above is air, anything below is water.
@@nBodyResearch No. Please enable the water plugin and have a look at "WaterContent/Materials/PostProcessing/M_UnderWater_PostProcess". There's a volume one to be applied on a post process volume and mesh one to be applied on a subdvided plane. The mesh technique is more complicated but gives much better performance. You just need to change the way the wave height is computed to match yours (by default it's a Gerstner wave function called 4 times to get the height with a recursive search)
Salut! Non Patreon c'est un site de financement participatif mensuel ou tu peux accéder à différentes récompenses en fonction du 'palier' que tu choisis. Pas de cours dans mon cas, juste que tu as accès aux projets UE. Celui ci est accessible avec un soutien de Palier 2 (Tier 2) en plus de tout les autres projets déjà disponibles sur ce palier, donc tu paies 10€/mois pour accéder à tout les projets UE Tier 2. Après si au bout du premier mois t'as déjà l'impression d'en avoir eu pour ton argent rien ne t'empêches de te désabonner, sinon tu peux continuer quelques mois pour me soutenir financièrement et continuer à avoir accès aux nouveaux projets que j'ajouterai. J'espère avoir été clair, dis moi si il te faut plus d'infos! (le lien Patreon est dans la description)
@@ghislaingirardot ah d’accord j’aurais accès à ce que tu as fait, le band de poisson que tu as fait l’autre fois et l’océan dans mes projets. Si je prends l’abonnement ? d’accord j’ai compris Si tu peux faire des cours en français de ce que tu as fait çà serait le top. On n’ai près à mettre le prix lol . Tu es le seul à faire ça. tu cartonnerais c’est sur Udemy les cours en ligne. Merci pour ta réponse 👍
I can't guarantee I've shown every bits of every single blueprint and material used to create this demo. Probably most of it though, so try and see for yourself I guess.
@@ghislaingirardot sorry, I meant how do you make the ocean stretch into the horizon, do you just scale it so big or is there some way that is effective in term of processing power to achieve that?
@@ilhamwicaksono5802 I mention it a bit in the video. It doesn't actually need to stretch towards the horizon though, just be large enough. That being said, there's no simple solution. I chose a naïve approach with a subdivided plane following the camera's position. You could use a screenspace grid like I explained in a recent video or a miriad of other methods, all with pros and cons.. Ideally you'd use a quad tree, similar to UE's water actor which imo the best solution but the also the most complex to setup.
There's a blueprint that allows you to do that but it's only really meant to show you how it's done and should really be converted to CPP. Sampling 128 Gerstner waves iteratively in CPU in blueprints is a big no no although it's doable... :)
Hey Grishlain, as always amazing work! But I have a quick question how can I make the Ocean Multiplayer ready and how can several players use the same ocean without making the mesh too big? Or do I just have to use BP_GerstnerWater_Fixed
@@ghislaingirardot Yeah but If you have boats which you can walk on it would be totally different if two clients were on the same boat because the waves are different on every client? Or am I totally wrong?
@@zytron615 first, that's assuming you implemented some kind of buoyancy system, which is a whole other thing entirely. Second, nop: Gerstner waves are deterministic, each client would just need to have the same parameters (time & wave parameters, probably from the server or something) to generate the same exact waves.
Shit is not hard, it's easy to get 75-80% there, which for most cases is good enough. the last 10-15% is the tough work of fine-tuning it and experimenting to be perfect for your application. Game companies can afford to do that because each extra percent nets them more time they can keep a player addicted to their game.
Great vid Ghislaine, and the Patreon files are amazing, so much depth of information there. Thank you!
the final result material is stunning, amazing work : )
Fantastic overview! I’ve worked a bunch with Gerstner waves in the past and have just started exploring the new water plugin tools (lots of interesting stuff in there). Your breakdown was excellent!
Thank you, much appreciated! Gerstner waves are cool!
Absolutly fantastic video ... one of the best tech art presentations ive ever seen on this site .. congratulations
Thank you! Much appreciated :)
Incredible! I was following your journey here on twitter and this is some of the most exciting stuff I've seen in a long time!
Thanks Josef!
Thanks I bought it on patreon this has helped me better understand epic game waves and how it works (I don't recommend it for users looking to use it directly in their game this is for users looking for knowledge as performance is very unstable) Thank you very much for sharing these details, I will always support your work, the tutorials and guides are really good
What's the sponsorship number, please
Ty for the support and kind words! :) Yep right, it's meant to be educational first of all. I'm curious about the performance instability though, would you mind telling me more about it? In the viewport I can certainly agree, but in-game I've experienced quite a stable GPU and CPU cost. It jumps a little bit depending on the hardware occlusion culling and mesh drawn though.
This is absolutely amazing
Thank you!
This is excellent results!
great video man!!
Ty :)
Regarding capture rate - if you ping/pong'd between two RT's, you could lerp between them to avoid the snapping look.
True! Good suggestion :)
Merci beaucoup pour cette vidéo super intéressante !
great tutorial!
Merci, pour cette magnifique vidéo. Elle est très inspirante.
The water looks like in SoT, impressive.
Insta subscribe. Remarkable work and explanation. Thank you
super cool I understand 1% of this but watch every sec, maybe next video about river and flowmap procedural etc?
It's a bit of an advanced breakdown yes so you might want to start with more beginner-friendly tutorials first. We'll see what coming up next, but I do have a couple more things in the works that is water-related yes. Also I covered some flowmap techniques in other videos.
do you know if there's a way for iterating through the parameters from parameter collection? or do i have to manually loop through them.
seems like you did manually but if there is a way, please..
I would try to pack an array into a texture, but since they are not between 0 and 1, i can't use it. neither i can use color32 cuz its bytes. and increments by 1. so its like using ints.
i refuse to do it by hand.
Hi. Uh, good question. There's no way to loop through a material collection parameter in vanilla BP afaik. Most surely doable in CPP though. You could maybe somewhat cheat and build an array of Parameter Names and loop through that list to query each parameter individually. And you could build that Names array somewhat automatically as long as you name your parameters with some sort of incrementation like "Param1, Param2, Param3" and so on. Not ideal but could be a solution?
@@ghislaingirardot by the way i found a solution. you can make a custom node and do everything inside. no need for visual scripting at all, by making structs inside of the custom node.
this is fantastic
THATS WHY HES THE GOAT! THE GOAT!!!
Dude, you did an incredible job!
Does it support buoyancy? Can the waves be changed at runtime? Is it possible to create volumes with such details to use in the scene as local overrides?
Thanks! Only the steepness & amplitude can be changed at runtime with Gerstner Waves. Changing direction & wavelength comes with strong, nasty side effects.
Regarding buoyancy, no, not as-is. But technically doable, have a look at my Niagara Buyoancy System. You could build buoyancy for this.
hi, im new to unreal and just wondering how do you update render targets in editor at real time, couldn't find how to do it anywhere. I've seen this in all kinds of projects but how?
Hey! You shouldn't have to do anything. As long as the scene capture component meant to output to that render target is in your scene and configured to capture at all times or when moved, the render target should be updated.
@@ghislaingirardot oh, it's scene capture component that capturing wpo texture? I thought it's draw material to render target. Hmm, but how do you capture wpo with scene capture, isn't it just a camera that renders what it's see?
@@alex3d847 Ohh my bad I hadn't paid too much attention to which video you were commenting & my brain kinda defaulted to scene capture component when you mentionned render targets, sorry. It's indeed draw material to render target here, no scene capture components. It's not updated in editor in my case here, I just play a PIE session and have the render target opened in another window. You could update the render target in editor by calling the draw material to RT function in a construction script or in a function callable in-editor afaik.
How can you add Physics like Boujency to that and what option do I have to buy to get this?
Highly depends on what you're trying to do but it can be somewhat complicated. There's some cheap buoyancy examples available in my project but it can be expensive to compute in blueprints. Usually, multiple points are scattered underneath an object and the water height is sampled at each of these points. If any is below the surface, some physical upward force is applied to the object at that location and the total upward force is added per frame to make the object float. The more points/samples the more accurate.
Project is available as a tier 2 reward on my Patreon.
Hey man! amazing work!. do you think its possible to make one big wave on this ocean? a big wave like tsunami? i have been struggling for a month now. may be because i am new in unreal engine. but it would be amazing and id be very much grateful if you can help me with any information
To learn Gerstner wave and FFts is Probably Possible from home but to get further , become harder than the Animating and Sculpting ore Ui Part of game dev. I also would like to know more about Crystal structurs but it ´s Pretty hard to understand. Could i ask where you lerned all the techniks i work for over 3 years beside ,Studying Mechanik enfgineering with the Unreal engine. But even if i wanted to switch i wouldn´t know to what. Sorry for the prediction but your accent sound a bit French and i´m from Germany and live close the Border and if you guys would have a University over there i would learn french . Becouse here we still haven´t wifi in shools.
I'm indeed French :) I'm self-taught, just got to look around, be curious, learn & experiment everyday and it'll start to snowball sooner or later
@@ghislaingirardot The ball ist still rolling faster. But i´m a bit Insecure becouse the Univerity is for me no Option anymore and I hadn´t start to sell anything till know. But Character UI, Blueprint, Modeling, shading, Texturing and animating is learned and Niagara is the last step on my list. It´s nice to hear that other decided to run this way like i do.
je sais le français c'est has- been mais comme tu as un bon french accent je comprend ton english easily 😄
haha, je fais de mon mieux :D c'est pô facile. Zeu flouweurs aRe boutifoul.
Great work! Can this be applied to a spherical ocean?
Thanks! Oof, good question :D This particular project I released will not work out of the box to create a spherical ocean if that's what you're asking but, technically yes, there's no reasons why you couldn't. You could sample the Gerstner waves in XY planar coordinates and remap that to polar coordinates. You certainly would have to come up with your own LOD system though, which'd be its own technical challenge. The above/below post process material would need to be reworked to support that as well. TLDL: no, not of the box. With some/lot of work and if you sort of know what you're doing, yeah I can see that being possible.
Is this water replicated efficiently? Or do you have to do some extra time syncing?
There's nothing to replicate though? It's just a shader. Do the same Gerstner maths on the server and you get the same wave offset and that's it? I'm not sure what you are asking for here.
@@ghislaingirardot Thanks so much, that answered my question😁
How are you having the post process of the underwater blue perfectly under the waves??
Sample the waves in clip space to get the wave height on screen and create an above/below mask in a post process material. The technique can be found in UE's water plugin
@@ghislaingirardot could u possibly do a tutorial on how to do this with custom water meshes that dont use unreals water plugin?
@@nBodyResearch I'm afraid it's not exactly on my plans, sry. I did say a few words about that technique in my "Technical overview of my water system in UE" video I made a while ago, so maybe that'll give you a few hints. Investigating how it's done in UE's water plugin should give you all the information you need to adapt it to your own water. It's really all about sampling the wave height at clipspace to get the wave right in front of the camera. Anything above is air, anything below is water.
@@ghislaingirardot so in the WavaCaoture BP would you use a sceneCaptureComponent2d and just point it at the water mesh?
@@nBodyResearch No. Please enable the water plugin and have a look at "WaterContent/Materials/PostProcessing/M_UnderWater_PostProcess". There's a volume one to be applied on a post process volume and mesh one to be applied on a subdvided plane. The mesh technique is more complicated but gives much better performance. You just need to change the way the wave height is computed to match yours (by default it's a Gerstner wave function called 4 times to get the height with a recursive search)
Slt l’autre fois tu m’as
dit d’aller sur le site panthéon mais du coût sa consiste à quoi? C’est des cours sur comment faire des vagues ?
Salut! Non Patreon c'est un site de financement participatif mensuel ou tu peux accéder à différentes récompenses en fonction du 'palier' que tu choisis. Pas de cours dans mon cas, juste que tu as accès aux projets UE. Celui ci est accessible avec un soutien de Palier 2 (Tier 2) en plus de tout les autres projets déjà disponibles sur ce palier, donc tu paies 10€/mois pour accéder à tout les projets UE Tier 2. Après si au bout du premier mois t'as déjà l'impression d'en avoir eu pour ton argent rien ne t'empêches de te désabonner, sinon tu peux continuer quelques mois pour me soutenir financièrement et continuer à avoir accès aux nouveaux projets que j'ajouterai. J'espère avoir été clair, dis moi si il te faut plus d'infos! (le lien Patreon est dans la description)
@@ghislaingirardot ah d’accord j’aurais accès à ce que tu as fait, le band de poisson que tu as fait l’autre fois et l’océan dans mes projets. Si je prends l’abonnement ? d’accord j’ai compris
Si tu peux faire des cours en français de ce que tu as fait çà serait le top. On n’ai près à mettre le prix lol . Tu es le seul à faire ça. tu cartonnerais c’est sur Udemy les cours en ligne. Merci pour ta réponse 👍
This is fantastic, may i ask how long this took you to make?
Ty! Probably around 2/3 weeks full time for both the project & video. It's quite time consuming 😅
is it possible for me create this same one if i pause and make same bp?
I can't guarantee I've shown every bits of every single blueprint and material used to create this demo. Probably most of it though, so try and see for yourself I guess.
(EDITED) Hi, how do you make this stretch infinitely into the horizon? I have no clue on achieving it effectively. . .
Hey! Not sure I understand the question sry
@@ghislaingirardot sorry, I meant how do you make the ocean stretch into the horizon, do you just scale it so big or is there some way that is effective in term of processing power to achieve that?
@@ilhamwicaksono5802 I mention it a bit in the video. It doesn't actually need to stretch towards the horizon though, just be large enough. That being said, there's no simple solution. I chose a naïve approach with a subdivided plane following the camera's position. You could use a screenspace grid like I explained in a recent video or a miriad of other methods, all with pros and cons.. Ideally you'd use a quad tree, similar to UE's water actor which imo the best solution but the also the most complex to setup.
@@ghislaingirardot Thanks a lot, people like you are the best, this will really guide me as I learn by myself, thanks again mate!
mind blown😵😵💫🤯🤯🤯🤯🤯
will objects in the sea move along with the waves?
You can sample the gerstner function to make this happen fairly easily 👍
There's a blueprint that allows you to do that but it's only really meant to show you how it's done and should really be converted to CPP. Sampling 128 Gerstner waves iteratively in CPU in blueprints is a big no no although it's doable... :)
Hey Grishlain, as always amazing work! But I have a quick question how can I make the Ocean Multiplayer ready and how can several players use the same ocean without making the mesh too big? Or do I just have to use BP_GerstnerWater_Fixed
Hey! There is nothing to replicate, it's pretty much just a shader. The mesh would be on the client side to fit each client's own POV
@@ghislaingirardot Yeah but If you have boats which you can walk on it would be totally different if two clients were on the same boat because the waves are different on every client? Or am I totally wrong?
@@zytron615 first, that's assuming you implemented some kind of buoyancy system, which is a whole other thing entirely. Second, nop: Gerstner waves are deterministic, each client would just need to have the same parameters (time & wave parameters, probably from the server or something) to generate the same exact waves.
Shit is not hard, it's easy to get 75-80% there, which for most cases is good enough. the last 10-15% is the tough work of fine-tuning it and experimenting to be perfect for your application. Game companies can afford to do that because each extra percent nets them more time they can keep a player addicted to their game.
the last 15% really makes a difference and teaches you a lot, so go through with it even if you don't implement it, make sure you know what it is 😅
Mobile friendly?
No.
try post in reddit
Oh yeah I tend to forget about reddit, ty for the suggestion, I'll make a post. Social media are exhausting, there's too many :D
w o w
La tech française
thanks water daddy