Learning Fluid Dynamics in a online multiplayer immersive 3D/VR learning environment

Update 03-04-2024

Version 1.56 is out.
Check itch.io

Update 3-11-2021

Looking for a gamedesigner (closes 17 nov 2021)

Update 22-10-2021

Prototype version 1.04 is out. Visit the world

Update 08-05-2021

Working Avatars! Visit the Sneak preview, hit this link to download, install and visit the prototype

Update 21 – 02 – 2021

Sneak preview prototype, hit this link to visit the world

At the channel
At the sluice

Update 1 September 2020.

Update 7 june 2020.
Version 0.01. Simple prototype dedicated server and clients running om a server at Avans University. Looks a bit weird, but this is a milestone for me.


Update June 2020
Starting for the third time. read my thoughts.

Update 2019 First video on the project

Update June 2018
Followed several online courses on using blueprints in Unreal Engine.
See https://unreal.fluiddynamics.eu/main-water-system-in-unreal/

First video will follow soon?

Update October 2017. After a long time following courses on how to build in Unreal Engine, I finally have started with building blueprints. Busy building a watersystem

Update may 2017. I have reactivated the project. Was too busy with ordinary work :-). I am following a course on Udemy (Unreal Engine 4: How to Develop Your First Two Games) to get my skills on a higher level.

Share Button

Lightning OpenX

It is an building with furniture
Unreal Engine 5.2
We used the collabviewer template

Building has windows, there is no lightning in the building.

This is how it looks with lumen turned on

Interior with lumen turned on

For performance in VR I want to turn lumen off Settings:

Result for chairs in the building. Strange “shadows” appear. Even when I turn shadows off for the chairs. Nanite on or off for the chairs does not change anything.

If I put the chair outside the building. No problem

If I put a light inside the building, it looks better

If I turn cast shadows off in sky_light


Result. FPS goes up! Ofcourse it is not like with lumen on.

Share Button

List of activities by avatars

List of activities which could be performed by avatars (students)

1Measuring levels island and water.
Draw a cross-section of the island
2Measuring a cross-section at a channel , ditch or river. Based on this information the student can calculate : wetted area and hydraulic radius.
3Measuring the velocity at cross-section at a channel , ditch or river. Combined with the area, the discharge can be calculated
4Calculate the Energylevel based on water level and velocity at cross-section at a channel , ditch or river
5Decide on the roughness coefficient (manning) based on the structure (vegetation) at a channel , ditch or river
6Calculate (at cross-section at a channel , ditch or river) the slope of the energyline based on manning. Info needed : velocity, roughness coefficient and hydraulic radius.
7Schietend of Stromend water (froude)
9Turbulente of laminaire stroming (reynolds)
8Measuring waterlevels in the length of a channel , ditch or river. Calculate velocity based on energy slope, hydraulic radius and roughness coefficient
9Advanced. In a cross-section at a channel , ditch or river the velocity is different, depending on the distance to the “wall”. Student measures at different locations in the cross section and calculates the average velocity.
10At a short crested weir in a channel , ditch or river. Measure waterlevel upstreams and downstreams. Measure velocity upstreams. Measure crestlevel. Decide (based on calculation) if crest is submerged or freeflow.
11At a short crested weir in a channel , ditch or river. Measure crestlevel, width crest, waterlevel upstream and downstream, velocity upstream. Decide on crestcoefficient. Calculate discharge at weir.
12At a long crested weir.

Calculate pressure on a object below surface (pascal)


Share Button






Share Button

Basic assignments watersystem

A list of basic assignments for students

  1. Measuring levels land and water. Making a cross section over the island.
  2. Calculate the wetted area (m2) for a cross section of the channel or ditch or pipe.
    Instruments needed:
    – fixed measure poles which shows the coordinates or a moveable device which the avatar can put at a location en which shows the coordinates.
    – Online calculator
    – something to store the data measured and calculated. Each avatar should have some kind of notebook.
  3. Measure the velocity in the channel. Could be with a device, or just something flowing in the water.
  4. Calculate discharge
Share Button

Sneak Preview prototype

There is a “first” version of a prototype of the world running.
The world lives on a server of Avans University of applied sciences. At this moment the main focus is on building a world in Unreal Engine running on a dedicated server.

If you have comments, questions, bugs … let me know at:
h.massink at avans.nl

current version is 1.12a

Update 23-02-2022. Client is available at itch.io

Share Button

Q&A Dedicated Server


Q:What is the best method to update the playerlist. At the moment I use the Gamemode onpostlogin and on logout? This method could be inaccurate. Instead use OnTick to check number of players every tick. Only update widget when number has changed. On the other hand the number of players is only needed to check if a new client could get access.

Q: How can we use the Server Stat Replicator Class (Gamemode) to monitor the server?

Q: How to actually use the prelogin in C++ gamemode. For me this looks like high skilled programming. For example, how do you now the name and password of the client connecting and going through the prelogin? I get the idea that the students starts the program, enters his username and than makes contact with the server. So there is some kind of a lobbylevel. In the current project there is no lobbylevel.

Q:Is it possible to append a record to JSON file on disk, instead of reading the file, adding the record and writing the file again?

Q: If a new player comes into the world, he needs to get all the info of his world. For example , the definition of how all the other avatars look? What is the best way to get acces to this info. Through GameState?

Q: Is it correct that you can’t get access to to playerstate on the gamemode and gameinstance?

Q:Difference in use between Event Running on Server and Has Authority?

Q: Commandlines or bat file for automatically package server and client

Q: Explanation usage FString, static FString and const static FString

Q:Which software can be used for adjusting the Json PlayerInfo file outside of Unreal?

Q: How can the Server be monitored within Unreal

Q:What do the other methods of packaging (shipping, debugging) actually differ from development?

Q: What launcher software can we use? without annoying the virusscanner?

Q: How to run calculations on a different thread in C++

Q: Is het possible to adjust the watersystem in ue4.26.1 in runtime
A: Looks like this is not the case. For the watersystem on the island, I will try to use my system with the materials of the unreal watersystem.

Q:Should we store the PlayerInfo on the Server or on the clients
A:All Info will be stored on the Server

Q: Should we use Cars and Drones to travel in the world, or just teleporting?
A: Although Cars and Drones are more like the real world, Teleporting takes less time and is thereby preferable.

Q: How to change gamemode during runtime?
A: Project settings, GameModeClassAliases

Q:Is it possible to have a map in the World Outliner always collaps?
A:Shift and klik arrow at WorldMap and klik only on arrow again

Q: How to make sure a variable is not saved to disk.
A: Use setting Transient


Q: How to emulate bad internet in de editor.
A: Play > Advanced settings

simulate bad internet

Q:Video 42:39. Get access to gamemode in widget through game state. From client.
In this way you can get access to settings (variables) from the gamemode.

get access to gamemode
Share Button

FD Menu



  • WBP_ChatText
  • WBP_ChatWindow
  • WBP_ScreenMenu

Events ChatWindow

  • UpdateChatWindowInChatWindow

Share Button

FD Character


Names in project : FluidDynamicsCharacter (C++), BP_ThirdPersonCharacter

Tasks :

  • Show Name above avatar
    – Event Set Player Name Text
  • Flip flop between first en thirdperson view

Share Button

FD PlayerController


Names in project : FDPlayerController (C++), BP_FDPlayerController (BP)



  • Make list of bookmarks based on BP_Bookmark ‘s in level
  • Show list in screenmenu
  • Teleport to selected bookmark


  • Make list of avatar names in level
  • Show list in screenmenu
  • Get location selected avatar
  • Teleport to selected avatar

Tasks :

  • Intermediair between ScreenMenu and GameInstance
    – Sent LoginNameToGameInstance
    – SentPlayerInfoToSaveToGameInstance
    – MessageServerWhenLeaving
  • Intermediair between gamemode and Playerstate
  • Intermediair Gamemode and ScreenMenu
  • Chat
  • Playercontroller – GameInstance
  • Contains al Key events
    -Y (chatwindow)
    -M (mousecursor)
    -N (loginnames)
    -R (Read FDPlayerInfoArray)
    -F (FPS)
    -L (show avatar names)
    -Tab (1 or 3 person)
Share Button