Imaginemos una gran malla de cuadrícula, como una que podríamos usar para el terreno. Representaremos n
triángulos, cubriendo, digamos, la mitad de nuestra pantalla de 1080p, en una sola llamada de sorteo.
Si soldamos todos nuestros vértices y no tenemos costuras de suavizado / texturizado, cada triángulo tiene 3 vértices y cada vértice es compartido por 6 triángulos, por lo que tenemos n/2
vértices.
Para renderizar esto necesitamos:
Ejecute el sombreador de vértices al menos n/2
veces
("al menos" porque nuestra memoria caché para los resultados de vértices es tan grande. A veces terminaremos desalojando un vértice que ya transformamos, luego lo necesitaremos nuevamente para un triángulo posterior que lo comparta y vuelva a ejecutar el sombreador de vértices en él Así que no obtenemos tanto ahorro como parece en papel)
Recortar y seleccionar n
triángulos.
Rasteriza e interpola en al menos 1920x1080 / 2 o aproximadamente 1 millón de píxeles del búfer de cuadros (ya que dijimos que nuestro terreno cubre aproximadamente la mitad de la pantalla).
("al menos" debido a la forma en que las GPU funcionan en cuadrículas de píxeles , algunos fragmentos justo fuera de los bordes de los polígonos aún se rasterizan pero luego se enmascaran, lo que significa que procesamos fragmentos dos veces. se oculta, si no tenemos la suerte de dibujar primero el polígono en el búfer de profundidad)
Ejecute el sombreador de fragmentos para todos esos> = 1 millón de fragmentos.
Mezcle ~ 1 millón de resultados en los búferes de marco y profundidad.
Bien, ahora vamos a soldar todos nuestros vértices, ¡así que ahora tenemos 3n
vértices para renderizar, seis veces más que antes! Nuestros pasos son ...
Ejecute los 3n
tiempos del sombreador de vértices .
(No hay asteriscos debido al almacenamiento en caché ya que cada vértice se usa solo una vez, aunque esto significa que el caché no puede salvarnos en ningún momento)
Recortar y seleccionar n
triángulos.
Rasteriza e interpola en al menos 1920x1080 / 2 o aproximadamente 1 millón de píxeles del búfer de cuadros.
Ejecute el sombreador de fragmentos para todos esos> = 1 millón de fragmentos.
Mezcle ~ 1 millón de resultados en los búferes de marco y profundidad.
... espera, cada paso excepto el primero es el mismo! Por lo tanto, la mayor parte del trabajo que realiza la GPU en una llamada de extracción típica no está directamente relacionada con la cantidad de vértices utilizados. La cantidad de cobertura de pantalla, sobregiro y el recuento total de triángulos representan mucho más del costo.
Eso no significa que los vértices sean completamente libres. Si comparte vértices cuando puede, puede obtener algunos ahorros modestos con el almacenamiento en caché, especialmente si los sombreadores de vértices son complicados o la tubería de vértices de su hardware es débil (como fue el caso en algunas consolas más antiguas). Pero dado que el recuento de vértices sigue proporcionalmente al recuento de triángulos más o menos un factor constante, generalmente no es una medida tan interesante del costo total de la malla.