Un peu de technique (octree, raycasting)...
Un arbre en informatique est une structure de données fréquemment utilisée car elle permet d’agencer ces données de façon hiérarchique. Tout le monde l’utilise de façon quotidienne sans même s’en rendre compte en manipulant les fichiers de son ordinateur, en effet les systèmes de fichiers emploient une structure arborescente : il y a la racine du disque dur qui contient plusieurs fils (les dossiers), eux même contiennent d’autres fils (des sous dossiers) et ainsi de suite jusqu’aux feuilles (les fichiers). Cet exemple devrait vous donner une idée intuitive d’un des intérêts de l’utilisation d’arbres : accéder aux éléments d’un arbre équilibré est nettement plus rapide que si tous les éléments étaient éparpillés.
Les nœuds d’un arbre peuvent avoir un nombre différents de fils : lorsqu’il y a au plus deux fils on parle d’arbre binaire, zéro ou quatre fils arbre quaternaire et enfin lorsqu’il y a zéro ou huit fils on parle d’arbre octal. Mais quel est l’intérêt de ces arbres dans le cas qui nous intéresse ? Jusqu’à présent nous utilisions les voxels selon une grille régulière ce qui en fait gaspillait énormément de données pour encoder du vide, les octrees permettent d’utiliser plus efficacement l’espace mémoire en utilisant la résolution la plus fine uniquement là où c’est nécessaire. Penser en 3 dimensions n’est pas la chose la plus aisée qui soit et n’est pas facile à représenter dans un article, nous allons donc commencer par présenter ça de façon bidimensionnelle.
Voici l’approximation du cercle, avec une grille de résolution 12 x 12. L’approximation est grossière faute d’une résolution suffisante et cependant une grosse quantité de cellules sont blanches et donc inutiles. Si nous utilisions un quadtree voilà ce que nous obtiendrions :
La construction du quatree est simple : on part de l’image initiale que l’on subdivise en deux selon les deux directions, nous obtenons quatre quadrants. Lorsqu’un quadrant est soit vide, soit entièrement plein l’algorithme s’arrête là. Si le quadrant n’est que partiellement rempli alors on subdivise de nouveau ce quadrant en quatre et ainsi de suite. L’algorithme s’arrête lorsque tous les quadrants sont homogènes c'est-à-dire uniformément vides ou pleins, ou plus traditionnellement lorsqu’une profondeur donné a été atteinte (dans l’exemple ci-dessus nous nous sommes arrêtés à une profondeur d’arbre de 4 c'est-à-dire une division de 16 dans chaque dimension). Comme vous pouvez le constater même avec notre exemple basique le résultat obtenu est un peu plus fidèle au cercle initial et pourtant nous utilisons moins de données (97 nœuds ou « cases » si vous préférez dans ce cas contre 122 avec la grille régulière). Un octree est une simple extension de cette technique à 3 dimensions.
En pratique le gain en espace mémoire à définition égale est un peu moins important qu’on pourrait le penser de prime abord, en effet dans le cas d’une grille régulière la position des voxels est implicite. A l’inverse dans le cas d’un octree chaque nœud doit conserver un « lien » vers chacun de ses fils. En pratique il faut donc pour chaque nœud conserver 8 pointeurs en plus de la couleur et de la normale du voxel.
Mais ce n’est qu’un petit inconvénient face aux nombreux autres avantages de l’octree, pour bien comprendre les apports les plus importants de l’octree il faut tout d’abord décrire la façon dont cette structure de donnée est affichée. Il existe plusieurs manières d’afficher des voxels mais la technique choisie par id Software est le raycasting, c’est celle-ci que nous allons décrire.
Raycasting
Tout comme le raytracing, le raycasting repose sur le lancer de rayons pour chacun des pixels de l’image, mais là où il diffère c’est que dès qu’une intersection a été trouvée l’algorithme s’arrête là et ne lance pas de rayons secondaires.
Par conséquent le raycasting est plus rapide que le raytracing car comme nous l’avons vu dans notre précédent article ce sont les rayons secondaires qui posent problèmes du fait de leurs accès mémoires. Autre avantage : calculer l’intersection de rayons avec les voxels est beaucoup plus rapide qu’avec des triangles. De plus il est inutile de construire une structure de données supplémentaires pour accélérer ces calculs d’intersection : l’octree est à la fois l’ensemble des données (géométrie et textures) et la structure d’accélération.




"Ces premiers résultats sont extrêmement prometteurs pour le matériel qui sera disponible à la sortie des jeux exploitant cette technique. [...] il y a de grandes chances pour que nous devions encore attendre 3/4 ans pour voir ce type de rendus se démocratiser."
Un peu rapide comme conclusion je trouve... A part Carmack, personne n'a annoncé un moteur massivement basé sur du stream de voxels. Et encore, il n'a rien confirmé, juste dis vers quoi il orientait ses recherches. Et Olik a quitté sa boite.
Carmack a déjà fait des pas en arrière. Par exemple en arretant l'utilisation des stencil shadow volume (depth-fail, le fameux Carmack's Reverse sur lequel il a tellement bossé) pour se rabattre sur des shadow maps avec l'idTech5.
Qu'en est il des éclairages? des interactions avec les shaders?
L'article est très clair, bien expliqué... compréhensible par tous, et de surcroit très intéressant. Merci!
Un peu rapide comme conclusion je trouve... A part Carmack, personne n'a annoncé un moteur massivement basé sur du stream de voxels.
Tout à fait la phrase est mal tournée, elle devrait plutôt être comprise dans le sens "SI cette technique devait à s'imposer il faudrait encore attendre 4 à 5 ans avant de voir des jeux l'exploiter"
Mais effectivement à l'heure actuelle c'est un gros point d'interrogation. Concernant les autres sociétés qui bossent sur du streaming de voxels je crois que Crytek a fait une présentation à la GDC où ils en parlent pour le futur du CryEngine même si là encore ça reste des travaux préliminaires.
http://www.gamasutra.com/php-bin/n [...] tory=24865
Tim Sweeney en a parlé aussi dernièrement à la conférence High Performance Graphics de cette année même s'il a l'air de son côté plus intéressé par REYES.
Qu'en est il des éclairages? des interactions avec les shaders?
Il n'y a pas franchement de différence avec ce qui se passe aujourd'hui : évidemment il n'y a plus la distinction vertex/geometry/pixel shader : lorsque le rayon intersecte un voxel à ce niveau là tu peux tout à fait exécuter un shader qui prend en entrée les paramètres de ton voxel : couleur/normal et autres informations que tu juges intéressantes d'y stocker et qui va ensuite calculer l'éclairage de la manière que tu veux. Vu que la structure serait a priori totalement statique dans un premier temps du moins, il est probable que l'éclairage soit précalculé et stocké directement dans l'octree (c'est déjà ce qu'id fait avec l'idTech 5 en stockant les informations d'éclairage statique dans la MegaTexture),
L'article est très clair, bien expliqué... compréhensible par tous, et de surcroit très intéressant. Merci!
Merci
ça intérêt à être sacrément optimiser !
Merci pour l'article
Merci pour l'article. D'ailleurs si on pouvait avoir un peu plus d'article de ce niveau, pas seulement pour les graphismes mais aussi pour l'audio souvent négligé - à bon entendeur...
Merci pour l'article. D'ailleurs si on pouvait avoir un peu plus d'article de ce niveau, pas seulement pour les graphismes mais aussi pour l'audio souvent négligé - à bon entendeur...
L'audio n'est pas vraiment négligé en terme d'environnement, c'est le coût qui est un frein monumental. Quand tu fais de la 3D, pas "difficile" d'octroyer une bonne machine à un développeur qui fera joujou sur Maya et consoeurs. A contrario, dès qu'on touche au son, c'est immédiatement des micros, des tables de mixages, des studios... et donc des coûts rapidement inabordables. bien sûr qu'il serait fantastique que le 5.1 et 7.1 actuel soient pris en charge et vraiment utilisés, mais combien de personnes en profiteront? C'est aussi ça, le problème: investir plusieurs millions pour 1% des joueurs cible?
super article , et vraiment clair et comprehensible , vu la complexité du sujet
Il y a quand même un problème de taille avec la perte du calcul de rayons secondaires! Bref une belle technique mais avec un vilain défaut.
)
Même si l'idée d'environnements destructibles et d'une physique beaucoup plus poussée m'a enthousiasmée quand j'ai compris le fonctionnement de ce rendu. Mais comme vous l'avez dit on peut encore rêver un moment avant ça. (le jour où on arrivera à produire des puces dont la trame sera faite de simples liaisons atomiques?!
I'm dreaming, mais ça fait atterrir et comprendre que dans quelques années ont pourra dire que finalement Crysis était bien loin d'un rendu photoréaliste (vidéoréaliste??), tout comme on peut penser cela quand on voit farcry qui était aussi dit photoréaliste à sa sortie.
En tout cas j'aime ces gens, ces sociétés qui travaillent vraiment à améliorer le rendu.
Merci pour l'article
@magellan, je suis d'accord avec toi, mais ne fut-il pas un temps où 1% des jeux étaient en 3D?
@magellan, je suis d'accord avec toi, mais ne fut-il pas un temps où 1% des jeux étaient en 3D?
L'audio n'est pas vraiment négligé en terme d'environnement, c'est le coût qui est un frein monumental. Quand tu fais de la 3D, pas "difficile" d'octroyer une bonne machine à un développeur qui fera joujou sur Maya et consoeurs. A contrario, dès qu'on touche au son, c'est immédiatement des micros, des tables de mixages, des studios... et donc des coûts rapidement inabordables. bien sûr qu'il serait fantastique que le 5.1 et 7.1 actuel soient pris en charge et vraiment utilisés, mais combien de personnes en profiteront? C'est aussi ça, le problème: investir plusieurs millions pour 1% des joueurs cible?
C'est dommage d'autant plus que les kits 5.1 ne coutent pas plus cher qu'une carte graphique haut de gamme.
Par exemple, le Logitech - Z-5500 Digital - 5.1 Certifié THX - 500W, le haut de gamme pourtant et un des meilleurs - qui peut, en plus, servir de home cinema -, est vendu à 216 € neuf sur Amazon. Face à une HD4870X2 à 340 € ou une GTX 295 MSI à 470 € mieux vaut prendre une "simple" 4870 avec ce kit 5.1... enfin, ce n'est que mon opinion...
Magellan : tu as raison ,mais on change beaucoup plus souvent de carte graphique que de systeme audio ,surtout sur le haut de gamme .... (ceci n'engage que moi)
A propos du son : perso, j'ai un kit 5.1 qui dort dans le garage, mon pc etant dans la salle a manger je ne peux pas m'en servir ... j'utilise donc un casque standard en 2.0 ... dommage car ma carte son intégré fait du 8.1 .........
les joueurs qui ont une piéce 'rien qu'a eux' et insonoriser pour jouer ne doit pas représenter bcp de monde