2011-10-12 23 views
5

Recientemente comencé a desarrollar el motor de vóxeles. Lo que necesito son solo vóxeles coloridos sin textura, pero en gran cantidad (mucho más pequeños que Minecraft) - y la pregunta es ¿cómo dibujar la escena muy rápido? Estoy usando C#/xna, pero esto en mi opinión no es muy importante en este caso, hablemos de casos generales. Mira estos dos juegos:Voxel Engine and Optimization

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com/watch?v=in0bavLJ8KQ

Especialmente creo número de vídeo 2 representa grandes métodos de optimización (mi tarjeta de GFX comienza asfixia solo a 192 x 192 x 64) ¿Cómo logran ¿esta?

lo que iba a tener en el motor:

  • voxels de colores sin textura, pero la sombra
    • muchos, muchos voxels, digamos mínima de 512 x 512 x 128 para lograr algo así como video # 2
    • sombras (sombras suaves serán grandes, pero esto no es necesario)
    • opcional: dinámica de iluminación (por ejemplo, de bolas de fuego que vuelan, que se encienden cerca de estructuras voxel)
    • tasa de fotogramas mínimo 40 FPS
    • cámara tener 3 formas de libertad (movimiento en el eje x, se mueven en el eje y, se mueven en el eje z), no se necesita rotación de la cámara
    • característica finalmente opcional puede ser Profundidad de El campo (será dulce ^^)

lo optimización ya he saber:

  • eliminar los voxels invisibles que reside dentro de la estructura del voxel (cubierto fr om seis direcciones por otros voxels)
    • eliminar caras invisibles de los voxels - porque la cámara no tienen rotación y siempre se ven oblicuamente hacia delante como en los juegos de TPP, por lo que si dividimos la pantalla por corte vertical, a la izquierda voxels y voxels derecha mostrará sólo 3 caras
    • mantienen voxels en el diccionario en lugar de la matriz de 3 dimensiones - saltando a través matriz de tamaño 512 x 512 x 128 toma milisegundos que es inaceptable - pero diccionario int: Color de donde int describe embalado posición 3D es mucho, mucho más rápido
    • use instancing donde se puede aplicar
    • oclusión? (Cómo hacer esto?)
    • espacio de separación/octtree (¿es buena idea?)

estaré muy agradecido si alguien me da una propina cómo mejorar optimizaciones existentes, que aparecen por encima o puede compartir ideas de nuevas mejoras. Gracias

+2

Tenga en cuenta que ambos videos muestran motores que no parecen ser compatibles con la rotación. Además, el segundo video probablemente use vallas publicitarias para los objetos desenfocados en lugar de los objetos voxel. – Skizz

Respuesta

8

1) Voxatron utiliza un procesador de software en lugar de la GPU.Usted puede leer algunos detalles sobre él si usted lee los comentarios en esta entrada del blog:

http://www.lexaloffle.com/bbs/?tid=201

No he mirado en detalle a mí mismo por lo que no se puede decir mucho más que eso.

2) Nunca he jugado a 3D Dot Game Heroes, pero no tengo ninguna razón para creer que use voxels en absoluto. Quiero decir, no veo ningún cubo que se agregue o elimine. Lo más probable es que solo sea una malla poligonal estática con una textura agradable aplicada.

En cuanto a implementarlo usted mismo, no intente dibujar el mundo representando cubos, ya que es muy lento. En su lugar, debe procesar el volumen y generar mallas que se encuentran en la intersección de los vóxeles sólidos y los vacíos. Divida el volumen en regiones de tamaño adecuado (por ejemplo, 32x32x32) y genere una malla para cada una.

He escrito un artículo sobre este libro que puede serle útil. En realidad, se trata de Voxel terain sin problemas, pero muchos de los principios se aplicarán.

Se puede leer en los libros de Google aquí: http://books.google.com/books?id=WNfD2u8nIlIC&lpg=PR1&dq=game%20engine%20gems&pg=PA39#v=onepage&q&f=false

Y se puede encontrar el código fuente asociado aquí: http://www.thermite3d.org

2

dado que está utilizando XNA, sólo puede utilizar la creación de instancias para obtener el efecto deseado: http://www.float4x4.net/index.php/2010/06/hardware-instancing-in-xna/ http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/

El concepto subyacente es la creación de instancias: esta función le permite especificar cierta cantidad de datos repetitivos y cierta cantidad de va rying datos en una sola llamada DrawIndexedPrimitive. En su caso, la secuencia de instancia sería un único cuadro sólido, y la otra secuencia sería la información de transformación y color.