Mapas de altura
Con un mapa de altura, almacena solo el componente de altura para cada vértice (generalmente como textura 2D) y proporciona posición y resolución solo una vez para todo el quad. La geometría del paisaje se genera en cada cuadro utilizando el sombreador de geometría o la teselación de hardware. Los mapas de altura son la forma más rápida de almacenar datos del paisaje para la detección de colisiones.
Pros:
Uso de memoria relativamente bajo : solo necesita almacenar un valor por vértice y ningún índice. Es posible mejorar esto aún más utilizando mapas detallados o un filtro de ruido para aumentar los detalles percibidos.
Relativamente rápido : el sombreador de geometría para mapas de altura es pequeño y funciona rápido. Sin embargo, no es tan rápido como el terreno geométrico.
En sistemas sin aceleración 3D basada en triángulos, los mapas de altura de marcha de rayos son la forma más rápida de renderizar el terreno. Esto se conoce como gráficos de vóxel en los juegos más antiguos.
LOD / terreno dinámico : es posible cambiar la resolución de la malla generada en función de la distancia desde la cámara. Esto provocará una geometría cambiante si la resolución cae demasiado (alrededor de 0:40), pero puede usarse para efectos interesantes.
Generación / creación de terreno fácil : los mapas de altura se pueden crear fácilmente combinando funciones de ruido como el ruido fractal Perlin Noise y los editores de mapas de altura son rápidos y fáciles de usar. Ambos enfoques se pueden combinar. También son fáciles de trabajar en un editor.
Física eficiente : una posición horizontal se asigna directamente (generalmente) de una a cuatro posiciones en la memoria, por lo que las búsquedas de geometría para la física son muy rápidas.
Contras:
Exactamente una altura por coordenada x / y : por lo general, no puede haber agujeros en el suelo o acantilados colgantes.
Menos control : solo puede controlar la altura precisa de cada punto si el tamaño de la cuadrícula coincide con las coordenadas de textura.
Artefactos : si los cuatro vértices que definen un sub-quad no están en el mismo plano, la división entre los dos vértices se hará visible. Esto generalmente ocurre en acantilados empinados con bordes que no siguen una dirección cardinal.
Los mapas de altura son la forma más eficiente de representar el terreno con mucho y se utilizan en muchos juegos más nuevos que no se basan en características avanzadas del terreno y tienen grandes áreas al aire libre. Wikipedia tiene una lista de programas que usan mapas de altura , pero no estoy seguro de si eso significa que solo los usan como recursos o también para renderizar, así que aquí hay algunos juegos que probablemente los usen:
Just Cause 2: las regiones se cargan en sectores cuadrados y no hay agujeros en el terreno. En la demostración, hay un agujero profundo con triángulos estirados a lo largo de los bordes donde normalmente habría un edificio. (El área normalmente es inaccesible, pero hay modificaciones para eliminar algunas de las limitaciones de la demostración ...)
Sims 2 ( tal vez ): el terreno del vecindario se carga como mapa de altura, pero hay agujeros donde se colocan lotes (sitios de construcción). Sin embargo, hay artefactos típicos si creas acantilados en un lote, y es bastante tedioso agregar un sótano a una casa (y esconder el acantilado debajo de una terraza).
Juegos de motor de Valve's Source: los cepillos rectangulares (geometría de nivel estático) pueden tener un terreno mapeado en altura en sus caras. En estos juegos, las peculiaridades habituales a menudo se ocultan con otros pinceles o accesorios.
Es imposible saber con certeza sin mirar los sombreadores porque cada terreno de mapa de altura se puede representar como malla.
Voxels
El terreno Voxel almacena datos del terreno para cada punto en una cuadrícula 3D. Este método siempre usa la mayor cantidad de almacenamiento por cada detalle de superficie significativo, incluso si usa métodos de compresión como octrees dispersos.
(El término "motor de vóxel" a menudo se usaba para describir un método de mapas de altura de terreno de marcha de rayos común en juegos 3D más antiguos. Esta sección se aplica solo al terreno almacenado como datos de vóxel).
Pros:
Datos 3D continuos : los Voxels son prácticamente la única forma eficiente de almacenar datos continuos sobre características ocultas del terreno, como las vetas de mineral.
Fácil de modificar : los datos de vóxel sin comprimir se pueden cambiar fácilmente.
Características avanzadas del terreno : es posible crear voladizos. Los túneles son sin costura.
Interesante generación de terreno : Minecraft hace esto superponiendo funciones de ruido y gradientes con características de terreno predefinidas (árboles, mazmorras). (Lea Terrain Generation, Parte 1 en el blog de Notch para más información. No hay parte 2 a partir del 05.8.2011.)
Contras:
Lento : para procesar los datos de vóxel, debe usar un trazador de rayos o calcular una malla, por ejemplo, con cubos de marcha (habrá artefactos). Los vóxeles vecinos no son independientes para la generación de mallas y los sombreadores son más complicados y generalmente producen una geometría más compleja. Renderizar datos de vóxel con LOD alto puede ser muy lento.
Enormes requisitos de almacenamiento : el almacenamiento de datos de vóxel utiliza mucha memoria . A menudo no es posible cargar los datos de vóxel en VRAM por este motivo, ya que tendrías que usar texturas más pequeñas para compensarlo, incluso en el hardware moderno.
No es práctico usar voxels para juegos que no se basan en características de voxel como el terreno deformable, pero puede permitir interesantes mecánicas de juego en algunos casos. Los motores Voxel son más comunes en los juegos más antiguos , pero también hay ejemplos más nuevos:
Motor Atomontage : renderizado Voxel.
Gusanos 4: Utiliza "poxels". Según Wikipedia, es una mezcla de vóxeles y polígonos.
Minecraft: utiliza voxel para representar el terreno en RAM, los gráficos son gráficos poligonales. Sin embargo, es principalmente software calculado.
Terraria: un ejemplo para vóxeles 2D. No sé cómo se presenta.
Voxels combinados con física : no es un juego. pero muestra muy bien el potencial de destrucción.
Voxatron : un juego que utiliza voxels para casi todos los gráficos, incluidos menús y HUD.
Mallas
Las mallas poligonales son la forma más flexible y precisa de almacenar y renderizar terrenos. A menudo se usan en juegos donde se necesita un control preciso o características avanzadas del terreno.
Pros:
Muy rápido : solo tiene que hacer el cálculo de proyección habitual en el sombreador de vértices. No se necesita un sombreador de geometría.
Muy preciso : todas las coordenadas se almacenan individualmente para cada vértice, por lo que es posible moverlas horizontalmente y aumentar la densidad de la malla en lugares con detalles más finos.
Bajo impacto en la memoria : esto también significa que la malla generalmente necesitará menos memoria que un mapa de altura, porque los vértices pueden ser más escasos en áreas con características menos pequeñas.
(Ver Red triangular irregular en Wikipedia).
Sin artefactos : la malla se representa tal cual, por lo que no habrá fallas ni bordes de aspecto extraño.
Características avanzadas del terreno : es posible dejar agujeros y crear voladizos. Los túneles son sin costura.
Contras:
Pobre LOD dinámica : solo es posible con mallas precalculadas. Esto provocará "saltos" al cambiar sin datos adicionales para asignar vértices antiguos a nuevos.
No es fácil de modificar : la búsqueda de vértices que corresponden a un área que debe modificarse es lenta.
No es muy eficiente para la detección de colisiones : a diferencia de los mapas de altura y los datos de vóxel, la dirección de memoria para una determinada ubicación generalmente no se puede calcular directamente. Esto significa que la física y la lógica del juego que dependen de la geometría exacta de la superficie probablemente se ejecutarán más lentamente que con los otros formatos de almacenamiento.
El terreno poligonal a menudo se usa en juegos que no tienen grandes áreas abiertas o que no pueden usar el terreno del mapa de altura debido a su falta de precisión y voladizos. No tengo una lista, pero estoy bastante seguro de que
cada 3D Zelda y
cada juego de Mario 3D
utilizar esta.
Otros metodos
Es posible crear un terreno completamente en la tubería del sombreador. Si el algoritmo se ejecuta solo en el sombreador de fragmentos / píxeles, el detalle puede ser prácticamente ilimitado, mientras que el impacto en la memoria es casi nulo. Los inconvenientes obvios son casi ningún control sobre la forma y los problemas cuando la cámara se cruza con la superficie de renderizado original. Todavía es útil en juegos espaciales donde los jugadores no interactúan con la superficie de un planeta. Las animaciones de parámetros funcionan mejor con este tipo de terreno.
Debería ser posible descargar la geometría del terreno generada desde la tarjeta gráfica para usarla para el resto del motor del juego, pero no sé cómo es el rendimiento de eso o si esto se ha hecho hasta ahora.
Conclusión
No existe un método que funcione bien para cada escenario, pero es bastante fácil elegir uno para una determinada tarea:
Los mapas de altura son la mejor solución si no necesita voladizos o agujeros en la superficie del terreno y utiliza física o terreno dinámico. Son escalables y funcionan bien para la mayoría de los juegos.
Las mallas tienen la máxima precisión y pueden describir voladizos, agujeros y túneles. Úselos si tiene un terreno complejo que no cambia con frecuencia.
Los Voxels son buenos para describir terrenos muy dinámicos con muchas características complejas. Evite renderizarlos directamente, ya que necesitan grandes cantidades de memoria y procesamiento.
Otros métodos pueden ser mejores que cualquiera de los anteriores si no tiene que interactuar con el terreno o si necesita gráficos muy detallados. Por lo general, funcionan solo para escenarios muy específicos.
Es posible combinar diferentes métodos para obtener características de más de uno, por ejemplo, al testear el terreno de malla con un mapa de altura para aumentar la estructura de detalles de un acantilado.
La generación dinámica del terreno se usa mucho en la simulación espacial de procedimientos y algunos han avanzado mucho en los últimos años . Los foros de estos proyectos deberían tener algunos recursos sobre el tema.