2009-06-12 8 views
31

J'ai beaucoup lu sur l'utilisation potentielle des octrees voxel clairsemés dans les futurs moteurs graphiques.que sont les octrees voxel clairsemés?

Cependant, je n'ai pas réussi à trouver d'informations techniques les concernant.

Je comprends ce qu'est un voxel, mais je ne sais pas ce que sont les octrees voxel clairsemés ou comment ils sont plus efficaces que les techniques polygonales utilisées actuellement.

Quelqu'un pourrait-il m'expliquer ou me suggérer une explication?

Répondre

26

Voici un extrait à propos de id Software on this subject.

id Tech 6 utilisera une technique plus avancée qui se base sur l'idée Megatexture et virtualise à la fois la géométrie et les textures pour obtenir géométrie unique à l'équivalent du texel: le Sparse Voxel Octree (SVO).

Il fonctionne en raycasting la géométrie représentée par voxels (au lieu de triangles) stockés dans un octree. Le but étant de pouvoir diffuser des parties de l'octree dans la mémoire vidéo, en descendant le long de l'arbre pour trouver des objets proches, et d'utiliser des voxels de plus haut niveau pour d'autres objets, ce qui donne un système de niveau de détail automatique (LOD) pour la géométrie et les textures en même temps.

également here's a paper on this.

trouvé plus d'informations dans ce great blog entry.

Eh bien, voxels seul sont pas intéressant, car pour tout modèle raisonnablement détaillés, vous auriez besoin des quantités extrêmement énormes de voxels (si en utilisant une grille uniforme). Donc, un système hiérarchique est nécessaire, ce qui nous amène à octrees. Un octree est une structure de données spatiales très simple, qui subdivise chaque nœud en 8 sous-nœuds de taille égale.

Un octree clairsemée est un octree où la plupart des noeuds sont vides, semblables aux matrices creuses que vous obtenez lorsque équations différentielles discrétisation

+0

J'ai lu cela avant mais cela ne donne pas vraiment de détails techniques durs. comme ce qui est «clairsemé» à propos des arbres? pourquoi octree et pas arbre binaire ou arbre 'hexa'? – pdeva

+0

Mis à jour avec un papier à ce sujet. –

+1

Ils sont appelés octree parce que l'espace est divisé en 8 sous-espaces de taille égale chaque fois. – schnaader

4

En fait, les 1,15 bits de me faire soupçonner qu'ils stockent juste des choses de manière séquentielle, d'une manière brillamment simple. c'est-à-dire, s'ils stockent uniquement les données de volume et non pas les données de couleur ou de texture. Pensez-y comme ceci: 1 voxel n'a besoin que d'1 bit: est-il là ou n'est-il pas là? (être ou ne pas être, en d'autres termes: P). le nœud d'octree dans lequel il est est fait de 8 voxels et un peu pour stocker si la chose contient quelque chose du tout. c'est un bit par voxel plus un par 8. 1 + 1/8 = 1,125. ajouter un autre nœud parent avec 7 frères et sœurs et vous obtenez 1 + 1/8 + 1/8/8 = 1,140625. suspicieusement près de la 1,15 ils ont mentionné. Bien que je sois probablement loin, cela peut donner une idée à quelqu'un.

+0

1 + 1/8 + 1/8/8 + 1/8/8/8 + 1/8/8/8/8 + 1/8/8/8/8/8 + 1/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8/8/8 = 1.14285714179277420043 – nonchip

+0

fait plus de calculs, 1.14285714285714285705 est la valeur la plus précise que j'obtiens avec la calculatrice de base GNU et mathlib. Je suppose que nous pouvons travailler avec ça. – nonchip

+0

@nonchip Somme de 0 à Inf (1/(8^n)) == 8/7 bits par voxel. Mais vous pouvez réellement faire mieux en représentant succinctement les coordonnées spatiales clairsemées avec 9/8 bits par voxel. Vous pouvez utiliser un tableau d'un tableau de 8 unités de 9 bits collectées de manière contiguë dans une super-unité de 72 bits (64 voxels). Dans l'unité 9 bits, le bit 0 bascule si le nœud octree descend plus profondément via ses 8 enfants (ce qui signifie une autre super-unité de 72 bits ajoutée au tableau) ou finit brusquement (permettant la parcimonie), avec les bits 1-8 basculant enfants voxels actuels . Indexe élégamment des coordonnées de voxel en couleurs/textures LUT. – user13972

1

Vous pouvez même simplement raster tous les points, vous avez besoin raytrace ou raycast de nos jours, car les cartes vidéo peuvent projeter des quantités obscènes de points. Vous utilisez un octree parce que c'est une forme de cube, divisant continuellement les cubes de plus en plus petits. (voxels) J'ai un moteur sur le chemin maintenant en utilisant une technique tramée et son aspect bien. Pour ceux qui disent que vous ne pouvez pas animer voxels, je pense qu'ils ont vraiment pensé beaucoup sur le sujet, bien sûr, c'est possible.Comme je le vois, faire le monde est beaucoup comme "3d-coat infini" alors cherchez 3D coat et le niveau de conception sera très similaire à la façon dont ce programme fonctionne. Les draw backs principaux impliquent que la vitesse de streaming n'est pas assez rapide, le lancer de rayons ou le tramage ne fait pas 60 fps, et le tracé des objets voxels est très coûteux en informatique, au moment où je peux tracer une sphère de 1024x1024x1024 pourrait être remédié, c'est un avenir passionnant. Ma taille maximale du monde en ce moment est un meg par un mégohm par un mégot, mais je pourrais en fait faire 8 fois plus grand que cela. Bien sûr, l'autre problème qui est en fait assez sérieux est qu'il faut environ 100 Mo pour stocker un caractère 8192x8192x8192 même après la compression, donc un environnement sera encore plus que cela. Même si, dire que vous allez avoir des personnages 8192x8192x8192 est complètement absurde par rapport à ce que nous voyons dans les jeux aujourd'hui ... un monde entier utilisé pour être 8192x8192x8192 :)

Comment le faire en stockant seulement des bits par pointeur est le pointeur sont construits au moment de l'exécution dans la mémoire vidéo ... ayez l'esprit autour de cela et vous pourriez avoir votre propre moteur. :)

17

un octree a 8 voisins parce que si vous imaginez un carré, qui a été coupé en 4 quartiers égaux comme si

______________ 
|  |  | 
|  |  | 
|_____|______| 
|  |  | 
|  |  | 
|_____|______| 

alors ce serait un "quad" (quatre) -tree.

mais en 3 dimensions, vous avez vous-même, un cube, plutôt un carré, coupant donc horizontalement, verticalement et le long de l'axe Z, vous trouverez 8 morceaux plutôt que 4 comme si

_____________ 
/ / /| 
    /-----/-----/ | 
/_____/_____/ | | 
|  |  | |/| 
|-----|-----|/| | 
|  |  | |/ 
|_____|_____|/ 

espoir qui fait depuis ..

ce qui rend l'unique, SVO, est qu'il stocke des informations Voxel, qui est un point dans l'espace, qui a des propriétés telles que la couleur, normal, etc ..

l'idée derrière SVO est d'ignorer les triangles, et le besoin de textures, en mettant t ourler ensemble dans un seul SVO qui contient la coque de triangle voxelized (le modèle), et ses textures de surface tout dans un objet.

La raison pour laquelle un Octo est nécessaire ici, est que par ailleurs une structure de grille uniforme, il faudrait beaucoup de beaucoup de mémoire pour les cartes graphiques existantes pour gérer ..

donc en utilisant la SVO permet une sorte de Mip-mappée 3D texture ..

mipmapping est fondamentalement la même image, mais à des échelles différence, celui qui a plus de détails, et le dernier qui a le moindre détail (mais regardez assez similaire à distance)

cette façon à proximité d'objets peut diffuser à partir du SVO avec plus de détails, tandis que d'autres flux d'objets avec moins de détails .. c'est Si vous utilisez Ray-Casting, plus le rayon de la caméra est éloigné, moins nous creusons dans notre Mega-Texture/SVO

Mais, si vous pensez sortir des sentiers battus comme "Euclideon" avec son "illimité" -détail ", vous utiliseriez juste tranchant de tronc, et l'intersection de plan/aabb, avec UV projeté de notre panneau d'affichage tranché pour trouver chaque couleur de texels sur l'écran, par opposition aux largeurs de * Width *, tirant sur les rayons, naïfs ". Post-scriptum (sorta hors sujet): pour ceux qui ne comprennent pas comment Euclideon fait leur shi, je crois que c'est la solution la plus pratique, et j'ai raison de le sauvegarder (qu'ils n'utilisent pas de lancer de rayon)

Le plus grand mystère qu'ils ont, ce n'est pas le rendu, mais le stockage de leurs données .. RLE ne le coupe tout simplement pas ..parce que certaines données de volume/voxel peuvent être plus aléatoires, et moins "solides" où RLE est inutile, aussi la compression de qui pour moi typiquement nécessite au moins 5 octets dans quoi que ce soit de moins. ils disent qu'ils sortie à peu près la moitié de ce qui est mis en) par leur compression .. ils utilisent 2,5 octets, ce qui est environ le même que d'un triangle maintenant-adays

Questions connexes