Cómo hacer un vóxel de aspecto natural

11

Estoy desarrollando un juego de vóxel, pero creo que uso la técnica incorrecta. Actualmente uso mosaicos planos, para hacer bloques, y creo que hay una manera mejor y más eficiente.

He visto un juego de voxel, que tiene un terreno de aspecto natural. Con eso quiero decir no en bloque. El juego tiene 4 * 4 * 4 bloques por metro cúbico, y bloques como tierra, arena y piedra, tienen bordes redondos y se derriten juntos (como en los juegos comunes). Heres una captura de pantalla ingrese la descripción de la imagen aquí

¿Cómo se logra esto?

KaareZ
fuente
¿Sabes qué juego es este? ¿Cómo puedes estar seguro de que son voxels? Ok, lo encontré yo mismo, el juego se llama Blockscape: indiedb.com/games/blockscape
Babis
Hay un blog en procworld.blogspot.com que tiene todo tipo de publicaciones detalladas sobre cómo se creó su motor de vóxeles. Las publicaciones se remontan a varios años desde que el motor estaba en la infancia hasta ahora cuando actualmente tiene licencia para Everquest Next.
stokastic

Respuestas:

14

Esto se logra interpolando rampas entre cubos de diferentes alturas.

Cuando tienes un escenario como este (visto desde un lado)

  #
 ####   ##
############

agregaría polígonos para que se vea así:

 /#\
/####\ /##\
############

Un algoritmo para calcular estas rampas es el algoritmo de cubos de marcha .

Cuando quiera que sea aún más hermoso, no solo use polígonos individuales para interpolar entre cubos, use curvas de múltiples polígonos. Pero tenga en cuenta que agregará una gran cantidad de polígonos a su escena, por lo que solo debe hacer esto para los cubos que están cerca de la cámara.

Philipp
fuente
¡Gracias! ¿Conoces un lugar que explique cómo hacer esto en OpenGL, Light Weight Java Game Library? Editar: Y si conoce una buena técnica sobre cómo agregar detección de colisión para el terreno de marcha, eso también sería apreciado.
KaareZ
@KaareZ Lo siento, nunca trabajé con LWJGL.
Philipp
@Philipp te puede interesar esta respuesta
1
O bien, puede omitir el cubo de marcha por completo e ir al frankpetterson.com/publications/dualcontour/dualcontour.pdf, mucho más interesante, menos complicado, también puede simplemente agregar la función de ruido como compensación al vértice del fragmento final. Todavía tiene bloque, pero ahora tienen la propiedad de colinas onduladas al no estar estrictamente alineados en una línea recta del atrio ... combinando contornos dobles y esto para un resultado aún más interesante (con un modificador en el desplazamiento del vértice para controlar una generación más o menos orgánica) .
user29244
forum.unity3d.com/attachments/captura-jpg.23795 aquí hay una imagen de "bloque rodante" (desplazamiento aplicado como desplazamiento vertical) Aquí hay más imágenes pero con desplazamiento aplicado en todas las direcciones forum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
user29244
6

Hay dos obstáculos que debes enfrentar para lograr una calidad similar a la de la imagen, la primera es artística y la segunda es técnica (memoria, procesamiento). Primero supongo que ya resolvió su problema artístico, puede hacer los modelos, el arte y los sombreadores, etc. (en parte porque no puedo responder a los problemas de arte)

El principal problema técnico es que al voxelizar esos modelos que creó con un alto nivel de detalle, terminará con una gran cantidad de pequeños vóxeles. Procesar y renderizar una gran cantidad de vóxeles no es trivial. La respuesta a esto se llama Octrees Sparse Voxel

SVO le dará la capacidad de renderizar modelos altamente detallados sin procesar todos los vóxeles, pero solo los visibles. Tenga en cuenta que para renderizar SVO necesitará usar una proyección de rayos en lugar de la técnica de rasterización habitual.

Más detalles sobre SVO en este documento

Aquí hay una implementación de código abierto con licencia BSD de SVO https://code.google.com/p/efficient-sparse-voxel-octrees/

Aquí hay un video que explica la representación basada en polígono vs SVO (pros y contras).

concepto3d
fuente
¡Esto es asombroso! Además, eche un vistazo a sauerbraten.org , utiliza una técnica similar (pero no implementa cubos de marcha, esa parte se deja al diseñador de niveles)
Kroltan