Ordenar objetos antes de renderizar

10

Estoy tratando de implementar un gráfico de escena y en todos los artículos que he encontrado se habla de la clasificación de objetos. Entonces ordenaría sus objetos por "material", por ejemplo. Hasta que me senté y comencé a implementarlo, lo tomé por sentado, porque tenía sentido. Pero ahora me pregunto qué cambia realmente la clasificación.

En mi motor, tengo un administrador para UBO, los uso para almacenar datos que se compartirán entre programas, en este momento que solo implica tiempo, cámaras y cámaras de proyección y luces (no me preocupa la gestión de las luces que afectan qué objetos ATM).

Ahora, para cada modelo, tengo que cambiar el modelo al uniforme de matriz mundial, ninguna clasificación va a cambiar eso. Entonces, ¿el salto de cambiar esta matriz a establecer también un material para cada objeto es tan malo?

Recuerdo vagamente haber leído en alguna parte que cada vez que cambia algo en la tubería, tiene que enjuagarse y eso puede causar problemas de rendimiento. Pero para cada llamada de dibujo estoy configurando un modelo para la matriz mundial de todos modos, entonces, ¿qué sentido tiene preocuparse por esto?

Por cierto, hay alguna información sobre si cambiar un uniforme y llamar a glBufferSubData es más (o menos) costoso.

dreta
fuente
3
Respuesta rápida, sí, el salto de cambiar una matriz a colocar también materiales en cada objeto es tan malo. En este punto, sugeriría hacer un viaje lateral para conocer las herramientas de medición de rendimiento de OpenGL para su plataforma antes de continuar. Con las herramientas de perf puede medir fácilmente diferentes técnicas y descubrir qué funciona mejor para las necesidades de su renderizador. Además, esas herramientas te durarán toda tu carrera hacia adelante mientras que este renderizador ... no tanto ;-)
Patrick Hughes
@PatrickHughes increíble, gracias, definitivamente los
revisaré

Respuestas:

4

Definitivamente desea ordenar para agrupar materiales. Si puede, también puede usar la creación de instancias para agrupar la geometría (por ejemplo, si tiene un número X de los mismos objetos).

También hay valor en la clasificación por profundidad, también. Debe ordenar de atrás hacia adelante los objetos transparentes (ignorando varias técnicas avanzadas que eliminan esa necesidad, en circunstancias limitadas).

También hay valor en la clasificación de objetos opacos de adelante hacia atrás, ya que eso permite a principios de Z reducir en gran medida el sombreador de fragmentos sobre la cabeza de su escena.

Sean Middleditch
fuente
3
Ordenar los objetos opacos / transparentes no es fácil para situaciones complejas (hasta el punto de ser imposible sin reglas arbitrarias). También puede agrupar por textura con el mismo propósito de reducir las llamadas gl.
Darkwings
Es necesario ordenar por textura para agrupar las llamadas y reducir las llamadas de extracción. La clasificación no tiene nada que ver con la reducción de las llamadas de extracción. La ordenación tiene que ver con obtener la representación correcta (para objetos transparentes) o minimizar la sobrecarga del procesador de fragmentos (para objetos opacos). Ser "complejo" es un problema, sí, pero eso es lo que se les paga a los programadores de gráficos de motores de juegos para hacer que los juegos se puedan jugar en hardware básico. La eficiencia del hardware entre objetos opacos ordenados y no clasificados por sí solos puede ser bastante masiva.
Sean Middleditch
opengl.org/wiki/Transparency_Sorting A eso me refería con 'reglas arbitrarias'. No existe una clasificación objetiva "correcta" para casos complejos. Acerca de 'ordenar' y 'ordenar', el OP decía claramente 'ordenar por material' (independientemente de la transparencia), y quise decir lo mismo para la textura ya que ambos objetivos impactan en el rendimiento.
Darkwings
Para ser honesto, nunca he visto ese tipo de problemas entrar en juego en juegos reales. Esos ejemplos realmente no reflejan cómo uno realmente hace las cosas, donde los objetos transparentes son generalmente de tamaño aproximadamente niforme y tienen límites de colisión bastante "cuadrados", los cuales evitan superposiciones locas. En cualquier caso, el hecho de que "es difícil" no cambia su necesidad. Por supuesto, también señalé que el procesamiento por lotes por material es importante, y mencioné las instancias para contrarrestar la afirmación "ninguna clasificación puede ayudar", por lo que no estoy seguro de si hay algo concreto que encontraste mal en mi respuesta.
Sean Middleditch
Mire, un comentario no significa que encontré algo incorrecto en su respuesta, y nunca dije "ninguna clasificación puede ayudar". He dicho que hay casos en los que no existe una solución correcta objetiva, por lo que obviamente se debe encontrar una solución utilizando reglas arbitrarias. Esas son 2 declaraciones completamente diferentes.
Darkwings
3

La clasificación de objetos únicamente por profundidad tiene un gran valor, especialmente en las arquitecturas de binning o mosaico.

Ordenar sólidos de adelante hacia atrás, transparencias de atrás hacia adelante.

Al renderizar, las cosas que están más cerca de la cámara y el sólido se procesan primero, y cualquier otra cosa que ocupe el mismo espacio será rechazada por una verificación inicial de z-buffer.

Si la arquitectura gráfica tiene algún tipo de z-buffer jerárquico o de baja resolución, la geometría puede ser eliminada incluso antes de que se renderice algo.

Jari Komppa
fuente