Skip to main content
gamedev.net
🔒 Locked

HIGH POLY COUNT MODELS

Started by _John_Galt_ 7 replies 2.2k views
Original Post
_John_Galt_
_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 ..??
ketek
ketek
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.
fractoid
fractoid
Listen to ketek. He speaks truth.

...I just dropped in to ask you nicely not to yell in your thread titles. >.<
nife
nife
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.
Killers don't end up in jailThey end up on a high-score!
GameCat
GameCat
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.
zedzeek
zedzeek
try stripping your model (a million tris might take a long time though so let it chug on it)
break your model up into smaller batches eg dont draw 1million tris in one go, eg try drawing 100x 10,000 tris. hardware have an optimal size of data to send to the card
Sphet
Sphet
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.
b2b3
b2b3
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.
_John_Galt_
_John_Galt_
the bounding box will definitely solve the problems .. Will try that out ..
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.