I’ve been watching the CPU continuously during development. The Metareal World has many moving parts, and I want them all to keep moving, all the time.
Here’s 15000 cubes all orbiting a black hole. They do not affect each other.
That took 80% CPU on a modern Mac Pro desktop. Most of that time is uploading the 15000 new position in a texture for use by the vertex shader.
Here’s some other measurements so far:
- Animate 15000 cubes: 80% CPU
- Draw 1000000 triangles (500000 triangles in the scene, from two angles): 60 FPS
- Draw more than 1000000 triangles: FPS drops fast!
- Draw rates on Mac Pro Retina Notebook 2013: about the same
- Draw rates on an iMac 2010: about 30 FPS… choppy… sad.
- Collision resolution among 47000 AABBs, 900 of which are moving: 10% CPU
- Collision resolution same, on Mac Pro Retina Notebook 2013: 20% CPU
Looks like my work is cut out: need to draw as few triangles as possible!
Fortunately, I have a robust system for managing volume intersections. It is the foundation for the collision detection and resolution. It will also be used to detect various kinds of triggers, such as passing through a zone to activate a thing, and also for placing a key in a slot. This volume manager should be quite usable as a culling system, as well.
The render management presently supports add and delete parts; it could be extended with show and hide.
The policy could be based on visibility zones established for which rooms can see each other. Or it could be coarser solution, such as a general radius from the camera, extending generally across the sight line. A frustum could be approximated with several AABBs, and a maximum view distance could be imposed, as if the world is murky. (This might even work well with some of the remote-camera-based puzzles…)
More to come.