Este tema, como con cualquier problema de optimización, recibe mucho, pero no pude encontrar lo que (creo) quiero.OpenGL preguntas de rendimiento de bajo nivel
Una gran cantidad de tutoriales, e incluso las preguntas más importantes tienen consejos similares; generalmente cubre:
- cara Uso GL sacrificio (la función de OpenGL, no la lógica escena)
- Enviar sólo 1 matriz a la GPU (combinación projectionModelView), por lo que disminuye los cálculos MVP desde por vértice a una vez por modelo (como debería ser).
- Use vértices intercalados
- Minimizar el mayor número posible GL llama, lote, si procede
Y, posiblemente, unos pocos/muchos otros. Estoy (por razones de curiosidad) renderizando 28 millones de triángulos en mi aplicación usando varios buffers de vértices. He probado todas las técnicas anteriores (a mi leal saber y entender) y casi no he tenido cambios en el rendimiento.
Si bien recibo alrededor de 40FPS en mi implementación, lo que de ninguna manera es problemático, ¿todavía tengo curiosidad por saber dónde se utilizan estos "consejos" de optimización?
Mi CPU está al ralentí alrededor del 20-50% durante el procesamiento, por lo tanto, I asumo Tengo una GPU destinada a aumentar el rendimiento.
Nota: Estoy buscando en gDEBugger en el momento
Cruz publicada en Game Development
¡Muy bonito! Gracias. –
Muy buena respuesta. Una pregunta, sin embargo, en su respuesta al punto 2, estoy un poco confundido. Estaba comparando la diferencia entre tener el "modelo * proyección * vista" dentro del sombreador (como variables uniformes, modelo vista enviada cada vez que un modelo cambia); frente a una única variable de matriz uniforme (modelviewprojection) actualizada por modelo, que se calcula (una vez) por la CPU en lugar de por vértice. Seguramente eso ahorraría muchos cálculos? – dcousens
@Daniel: Normalmente no se calcula la matriz MVP en el sombreado. Lo que hace es realizar primero el cálculo modelview_position = MV * vertex_position, y luego clip_position = P * modelview_position. El razonamiento detrás de esto es que, para algunos algoritmos, necesita la posición del vértice transformado de la vista de modelo entremedio, no solo el resultado final de todo el proceso de proyección. Además, las normales de los vértices solo se transforman mediante la transposición inversa de MV, no el MVP completo^T^-1, por lo que esa es otra razón: si desea implementar una iluminación agradable, necesita esas normales transformadas. – datenwolf