¿Cuál es el estado del arte en LOD geométrica en los juegos?

15

¿Cómo hacen los juegos modernos el nivel de detalle de geometría para mallas de objetos como personajes, terreno y follaje? Hay dos partes en mi pregunta:

  1. ¿Cómo se ve la cartera de activos? ¿Los artistas hacen un modelo de alta poli que luego se diezma? Si es así, ¿qué algoritmos de decimación son los más populares? ¿Las mallas LOD a veces se hacen a mano?
  2. ¿Cómo hacen la transición los motores entre diferentes objetos LOD en tiempo de ejecución? ¿Hay transiciones suaves o progresivas?

La respuesta podría ser "diferentes estudios utilizan diferentes técnicas". Si es así, identifique algunas de las prácticas más comunes. También sería genial si pudiera señalarme documentos / diapositivas que cubran ejemplos específicos.

ap_
fuente
1
SIGGRAPH 2014 avanza en la representación en tiempo real tiene una charla realmente interesante sobre las superficies de subdivisión de Call of Duty. Usted deberia comprobar esto. En lugar de tener una malla de polietileno alta que se hace de polietileno inferior, definieron formas analíticamente y agregaron más triángulos según sea necesario
Alan Wolfe,
Podemos hablar sobre el estado del arte en algoritmos LOD y estructuras de datos aquí, pero si la pregunta es sobre cómo los juegos modernos lo hacen específicamente, es posible que tenga más suerte preguntando en gamedev.se: gamedev.stackexchange.com
Seudónimo
3
Dudo que. El desarrollo del juego es muy ligero. Se trata principalmente de preguntas de unidad y Java con algunas preguntas de búsqueda de ruta y velocidad de cuadro fija: p
Alan Wolfe
1
@ Alan, Activision usó muchos algoritmos de última generación para crear un juego estratégico 3D real, no una base Sprite isométrica sn, lo cual estoy de acuerdo con eso, pero hicieron un gran trabajo en COD, sin embargo, todavía es un poco lento y perezoso. incluso en los primeros niveles con un pequeño número de activos (estoy hablando de su juego móvil en un iPhone 5s). Creo que necesitas aprender las características expertas de OpenGLES y las capas subyacentes para tener éxito al escribir un juego así.
Iman
Estoy hablando de su versión de consola de call of duty en caso de que eso lo aclare.
Alan Wolfe

Respuestas:

22

Para la geometría LOD, la mayoría de los juegos simplemente cambian entre varias mallas LOD predefinidas. Por ejemplo, "Infamous: Second Son" usa 3 mallas LOD ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ) y "Killzone: Shadow Fall" usa 7 mallas LOD por personaje ( Michal Valient - "Killzone: Shadow fall demo postmortem ", Devstation2013 ). La mayoría de ellos se generan, pero los más importantes (como el personaje principal) se pueden hacer a mano. Las mallas a menudo se generan usando un popular middleware de Simplygon, pero a veces simplemente son generadas por artistas gráficos en su paquete 3D favorito.

Los juegos con una gran distancia de juego también utilizan impostores para el follaje, los árboles y los edificios altos ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ). También emplean LOD jerárquicos, que reemplazan un conjunto de objetos con uno. Por ejemplo, en "Just Cause 2", los árboles se representan primero individualmente como mallas LOD normales, luego individualmente como impostores y finalmente como una única malla de bosque fusionada ( Emil Persson, Joel de Vahl - "Poblando un mundo de juego masivo", Siggraph2013 ) y en Las partes distantes del mundo de "Sunset Overdrive" son reemplazadas por una sola malla generada automáticamente fuera de línea ( Elan Ruskin - "Streaming Sunset Overdrive's Open World", GDC2015 ).

Otro componente de un sistema LOD es la simplificación de materiales y sombreadores. Por ejemplo, "Killzone: Shadow Fall" desactiva el espacio tangente y el mapeo normal para los LOD distantes ( Michal Valient - "Killzone: Shadow fall demo postmortem", Devstation2013 ). Esto generalmente se implementa deshabilitando globalmente un conjunto de características de sombreador por LOD, pero para los motores con gráficos de sombreador, donde los artistas pueden crear sombreadores personalizados, esto debe hacerse manualmente.

Para las transiciones de LOD, algunos juegos simplemente cambian de malla y algunos usan el difuminado para transiciones de LOD suaves: en el interruptor de LOD se procesan dos mallas: la primera se desvanece gradualmente y la segunda se desvanece ( Simon schreibt Blog - "Assassins Creed 3 - LoD Blending" ). Las técnicas clásicas de malla progresiva de la CPU no se utilizan, ya que requieren una costosa actualización de malla y carga en la GPU. La teselación de hardware se usa en algunos títulos, pero solo para el refinamiento de un LOD más detallado, ya que es lento y, en general, no puede reemplazar los LOD de geometría predefinidos.

Los LOD de terreno se manejan por separado para explotar sus propiedades específicas. La LOD de geometría del terreno generalmente se implementa usando mapas de clip ( Marcin Gollent - "Creación y renderizado de paisajes en REDengine 3" ). Los LOD de material de terreno se manejan de manera similar a los LOD de malla o usan algún tipo de textura virtual Ka Chen: "Representación de textura virtual adaptativa en Far Cry 4" .

Finalmente, si está interesado en ver canales de LOD de juegos reales, simplemente navegue a través de la documentación de cualquiera de los motores de juegos modernos: Unreal Engine 4 - "Creación y uso de LOD" , CryEgnine - LOD estático y Unity - LOD .

Krzysztof Narkowicz
fuente
1
Los motores de juego generalmente tienen un conjunto de métodos predefinidos y no puedes acceder al núcleo para cambiar realmente el algoritmo LOD. estoy en lo cierto? Estaba hablando del caso en el que está escribiendo un juego usted mismo con el marco OpenGL o SpriteKit, no sé si uno puede personalizar el algoritmo de LOD en Unity o Unreal, ¿es posible?
Iman
3

LOD (Nivel de detalle) significa administrar objetos en diferentes escalas de visualización, que podrían dividirse en dos partes. Sin embargo, puede usar uno de ellos y eso sería suficiente para la mayoría de los casos.

  1. Mostrar / ocultar capas (grupo de objetos del mismo tipo) dependiendo de la magnitud (escala de visualización).

  2. Método basado en la Geomería Algebraica, llamado Generalización (que es un algoritmo para simplificar polígonos). mira la siguiente imagen

    generalización

El método más famoso y eficiente para generalizar (simplificar) una malla poligonal se conoce como teorema del poliedro Descartes-Euler (ecuación 4.5, lo siento si me refiero a un libro, eso fue lo mejor que puedo hacer) y es utilizado por la mayoría de las bases de datos espaciales. por ejemplo, módulos PostGIS en PostgreSQL. Simplemente elimina los lados más pequeños de un polígono y forma uno muy redondeado. (Imagen superior)

Para implementar LOD en un juego, debe guardar y administrar la escala de su mapa (escena) durante las operaciones de acercamiento / alejamiento. La escala cambia de cero a infinito y debe dividir esto en un número particular de rangos, por ejemplo, algo como esto:

  1. 1 / cero = infinito a 1/50
  2. 1/50 a 1/100
  3. 1/100 a 1/1000
  4. 1/1000 a 1 / infinito = 0

Luego, debe definir qué tipos de sus objetos (capas) deben ser visibles o invisibles en cada uno de los rangos anteriores. Por ejemplo, un tipo pequeño de objeto como una válvula de hidrante no debería ser visible cuando el usuario está en el cuarto rango porque será muy pequeño a esa escala y no puede ser discriminado, por lo que no importa si omite dibujarlo en el pantalla.

Entonces, cuando un usuario usa acercar y alejar para cambiar la ampliación, se mueve a través de los límites anteriores de uno a otro rango, y su juego usa estas escalas de visualización para administrar el nivel de detalles al mostrar u ocultar objetos en la escena. Esto hace una solución discreta de que los objetos se desvanecen repentinamente durante su operación de alejamiento, sin embargo, teniendo las escalas de visualización y los rangos de aumento definidos cuidadosamente, el usuario no sentirá nada.

El grupo anterior de 4 rangos es solo un ejemplo y necesita encontrar el mejor para su propio caso por prueba y error. No hay una regla para eso.

A veces, los juegos usan sus propios métodos LOD, Subway Surfer por instante, muestra un pequeño rectángulo sin textura para mostrar un edificio a lo lejos, y al acercarse repentinamente obtiene textura, el jugador lo siente. No hablaste sobre tu sistema de proyección, que es muy importante y tampoco sobre qué tipo de juego estás creando.

Sin embargo, suponga que está implementando un juego 3D completo con openGl y desea filtrar algunas mallas antes de transferirlas al hardware gráfico, estoy seguro de que esto lo ayudará a reducir las operaciones de vinculación / desvinculación con objetos de búfer y matrices de vértices (VBO, VAO) mientras lidiando con OpenGl.

Usando solo una gestión de capa o simplemente implementando la Generalización de Euler

En la mayoría de los casos, no es necesario implementar un algoritmo de generalización, y el filtrado de objetos simplemente funciona y lo lleva a la eficiencia (frecuencia de actualización) que necesita, sin embargo, depende totalmente, caso por caso. Aunque es un algoritmo fácil que simplemente elimina los lados pequeños de un polígono, debe definir un umbral que sea producto de la magnitud y un número constante, de modo que los lados más grandes se filtren en un punto de vista mucho más alejado.

La falsificación de la gestión de capa y solo la implementación del algoritmo de generalización de Eulers, proporciona un método muy ordenado y continuo en el que simplemente verifica cada lado y línea contra un umbral predefinido y los muestra solo en caso de que sean lo suficientemente grandes como para ser discriminados en la pantalla.

PD: la ampliación es un número flotante> 0 que es igual a 1 / escala y la escala suele ser <1 ya que una escala 1: 1 significa que tienes longitudes del mundo real en tu juego.

Iman
fuente
Abajo votante, por favor considere volver a votar, si todavía es un -1, considere dejar un comentario para mí
Iman
No voté en contra, pero una parte de mí se pregunta cuál es el estado del arte aquí. Así que tampoco puedo votar.
joojaa
1
He votado negativamente porque era difícil de leer y, en mi humilde opinión, no es relevante para los LOD en los juegos. Después de reconsiderar, decidí cancelar mi donwvote al votar y simplemente agregar mi propia respuesta.
Krzysztof Narkowicz
Se supone que el estado de la técnica significa un trabajo muy sobresaliente, pero diferentes métodos resultan de manera diferente en varios casos, por ejemplo, Call of Duty tiene gestión de capa y mipmaping, sin embargo, Dear Haunting (DH 2014) utiliza antecedentes con paralaje y un mipmaping que se ha generalizado previamente texturas Subway Surfer es una historia completamente diferente, y les digo el estado del arte a todos ellos, a pesar de que Subway Surfer dibuja discretamente edificios y otros objetos urbanos o Call of duty es un poco lento al hacer zoom o paneo. Creo que todos son los mejores en su caso.
Iman
3

Iman ya preparó una respuesta completa pero deseo agregarle algo

LOD se puede hacer de dos maneras diferentes

  1. Continua que se llama CLOD y es una optimización de malla poligonal
  2. Discreto que casi cualquier otro algoritmo que la optimización de malla poligonal, se considera que está en este grupo.

Por ejemplo, mipmaping es bueno, rápido pero pesado y pertenece al segundo grupo en lo anterior

Aquí puede encontrar una buena explicación para el mipmaping y el código de implementación con OpenGl.

Imzich
fuente