32 votes

que sont les octrois de voxel clairsemés?

J'ai beaucoup lu sur l'utilisation potentielle d'octrees de voxel clairsemés dans les futurs moteurs graphiques.

Cependant, je n'ai pas pu trouver d'informations techniques à leur sujet.

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

Quelqu'un pourrait-il expliquer ou m'indiquer une explication à cela?

26voto

Ólafur Waage Points 40104

Voici un extrait à propos de id Software sur ce sujet.

id Tech 6 va utiliser une technique plus avancée qui s'appuie sur la MegaTexture idée et virtualise à la fois la géométrie et les textures pour obtenir une géométrie unique à l'équivalent du texel: la faiblesse des Voxels de l'Octree (SVO).

Il fonctionne en raycasting la géométrie représentée par voxels (au lieu de triangles) stockées dans un octree.

Le but étant d'être en mesure de diffuser des parties de l'octree en mémoire vidéo, aller plus loin vers le bas le long de l'arbre pour des objets situés à proximité de leur donner plus de détails, et de les utiliser à un niveau supérieur, plus de voxels pour d'autres objets, ce qui donne automatiquement un niveau de détail (LOD) pour à la fois la géométrie et de textures dans le même temps.

Aussi , voici un article à ce sujet.

Trouver plus d'informations dans cette grande entrée de blog.

Ainsi, seuls les voxels ne sont pas intéressants, parce que pour tout raisonnablement détaillée de la modélisation, vous devez extrêmement énormes quantités de voxels (si utilisation d'une grille uniforme).

Ainsi, un système hiérarchique est nécessaire, ce qui nous amène à octrees. Un octree est très simple spatiale de la structure de données, qui subdivise chaque nœud en 8 également un grand sous-nœuds.

Un éparses de l'octree est un octree où la plupart des nœuds sont vides, similaire pour les matrices creuses que vous obtenez lors de la discrétisation des équations différentielles

20voto

Kyle Gibbar Points 111

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

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

ensuite, il serait un "quad"(quatre)-arbre.

mais en 3 dimensions, vous l'avez vous-même, un cube, plutôt que d'un carré, sorte de coupe à l'horizontale, à la verticale, et le long de l'axe Z, vous trouverez les 8 morceaux plutôt que 4 comme

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

j'espère que depuis..

ce qui fait la SVO unique, est qu'il stocke Voxel de l'information, 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, c'est ignorer les triangles, et de la nécessité de textures, en les mettant ensemble, en un seul SVO qui contient le Voxelized Triangle de la Coque(le Modèle), et de ses textures de surface tout en un objet.

La raison pour laquelle un Octree est nécessaire ici, c'est que sinon une grille uniforme de la structure nécessiterait beaucoup trop de mémoire pour les cartes graphiques à gérer..

donc, en utilisant la SVO permet une sorte de Mip-Mappé 3D de la Texture..

MipMapping est essentiellement la même image, mais à la différence des échelles, dont l'un a plus de détails, et la dernière qui a le moins de détails(mais l'air assez similaire à distance)

de cette façon, à proximité d'objets peut diffuser de la SVO avec plus de détails, tandis que d'autres objets de flux avec moins de détails.. c'est si vous êtes à l'aide de Ray-Casting.. le plus loin, le rayon de la caméra, du moins nous creuser dans notre Méga-Texture/SVO

Mais, si vous pensez à l'extérieur de la boîte comme "Euclideon" avec ses "illimité-détail", vous utilisez simplement frustum de découpage, et l'avion/aabb intersection, avec des projections UV de nos tranches de panneau d'affichage pour trouver chaque texels de la couleur sur l'écran, à l'opposé de la Largeur*Hauteur de pixels, le tir sur les rayons, grâce à la nvidia naïf "faisceau " optimisations".

PS(sorta hors sujet): pour ceux qui ne comprennent pas comment Euclideon ne leur shi, je crois que c'est la solution la plus pratique, et j'ai des raisons de le sauvegarder(qu'ils N'utilisent PAS de projection de rayons)

Le plus grand mystère qu'ils ont, n'est-ce pas le rendu, mais le stockage de leurs données.. RLE n'a tout simplement pas le couper.. parce que un peu de volume/voxel de données peut être plus aléatoire et moins "solide", où RLE est usless, également la compression de ce qui m'nécessite généralement au moins 5 octets dans rien de moins. ils disent qu'ils sortie à peu près la moitié de ce qui est mis dans l') par le biais de leur compression.. ils sont donc à l'aide de 2,5 octets, ce qui est environ le même que pour un Triangle de nos jours

8voto

XiaJun Points 734

Un livre blanc nVidia le décrit très en détail ~ http://www.nvidia.com/object/nvidia_research_pub_018.html

3voto

Martijn Dekker Points 39

en fait, l'1.15 bits de me rendre suspect ils ont juste stocker des choses de manière séquentielle, dans certains brillamment façon simple. c'est, si ils sont seulement de stocker les données de volume et pas des choses comme la couleur ou la texture de données.

penser comme ceci: 1 voxel ne doit être 1 peu: est-il ou n'est-il pas là? (être ou ne pas être, en d'autres mots :P). l'octree nœud, il s ' en est fait de 8 voxels et un peu de store pour savoir si la chose contient rien du tout. c'est un peu par voxel, plus un pour 8. 1 + 1/8 = 1,125. ajouter un autre nœud parent avec ses 7 frères et sœurs et vous obtenez 1 + 1/8 + 1/8/8 = 1,140625. étrangement proche de l'1.15 ils ont mentionné. même si je suis probablement loin, il peut donner à quelqu'un un indice.

1voto

Magnus Wootton Points 11

Vous pouvez même simplement raster tous les points, vous needent raytrace ou raycast ces jours-ci, depuis des cartes vidéo peuvent projet obscène quantités de points. Vous utilisez un octree parce que sa forme d'un cube, sans cesse en divisant faire de plus en plus petits cubes. (voxels) j'ai un moteur sur la voie maintenant à l'aide d'un rastered technique et sa recherche de bonnes. Pour ceux qui disent que tu ne peux pas animer les voxels je pense qu'ils ont vraiment pas beaucoup réfléchi sur le sujet, bien sûr possible. Comme je le vois, le monde est beaucoup comme "infini 3d-coat" afin de rechercher 3d coat et le level design est très similaire à la façon dont fonctionne ce programme. Main dessiner le dos impliquent vitesse de transmission en continu n'étant pas assez rapide, le raytracing ou rastering pas assez de prise de 60 fps, et de tracer le réel voxel objets est très gourmand en ressources, au moment où je peux tracer une 1024x1024x1024 sphère en environ 12 secondes, Mais tous ces problèmes pourraient être corrigées, son un avenir passionnant. Mon maximum taille du monde à l'heure actuelle est une meg par un meg par un meg, mais en fait je pourrais faire 8 fois plus grand que cela. Bien sûr, l'autre problème qui est en fait assez grave, c'est qu'il faut environ 100 meg pour stocker un 8192x8192x8192 personnage même après la compression, de sorte qu'un environnement seront bien plus que cela. Même si, en disant: vous allez avoir des personnages 8192x8192x8192 est complètement absurde par rapport à ce que nous voyons dans les jeux d'aujourd'hui... tout un monde, utilisé pour être 8192x8192x8192 :)

Comment vous le faire en ne sauvegardant que les bits par pointeur est les pointeurs sont construits lors de l'exécution dans la mémoire vidéo... obtenir votre esprit autour de cela, et vous pourriez avoir votre propre moteur. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X