
Project Information
- Category: Graphic Programming
- Language: C++
- Graphic API: Nintendo GX
- Project Date: 28 Jan. 2025
- Made by: Sebastián Valdés Sánchez
An Optimised Voxel Engine for the Nintendo GameCube
This is my final individual university project, focused on creating a voxel engine optimised for the Nintendo GameCube from scratch using its native Graphic API Nintendo GX. The main goal was to maximise performance and memory efficiency to render the highest number of chunks while maintaining a stable 60 FPS on the console's limited hardware.
Optimisations in the Voxel Engine
To achieve a smooth 60 FPS while rendering as many chunks as possible, I focused on both performance and memory efficiency with these key optimisations:
Batching
Reduced CPU overhead by combining multiple draw calls into one.
Occlusion Culling
First culled entire cubes, then refined it to cull individual faces, improving performance.
Memory Optimisation
Used bitfields in structs to pack data efficiently, allowing more chunks to fit in memory.
Display Lists
Pre-recorded draw commands to reduce calls and improve FPS, at the cost of memory.
Frustum Culling
Rendered only chunks within the camera’s view, optimising performance.
Dynamic Chunk Management
Loaded and unloaded chunks dynamically, reducing memory use and improving load times.
Efficient Terrain Generation
Optimised terrain generation to minimise redundant calculations and improve speed.
Efficient Animations
Optimised water movement and bone animations.
Distance from Camera ![]() |
Distance + Frustum Culling ![]() |
Stages of Optimisation
Structure ![]() |
|
Stages of Optimisation: Summary
Stage 0: No Optimisations ![]()
FPS: 15 |
Stage 10: All Optimisations ![]()
FPS: 60 |
What Knowledge Have I Acquired?
Through developing this voxel engine, I’ve gained valuable skills in:
- Optimisation:
- Low-Level Game Development:
- Memory Management:
- Performance Testing:
- Hardware Constraints:
Mastered techniques like batching, frustum culling, and memory optimisations using bitfields to improve performance and memory usage, especially on constrained hardware like the GameCube.
Gained experience working directly with the DevKitPro SDK, understanding how to maximise hardware potential.
Learned how to efficiently manage memory, balancing performance and memory usage.
Improved my ability to track and analyse performance using tools like std::chrono to optimise in real-time.
Developed a deep understanding of working within the limitations of older consoles and how to achieve optimal performance despite them.