¿Cuál es una forma factible de establecer presupuestos de contenido (por ejemplo, recuento de polígonos) para contenido de nivel en un título 3D?

13

Al responder esta pregunta para swquinn , la respuesta planteó una pregunta más pertinente a la que me gustaría escuchar respuestas. Publicaré nuestra propia estrategia (prometo que no la aceptaré como respuesta), pero me gustaría escuchar a otros.

Específicamente: ¿cómo se hace para establecer un presupuesto razonable para su equipo de contenido? Por lo general, una de las primeras preguntas en un desarrollo es: ¿cuál es nuestro presupuesto de polígono? Por supuesto, en estos días es raro que el conteo de vértices / poli solo sea el factor limitante, en cambio, la complejidad del sombreador, la velocidad de relleno y la complejidad de la iluminación entran en juego.

Lo que el equipo de contenido quiere son algunos números / límites difíciles para trabajar de modo que tengan una expectativa razonable de que su contenido, una vez que realmente entre en el motor, no será demasiado pesado. Dado que "depende" no es una respuesta particularmente útil, me gustaría escuchar una estrategia que me permita darles límites viables sin ser a) engañoso, ob) incorrecto.

MrCranky
fuente
1
Esto es más "preproducción" que una cosa de "producción".
Patrick Hughes el

Respuestas:

5

Según tengo entendido, es mucho más fácil reducir la complejidad de un modelo que agregar detalles para un modelo que ha sido desollado y manipulado. Sé que algunas empresas se aprovechan de esto al agrupar activos muy detallados y reducirlos según la situación.

Valve hace esto con sus NPC. Los NPC se modelan con detalles extremos sin ningún tipo de mapeo y luego reducen los detalles a un nivel aceptable por la tecnología y los trucos actuales, como diversas técnicas de mapeo aplicadas en base a modelos detallados (o incluso creados automáticamente).

Esto también ayuda con las pruebas futuras, ya que nunca necesitará volver a crear los activos, solo modifíquelos para cada nuevo proyecto. Esto también tiene la ventaja de que no es necesario esperar a que un equipo realice evaluaciones comparativas específicas del contexto antes de que los activos puedan comenzar a desarrollarse. Los artistas pueden participar por completo desde el día 1.

Trueno clásico
fuente
2
Sin embargo, eso no proporciona realmente un presupuesto: "hacerlo tan complejo como lo necesite y luego lo reduciremos más adelante" es una estrategia de producción. : - /
MrCranky
16

Bien, entonces nuestra estrategia es:

  • Crea una geometría de marcador de posición, aproximadamente de la escala correcta para el contenido final. Eso puede ser edificios o personajes. No tiene que parecerse en nada al contenido final, puede ser cajas / esferas / etc., pero debe estar teselado para que tenga un número decente de polígonos. Si estás haciendo personajes, haz que tengan un número representativo de huesos.
  • Alternativamente, use la geometría de otra persona. Si tiene un título cuyo nivel de calidad está tratando de igualar, encuentre alguna forma de tomar sus modelos (quizás usando un capturador de escenas DirectX).
  • Asegúrese de que su geometría tenga un sombreador representativo. Si espera combinar varias texturas, hágalo, incluso si las texturas son de un solo color. Asegúrese de que las texturas sean resoluciones no triviales, incluso si son de un solo color.
  • Poner una cantidad razonable de luces.
  • Coloque la cámara en un lugar realista, apuntando a la mayor cantidad de geometría que pueda (por ejemplo, de pie en una colina mirando por encima del nivel)
  • Cargue la escena en su hardware objetivo más lento y rápido, y mida FPS.
  • Varíe la cantidad de geometría / luces / sombreadores / resolución de textura hacia arriba o hacia abajo para tener una idea de cuáles son las compensaciones (por ejemplo, puede tener una docena de luces adicionales pero tendría que reducir el conteo de polígonos a la mitad).

Finalmente: sea conservador con sus números. El renderizado no es lo único que tendrá que hacer su juego, así que decida cuál es la proporción de su marco que desea gastar en el renderizado y conviértalo en su objetivo. Por ejemplo, si desea gastar dos tercios de su marco a 30 fps de renderizado, apunte a 1s / 22ms (45 fps) en sus pruebas.

De todo eso, deberías poder dar ejemplos de escenas. Por ejemplo, aquí hay una escena con 200K polígonos, 5 luces estáticas y no más de 3 luces dinámicas por modelo, con 15 caracteres de 50K polys y 30 huesos, y funciona a 60 fps y ocupa 30MB en memoria.

MrCranky
fuente
2
tl; dr: Benchmark it yourself;)
Nicol Bolas
+1 Esta es realmente la única forma, construir y medir.
Patrick Hughes
De Verdad? Esperaba que hubiera una solución más inteligente / más barata en la que no habíamos pensado.
MrCranky
@ MrCranky desafortunadamente, sí. Si está utilizando un motor existente, puede iniciar el proceso midiendo los datos de muestra existentes y usándolo como su línea de base para personalizar los números para su juego en particular: cada juego es diferente.
Patrick Hughes
4

Conteo de vértices

He investigado "Polygon Count" por más de 15 años. No hay una forma estricta de saber cuántos es su límite, especialmente con software y hardware más modernos. Los límites eran mucho más útiles en motores que solo admitían 4.000 triángulos para un nivel completo. Ahora, encontrarás que la mayoría de los objetos en el entorno del juego superarán eso individualmente.

Lo que finalmente importa es lo que está haciendo el motor con las tiras poligonales.

Cuando el motor renderiza cada modelo, toma sus coordenadas mapeadas de UV, la textura / material representado en los triángulos y crea tiras triangulares. En la mayoría de los casos, un abanico triangular se divide en tiras triangulares separadas por triángulo. Esto aumenta el número de tiras triangulares, disminuyendo el rendimiento.

Un buen ejemplo de cómo arreglar esto es la parte superior plana de un cilindro. Los paquetes 3D generalmente configuran un abanico triangular con un vértice en el centro. Elimino los bordes y el vértice central, luego creo quads en la cara. Esto debería triangular en una sola tira triangular en lugar de múltiples tiras de una sola cara, sin cambiar el recuento de polígonos.

Tome el recuento de polígonos como guía y cuide cómo modela, y haga un mapa UV de la malla. Menos divisiones en la malla cuando el mapeo UV a menudo puede ser más beneficioso.

Luego, considere lo que se puede falsificar con los mapas normales. Una cara plana con una gran cantidad de detalles suele estar mapeada normalmente. Las curvas solo necesitan ser redondas donde se pueda ver una silueta. Al mirar las caras curvas de frente, no debe notar la diferencia entre su activo de alta resolución y el activo de resolución del juego. La silueta es lo que marca la diferencia en su modelo cuando se trata de mapas normales. La silueta ahora se puede modificar con DirectX 11, usando mapeo de teselación y desplazamiento.

Diseño de juego

Considera lo siguiente al diseñar tu juego:

  1. Defina el tipo de juego (p. Ej., Acción / aventura / carrera / desplazamiento)
  2. Definir el tipo de vista (por ejemplo, primera persona / tercera persona / ortografía)
  3. Defina el poder computacional para su mercado. (por ejemplo, entusiasta / jugador casual)
  4. Crea un estilo visual que desees lograr. ¿Quieres que se vea, por ejemplo, Crysis 2, Borderlands, Bloodforge o Gears of War?
  5. Definir objetos importantes para el jugador. ¿Tus accesorios serán un centro de atención o simplemente un telón de fondo?
  6. ¿Son las mallas visuales también la malla de colisión?

Usando el juego y los tipos de vista, decida cuál será la profundidad de la vista. ¿Vas a ver objetos distantes y con qué claridad? ¿Estás haciendo algo con visión limitada, como un tirador de corredor? (por ejemplo, Gears of War) ¿Estás haciendo algo en itinerancia libre con paisajes abiertos? (por ejemplo, Skyrim)

Una vez que sepa cómo debe verse, puede investigar los juegos que son similares.

La animación limitará su capacidad de aumentar el recuento de polígonos. Mallas estáticas, cualquier cosa que permanezca en la misma posición es más barata en la GPU y la CPU. Especialmente si no son objetos físicos. Para los objetos de física, a menudo puede crear cascos de colisión simples y mallas visuales complejas. No hay suficiente interacción en la mayoría de los juegos para notar la diferencia. La animación mueve su modelo tridimensionalmente, con varios huesos por vértice, mezclándose entre el peso de cada uno de ellos. Esto puede ser costoso en tiempo de CPU, que puede chocar con IA y física basada en software. Cuantos más vértices se vean afectados por la cantidad de huesos en todo el modelo, disminuirá el rendimiento de la CPU. Esta es la otra razón por la cual los personajes del juego se consideran "arte". Es muy difícil definir un límite de polígono.

Mi ejemplo

Uso el UDK, haciendo un shooter en tercera persona de ritmo lento, con un número limitado de jugadores y NPC en la pantalla en cualquier momento. Para esto, apunto a aproximadamente 10,000 triángulos por jugador, 5,000 triángulos para enemigos típicos y genéricos, y si estaba haciendo un personaje de estilo "jefe", alrededor de 15,000. Además, las armas para la tercera persona alrededor de 4.000 triángulos aparecerán muy detalladas. Vehículos alrededor de 10,000 triángulos. Todo requerirá Nivel de detalle, porque requiero largas distancias de visión.

Si fuera una primera persona, basaría los brazos en alrededor de 2,000 triángulos, arma alrededor de 5,000 triángulos, con mapeo normal para cada uno.

Conclusión

Esto es lo que probablemente significa "depende", pero pensé que podría aclarar algunas cosas que la gente a menudo se pregunta.

  1. Use el recuento de polígonos como guía.
  2. Mire las áreas que podrían ser mapeadas normalmente en lugar de modeladas.
  3. Tenga cuidado al colocar ventiladores triangulares, si es posible, cree una tira.
  4. Use menos divisiones en la malla cuando realice el mapeo UV, teniendo en cuenta las tiras.
Markham Ward
fuente
2

Un método que se me ocurre es utilizar escenas construidas automáticamente para generar datos estadísticos a partir de los cuales puede descifrar la información que está buscando.

  1. Obtenga un gran volumen de activos (podría potencialmente generarse automáticamente).

  2. Cree una herramienta para generar escenas que su motor pueda cargar utilizando el conjunto de activos.

  3. Ejecute un bot que moverá su cámara por la escena. También es posible que desee ejecutar algunos otros bots para que la escena sea más dinámica, incluidas las luces.

  4. Recopile tanta información como sea posible y tírela a una base de datos; fps, conteo de polígonos, cambios de sombreador, número de luces, llamadas de sorteo, etc.

  5. Cree / obtenga algunas herramientas para mostrar los datos en su base de datos de tantas maneras como sea posible.

Este enlace puede proporcionar algunas ideas más: Dead Rising Tools

OriginalDaemon
fuente
Me gusta esta respuesta, ya que aborda la parte más cara de nuestra propia estrategia: alguien tiene que esforzarse para construir escenas representativas. La generación de algoritmos o scripts para colocar rápidamente una gran cantidad de activos de tamaño razonable aceleraría enormemente la creación de una escena comprobable. Voy a aceptar la respuesta más popular, pero creo que esta vale la pena.
MrCranky