Estoy renderizando algunas mallas (a veces más de 500) y quería saber la mejor manera de abordar esto. ¿Sería inútil crear 500 VBO y luego, si pasan las pruebas de frustum y visibilidad, renderizarlas? ¿Hay una manera más eficiente de hacer esto? Estoy buscando maximizar el rendimiento.OpenGL: ¿usará la renderización lenta de VBO múltiple?
Respuesta
Para responder a su pregunta, sí, muchos VBO reducirán la velocidad. Más polys por lo general ralentizarán el render, pero más draw calls tiene un impacto mucho mayor. Desea minimizar los cambios de estado y los sorteos, así como la cantidad de búferes que tiene (y el uso de memoria).
Sugeriría primero mirar los almacenamientos intermedios y averiguar cuántos usted necesita. Si puede aplicar lotes/geometría de instancia, combine la geometría estática en un solo búfer, reutilice el búfer de manera más eficiente, etc.
Una vez que haya reducido los búferes al mínimo posible, querrá utilizar la eliminación selectiva de varios géneros . La visibilidad, tanto por el fucsum (quizás en un octárbol) como por la oclusión, puede proporcionar un importante aumento del rendimiento. La idea principal es descalificar la geometría de la manera más rápida y sencilla posible, por lo que debe comenzar con pruebas aproximadas (octree), luego algo más detallada (tal vez una AABB y/o casco simplificado), luego oclusión, y luego dibujar.
Aquí hay un good article on frustrum culling, que toca un poco en quadtrees (y, por extensión, octrees). Diagramas, explicaciones y algunos ejemplos de código.
Los artículos de eliminación de oclusiones OpenGL parecen un poco menos comunes, aunque this one from GPU Gems podría ser un buen lugar para comenzar.
- 1. OpenGL: Dibujar líneas con VBO
- 2. Datos de actualización de OpenGL VBO
- 3. Aspectos técnicos de OpenGl VBO en C++
- 4. Problema al usar el VBO de OpenGL
- 5. Renderización de subpíxeles en OpenGL: problema de precisión
- 6. OpenGL ES 2.0 y objetos de búfer de vértice (VBO)
- 7. Estructura OpenGL de VAO/VBO para modelo con piezas móviles?
- 8. OpenGL es mejor dibujar por lotes o tener VBO estáticas
- 9. OpenGL GLUT ventana muy lenta, ¿por qué?
- 10. Cómo obtener VBO trabajo
- 11. Contratos de código, ¿los usará?
- 12. Por qué utilizar el contexto de OpenGL múltiple
- 13. ¿Sugerencias para soporte de pantalla múltiple en 2D OpenGL?
- 14. ¿Es mejor crear nuevas VBO o simplemente intercambiar los datos? (OpenGL)
- 15. la renderización de páginas roturas en la palabra con HTML
- 16. Renderización de sub-píxeles de fuentes en el iPad
- 17. ¿Cuántos modos de renderización de IE existen?
- 18. Actualización de datos de VBO con glBufferSubData()
- 19. Android ICS: ¿Qué hace realmente la opción del sistema "Forzar renderización GPU"?
- 20. Rails 3 Renderización de contenido binario
- 21. Renderización de fuente completamente extraña en iPhone
- 22. ¿Cómo puedo aplazar el procesamiento durante la renderización de la página apache/mod_perl?
- 23. Renderización en el búfer de Emacs
- 24. Asignación eficiente de VBO en WebGL
- 25. ¿Python usará todos los procesadores en el modo de subprocesos?
- 26. La unión de textura con VBO no funciona correctamente
- 27. Representación de Kinect Point Cloud con Vertex Buffer Object (VBO)
- 28. ¿Cómo funcionan los atributos de color en VBO?
- 29. ¿Debería Direct3D usarse sobre OpenGL en Windows?
- 30. Renderización animación HTML5 del lado del servidor?
Gracias por la respuesta. Estoy descartando el uso de un árbol binario y funciona bien. Estaba más preocupado con el hecho de que tener 500 buffers derrotaría la esencia de las ganancias de velocidad asociadas con las VBO. –
Para que no se equivoque: el uso de varias VBO _en general_ es ventajoso (algunas docenas a la vez), porque permite que la GPU extraiga de una mientras carga otra, y mueve datos entre la memoria GPU y la memoria principal (que el conductor a veces tiene que hacer) también será más eficiente, ya que actualizará los datos. Simplemente, como señaló Peachykeen, tener cientos de ellos significa cambiar de estado cientos de veces, lo que finalmente es perjudicial. – Damon
Sí, los VBO son buenos (nunca se debe enviar geometría en todos los fotogramas si hay una forma de evitarlos), pero tener demasiados búferes puede causar errores de memoria y dañar el rendimiento de manera significativa. No estoy seguro de si 500 es * demasiados *, pero está presionando lo suficiente como para intentar reducirlo. – ssube