I’ve been working on a dynamic LOD rendering algorithm and I was wondering if anyone else was doing something similar (or if this has been done already). Let me give a little explanation:
In my program, an object has multiple LODs (Levels Of Detail), but instead of switching between one LOD or the other based on distance, it calculates an in between mesh where a vertex/triangle is either included or not included based on it’s distance from the POV (point of view). It’s kindof like morphing from one LOD to another across distance.
Here’s an explanation for the algorithm:
It first calculates multiple LODs for an object. To do this it just combines nearby vertices into single vertices (let’s call them c-vertices), keeping information about which vertices were combined together and which triangles were made into lines/points by this combining (ie. when you combine two vertices of a triangle it becomes a line, when you combine all it’s vertices it becomes a point). Vertices that weren’t combined are just added straight to the new LOD mesh.
Then to render the object it splits apart the c-vertices that are within a certain distance of the POV, and keeps track of which triangles were recreated (from points/lines). Doing this recursively for multiple levels of detail generates a mesh that is made up of many triangles up close and few triangles far away.
I’ve only begun to implement this algorithm but it is showing promise (I played with my calculator a bit and figured you could probably get away with single objects having up to 1 million vertices, or about 500000 triangles).
Hopefully, combining this algorithm with the BSP (Binary Space Partition) algorithm for enclosed structures would allow for large complex worlds with high levels of detail up close while maintaining decent frame rates.
If anyone wants more information or a demo (so far I’ve only tested this out with untextured triangles, importing them into 3D Studio Max) then e-mail or ICQ me.