Cuando estoy haciendo un modelo para un juego 3D, ¿qué debo tomar como medida en mi presupuesto Polígonos (triángulos) o vértices? He hecho un experimento con dos conjuntos de 40000 cubos, uno con 8 vértices y 12 triángulos, otro con 24 vértices y 12 triángulos. Todo se hizo en Unity y ambos fueron generados por procedimientos. Para mi sorpresa, ambos sets funcionaron casi igual, había una diferencia muy pequeña entre ellos.
¿Significa que no debería preocuparme por el recuento de vértices y solo mirar el recuento de triángulos?
EDITAR: Hice otro experimento, creé un avión con triángulos de 19602 y 10000 vértices y otro con la misma cantidad de tirangles pero 39204 vértices. He generado 4000 de ambos. Ahora menos vértices ganaron 14 fps a 19 fps. Entonces, supongo que generalmente menos es mejor, pero solo en grandes diferencias.
fuente
Respuestas:
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.
fuente
Ninguno.
A menos que esté hablando de cantidades realmente enormes de tris (millones), lo que le importa es:
24 vértices por 4000 cubos dan 96'000 vértices.
640x380 píxeles proporciona 243'200 fragmentos, y la mayoría de los dispositivos admiten resoluciones considerablemente más grandes.
Puede volver a ejecutar su experimento con 1'000'000 cubos, agrupados para evitar el cuello de botella de la llamada de extracción (1 modelo único para 1'000 cubos).
fuente
Vale la pena señalar que si está haciendo una aplicación WebGL, el conteo de vértices se convierte rápidamente en un cuello de botella en términos de tamaño de archivo para que los usuarios lo descarguen. El mismo número de triángulos, pero a menudo 2-3 veces más vértices que los que se muestran en el software DCC. Un mejor desenvolvimiento puede ayudar mucho en este caso al tener menos costuras.
fuente