🔒 Locked
HIGH POLY COUNT MODELS
Advertisement
Original Post
I am working on a CAD software.. . and i typically would be dealing with models that have extremely high vertex count . . in the order of 1 million ..With any optimization available in OpenGL (display lists , vertex arrays ,even VBO's ) I cant get a decent frame rate when I rotate or pan about the image... Are there any good tricks to acutally get a decent frame rate for such high detail models .. . As it is a CAD package I cannot do any Level Of details simplifications .. Anyone with ant ideas ..??
Basically , level of detail isn't restricted to games, you could do whatever you want to do , do a research about quadric error metrics and simplifications, anyway it will take time to simplify such big models, i would advice you to have a look at octrees , you could perform frustrum culling when you are displaying only sections of your model or , you could use a simplified model just for rotatin and translation and when the application 'rests' display the full detail.
Quote:
Original post by _John_Galt_
I am working on a CAD software.. . and i typically would be dealing with models that have extremely high vertex count . . in the order of 1 million ..With any optimization available in OpenGL (display lists , vertex arrays ,even VBO's ) I cant get a decent frame rate when I rotate or pan about the image...
Are there any good tricks to acutally get a decent frame rate for such high detail models .. . As it is a CAD package I cannot do any Level Of details simplifications .. Anyone with ant ideas ..??
You could do LOD check run-time, but without an octree for instance, it will soon become a bottleneck.
glEnable(GL_CULLING) or some other technique will also help a great deal with that kind of polygon count.
There are a number of things you can do to improve rendering performance. The simplest is just to stick all the vertex data in a displaylist and use that to render. Most OpenGL drivers optimise display lists heavily. If that isn't enough you can try to make sure you render in the most efficient way possible. Try to just get simple static mesh rendering as fast as possible first and then you can easily see what slows you down.
* Stick all of your data in a VBO and update the data rarely.
* Draw using glDrawRangeElements and GL_TRIANGLES.
* Submit many triangles with each draw call (more than 1000).
* Make sure that the triangles that are near eachother in the mesh are near eachother in the index stream, ie the index list should look like 2,3,4,3,5,4,6,5,4 not 3748, 1, 45, 862, 22, 100.
* Disable lighting or at least use only one directional light and infinite viewer. Also try using pure diffuse lighting.
* Turn off two sided lighting (only on older consumer hardware).
* Upgrade your hardware! ! million triangles per frame really isn't that much for modern hardware if you treat it correctly, especially not for pro hardware that people that use CAD programs have.
If performance still isn't good enough, just draw a simplified model when rotating or translating like the models bounding box.
* Stick all of your data in a VBO and update the data rarely.
* Draw using glDrawRangeElements and GL_TRIANGLES.
* Submit many triangles with each draw call (more than 1000).
* Make sure that the triangles that are near eachother in the mesh are near eachother in the index stream, ie the index list should look like 2,3,4,3,5,4,6,5,4 not 3748, 1, 45, 862, 22, 100.
* Disable lighting or at least use only one directional light and infinite viewer. Also try using pure diffuse lighting.
* Turn off two sided lighting (only on older consumer hardware).
* Upgrade your hardware! ! million triangles per frame really isn't that much for modern hardware if you treat it correctly, especially not for pro hardware that people that use CAD programs have.
If performance still isn't good enough, just draw a simplified model when rotating or translating like the models bounding box.
Most CAD and modelling packages support adaptive degredation. By this I mean it will convert your models to bounding boxes when rotating or translation when they cross a certain threshold. This threshould could be, for example, if the polycount of all of the items in the selection set exceeds a certain amount. So if you have 10 objects selected that are medium poly count, or one that is large, you simply rotate the bounding volume, and redraw the rotated model once the artist has stopped rotating the object for, say, a half second. Then once the object is being rotated again, you draw the box until the artist once again lets go of the rotation, or pauses for a half second.
I know you suggested no LOD options, but this seems like a good compromise. The user can rotate the object, and then you take the one frame hit to draw it rotated once the artist comes to rest for a half second ( or user controllable time ).
Anyways, best of luck.
I know you suggested no LOD options, but this seems like a good compromise. The user can rotate the object, and then you take the one frame hit to draw it rotated once the artist comes to rest for a half second ( or user controllable time ).
Anyways, best of luck.
Sphet is right. You should use adaptive degradation which will measure time it takes to draw frame and simplify model on-the-fly, so it can be drawn with sufficient speed.When it's too complex you can use bounding box. 3ds max uses this system.
And it will probably be goog thing when you put swicth somewhere in the menu to turn the feature on/off.
And it will probably be goog thing when you put swicth somewhere in the menu to turn the feature on/off.
the bounding box will definitely solve the problems .. Will try that out ..
and thanks all 4 ur suggestions
and thanks all 4 ur suggestions
Topic Locked
This topic has been locked by a moderator. New replies are not allowed.
Sign in to reply to this topic.
Advertisement