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.
Mostrar / ocultar capas (grupo de objetos del mismo tipo) dependiendo de la magnitud (escala de visualización).
Método basado en la Geomería Algebraica, llamado Generalización (que es un algoritmo para simplificar polígonos). mira la siguiente imagen
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 / cero = infinito a 1/50
- 1/50 a 1/100
- 1/100 a 1/1000
- 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.