¿Cuándo es mejor cargar matrices de modelos parciales en el sombreador de vértices?

8

A partir de ahora, cuando renderizo mi escena y mientras itero a través del gráfico de escena, para cada nodo, su matriz modelo se calcula a partir de la matriz modelo del padre y la pose del nodo de escena. Esto es bastante simple y ya reduce el número de multiplicaciones matriciales a una multiplicación por nodo y marco.

Pero todas estas multiplicaciones matriciales deben realizarse en la CPU y en cada cuadro para poder realizar movimientos (múltiples consecutivos) de los nodos de escena muy rápidamente. Sin embargo, la GPU probablemente sea mucho más adecuada para realizar muchas multiplicaciones de matrices, así que estoy pensando en enviar múltiples matrices de modelos parciales al sombreador de vértices en lugar de calcular todo en la CPU.

Enviar cada parte (por lo que la pose de cada nodo) a la GPU probablemente no tenga mucho sentido, ya que en este caso todos los cálculos se realizan para cada vértice en lugar de cada nodo, lo que en realidad disminuiría el rendimiento. Pero tal vez los nodos de escena con muchos hijos o solo hijos sin movimiento (en relación con su padre) podrían ser un lugar para dividir la matriz del modelo y desplazar las multiplicaciones al sombreador.

Entonces, ¿cuándo es mejor enviar matrices de modelos parciales al sombreador y mover la multiplicación a la GPU? ¿O es simplemente una mala idea para esto?

Nerón
fuente

Respuestas:

9

Hacer matemáticas con uniformes es un sombreador que, por lo general, no te brindará ningún rendimiento sobre hacerlo en la CPU. Una CPU no es más lenta que una GPU para hacer operaciones matemáticas de matriz, simplemente no está estructurada para hacer grandes cantidades de matemáticas en paralelo. Pero tienes que hacer esa gran cantidad de matemáticas para obtener una victoria. Enviar datos adicionales a la GPU solo para que la GPU multiplique dos matrices juntas rara vez le proporcionará algo.

Ahora, digamos que tiene un búfer de matrices de pelado. Se podría empezar a importa si todos ellos se transforman en el espacio mundo en la CPU o simplemente pasar una matriz extra-modelo-espacio mundo para la GPU. Pero incluso entonces, depende de tu relación de vértices a huesos.

John Calsbeek
fuente
Depende de la cantidad de cálculos. GPU es realmente rápido con respecto a las operaciones matemáticas, por lo que es una cuestión de prueba y evaluación comparativa.
Michael IV
5

Raramente, si alguna vez. Lo respondiste a medias en tu propia pregunta: un sombreador de vértices se ejecuta una vez por vértice, un sombreador de fragmentos una vez por fragmento. Si no está haciendo algo que sea único para ese vértice o fragmento, entonces está haciendo exactamente lo mismo cada vez que invoca un sombreador. Eso no me suena más eficiente.

Mokosha
fuente