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
¿Cómo se logra esto?
opengl
rendering
voxels
terrain-rendering
KaareZ
fuente
fuente
Respuestas:
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.
fuente
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).
fuente