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?
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.
fuente