Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: AgeR en 04 de Abril de 2008, 05:23:26 PM

Título: Ordenar por material o por textura
Publicado por: AgeR en 04 de Abril de 2008, 05:23:26 PM
Estoy rehaciendo y ampliando algunas partes de mi motor, y me ha surgido la siguiente duda: cómo ordenaríais vosotros los polígonos a renderizar, por textura o por material?

Hasta ahora mi motor utilizaba una o dos texturas por objeto, dependiendo del tipo. Ahora quiero contener en un Material los datos de color, etc y los punteros a texturas que pueda tener un objeto.

Lo que no tengo claro es si ordenar los polígonos por su textura difusa, o directamente por material. El tema es si ordenando por textura difusa y activando/desactivando el resto de pasos (bumpmap, lightmap, etc) se ganaría algo en rendimiento, o sería preferible tener los vértices ordenados directamente segun su material y cambiar las texturas y texturestages necesarios para cada grupo de vértices.

Tres párrafos, y no se si me he logrado explicar bien  :? .
Título: Re: Ordenar por material o por textura
Publicado por: Tei en 05 de Abril de 2008, 12:28:26 AM
En principio, y dada mi ignorancia, diria que dibujes de golpe todos los poligonos de la misma textura. Para no tener que cambiar de una textura a otra. Aunque no se si eso es importante. Pero luego me hablas de material, y que me aspen si se lo que es eso.
Título: Ordenar por material o por textura
Publicado por: senior wapo en 05 de Abril de 2008, 05:50:56 AM
En términos quakeros, que es lo tuyo :p, material son los "shaders" de quake3, vamos, la combinación de texturas, renderstates y blending states de una superfice determinada.

A día de hoy, con shaders propiamente dichos, suele ser mejor ordenar por pixel shader y después por textura, ya que el coste de seleccionar un shader es mucho más alto. Le supone a la GPU mucho más trabajo de inicialización que seleccionar una textura nueva.
Con la fixed pipeline sigue siendo mejor ordenar por textura.

De todas formas cada motor es un mundo, lo mejor es probar y medir tiempos.
Título: Ordenar por material o por textura
Publicado por: Prompt en 05 de Abril de 2008, 09:37:16 PM
Yo agruparia por material. De hecho así lo hago yo en mi motor.

Llamemos material a:
- Combinación de shaders, variables y elementos ( texturas )
- Configuración de:
   - Vertex States.
   - Fragment States.
   - Material Properties.

Luego tambien hay que tener en cuenta cosas como alphas y tal. U optimizar dentro de la ordenación de material haciendolo por texturas. Puede ser una buena idea.

Como dice senior lo suyo es hacer pruebas de stress.

Un saludo.
Título: Ordenar por material o por textura
Publicado por: Loover en 05 de Abril de 2008, 10:04:16 PM
En codepixel han puesto un par de tutos sobre motores bastante interesantes. En el segundo, "Driver gráfico" hablan sobre cómo ordenar. Creo que lo hacen por material:

http://www.codepixel.com/
Título: Ordenar por material o por textura
Publicado por: Ruben en 07 de Abril de 2008, 12:08:53 PM
Hi,
estoy de acuerdo con Senior Wapo.

Por si te ayuda, en la web de Tom Forsyth hay un articulo sobre el coste de los cambios de estado. Actualmente seria la ultima entrada titulada: "Renderstate change costs". La web es: http://home.comcast.net/~tom_forsyth/blog.wiki.html

Un saludo,
Rubén
Título: Ordenar por material o por textura
Publicado por: derethor en 07 de Abril de 2008, 03:23:32 PM
muy sencillo, primero por material, despues para los del mismo material, ordenas por textura, y despues por los que esten mas próximos a cámara (para que rellenen el zbuffr lo antes posible)