Made a huge breakthrough this week by eliminating one of the largest bottlenecks in our dynamic occlusion culling system, which is reponsible for hiding Players and NPCs when they're occluded by terrain or walls. I was able to eliminate an occluder pre-pass that was necessary for the occlusion tests. A good chunk of CPU-side overhead was now cut off because of this.
Our artists no longer need to decide if an object is an occluder or occludee because all surfaces are occluders now. They also don't need to add occluder meshes anymore, saving in production time. An interesting side effect is that even vegetation can be use to cull away invisible objects, as seen in the image below. Red spheres represent players/NPCs being culled away, while green are being processed:
These change should give us a nice FPS boost on mid-to-high range machines. Potato machines are probably bottlenecked somewhere else already and, while it surely helps, it might not result in immediate performance improvements.
The only drawback of this approach is that it introduces a single frame delay in culling results. However, there are some ways to mitigate the issue using prediction techniques and I'll be addressing it during the next couple of weeks. I believe it's definitely worth the tradeoff. Please note that closeby entities are not affected since they're not culled and always marked as visible.