Labelled as a talk about what he "didn't do", Acton lists 7 points about how he went about with the optimizations.
- I didn't add spatial grouping of any kind (e.g. grid or octtree) because I *already* effectively had that in how our chunk component data is stored.
- I didn't add a secondary hierarchy for broadphase because I *already* effectively had that in how render batches are stored.
- I didn't need to store *any* transform hierarchy (DAG) information for the scene because the DAG is static. Everything from render matrix to bounding volumes could be prepared for just the final check and push.
- I didn't need to rebuild the world state when new subscenes were streamed in or out because the streaming data already kept a subscene id component, which I could use to keep the state data (e.g. render batches) separated.
- I didn't need to update the state when the structure of any (related) component changed because I could show when/that the structure of just the chunks I had state on could *not* have changed.
- I didn't need to do anything special at all to maximize concurrency for culling and LOD updates because I could prove each chunk was reading/writing from/to independent data.
- I didn't have to add any complicated machinery to manage shared instance LOD information because the data showed *most* weren't shared anyway, and the cost of checking is higher than just making them all independent and flat.
View the full twitter thread:
Presentation as a PDF: culling.pdf