Mapa de altura, vóxel, terrenos poligonales (geometría)


15

En relación con los terrenos de mapa de altura, vóxel y polígono (geometría):

  1. ¿Cuáles son las principales diferencias entre estos tres?
  2. ¿Puedes formar un terreno "liso" con Voxels? Quiero decir, ¿puedes obtener, por ejemplo, una montaña lisa con Voxels o los Voxels están limitados a cubos?
  3. En cuanto al rendimiento, un mundo de 2000x2000 unidades, ¿cuál sería el terreno de mapa de altura más rápido, el terreno Voxel o el terreno geométrico basado en polígonos? (Suponiendo que se realicen ganancias / optimizaciones de rendimiento "razonables" para renderizar para todas las posibilidades)
  4. ¿Hay más técnicas utilizadas para la creación del terreno?
  5. ¿Algún buen título que represente cada uno de los tipos?

El terreno basado en PS Polygon debe estar completamente traingulado, sin elementos cuadrados.

Respuestas:


30

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.


3
El motor de origen no utiliza mapas de altura para su terreno. Utilizan quads teselados llamados "Desplazamientos" developer.valvesoftware.com/wiki/Displacement
Tetrad

1
Esa es una dulce respuesta allí, daría un +3 en este caso, si fuera posible. Gracias por la información detallada, muy apreciada.
joltmode

@Tetrad Las resoluciones disponibles para desplazamientos son potencias de dos (una restricción común para los amortiguadores de textura), la única coordenada guardada por vértice es la altura y los mapas de altura del terreno se representan como cuadrículas teseladas. La wiki también dice que el costo de representación de los desplazamientos es más bajo que el de la geometría regular. Creo que es justo suponer que son lo mismo con nombres diferentes.
Tamschi

1
@NickWiggill El significado de "voxel" parece haber cambiado bastante en los últimos 10 años. Voy con la definición actual de Wikipedia de vóxeles como valores en una cuadrícula 3D normal . La entrada en Outcast menciona la diferencia de significado. He agregado a mi respuesta para aclarar esto.
Tamschi

2
Nota al margen: El "terreno poligonal" también se denomina " Red Irregular Triangulada " ("TIN" para abreviar) en SIG; y usualmente requiere mucha menos memoria que una altura de la misma resolución efectiva, ya que no se molesta en registrar datos no esenciales o lugares donde no hay datos. El primer juego gótico lo usó (no estoy seguro de los otros).
Martin Sojka

8

Me gustaría señalar que ninguno de los términos que mencionó son mutuamente exclusivos: incluso podría tener un juego basado en vóxel que usara mapas de altura y se representara con polígonos.

  1. Los mapas de altura son representaciones bidimensionales de la altura del suelo en cada punto específico. A menudo se almacenan como imágenes en escala de grises, donde el brillo representa la altura de ese punto. Los Voxels son básicamente un mapa de bits 3D. Hay una variedad de técnicas utilizadas para representar un espacio vóxel.

  2. Puede crear un terreno liso con vóxeles, y no se limitan a los cubos. Una de ellas es utilizar un algoritmo como los cubos de marcha , que pueden convertir una representación de vóxel en una lista de polígonos.

  3. El que tenga menos triángulos representaría el más rápido: 3

  4. Los algoritmos fractales como el ruido Perlin se pueden usar para crear paisajes con muchos
    detalles. Las superficies paramétricas como los nurbs se pueden usar para crear terrenos lisos con pocos requisitos de almacenamiento permanente.

  5. Delta Force es un juego antiguo que usa vóxeles. Minecraft puede usar el almacenamiento de vóxel para representar el paisaje (inseguro). Sacrifice by Shiny es un juego que utiliza mapas de altura con buenos resultados. La mayoría de los juegos con paisajes usan terrenos de geometría.


1
Una nota, en el punto 3, mientras que la GPU solo se preocupa por el recuento de polígonos, todavía existe el lado de la generación de geometría de las cosas. La generación de geometría para un campo de vóxel suele ser un proceso más lento (los bloques / cubos de marcha son procesos más complejos) que el terreno de mapa de altura (que es un proceso simple) o basado en polígonos (que obviamente ya son datos de geometría). Editar: esto también depende de si desea que el terreno sea deformable.
Michael

Para el tercer punto ... Bueno, el mapa de altura todavía tiene que procesarse y solo entonces se forma en una geometría, ¿verdad? Teniendo eso en cuenta, ¿una malla poligonal sería un poco más rápida? ¿Podría señalar algunas de las técnicas utilizadas para renderizar vóxeles?
joltmode

2
Puede usar un sombreador de geometría para generar la malla desde un mapa de altura. De esta forma, solo almacena el mapa de altura y los parámetros, como la posición y la resolución, mientras se genera la geometría de cada cuadro en la tubería del sombreador. Es más rápido que los cubos en marcha y más lento que una malla poligonal. La ventaja de los mapas de altura es el bajo consumo de memoria: solo un poco más de 1/3 de lo que necesitaría una malla. La desventaja es que no es tan flexible (sin pequeños detalles, sin voladizos). Puede ajustar dinámicamente el detalle de la malla generada, pero esto provoca cambios en la geometría.
Tamschi

@Tamschi, si solo proporcionaras una respuesta, exactamente lo que estaba buscando. :)
joltmode

@ Tom Veré si puedo formatear esto y encontraré algunos ejemplos más.
Tamschi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.