Demo
Fluid Flux 2.0 Demo introduces two new example demo maps that showcase the capabilities of the updated version. The CoastlineMap highlights the new Coastline Domain system, demonstrating the seamless blending of coastlines with the simulation state. On the other hand, the WaterfallMap showcases the simulation of shallow water on steep slopes, specifically focusing on a waterfall scenario.
Additionally, the demo help panel has been expanded to include several new options:
- Press L and move the mouse to rotate the sun
- Press I, O, P keys to switch predefined Color Presets
- Press G to turn on/off debug ground
Before updating your project
Due to this update’s extensive scope, certain aspects might have been overlooked during the development and testing phases. To ensure a smooth transition, it is strongly recommended that you make a copy of your project before downloading the update.
Please note that the removal or renaming of assets might not be automatically handled during the update process. Consequently, there is a possibility of “ghost files” from the previous version (1.1) remaining in your project. To mitigate any potential issues, it is recommended to follow these steps for updating:
- Make sure that the Update is already available on the marketplace page 🙂
- Navigate to the Content/FluidFlux folder in your project.
- Remove or delete the entire old version of the product from the FluidFlux folder.
- Download the new version of the product and extract it into the FluidFlux folder, ensuring a fresh and clean update.
The new version is not fully backward compatible with Fluid Flux 1.1 but the transition should be smooth for everyone. To help you navigate through any potential challenges, please review the following list of problems and changes that may arise during the transition:
- No blending with the Ocean after updating the project – Easy fix: AreaWorldBlend = (0.2) should be adjusted in the simulation actor.
- Material is not working on the distant ocean mesh after updating the project – Easy fix: Remove distant meshes and switch Surface->SurfaceMeshMode to InfiniteGrid_128_Niagara
- BP_FluxModifierWaveActor is now reading SurfaceHeight from its actor position so you may have to adjust the Z location of the actor.
- The simulation algorithm has been improved by adding friction, damping, and overshooting correction. As a result, the simulated state in the new version may appear slightly different from the previous version.
Coastline Domain
Introducing the BP_FluxCoastlineDomain, a dedicated system designed specifically for baking world data into textures and constructing a CoastlineState. This state serves as a fundamental data source during the rendering process for coastlines and oceans.
The example configuration in the demo captures the island coastline on an area of 3km x 3km. The maximum size of a map captured by the BP_FluxCoastlineDomain system is 10km x10km.
The BP_FluxCoastlineDomain system’s architecture is similar to that of the simulation system, ensuring consistency and familiarity. It includes structures like the data asset, baked state, and initial state. The BP_FluxCoastlineDomain actor generates a state that can be exported as the CoastlineState data asset or used directly in the BP_FluxSurfaceActor, just like the SimulationState. This simplifies the workflow and makes the system more user-friendly.
The CoastlineState data asset stores two textures.
- WorldGroundMap stores the height map of the coastline area.
- WorldCoastlineMap stores the distance to the coastline, direction, wave height, and blending of the coastline.
Niagara Infinite Mesh
Previously, the rendering of the surface actor was based on a single static mesh displaced by simulation or waves. While this approach was simple, clean, and robust, it had limitations, mainly when dealing with large water bodies. The new rendering mode can be activated by switching Surface->SurfaceMeshMode=InfinityGrid_128 and controlled using InfiniteGrid parameters.
A new mesh rendering mode is designed for infinite surfaces like oceans and large simulations/states. This extension is based on multiple Niagara meshes in resolution (128×128) spawned on a grid around the camera. Additionally, a simplified distant mesh is employed to cap the surface on the horizon, further enhancing efficiency.
For debugging purposes, the grid preview can be enabled by utilizing MI_FluxSurfaceOverDebug as the OverWater material in the Surface actor.
Please be aware that the previous configuration for distant meshes is no longer supported and will be removed in future updates.
Wave break
Shallow water simulation is unable to capture the breaking of ocean waves. However, Fluid Flux addresses this limitation by offering an additional tool specifically designed to simulate visually appealing shoreline wave breaking without using simulation. A wave profile is a small two-dimensional texture that stores data about the displacement of the mesh in time.
Wave profile textures can be generated with BP_FluxWaveProfileGenerator based on a list of splines representing animation frames. Since BP_FluxWaveProfileGenerator is an experimental tool, I recommend using the example WP_DefaultWaveProfile data asset.
Heightmap Capture
In this update, we’re introducing a new and improved system for capturing height maps. The HeightMapComponent is now utilized by SimulationDomain and CoastlineDomain, providing enhanced functionality based on the simulation actor heightmap capture code.
Furthermore, new visibility options have been implemented, and a simplified structure has been introduced. However, please be aware that the previous visibility configuration in the simulation actor will no longer be supported and require recreation using the new tools.
- New material function (MF_FluxFlatGround) for clamping mesh during the heightmap capture process
- Ground map debug visible only when simulation actor is selected or DebugSelectedOnly = false
- Added ground map precision settings
- Parameter: ReferencePlane offsets the height of the simulation, so the quality should be better around the center of the simulation.
- Added loading heightmap from the initial state
- Fixed hard reference problems on sublevels
Color presets
The color preset system is a powerful tool for effortlessly configuring the visual aspects of the water. It offers a range of predefined presets, eliminating the need to create new material instances to modify scattering and absorption.
A total of 24 preconfigured color presets are now available for oceans, shallow water, and rivers. Additionally, users can create their water presets by duplicating existing examples and adjusting the parameters as desired. This allows for seamless customization and experimentation.
World painter and brush
The FluxWorldBrush is a unique actor that manipulates data within the WorldPainterComponent canvas. The system offers three distinct types of canvas on which the FluxWorldBrush can perform painting operations:
- ColorPainter ( BP_FluxWorldPainter), interpolation between the base color and painter color.
- WaveSize (BP_FluxCoastlineDomain) is the interpolation between no wave and the highest wave.
- WaveType (BP_FluxWorldDomain), interpolation between Oceanic wave and coastline wave
Underwater
The entire underwater shader was built from scratch. The Single Layer Water lighting model was incorporated (the same as built-in Unreal), into underwater materials. This implementation enabled the removal of multiple parameters and establishing a unified water system controlled by the same parameters as the surface. This simplification represents a significant advancement, as it now ensures the lighting of the underwater environment is consistent with the surface lighting at any time of day.
Surface
- Added coastline(coastline state) rendering mode
- Added surface rectangular cut masking (only one area supported)
- Added detail wave foam and WPO displacement
- Surface shading improvements: specular, roughness, PhaseG,
- Foam shading improvements: emissive foam color, dithered foam parameters
- Fixed bright caustics when fluid moves too fast
- Fixed fluid mask implementation
- Fixed distant fluid state opacity z-fight
- Disabled masking in generated static meshes
- Optimized surface shader complexity
- Added hole cutting using a rectangular mask.
Simulation Domain
- Renamed BP_FluxSimulation to BP_FluxSimulationDomain (old asset still exists in a project as deprecated child class)
- Improved edge of the water when flowing in the area
- Configurable default surface child actor by soft class reference.
- I moved the simulation area blending parameter from the surface to the simulation (AreaWorldBlend) and changed it to a 4-axis vector.
- Organized simulation parameters in separate tabs: Simulation->Physics
- Added OvershootingBlend and OvershootingEdge parameters, which fix spikes appearing on large slopes
- Default parameter SimulaitonDeltaTime changed from (0.2 to 0.18 for improving stability)
- The default parameter FluidTransportLimit changed from 100 to 500
- BP_FluxModifierWaveComponent was renamed in FluxModifierWave actor, which means your settings may reset after the update (sorry for that).
- Improved initial state loading and position offset have been allowed since now.
- Fixed phantom rendering with nanite in 5.1
- Fixed Velocity Clamp parameter, changed SlopeClamp parameter to AccelerationClamp
- Simulation Z transform does not affect the quality of the result anymore. 2 times better precision overall. Added reference plane for rendering simulation
- Proper detection of modifiers spawned in gameplay.
- Added simulation activation event. (can be linked to level OnLoadingFinished)
- Added Surface Smoothing parameter that eliminates sharp edges and creates a more visually appealing result.
Ocean Wave
- Real-time wave preview in the editor.
- FFT flipbook used for wave displacement, normal, foam.
- Two modes of rendering wave animation: RenderTarget, AnimatedFlipbook
- The normal map has been stored in the wave render target since now (optimization).
- Reorganized ocean wave parameters.
- Added shore water configuration and wave profile support.
- Fixed communication between surface and wave actor.
Modifiers
- Force modifier optimization and code cleanup
- Added vortex modifier
- Improved Simulation-Modififer overlap detection process and component filtering. Added ignore overlap interface function. Custom collision channels are adequately supported now. Changed modifier list to soft references.
- Improved modifier activation, dynamic spawn, and removing.
Interactions
- Added boat interaction example
- Improved interaction rendering (changed additive to translucent) and stability
- Improved interaction masking
- Better normal/height encoding
- Fixed interaction garbage collector crashing in specific conditions.
- Upgraded debug with surface mesh
- Automatic scale interaction by the size of the owner.
Niagara
- Improved underwater bubble shading.
- Added spawn rate parameter in FluxNiagaraActor
- Underwater dust particles are simulated in camera space.
- Improved water sound detection using the Niagara system
General
- Improved DataComponent debug
- Removed UE5 audio workarounds
- Removed unused assets
- Removed the editor-only “Mipmap” related function executed during render target initialization.
- I have removed bump offset details for now (they will be back soon). The details work on the world position offset of a dense infinite mesh.
- New landscape material with multiple layers: grass, sand, rocks, wetness
- Improved swimming implementation (the character can float on the surface now)
- Improved switching from ragdoll to swimming
- Disabled projectile-volume collision detection
Known issues
- The waterline is not synchronized with the surface near the coastline and may sometimes look buggy.
- TSR antialiasing still causes some issues, so it is better to use TemporalAA.
- The maximum supported domain height in UE 5.2 is 32000 units (engine precision bug)
- If you downloaded Fluid Flux 2.0 for UE5.1 and later updated the engine to 5.2, it is essential to update Fluid Flux as well. This is because certain engine features have been deprecated between those versions.
What next?
- Following the release, one or two hotfix updates will be rolled out to ensure the stability of the new version.
- New chapters in the documentation and a series of tutorials focusing on oceans and interactions
That concludes the update. I want to express my gratitude to everyone for their patience and for discovering and reporting any bugs or improvements. It has been gratifying to see my pack being used in your unique projects. Thank you all!
that is simply amazing !!! congratulation for this masterpiece ! did you apply for a megagrant ? because imho you deserve it !!!
really a very successful work, I congratulate you, I am an amateur, I am designing a small city as a hobby in this ue5, unfortunately, due to the economic crisis in our country and the high dollar rate is worth a minimum salary, this sea blueprint that you sell does not do anything but wish, unfortunately, I am an amateur. I’m setting the stage, I wish the dollar wasn’t so high, with respect.