Comencemos con lo que usted solicitó.
En prácticamente ningún hardware que existe actualmente attribute float weights[25];
compilar. Mientras que los sombreadores pueden tener matrices de atributos, cada índice de matriz representa un nuevo índice de atributo. Y en todo el hardware existe actualmente, la cantidad máxima de índices de atributos es ... 16. Necesitarías 25, y eso es solo para los pesos.
Ahora, puede mitigar esto fácilmente recordando que puede usar los atributos vec4
. Por lo tanto, almacena cada cuatro elementos de matriz en un solo atributo. Su matriz sería attribute vec4 weights[7];
que es factible. Su lógica de búsqueda de peso tendrá que cambiar, por supuesto.
Aún así, no parece estar comprendiendo las ramificaciones de lo que esto realmente significaría para sus datos de vértice. Cada atributo representa un componente de los datos de un vértice. Cada vértice de una llamada de renderizado tendrá la misma cantidad de datos; el contenido de esos datos será diferente, pero no cuántos datos.
Para hacer lo que está sugiriendo, cada vértice en su malla necesitaría 25 flotadores que describan el peso. Incluso si esto se almacenó como bytes sin firmar normalizados, eso sigue siendo un valor de 25 bytes adicionales de datos como mínimo. Eso es mucho. Especialmente teniendo en cuenta que para la mayoría de los vértices vastos, la mayoría de estos valores serán 0. Incluso en el peor de los casos, estaría viendo tal vez 6-7 huesos que afectan a un solo vértice.
La forma en que se aplica el desollado en vertex shaders es limitar el número de huesos que afecta a un solo vértice a cuatro. De esta forma, no usa una matriz de atributos; solo usa un atributo vec4
para los pesos. Por supuesto, ahora también necesita decir qué hueso está asociado con qué peso. Entonces tiene un segundo atributo vec4
que especifica el índice óseo para ese peso.
Esto logra un buen equilibrio. Solo toma 2 atributos adicionales (que pueden ser bytes sin firmar en términos de tamaño). Y para la gran mayoría de los vértices, nunca lo notarás, porque la mayoría de los vértices solo están influenciados por 1-3 huesos. Algunos usan 4 y menos aún usan 5+. En esos casos, simplemente corta los pesos más bajos y vuelve a calcular los pesos de los demás proporcionalmente.
Muchas gracias. ¡Respondiste a todas mis preguntas y aún más! ¡Espero que esto mejore en gran medida el rendimiento! Gracias de nuevo. – Nicholas