I am working on a game with blocky graphics -- similar to Minecraft. My world generation algorithm is similar to the Diamond-Square algorithm. The terrain was initially too rough and uneven, so I created a smoothing algorithm and allowed for the generation of hills.
Before the smoothing algorithm does its job, there are about 900 (+/- 100) cubes. After the smoothing algorithm finishes its task, there are about 1200 cubes. The resulting terrain is satisfyingly smooth and even, but the FPS decreases.
At first I couldn't create a 10x10 world without crashing. I figured it was because I kept binding and unbinding the same VAO for every block, so I changed that because every block uses the same VAO. It continued to lag and eventually crashed, so I tried to see if it was a problem with the terrain generation.
I found out that there was an infinite loop in the generation process, so I fixed that. It worked, but not well enough. It generated a 10x10 world and doesn't crash, but it runs at only 5 FPS, sometimes less. I then enabled back-face culling. The FPS improved a little, but only by 1-2 FPS. I still haven't implemented frustum/occlusion culling.
Is there an amazingly helpful culling/optimization technique I should know about?