graphics - smart - ¿Qué son los octrees voxel escasos?
voxel isotropico (5)
Aquí hay un fragmento sobre id Software sobre este tema.
id Tech 6 utilizará una técnica más avanzada que se basa en la idea de la MegaTextura y virtualiza tanto la geometría como las texturas para obtener una geometría única hasta el equivalente del texel: el Sparse Voxel Octree (SVO).
Funciona mediante el raycasting de la geometría representada por los vóxeles (en lugar de triángulos) almacenados en un octárbol.
El objetivo es poder transmitir partes del octárbol a la memoria de video, ir más abajo en el árbol de objetos cercanos para darles más detalles, y usar voxels de mayor nivel y más grandes para objetos adicionales, que dan un nivel automático de detalle (LOD) sistema para geometría y texturas al mismo tiempo.
También aquí hay un artículo sobre esto.
Encontré más información en esta gran entrada de blog.
Bueno, los vóxeles solos no son tan interesantes, porque para cualquier modelado razonablemente detallado, necesitarías cantidades extremadamente grandes de vóxeles (si se usa una cuadrícula uniforme).
Entonces, se necesita un sistema jerárquico, que nos lleve a octrees. Un octárbol es una estructura de datos espaciales muy simple, que subdivide cada nodo en 8 subnodos igualmente grandes.
Un octree escaso es un octree donde la mayoría de los nodos están vacíos, similar a las matrices dispersas que se obtienen al discretizar ecuaciones diferenciales
He leído mucho sobre el posible uso de octrees de vóxel dispersos en futuros motores de gráficos.
Sin embargo, no he podido encontrar información técnica sobre ellos.
Entiendo lo que es un vóxel, sin embargo, no sé qué son los vóxeles de vóxel dispersos o cómo son más eficientes que las técnicas poligonales en uso ahora.
¿Alguien podría explicarme o señalarme una explicación para esto?
Incluso puede rastrear todos los puntos, la trayectoria de rayos necesaria o raycast en estos días, ya que las tarjetas de video pueden proyectar cantidades obscenas de puntos. Usas un octree porque es una forma de cubo, dividiendo continuamente haciendo cubos cada vez más pequeños. (Voxels) Ahora tengo un motor en camino usando una técnica de raspado y se ve bien. Para aquellos que dicen que no puedes animar vóxeles, creo que realmente no han pensado mucho sobre el tema, por supuesto que es posible. Como yo lo veo, hacer que el mundo sea como "infinito 3d-coat", así que busque la capa 3d y el diseño del nivel será muy similar a la forma en que funciona este programa. Las desventajas principales implican que la velocidad de transmisión no es lo suficientemente rápida, el trazado de rayos o raspado no hace 60 fps, y trazar los objetos reales de vóxel es muy costoso desde el punto de vista informático, en el momento en que puedo trazar una esfera de 1024x1024x1024 en unos 12 segundos, pero todos estos problemas podría remediarse, es un futuro emocionante. Mi tamaño máximo mundial en este momento es un mego por un megohmio por un megohmio, pero en realidad podría hacerlo 8 veces más grande que esto. Por supuesto, el otro problema, que en realidad es bastante serio, es que se necesitan aproximadamente 100 megas para almacenar un carácter de 8192x8192x8192 incluso después de la compresión, por lo que un entorno será incluso mayor que este. Aunque decir que vas a tener personajes 8192x8192x8192 es completamente absurdo en comparación con lo que vemos hoy en los juegos ... un mundo entero solía ser 8192x8192x8192 :)
La forma en que lo hace almacenando solo los bits por puntero es que los punteros se construyen en el tiempo de ejecución en la memoria de video ... concéntrese en eso y podría tener su propio motor. :)
Un libro blanco de nVidia lo describe muy detallado ~ http://www.nvidia.com/object/nvidia_research_pub_018.html
de hecho, los 1.15 bits me hacen sospechar que simplemente almacenan cosas secuencialmente, de una manera brillantemente simple. es decir, si solo almacenan los datos de volumen y no cosas como los datos de color o textura también.
piénsalo de esta manera: 1 voxel solo necesita ser 1 bit: ¿está allí o no está allí? (ser o no ser, en otras palabras: P). el nodo octárbol en el que está está compuesto por 8 vóxeles y un bit para almacenar si la cosa contiene algo. eso es un bit por vóxel más uno por 8. 1 + 1/8 = 1.125. agrega otro nodo padre con 7 hermanos y obtienes 1 + 1/8 + 1/8/8 = 1,140625. sospechosamente cerca de los 1.15 que mencionaron. aunque probablemente estoy muy lejos, puede darle una pista a alguien.
un octree tiene 8 vecinos porque si imaginas un cuadrado, eso fue cortado en 4 cuartos iguales como
______________
| | |
| | |
|_____|______|
| | |
| | |
|_____|______|
entonces sería un árbol "quad" (cuatro).
pero en 3 dimensiones, tienes tú mismo, un cubo, en lugar de un cuadrado, por lo que cortarlo horizontalmente, verticalmente, y a lo largo del eje Z, encontrarás 8 trozos en lugar de 4 como tal
_____________
/ / / |
/-----/-----/ |
/_____/_____/ | |
| | | |/|
|-----|-----|/| |
| | | |/
|_____|_____|/
espero que lo haga desde ...
Lo que hace único al SVO es que almacena información de Voxel, que es un punto en el espacio, que tiene propiedades como Color, Normal, etc.
La idea detrás de SVO es ignorar los triángulos y la necesidad de texturas, al juntarlos en un solo SVO que contiene el casco del triángulo voxelizado (el modelo) y sus texturas superficiales, todo en un solo objeto.
La razón por la que se necesita un octárbol aquí, es que de lo contrario una estructura de grilla uniforme requeriría mucha memoria para las tarjetas gráficas existentes.
así que usar el SVO permite una especie de textura 3D Mip-Mapped ...
MipMapping básicamente es la misma imagen, pero a diferentes escalas, una que tiene más detalles y la última que tiene el menor detalle (pero parece bastante similar desde una distancia)
de esa manera, los objetos cercanos pueden transmitirse desde el SVO con mayor detalle, mientras que otros objetos se transmiten con menos detalles ... es decir, si usas Ray-Casting ... cuanto más alejado esté el rayo de la cámara, menos excavaremos en nuestro Mega -Textura / SVO
Pero, si piensas fuera de la caja como "Euclideon" con su "detalle ilimitado", solo usarías el corte de frustum, y la intersección de avión / avión, con el UV proyectado de nuestra valla en rodajas para encontrar cada color de téxeles en la pantalla, opuesto Ancho * Altura de píxeles, disparo de rayos, con las ingeniosas "optimizaciones de haz" de nvidia.
PD (fuera del tema): para cualquiera que no entienda cómo Euclideon hace su shi, creo que esa es la solución más práctica, y tengo razones para respaldarlo (que NO usan el ray colado)
El mayor misterio que tienen, no es el renderizado, sino el almacenamiento de sus datos ... RLE simplemente no lo corta ... porque algunos datos de volumen / voxel pueden ser más aleatorios, y menos "sólidos" donde RLE es inútil, también la compresión de que para mí normalmente requiere al menos 5 bytes en cualquier cosa menos. dicen que producen aproximadamente la mitad de lo que se coloca) a través de su compresión ... así que están usando 2.5 bytes, que es casi lo mismo que un triángulo ahora-adays