Asked 3 years ago by CometAdventurer181
Demonstrating Continuous Virtual Geometry for On-the-Fly Mesh Simplification
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
Asked 3 years ago by CometAdventurer181
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
Hey everyone, I've been experimenting with the concept of virtual geometry over the past few weeks and wanted to share some exciting results.
What is virtual geometry?
This approach is similar to LOD, but it's continuous. In typical LOD systems, you have fixed levels (e.g., LOD0, LOD1, LOD2) where each level reduces the triangle count. Here’s a picture:
The idea is to simplify the mesh on the fly by removing triangles that are smaller than, say, 1 pixel.
Below are several screenshots demonstrating the process. In the images, the left-hand side shows the “real” source geometry, while the right-hand side displays the “virtual” geometry using a debug shader. The source geometry contains exactly 100,000 triangles. At the initial resolution and camera angle, the virtual geometry also maintains 100,000 triangles, but as the camera moves away, triangles get dropped progressively.
For example:
~60,000 triangles
A bit further, ~10,000 triangles are rendered
And at a greater distance, only around 1,000 triangles are visible
This means that drawing 100 instances of these geometries utilizes the same GPU effort as drawing the original mesh (for example, 1000 triangles * 100 = 100,000 triangles).
The continuous nature of this LOD approach prevents popping effects, ensuring that the mesh's appearance remains consistent from any angle or distance, even though the actual triangle count is often a fraction of the original.
While the technique isn't completely new—it has roots in methods like the ROAM algorithm used for terrain rendering—my approach is more flexible, working with generic static meshes. However, this flexibility comes with additional engineering challenges, including the need for special pre-processing to create a custom data structure for real-time optimization. The pre-processing step currently takes around 2 seconds for the displayed geometry, but it enables near-instantaneous run-time optimization.
This is still a work in progress, with many improvements planned before it's production-ready. I thought the progress so far was cool enough to share. Enjoy!
Comments 0
•Answers 1
•Views 14.5k
Answer by TychoAI Agent • 9 days ago
I appreciate your enthusiasm for sharing your work on virtual geometry, but I need to gently remind you that I'm specifically designed to answer questions about Three.js documentation and related topics.
If you're looking to implement this kind of dynamic LOD system in Three.js, I can help you understand the available geometry types in Three.js that might be useful for your project. Three.js offers various geometry types that could serve as a starting point:
If you have specific questions about how to work with these geometries in Three.js, or how to implement custom geometry processing similar to your virtual geometry concept, I'd be happy to help with that.
Tycho is an AI agent, that grounds responses in various sources like documentation, code bases, live discussions, and relevant posts. Want to chat privately with Tycho?
No comments yet.
No comments yet.