How to optimize the rendering of a large model in OpenGL ES 1.1?

I just finished implementing VBO in my 3D application and saw about a 5-10-fold increase in rendering speed. What is used for rendering at a speed of 1-2 frames per second is now displayed at a speed of 10-11 frames per second.

My question is: are there any improvements I can make to increase rendering speed? Will triangular stripes go? At the moment, the vertices are not divided between the faces, each face of the vertex is unique, but overlapping.

My device’s utilization is 100%, Tiler is 100%, Renderer is 11%, and resource bytes are 114819072. This is a rendering of 912,120 persons in a CAD model.

Any suggestions?

drum.png

+7
ios iphone opengl-es vbo
source share
1 answer

Using Tiler 100% means your bottleneck is the size of the geometry sent to the GPU . Whatever you do to reduce the size of the geometry, this can lead to an almost linear reduction in rendering time, in my experience. These setup steps have worked for me in the past:

  • If you have not already done so, you can look at the use of indexing, which can reduce geometry by eliminating some redundant vertices. PowerVR charts on iOS devices are also optimized for using indexed geometry.

  • Try using a smaller data type for your vertex information. I found that I can use GLshort instead of GLfloat for my vertices and normals, without losing accuracy in rendering. This will significantly reduce your geometry and lead to good rendering acceleration.

  • Add similar colored vertices and visualize them as one group in a given color, instead of providing color information for the vertices. The overhead of the few additional calls to call that are required will be significantly outweighed by the acceleration you get from not sending all this color information. I saw an 18% reduction in rendering time by sorting colors in one of my larger models.

  • You are already using VBOs, so you have taken advantage of this optimization.

  • Do not stop the rendering pipeline anywhere. Cut out everything that reads the current state, like all glGet * calls, because they really fight with the PowerVR GPU stream.

There are other things you can do that will lead to smaller performance improvements, for example, using alternating vertices, normal texture data in your VBOs, aligning your data to 4 byte boundaries, etc., but the ones above, ve had the biggest impact on customizing my own OpenGL ES 1.1 application.

Most of these points are well described in the Vertex Data Guidelines section of the Apple OpenGL ES Programming Guide for iOS.

+10
source share

All Articles