Learning how to design 3D game engines