๐ฆ Migration Guide - Upgrading from NextGen 1.x to 2.0
Ready to upgrade? This guide covers everything you need to know about migrating your project from Oceanology NextGen 1.2.5 (or earlier) to the new NextGen 2.0.
โ Good News Firstโ
NextGen 2.0 is designed for backward compatibility. Your existing water setups will continue to work without modification. The new features are additive - you opt into them when ready.
๐ Pre-Migration Checklistโ
Before upgrading:
- Backup your project
- Note your current wave settings (screenshot Details panels)
- Document any custom material modifications
- Update Unreal Engine to 5.4+ (recommended for 2.0)
๐ What Changes Automaticallyโ
Wave System Assignmentโ
Existing water bodies receive:
WaveSystemSelector = EOceanologyWaveSystemSelector::GerstnerWaves;
Your current Legacy Gerstner settings continue to work unchanged.
Shore Waves Defaultsโ
New shore wave parameters initialize to disabled:
ShoreWaves.CoastalWaves = false; // Won't affect existing setups
Material Compatibilityโ
Water materials from 1.x remain valid. New material functions are added, not replaced.
๐ Enabling New Featuresโ
Option 1: Keep Legacy Wavesโ
If you're happy with your current wave appearance, no changes needed. Your water will look identical to 1.x.
Option 2: Switch to Spectral Wavesโ
For more realistic ocean behavior:
- Select your Ocean/Lake actor
- In Details panel, find Wave System
- Set Wave System Selector to
SpectralGerstnerWaves - Configure new parameters:
SpectralGerstner.BeaufortScale = 5.0f; // Wind strength
SpectralGerstner.WindDirection = (1, 1); // Wind vector
SpectralGerstner.WaveComponentCount = 64; // Quality
Option 3: Enable Breaking Wavesโ
For realistic coastlines:
- Ensure your terrain has valid SDF data (generated automatically)
- Select your Ocean actor
- Enable Coastal Waves:
ShoreWaves.CoastalWaves = true;
ShoreWaves.BreakerStrength = 1000.0f;
ShoreWaves.SurfZoneWidth = -1000.0f;
โ๏ธ Parameter Mappingโ
If you want to approximate your 1.x settings in Spectral mode:
| Legacy Parameter | Spectral Equivalent | Notes |
|---|---|---|
| GlobalAmplitude | BeaufortScale | ~Amplitude/100 |
| GlobalSpeed | (automatic) | Derived from Beaufort |
| Choppiness | WaveEnergyDistribution | Inverse relationship |
| GlobalWaveDirection | WindDirection | Same concept |
| Individual Waves | WaveComponentCount | Many small vs few large |
Example Conversionโ
Legacy 1.x settings:
GlobalAmplitude = 500
GlobalSpeed = 1.0
Choppiness = 0.8
GlobalWaveDirection = 45
Approximate Spectral 2.0:
BeaufortScale = 5
WindDirection = (0.707, 0.707) // 45 degrees
WaveEnergyDistribution = 1.2
WaveComponentCount = 64
๐จ Material Updatesโ
New Material Functionsโ
2.0 adds new material functions (existing ones unchanged):
MF_OceanologySpectralWaves # New spectral evaluation
MF_OceanologyBreakingWaves # New coastal system
MF_OceanologyWaveSelector # Routes between systems
Custom Materialsโ
If you've modified water materials:
- No changes required if using standard wave nodes
- Optional upgrade to use new WaveSelector node for flexibility
- Breaking waves require SDF input connection
Material Migration Exampleโ
1.x approach:
GetGerstnerWaves โ WPO
2.0 recommended:
GetWaves (Selector) โ GetBreakingWaves (optional) โ WPO
๐๏ธ Data Asset Updatesโ
Wave Presetsโ
Existing UOceanologyWaterWavesPreset assets work unchanged. New fields initialize to defaults:
// Auto-added with safe defaults
SpectralGerstner = FOceanologySpectralGerstner(); // Disabled
ShoreWaves = FOceanologyShoreWaves(); // Disabled
Creating New Presetsโ
New preset wizard includes all wave systems:
- Right-click Content Browser
- Oceanology โ Water Waves Preset
- Choose template: Legacy, Spectral, or Coastal
๐ง Blueprint Updatesโ
New Blueprint Functionsโ
// Get/Set wave system at runtime
SetWaveSystemSelector(EOceanologyWaveSystemSelector NewSelector)
EOceanologyWaveSystemSelector GetWaveSystemSelector()
// Spectral wave control
SetBeaufortScale(float Scale)
SetWindDirection(FVector2D Direction)
// Breaking wave control
SetCoastalWavesEnabled(bool bEnabled)
SetBreakerStrength(float Strength)
Existing Functionsโ
All 1.x Blueprint functions remain valid:
// Still work as before
GetWaveHeightAtLocation()
GetWaterSurfaceNormal()
IsUnderwater()
// etc.
โ ๏ธ Breaking Changesโ
Minimal Breaking Changesโ
We've worked hard to minimize disruption. The only breaking changes:
- Renamed Enum:
EWaveTypeโEOceanologyWaveSystemSelector - Moved Header:
OceanologyGerstner.hโStructs/OceanologyLegacyGerstnerWaves.h
If You Get Compile Errorsโ
// Old (1.x)
#include "OceanologyGerstner.h"
// New (2.0)
#include "Structs/OceanologyLegacyGerstnerWaves.h"
๐ Performance Comparisonโ
| Scenario | 1.2.5 | 2.0 (Legacy) | 2.0 (Spectral 64) | 2.0 (Full Coastal) |
|---|---|---|---|---|
| Open Ocean | 0.8ms | 0.8ms | 1.2ms | 1.2ms |
| With Coastline | 0.8ms | 0.8ms | 1.2ms | 1.8ms |
| Complex Scene | 1.2ms | 1.2ms | 1.6ms | 2.2ms |
RTX 4070, 1080p, 10kmยฒ water area
New features have zero overhead when disabled.
๐ฏ Recommended Migration Pathโ
For Shipped Gamesโ
- Install 2.0
- Test existing levels
- Verify visual parity
- Ship with confidence
For Games in Developmentโ
- Install 2.0
- Test existing water
- Enable Spectral for open ocean
- Enable Breaking Waves for key coastlines
- Fine-tune new parameters
- Profile and optimize
For New Projectsโ
Start with Spectral + Coastal from day one!
โ FAQโ
Q: Will my saved games break?
A: No. Water state is not serialized; it regenerates from settings.
Q: Can I mix wave systems in one level?
A: Yes! Each water body has independent settings.
Q: Do I need new SDF data for breaking waves?
A: SDF generates automatically from landscape. Just enable coastal waves.
Q: What about multiplayer?
A: Wave simulation is deterministic. Same settings = same waves on all clients.
Q: Can I go back to 1.x?
A: Yes, but you'll lose 2.0 settings. Keep backups!
๐ Getting Helpโ
Stuck during migration?
- Documentation: docs.galidar.studio
- Discord: discord.gg/s9TSBBX3Rh - #migration-help channel
- Email: support@galidar.studio
Happy migrating! The new ocean awaits. ๐