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.
fuente
Respuestas:
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.
fuente
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.
fuente