[Community Project] WIP Weather & Ocean Water Shader

Hey man,

As far as dedicated to the project, it is currently only myself, however I have received contributions from quite a few users to the project. Handkor has provided code to the project, Tk-Master has helped out with the material, Komodoman has offered his Fish Flocking AI as well as a bunch of different fish species for the underwater portion. There have been many other small contributions from others as well.

I am open to any and all help with the project as I am not always able to give my full attention to this as much as I would like. I do want this to be a community project, and have thought about moving everything to GitHub to allow more collaboration. Any ideas are welcome, and would love to hear any/all feedback on how to make this better for everyone.

Thanks! :slight_smile:


great job on the water, I really like it so far. Also the plans you have for it sound great.

I copied the water over to my project and it looks great, but I just have one issue, like you can see in the picture, in a certain radius around my island, the water gets those open spaces. On the left side, its alright, but on the right you can see where the radius starts.

I have not found a way to fix this yet. Hope you can help me out with it :slight_smile:


Thanks a lot and keep up the good work :slight_smile:

GitHub is a great idea. You can have a release branch, a release candidate branch for accepted merged contributions, and a working branch for the public. Anyone that wants to make contributions sign up and they clone the repo then when they make a change(s) they commit it to the repo with a note of what they changed and if you or another admin doesnt like it, you revert to the last commit. I’m using it for my project and it works great.

Id suggest that to get more people on board and to centralize all information (Readmes in every directory, a wiki, bug tracker, comment system, unlimited storage space, backup system, revert/apply changes at will, contributors of admin or user status, multiple branches) you know how it works im sure. Once I get my project files from Unity all switched over to Unreal I plan to make many additions especially to the underwater system and fluid dynamics and would love to share them.

Over on the Unity community ocean shader project they had 3-4 people each with their own github and then people would make their own changes and upload the project to their own github or mediafire or something and it was a mess. Centralization is key, especially for open source.

With the engine being free… expect some people with skills (and some idiots) to start flooding this thread. I’ll be making a persona githubl branch for it even if you dont lol. Currently working on modelling an important sub with really tricky lines though.

Yeah man I totally agree, if you can help me out to keep the project up to date and how to make changes to the GitHub version, I will do it asap. I know how to use Github to fork UE4’s repo but I haven’t set up my own version before.

Sorry for the late response, been trying to keep up with the huge flood of messages to be moderated… I have never seen anything like this, it’s just nuts…

I created the repo so a while ago so I just need to upload the files to GitHub, might need to wait until tomorrow. Here is the link so far (its empty :p)

GitHub Link - GitHub - UE4-OceanProject/OceanProject: Environment Plugin Project (Ocean Simulation, Sky Simulation, Buoyancy, Time, Fish plugins for Unreal Engine 4)

I’m not all that great with github yet, but hopefully that will just be temporary :slight_smile:

@LandsHeer -

That looks to me looks like the plane mesh was scaled too large, or that you are using the Mesh in your scene instead of the Blueprint. Double check you are using the BP, and if not, use the BP instead :slight_smile:

Download the windows GUI github client. Its incredibly easy to use and everything else can be done online. I had never used it before I started my project and after reading a few how-to pages I had it more or less figured out. I never saw your from Vancouver! I take it you went to siggraph? Im from Edmonton. I can make a post on my basic understanding of it issue tracker with tags/release milestones is easy, wiki is self explanatory and once you get the formatting down you can add readmes in any directory you want, other than that what I’ve done is created a directory on my spare harddrive called “#Github” and then my repo is linked to directory within there called “ColdWarSubSim” and then I copied all my project files there. I still have a main backup that I backup every week but I do all my work in that directory. I leave the GitHub client for Windows running and it detects changes to any files and then when you think you’ve made some progress you commit it with a title and a description and it gets uploaded online.

Users can clone the repo to get the current files you have and then anytime you make a change, they can hit “sync” to get the latest changes, and you can do the same. I’m sure other people could add to that short description. Although that might clutter up the thread more than I already have.

Hi DotCam,
I’ve seen in one of your videos that you have implemented Flocking behavior to make fishes behavior more realistic.
I’m doing a project for university where I have to implement collision avoidance (steering behaviors, flocking, etc.) and I’m interested in see how you have solved it, if it’s possible of course.
If not, could you give me any advice about how to achieve the behavior… I’m new using unreal 4 and I’m a little bit lost with this monster engine.

Thank you very much DotCam!!

Now that Unity hit back with free Unity 5 (I have to check out how unfinished it is, its a half year early) now I have a hard choice. DotCam you may lose a coder… I started with Unity… TOUGH TOUGH super tough call.

Edit: Wow, they have implemented a LOT. Once their servers stop choking I’ll see how buggy it is, if it all. Heres my overview of features I posted on the wiki… realtime global illumination. Being that C# is much easier to learn I’m gonna have to make a tough choice soon. God I have bad timing, I just cancelled my Unity subscription, renewed my UE subscription and started learning more C++ after learning C# for Unity, after learning JavaScript as my first programming language.

Hey guys I got my AI patrolling correctly now here is a video update on it. I will continue working on the combat systems and keep you updated on my progress. This of course is in the 4.6 version and I would like to make it to 4.7 with Hankor’s help on the buoyancy. I understand that he needs to make it all in BP only is that still happening?

I had some free time tonight and I rewrote the OceanManager to be 100% Blueprint. I’ve also created a BuoyancyComponent with the new ActorComponents. I just need to finish the applying the buoyancy forces to the objects and the 100% blueprint version will be complete.

Another Canadian eh! We will be known as the Canadian Ocean Team lol! Are you going to share that? I’m a visual learner and would love seeing all the blueprints to get up to speed on this project so I can start tinkering with underwater fluid dynamics and addons. Been so busy modelling some ships I havnt gotten around to even opening the project yet.

I’d like to share it but It looks like I am going to have to recreate everything again. The project keeps giving me external reference errors when I place an pawn with the buoyancy component in the map it is then preventing me from saving the map. I’m thinking it was caused from migrating some of the old blueprints that were referencing the code OceanManager but I can’t seem to be able to shake the reference. I just tried to Fix References on the folder and just sent the engine in an infinite loop. Other than that the components works and I made a cube float.

This reference thing is weird. It goes away when I reopen the project but comes back as I edit the BuoyancyComponent. It does not always come back immediately though.

Anyway I just did some performance testing and the C++ version 1 or 24 object the framerate is the same. The Blueprint version 12 object cuts the framerate in half and 24 cuts it in quarters. This seems to be too much math for the Blueprint system to handle.

Maybe we can reduce the number of calculations in Blueprint by using a multiple Blueprint approach with some calculative C++, or just add more Blueprints to support the load on one of the blueprints. In C++ you perform the calculation needed for the Gerstner wave. But then pull variables created from the C++ into the blueprint.(Now I have seen you doing this already in C++ and using variables in the BP but I’m trying to think of a way to reduce the overall math in the one or more BP.) I run into the same frame rate issue when I attach my AI script to one Character BP. I instead have to make new Blueprints to reduce the number of functions on the one blueprint.

For instance the P(x,y,t)= [x+sum(QA *D.*cos(x,y) + pt)), y+sum(QA *D.*cos(x,y) + pt)), sum(A sin(x,y)+pt))] can be used In C++ to carry out some sort of background calculation and then pulled into the blueprint using created variables. Then we make a Calculation Blueprint that takes these variables and just calculates variables for use in other blueprints. It sounds like building more structure to the blueprint can help lower the load on the blueprint system for one or more of your blueprints. Let me know if this helps.

Or you can write everything in C++, compute shaders and provide blueprints as an interface solution :slight_smile:

Yeah, if it’s not 100% Blueprint then might as well keep the C++ I already have. At least now I know the impact of doing this in blueprint. I also ended up doing dome refactoring/simplifications when converting that I will apply to the C++.

Have you tried splitting up some of the Blueprint and using event dispatchers or even the blackboard system? I’m not against the idea for C++ if it lowers the frame rate, but maybe we are looking at using the blueprint system improperly for the scope of the project. Also sorry about the Kandkor, I corrected it in my video.

Wow, so it’s confirmed then. I thought I was doing something wrong when I used BP in the past with similar performance, that’s crazy!

For example I can’t imagine calculating FFT on blueprints for large (at least 512x512) displacement maps without killing performance completely. :slight_smile:

P.S. Do you have a list of programming tasks for your project?

Hey man, wasn’t able to make the last Siggraph, but hoping to go to the next! Funny how Canadians seem to be obsessed with water, eh? :wink:

As far as you project goes, please do what is best for you. I would love to have you work on this project as well but I don’t want to get in the way of your game whatsoever. So you do what is best for you okay? I totally understand either way. :slight_smile: