Summary of "I Made Oceans Feel ALIVE To Prove AAA Studios WRONG"
I Made Oceans Feel ALIVE To Prove AAA Studios WRONG
Storyline / Objective
The creator was disappointed by the poor underwater environments and fish behavior in AAA games like GTA V and Assassin’s Creed Valhalla. After discovering an indie game with realistic fish simulation, he decided to build his own fish simulation system in Unity to prove that AAA studios are underdelivering on underwater life.
Gameplay Highlights & Development Process
Environment Setup
- Created 3D underwater environment models including terrain, grass, corals, rocks, water surface, and post-processing effects to simulate underwater visuals.
- Initial rendering performance benchmark: approximately 3.5 to 4 ms per frame (~250 FPS).
Fish Swimming Animation
- Skeletal animation was unsuitable for hundreds or thousands of fish due to performance constraints.
- Inspired by the developers of Abzu, the swimming motion was implemented inside a vertex shader using combined simple motions:
- Side-to-side offset (x-coordinate).
- Rotation around pivot (y-axis).
- Roll rotation along the spine with offset based on vertex distance.
- Additional y-axis rotation offset for organic flag-like motion.
- Resulted in fluid, organic, and realistic fish swimming motion that scales well across different fish models.
Fish Movement Controller
- Basic controller maintaining desired speed while compensating for water friction.
- Swimming intensity controlled by fish acceleration rather than velocity.
- Added steering controls (W, D keys) with angular acceleration affecting swimming intensity.
- Realistic response to acceleration and turning by linking angular acceleration to movement acceleration.
Autonomous Fish Behavior
- Fish swim toward moving targets with obstacle avoidance.
- Targets move in straight line, circle, or square patterns.
- Fish accelerate and steer away from obstacles dynamically.
Schooling Behavior (Boids Algorithm)
- Implemented classic flocking behavior with three core motions:
- Separation (avoid collisions).
- Alignment (match direction).
- Cohesion (stay together).
- Each fish (boid) calculates movement based on neighbors.
- Behavior weights exposed for tweaking species-specific traits (e.g., introverted fish with higher separation).
- Initial fish spawn logic improved from random distribution to cohesive spherical formation.
Multiple Species Simulation
- Added several fish species (golden travali, clownfish, yellowtail snapper).
- Cohesion and alignment applied only within species.
- Separation logic modified so smaller fish avoid larger fish, but not vice versa.
Performance Challenges & Optimizations
- Initial CPU implementation struggled with performance at 600+ fish due to O(n²) calculations.
- Spatial partitioning (dividing simulation area into cells) implemented to limit neighbor checks to nearby cells, improving performance by ~50%.
- Entire simulation logic moved to GPU using compute shaders for parallel processing.
- Achieved ~90 FPS with 600 fish on GPU.
- Used indirect instance rendering to avoid costly CPU-GPU data transfers during rendering.
- Managed to simulate and render 3,000 fish at high frame rates, scaling up to 30,000 fish at ~50 FPS.
- Further optimized spatial partitioning on GPU, boosting performance by ~60% at 30,000 fish.
Final Scene
- Added sharks as patrolling obstacles.
- Created a vibrant, colorful underwater environment with realistic fish and school behaviors.
- Final performance: ~5 ms per frame (~200 FPS), leaving room for gameplay features.
Bonus Feature – Circular Schooling Behavior
- Simulated natural fish behavior where schools swim in circles to confuse predators.
- Spawned fish uniformly on a sphere surface around a central target.
- Added an obstacle to keep fish at a distance, resulting in a convincing spherical schooling pattern.
Key Tips & Strategies
- Use vertex shaders for animating many similar creatures to reduce CPU overhead.
- Control swimming animation intensity based on acceleration rather than velocity for realism.
- Link angular acceleration to swimming intensity to simulate natural turning motions.
- Implement spatial partitioning to reduce neighbor search complexity from O(n²) to manageable levels.
- Leverage GPU compute shaders for parallel simulation of large numbers of agents.
- Use indirect instance rendering to minimize CPU-GPU data transfer bottlenecks.
- Tailor boid behavior weights to simulate different species’ social tendencies.
- Start fish schooling simulations with cohesive initial positions for more natural behavior.
Sources / Featured Gamers
- The creator references a video by the developers of Abzu for fish swimming motion inspiration.
- The project and video are the work of the YouTube creator who made this video (unnamed in subtitles).
Summary
This video documents the creator’s journey to build a highly realistic and performant underwater fish simulation in Unity, challenging the lackluster underwater life in AAA games. By combining shader-based animation, boids flocking behavior, GPU compute shaders, and spatial partitioning, the creator successfully simulates thousands of fish swimming naturally in a vibrant underwater environment, proving that AAA studios could do better with the right techniques.
Category
Gaming
Share this summary
Is the summary off?
If you think the summary is inaccurate, you can reprocess it with the latest model.