Skip to main content

Performance Optimization: Getting 60+ FPS with Beautiful Water

Β· 4 min read
Galidar
Founder, Galidar Studio

Beautiful water shouldn't mean sacrificing performance. This guide shows you how to achieve both.

🎯 Performance Goals​

Before optimizing, define your targets:

PlatformTarget FPSGPU Budget
PC High-End60-1448-12ms
PC Mid-Range6012-16ms
Console30-6016-33ms
VR9011ms
Golden Rule

Profile first, optimize second. Never guess β€” measure actual bottlenecks.


πŸ“Š Profiling Your Water​

Essential Console Commands​

stat gpu              // GPU timing breakdown
stat unit // Frame timing overview
stat scenerendering // Render thread details
profilegpu // Detailed GPU profiler
stat memory // Memory usage

What to Look For​

StatTargetIf Too High
GPU TimeUnder 12msReduce visual quality
Game ThreadUnder 8msOptimize BP logic
Draw CallsUnder 2000Enable instancing
TrianglesUnder 5MAdjust QuadTree

🌊 Wave System Optimization​

FFT Resolution (NextGen)​

The FFT grid resolution has the biggest performance impact:

ResolutionQualityPerformance Cost
512x512BestHigh
256x256GreatMedium
128x128GoodLow

How to adjust:

  1. Select your Ocean actor
  2. Find FFT Settings category
  3. Lower Resolution value

Wave Layers (Legacy)​

Legacy uses layered Gerstner waves:

LayersQualityCost
4Full detail1.0x
3Very good0.75x
2Acceptable0.5x
1Minimal0.25x

Recommendation: Start with 2 layers, add more only if needed.


πŸ”² QuadTree LOD Settings​

The QuadTree mesh system is key to performance:

Distance-Based LOD​

Adjust how quickly detail reduces with distance:

Near LOD Distance: 1000     // Full detail within 10m
Mid LOD Distance: 5000 // Medium detail 10-50m
Far LOD Distance: 20000 // Low detail 50-200m

Tessellation Settings​

SettingPerformance ImpactVisual Impact
Max TessellationHighWave detail
LOD MultiplierMediumDistance quality
Screen Size ThresholdMediumMesh density

Quick optimization:

  • Halve Max Tessellation β†’ 2x performance gain
  • Double LOD Distances β†’ Significant FPS boost

πŸ–οΈ Shore Effects Optimization​

Shore effects can be expensive. Here's how to optimize:

Foam​

SettingValueImpact
Foam Samples8β†’4-30% GPU
Foam Resolution512β†’256-40% memory
Update FrequencyEvery frame→Every 2 frames-50% cost

Shore Waves​

  • Disable if your scene doesn't have beaches
  • Reduce wave segments from 32 to 16
  • Limit shore wave distance to nearby camera areas

🏊 Buoyancy Optimization​

Pontoon Count​

More pontoons = more accurate floating = more CPU cost

Object TypeRecommended Pontoons
Small debris1
Barrels/crates3-4
Boats5-8
Ships8-12

Query Optimization​

// In your buoyancy component
Buoyancy Update Frequency: 0.02 // Every 20ms instead of every frame
Use Async Queries: true // Non-blocking water height queries

Culling​

Disable buoyancy for off-screen objects:

// In your game mode or manager
OnActorOutOfRange β†’ Disable Buoyancy Component
OnActorInRange β†’ Re-enable Buoyancy Component

πŸŒ… Visual Quality Settings​

Reflection Settings​

ModeQualityCost
LumenBestHigh
Screen SpaceGoodMedium
PlanarGreatMedium-High
Cubemap OnlyAcceptableLow

Recommendation: Use Screen Space for most games.

Refraction​

SettingImpact
Refraction QualityMedium β†’ Low saves 1-2ms
Depth SamplingHalf-res saves 20%

πŸ“± Platform-Specific Tips​

PC Scalability​

Create multiple quality presets:

// UltraQuality
FFT_Resolution: 512
WaveLayers: 4
MaxTessellation: 64
ReflectionMode: Lumen

// HighQuality
FFT_Resolution: 256
WaveLayers: 3
MaxTessellation: 32
ReflectionMode: ScreenSpace

// MediumQuality
FFT_Resolution: 128
WaveLayers: 2
MaxTessellation: 16
ReflectionMode: Cubemap

// LowQuality
Use Oceanology Legacy instead

Console Optimization​

For PS5/Xbox Series X:

  • Use NextGen with Medium settings
  • Enable Variable Rate Shading (VRS)
  • Use Async Compute for FFT

For PS4/Xbox One:

  • Use Oceanology Legacy
  • Limit to 2 wave layers
  • Reduce QuadTree density

VR Optimization​

VR is demanding β€” every millisecond counts:

  1. Use Oceanology Legacy (not NextGen)
  2. Disable post-processing underwater effects
  3. Reduce all distances by 50%
  4. Use fixed foveated rendering if available
  5. Target 90 FPS minimum

⚑ Quick Optimization Checklist​

Immediate Wins (Big Impact, Easy)​

  • Lower FFT resolution (512β†’256)
  • Reduce wave layers (4β†’2)
  • Increase LOD distances
  • Disable unused shore effects

Medium Effort​

  • Optimize QuadTree settings
  • Reduce pontoon counts
  • Enable async buoyancy queries
  • Cull off-screen water interaction

Advanced​

  • Profile GPU to find exact bottlenecks
  • Create scalability presets
  • Implement distance-based quality switching
  • Custom LOD for different water bodies

πŸ“ˆ Expected Performance Gains​

Following this guide, expect:

ChangeFPS Gain
FFT 512β†’256+20-30%
Wave layers 4β†’2+15-25%
QuadTree optimization+10-20%
Buoyancy async+5-10%
Combined+50-80%

πŸ”§ Debugging Performance​

If still having issues:

  1. Isolate the water

    • Create empty level with only ocean
    • Measure baseline FPS
    • Add elements one by one
  2. Check for conflicts

    • Other water plugins?
    • Heavy post-processing?
    • Particle systems?
  3. GPU vs CPU bound

    • stat unit shows which is limiting
    • GPU: reduce visual quality
    • CPU: reduce complexity/queries

πŸ“š More Resources​

Performance optimization is iterative. Start with the biggest wins and work down. Your players will thank you for smooth, beautiful water!