¿Debo darle a cada personaje su propio VBO o debo agruparlos en un solo VBO?

10

Estoy haciendo un juego 3D en primera persona. ¿Debo darle a cada personaje su propio VBO o debo agrupar todos los caracteres en un solo VBO? ¿Cuáles son los pros / contras?

Javier
fuente
Esta es una pregunta duplicada. De qué, no estoy muy seguro, pero es un engaño.
DeadMG
Es similar a esto , pero no creo que sea un duplicado per se, para empezar, esto es Open-GL (no estoy seguro de si hay diferencias específicas), mientras que la otra pregunta es sobre deformables en DirectX11 (por lo tanto, presumiblemente usando mosaico, que cambia las cosas).
Thomas Russell

Respuestas:

11

Esta es realmente una elección entre rendimiento y flexibilidad, pero enumeraré mis opiniones al respecto.

Un solo VBO

Los lados positivos son:

  • Solo una llamada de sorteo para dibujar su escena. Esto aumenta el rendimiento. Aunque su aplicación puede requerir múltiples llamadas de extracción, aún puede tener un solo VBO y dejar que el conteo y la compensación decidan su dibujo.
  • No requiere cambios de estado entre sus objetos. Esto aumenta el rendimiento.

y los lados negativos son:

  • Difícil de administrar, aunque esto depende de cómo escriba su código, si está diseñado correctamente, etc.
  • Al decir difícil de administrar me refiero a cosas como actualizar el VBO, establecer el desplazamiento correcto para cada objeto, etc.

VBO individual: s

Los lados positivos son:

  • Fácil de implementar.
  • Más fácil de administrar desde el principio.

y los lados negativos son:

  • Muchos cambios de estado. Esto disminuye el rendimiento.
  • Muchas llamadas de sorteo. Disminuirá el rendimiento.

Resumen

Te recomiendo que perfiles tu aplicación; Obtenga su cuello de botella real en los datos que puede ver. La optimización prematura puede mostrarse (en este caso) como innecesaria. Sin embargo, dicho esto, si descubriera una pérdida de rendimiento real en su aplicación, dado el escenario de VBO individual , puede comenzar a implementar un solo VBO.

Sin embargo, siempre que no sea necesario (el número de objetos es bajo, no hay muchos cambios de estado en general, etc.) recomendaría ir con VBO individuales: a menos que vea que eso no va a funcionar.

Editar

Olvidé mencionar que estaría bien con múltiples llamadas de sorteo. Lo más importante en tiempos críticos de rendimiento es mantener los cambios de estado al mínimo. Simplemente puede establecer el número de índices para procesar y un desplazamiento para cada llamada de sorteo, y esto está bien. Sin embargo, mantener los cambios de estado lo más bajo posible y hacer la menor cantidad de llamadas posibles, ese es el gran saludo de esta respuesta, o al menos lo que intenté decir.

Wroclai
fuente
Si solo está haciendo 1 llamada de sorteo, eso lo atornilla por cambios de estado por malla (no por vértice) (uniformes, etc.). También fuerza un todo o nada para dibujar todo. Claro que puede desglosarlo, por lo que solo hay 1 VBO múltiples llamadas de extracción, pero ¿qué pasa si desea agregar una nueva malla?
deceleratedcaviar
1
@Daniel: Una nueva malla simplemente debe actualizarse / agregarse al VBO. Olvidé mencionar que estaría bien con múltiples llamadas de sorteo. Lo más importante en tiempos críticos de rendimiento es mantener los cambios de estado al mínimo. Simplemente puede establecer el número de índices para procesar y un desplazamiento para cada llamada de sorteo, y esto está bien. Sin embargo, mantener los cambios de estado lo más bajo posible y hacer la menor cantidad de llamadas posibles, ese es el gran saludo de esta respuesta, o al menos lo que intenté decir. :-)
Wroclai
Lote, lote, lote en 2005 llegó a la conclusión de que puede permitirse entre 10k y 25k lotes en una CPU de 1 GHz antes de estar completamente vinculado a la CPU procesando las llamadas de extracción solo. Como eso se traduce en unos pocos cientos de lotes por cuadro de 60Hz, calzar todo en un solo VB no es esencial, pero seguro ayuda si agrupa geometría que tiene características similares (vida útil, tasa de actualización, atributos) en el mismo VB.
Lars Viklund
1
Creo que también deberías tener en cuenta el sacrificio de frustum.
Tara