Wave presets and bakers
Author a wave setup once as an asset with its own preview editor, reuse it across bodies and levels, and bake any wave system to textures for lower-end targets.
Two workflows sit on top of Oceanology Pro's wave-source architecture. Presets are content-browser assets that carry a fully configured wave source and can be applied to any body or referenced live by many. Bakers turn a live wave system into a looping flipbook atlas pair that plays back at a fixed cost, with the CPU physics regenerated from the baked recipe so buoyancy still matches what you see. Both existed in some form in NextGen; in Pro they were rebuilt onto the same wave-source interface every consumer already uses.
Presets
- Two asset types ship: Water Waves Preset, which holds a Gerstner, Spectral Gerstner or FFT source, and Breaking Waves Preset, which holds a Breaking Waves source. Each has its own asset definition, factory, icon and details customization.
- There are two ways to consume one. Assign it to the water body's preset slot and it is applied: the preset's configuration is copied into the body's own source, and subsequent tweaks stay local to that body.
- Or point the body's wave source at a preset source wrapper. The wrapper forwards every query, including maximum wave height, wave height at a position, attenuation factor and the breaking configuration, straight through to the asset, so every body sharing that asset changes together.
- Applying a preset is not a manual reload. It re-registers the wave-data delegate, refreshes the material instances, ensures the matching wave baker exists and re-activates the FFT pipeline in one step, then reports success or failure as an editor message.
- Blueprint-pure lerp helpers exist per wave family: LerpGerstnerWavesPreset, LerpSpectralGerstnerWavesPreset, LerpFFTWavesPreset and LerpBreakingWavesPreset, plus struct-level equivalents. Continuous values interpolate; resolutions, seeds and system selectors take the target value.
Bakers
Wave Mode on the water body chooses Runtime, Baked or None. In Baked mode the body grows a wave baker matched to its source type automatically, and swaps it if you change the source. Three bakers ship: FFT Wave Baker, Gerstner Wave Baker and Spectral Gerstner Wave Baker. All three share one baking options struct and produce the same atlas format, so anything downstream that reads a baked patch reads all three identically.
- A bake produces a pair of flipbook atlases, displacement and gradient/derivatives, laid out on an automatically computed columns by rows grid. Frame count snaps to 16, 32, 64, 128 or 256.
- FFT bakes are seamless by construction: angular frequencies are quantized to multiples of two pi over the loop duration, so every wave completes an integer number of cycles inside the loop. Match Runtime Spectrum, on by default, copies resolution, patch length and foam settings from the live source so the bake matches what you tuned.
- At runtime the material never filters the atlas directly. A compute pass resolves a four-frame Catmull-Rom interpolation once per texel into compact current-frame textures, so a baked body feeds the material the same two inputs as the runtime FFT path.
- CPU physics follows the bake, not the runtime spectrum. The baked resolution, patch length and loop quantization are what generate the CPU spectrum, so buoyancy on a baked ocean matches its playback.
- Save Textures exports both atlases to persistent Texture2D assets, with configurable mip generation settings and LOD bias on the gradient atlas and an optional save dialog for the destination.
- A baked atlas can also be pointed at the project's shared Wave Detail Patch, the small tiling patch that shallow-water materials use for surface detail normals. It replays as a flipbook on its own clock with no simulation on the frame's critical path.
Versus Oceanology NextGen
| Feature | Oceanology NextGen | Oceanology Pro |
|---|---|---|
| Preset shape | Auto-generated data assets holding a wave settings struct, loaded into a water actor by inclusion group | Assets that carry an instanced wave source, either applied once into a body or referenced live through a preset source wrapper |
| Offline baking | No wave bakers in the codebase | Three bakers sharing one options struct, one atlas format and one export path |
| Baked playback | Not applicable | Four-frame Catmull-Rom resolve into compact per-frame textures, identical material inputs to the runtime path |
| Baked physics | Not applicable | The CPU spectrum is regenerated from the baked recipe, so buoyancy matches the flipbook rather than the live spectrum |
| Baker types | FFT, Gerstner, Spectral Gerstner |
|---|---|
| Frames per bake | 16, 32, 64, 128 or 256 (default 64, auto-snapped) |
| Frame resolution | 256, 512, 1024 or 2048 (default 256) |
| Target loop duration | 4 to 60 s (default 16) |
| Bake patch length | 1024 to 131072 cm (default 16384) |
| Atlas formats | Displacement RGBA32F, gradient RGBA16F when HDR is enabled |
| Maximum atlas dimensions | 16384 by 16384 pixels |
| Bake memory budget | About 1 GiB; larger requests are rejected with an explicit message |
| Default export path | /Game/Oceanology/BakedTextures |
| Bake-time foam | Decay rate 2.4, bias 0.3, gain 1.0 |
| Gradient atlas export | Mip generation setting and LOD bias are configurable; displacement always uses LOD bias 0 |