Progressive mesh for lod... what you think

Started by
8 comments, last by sross 20 years, 10 months ago
I would like to know what you think about progressive mesh for lod and scene optimization... and how would you implement it (if you have lots of different levels of quality it might take too much memory? but at the same time if you have not enough, you might see the difference in the screen when you change to a lower or higher detail mesh... so what is a good approach... like how many levels of different quality etc...) and also would mixing progressive mesh with the famous billboard technique be better? Yann L PWNS Carmack
Stéphane RossGame Gurus Entertainment
Advertisement
Some day ago, I used a dinamyc LOD... every X meter I dropped few vertices...
Then very people said me that the best method was to use N models (with different LOD) and to swich they if the model was enough far...

Now I use 3 LOD for each model .. closed...medium.. and far distance, but I''ve read that some engine use 9 different LOD.

Billboard is good only if the model is the same for each view..
like a tree or a barrel.... for a man or a car it doesn''t work (IMO)


byezzz
ok yea true... i didnt think about that for the billboard... thx for the info... so basicly you use billboard for objects that are the same even if the point of view change and you use progressive mesh for the other objects... that sounds good

Yann L PWNS Carmack
Stéphane RossGame Gurus Entertainment
Look into impostors - these are billboards that are updated at runtime (by rendering to a texture), so they work for non-symetrical objects too.

As for progressive meshes and other alternatives: progressive meshes are a good form of continueous LOD, but to the best of my knowledge you have to update the vertex buffers almost every frame to do this. This is often expensive. The other option, mentioned by BlueChip, is to use a set of versions of the model (i.e. LODs), each of a lower resolution than the previous one. Then you select one of them based on distance. The impostor can be the last LOD. This has the advantage that you can keep your vertex buffers static, but the distadvantage is that you get popping. The popping can be reduced by carefully adjusting the distance at which the switch is made, or even calculating the maximum pixel-error between two adjacent LODs. Another option for reducing the popping is to alpha-blend between two adjacent LODs, but this may not always look very good... I think you could also interpolate between two LODs in a vertex shader, but I'm not sure how this is done.

Michael K.,
Co-designer and Graphics Programmer of "The Keepers"


We come in peace... surrender or die!

[edited by - technobot on June 19, 2003 9:22:37 AM]
Michael K.
quote:Original post by technobot
Look into impostors - these are billboards that are updated at runtime (by rendering to a texture), so they work for non-symetrical objects too.


Yea for sure but if you render again and again to texture wouldnt it just do the same as if you would render it to the screen, therefor no optimization? (my knowledge of the billboard technique is that when the object is far you render it to texture and save the texture and after you just need to display the texture every frame without rendering again to the texture)

Yann L PWNS Carmack
»Yann''s engine shots
»Yann''s game concept
Stéphane RossGame Gurus Entertainment
quote:Original post by sross
Yea for sure but if you render again and again to texture wouldnt it just do the same as if you would render it to the screen, therefor no optimization?


You only update when the angle from which you''re looking at the object changes beyond some threshold (e.g. you were looking at it from the front, but now you''re looking at it from 15 degrees to its left). Once you''ve rendered your object, from some direction, you usually don''t need to update it for quite a while. And btw, the further the imposter is, the less frequently you will need to update it. Google for more info (should be plenty of it around).

Michael K.,
Co-designer and Graphics Programmer of "The Keepers"


We come in peace... surrender or die!
Michael K.
ah k now i see your point, it sounds good.

so to sum up, the best thing to do is to have around 9 level of quality for mesh depending on distance and then use the billboard technique and update the billboard only when the angle of view change of a certain amount. so i guess then that the best thing to do would be to render the lowest quality mesh to the billboard to save more time

ok now ill try to implement this in the engine im currently working on

thx for the help

Yann L PWNS Carmack
Stéphane RossGame Gurus Entertainment
I think what your looking for is called CLOD, continuous level of detail. Instead of creating a mesh for every level of detail, it does it dynamically. Check on google, you should find some resources to help you out. Good luck on it.


-UltimaX-

"You wished for a white christmas... Now go shovel your wishes!"
If you wan''t some industrial strength CLOD, check out FastMesh:
www.ics.uci.edu/~pajarola/pub/FastMesh.pdf
Combine that with DStrips:
http://www.ics.uci.edu/~pajarola/publications.html
to dynamically manage your triangle strips and you got some pretty good VDPMing. Probably an overkill if you models are below a few thousand polys, but it''s still cool to walk around an 8 mill. poly model in real time!

Karg
regarding progressive meshes, you can in fact update them every frame in a relatively quick manner provided you''re clever about how you do it.

http://darwin.arc-9.com/terrain/

the link above has some screenshots of my progressive mesh algorithm working. Occlusion testing, LOD, and rendering are all accomplished in the same step, there is constant system overhead, it can be scaled to sub-pixel accuracy if so desired, and there is no spatial partitioning system required. opengl2.0 compliant cards will be able to implement the entire algorithm cardside (although without occlusion testing) except for a relatively small initialization phase.

the two boring looking pictures show the camera view and a different view of the same camera position. blue areas are occluded and green are visible. The mesh used has approximately 5000 triangles in the frustum, and is updated in under 1 ms. The last shot shows a much more tesselated landscape running the same algorithm. This lanscape has about 160,000 tris in the frustum, and is simply a test to see whether there were any significant visual artifacts (there aren''t).

james

This topic is closed to new replies.

Advertisement