Right now I put Sonic Z-Treme on hold to focus on occlusion culling using the FPS demo for testing.
I got the auto-LOD model generation working (but I haven't implemented texture generation yet) which should help with better draw distance.
I also got the 4 bits per pixel textures working, saving me some VRAM that I'll use for LOD textures.
I added analog control (not even properly documented in the official documentation) in the FPS demo.
I implemented a KD tree... then tried a BSP tree... now I'm going for an octree...but feel like going back to a BSP tree...
I also wasted a couple of weeks trying to implement a mesh buffer to save RAM and reduce vertices transformation, but the memory access made it slower so I flushed it.
I still need to find a way to generate PVS and cram it in the little bit of RAM left... or go for the BSP tree and use a low-res depth buffer (should be slower, meaning 60 FPS would be impossible).
I'm working on a new collision detection code and PVS, and I need to find a way to use the audio RAM to free some work RAM.
Quake maps are loading, maybe I'll be able to show the new FPS demo within 2 months, but I'm confident that I'll hit 30 fps with gouraud shading.
Long story short, occlusion culling is really hard and there is no perfect solution.
As for the VDP2, it's used for the text (NBG0), the "ocean" (RBG0) and the background mountain (NBG2). I added extra clouds with NBG3, but removed them as I was running out of high work RAM.