Hola a todos.
Veréis, tengo una duda acerca de la forma más óptima de definir los índices que forman la geometría.
Mirad. Estos son los índices que forman un cubo.
0 1 2
2 3 0
4 5 6
6 7 4
8 9 10
10 11 8
12 13 14
14 15 12
16 17 18
18 19 16
20 21 22
22 23 20
Como podéis ver, los índices están definidos de una forma más o menos secuencial.
Y esta es la lista de índices del mismo cubo pero definido de otra forma. Como podéis ver, los índices no van tan consecutivos.
0 6 9
9 3 0
12 15 21
21 18 12
1 4 16
16 13 1
5 10 22
22 17 5
11 7 19
19 23 11
8 2 14
14 20 8
Así que la pregunta es, ¿es más optima para la aceleradora la primera lista de índices o es indiferente?
Saludos.
Sinceramente, no lo se a ciencia cierta, pero juraria que si. Temas de cache, ya sabes. Las tarjetas tienen cache de vertices, asi que si le pasas todos consecutivos digo yo que los reaprovechara.
Si, precisamente por eso lo preguntaba :)
Yo también pienso que el tener los vértices que forman cada triángulo de manera consecutiva, aumenta el rendimiento de la caché.
Saludos
Si, las tarjetas graficas tienen una cache de vertices (que solo se usa con geometria indexada), de forma cuanto mas consecutivos sean los vertices mas se aprobechara esto (o cuanto antes se use un vertice desde la ultima vez que se haya usado).
En la documentacion de Nvidia no parecen dejarlo muy claro, tienen una utilidad para crear strip's de mallas optimizadas, que seguramente sabras, incluso diria que esta utilidad la has nombrado alguna vez.
De todas formas, sabiendo que la cache que se usa es FIFO tendria mos que poder decucir que lista es mejor, pero mirando a primera vista, los numero que se repiten al final y al principio en la siguiente cara, parecen igual, mirandolas en profundidad pues no se.
Pero sabiendo que la cache es FIFO, nunca se podra aprobechar al 100%, no?? es decir que, tendria que ser normal, en una lista optimizada, es normal que algunos vertices del cache se pierdan, nop??
Saludotes.
PD: Una puñetera documentacion sobre el orden de los vertices para usar la cache estaria bien, por que la documentacion de nvidia, no parece aclarar mucho, querran que usemos el cutre-programa ese!?
OT: aprovechar va con v listos xD
Una cosa, por lo q veo las dos listas aprovechan como mucho 2 vertices del triangulo anterior cada 2 triangulos, es decir, el triangulo B aprovecha 2 vertices del A y el D pilla 2 del C, con lo cual da igual q esten tan salteados en la 2a, no ?
Pues pensandolo detenidamente, puede ser que si que en ambos casos sea igual de eficiente...
Simplemente crear un test. Un modelo de miles de vertices, con dos versiones, una con índices ordenados, y la otra no. Y a probar.
Saludos.
Y a probar
No, si acelerar, acelera, el problema es saber cual es el orden correcto, por que no parece haber documentacion clarificadora al respecto.
Yo me hice la misma pregunta y cree un optimizador de indices. Pero no saqué ninguna conclusión. Bueno sí, la conclusión fue que mejor me dedico a analizar otros temas porque con este no creo que se consiga ganar mucha cosa. :D
Si, supongo que este tipo de optimizaciones son secundarias pero me picaba la curiosidad :)
Saludos
Yo estoy con haddd, mejor dejar estas optimizaciones de tan bajo nivel, y dedicarse a otros menesteres mas importantes.
¿Hay vida inteligente en otros planetas? ¿Y en el nuestro?
Lalala.
Ejecutar el "Optimized mesh" de los samples de DirectX, si puedes hacerlo no esta de mas.
¡Todo lo contrario!
Un optimizador de índices es de las mejores optimizaciones que uno puede hacer :)
Las tarjetas desde hace tiempo (i.e. geforce1) disponen de una cache de vértices tanto preT&L como postT&L, y hacen uso de ella en geometría indexada.
Las diferencias que puede haber en rendimiento si la malla tiene una indexación caótica a diferencia de una malla con una indexación que favorezca que muchos cálculos puedan reutilizarse al hallarse ya en la caché son enormes.
Un optimizador de malla en ese sentido que reordene índices es una muy buena idea si lo que se busca es la mayor rapidez :)
Saludos,
Ithaqua.