Je viens de voir une vidéo sur ce que les éditeurs appellent la "prochaine étape majeure après l'invention de la 3D". Selon la personne qui en parle, ils utilisent une énorme quantité d' atomes regroupés en nuages au lieu de polygones, pour atteindre un niveau de détail illimité .
Ils ont fait de leur mieux pour rendre la vidéo compréhensible pour les personnes n'ayant aucune connaissance des techniques de rendu, et donc ou à d'autres fins ont omis tous les détails sur le fonctionnement de leur moteur.
Le niveau de détail de leur vidéo me semble assez impressionnant.
- Comment est-il possible de rendre des scènes en utilisant des atomes personnalisés au lieu de polygones sur le matériel actuel? (Vitesse, mémoire)
- Si cela est réel, pourquoi personne n'y a-t-il pensé jusqu'à présent?
En tant que développeur OpenGL, je suis vraiment dérouté par cela et j'aimerais vraiment entendre ce que les experts ont à dire. Par conséquent, je ne veux pas non plus que cela ressemble à une publicité bon marché et n'inclurai le lien vers la vidéo que sur demande, dans la section des commentaires.
Réponses:
C'est facile à faire. En utilisant un Octtree, vous divisez simplement le monde en morceaux progressivement plus petits jusqu'à ce que vous atteigniez le niveau de détail requis. Cela pourrait être la taille d'un grain de sable par exemple. Pensez à Minecraft poussé à l'extrême.
Que rendez-vous alors? Si le détail est suffisamment petit, vous pouvez envisager de rendre les blocs - les nœuds feuilles de l'octtree. D'autres options incluent des sphères ou même des primitives géométriques. Une couleur et une normale peuvent être stockées à chaque nœud, et pour une LOD réduite, on peut stocker des informations composites à des niveaux supérieurs de l'arbre.
Comment pouvez-vous gérer autant de données? Si l'arborescence est une structure de données réelle, plusieurs pointeurs peuvent référencer les mêmes sous-arbres, tout comme la réutilisation d'une texture, mais elle inclut également la géométrie. L'astuce consiste à obtenir autant de réutilisation que possible à tous les niveaux. Par exemple, si vous connectez 4 octants dans un arrangement tétraédrique tous au même nœud enfant à tous les niveaux, vous pouvez créer une très grande fractale sierpinsky 3D en utilisant presque aucune mémoire. La scène réelle sera bien sûr beaucoup plus grande.
Le problème est qu'il ne fonctionnera que pour la géométrie statique car une véritable animation nécessiterait la manipulation de toutes ces données à chaque image. Cependant, le rendu, en particulier avec le niveau de détail variable, ne pose aucun problème.
Comment rendre une telle chose? Je suis un grand fan du ray tracing, et il gère assez bien ce type de chose avec et sans GPU.
Tout cela est bien sûr de la spéculation. Je n'ai aucune information précise sur le cas dont vous parlez. Et maintenant pour quelque chose de lié mais différent:
Une énorme quantité de données rendues
EDIT Et voici celui que j'ai fait, mais j'ai délibérément modifié les normales pour rendre les cases plus apparentes:
Lapin de Stanford en voxels
Ce taux de trame était sur un seul cœur IIRC. Le doublement de la profondeur de l'arbre réduira généralement la fréquence d'images de moitié, tandis que l'utilisation de plusieurs cœurs évoluera bien. Normalement, je garde des primitives (triangles et autres) dans mon octtree, mais pour les sourires, j'avais décidé de rendre les nœuds foliaires de l'arbre lui-même dans ce cas. De meilleures performances peuvent être obtenues si vous optimisez autour d'une méthode spécifique bien sûr.
Quelque part sur ompf, il y a une voiture faite avec des voxels qui est vraiment fantastique - sauf qu'elle est statique. Je n'arrive pas à le trouver maintenant ...
la source
En regardant la vidéo, rien ne m'indique qu'un matériel spécial a été utilisé. En fait, il est indiqué que cela fonctionne dans un logiciel à 20 images par seconde, sauf si j'ai raté quelque chose.
Vous serez peut-être surpris de savoir cependant qu'il y a eu beaucoup de développements dans le rendu en temps réel en utilisant une variété de technologies telles que le lancer de rayons, le rendu de voxels et les éclaboussures de surface. Il est difficile de dire si ce qui a été utilisé dans ce cas. (Si vous êtes intéressé, consultez http://igad2.nhtv.nl/ompf2/ pour un excellent forum de traçage de rayons en temps réel, ou http://www.atomontage.com/ pour un moteur de voxel intéressant. Google "éclaboussures de surface" pour quelques excellents liens sur ce sujet)
Si vous regardez le film, vous remarquerez que toute la géométrie est statique et bien que détaillée, il y a beaucoup de répétitions d'objets, ce qui pourrait suggérer l'instanciation.
Et il y aura très probablement beaucoup d'abattage agressif, de niveaux de détail et de partitionnement d'espace en cours.
Si vous regardez la qualité visuelle (pas la complexité géométrique), cela n'a pas l'air si impressionnant. En fait, il semble assez plat. L'observation montrée peut être intégrée dans les données et ne pas être évaluée en temps réel.
J'aimerais voir une démo avec une géométrie animée et un éclairage dynamique.
À moins que je ne me trompe complètement (et ce ne serait pas la première fois que je me trompe), ma première réponse suggérerait une utilisation (peut-être très intelligente) de la technologie existante, peut-être optimisée et étendue pour créer cette démo. Mais en faire un moteur de jeu réel, avec toutes les autres tâches en plus du rendu de la géométrie statique qui comprend, c'est un tout autre jeu de balle.
Bien sûr, tout cela n'est que pure spéculation (ce qui me fait beaucoup de plaisir). Tout ce que je dis, c'est que ce n'est pas nécessairement un faux (en fait, je ne le pense pas et je suis toujours impressionné), mais probablement pas aussi révolutionnaire qu'ils le font sonner non plus.
la source
Ces atomes ne sont pas vraiment magiques / spéciaux / étrangers au matériel graphique actuel. C'est juste une sorte de nuage de points ou de rendu basé sur voxel. Ainsi, au lieu de triangles, ils rendent des points ou des boîtes, rien d'impossible avec le matériel actuel.
Cela a été et est déjà fait et n'est pas la super invention, mais ils ont peut-être trouvé une manière plus efficace de mémoriser et de gagner du temps. Bien que cela semble et semble assez intéressant, vous devriez prendre cette vidéo avec un grain de sel. Le rendu de 100 000 points au lieu d'un polygone entièrement texturé (qui ne prend déjà que quelques pixels à l'écran) n'améliore pas la qualité graphique d'un facteur de 100 000.
Et en passant, j'ai entendu dire que le logiciel id essayait également le rendu voxel accéléré par GPU, mais j'ai un peu plus confiance en John Carmack qu'en haut-parleur de cette vidéo :)
la source
C'était une arnaque à l'investissement.
Quant à l'idée, elle n'est pas réalisable sur le matériel non dédié actuel. Le nombre de points dont vous auriez besoin pour éviter les lacunes lorsque vous regardez quelque chose de près dépasse de loin le nombre de points que vous pourriez tirer dans la RAM d'aujourd'hui. Même si, je ne connais aucune structure de données ou algorithme de recherche qui produirait quoi que ce soit proche des performances affichées dans la démo. Et même si , en quelque sorte, il était possible de rechercher ces points en temps réel, les échecs de cache et la bande passante de la mémoire feraient en sorte que vous ne puissiez pas.
Je ne doute pas que de telles images ne puissent pas être obtenues en temps réel, mais pas avec la méthode présentée. Je suppose que les démos ont été rendues avec des voxels, qui ont été utilisés pendant des décennies et peuvent déjà produire des détails assez élevés en temps réel: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / watch? v = VpEpAFGplnI
la source
D'après ce que j'ai vu, il semble qu'ils utilisent des formes paramétriques au lieu de simples formes polygonales - en d'autres termes, ils changent la géométrie en fonction de la résolution requise.
Cela peut être fait en utilisant des techniques telles que les shaders de géométrie et le bruit perlin.
Une autre possibilité consiste à utiliser GPGPU (par exemple CUDA) pour rendre la scène, y compris les non-polygones et pour effectuer le lancer de rayons (pour l'ordre z et les ombres). Une autre possibilité est un matériel personnalisé qui rend les formules au lieu des triangles
la source
Je pense à toutes leurs affirmations, la compression de la mémoire semble être une exagération, je pourrais comprendre quelque chose comme la compression RLE ayant un grand impact. À la fin, je pense que ce système aura beaucoup de "avantages", mais beaucoup de "inconvénients", tout comme le lancer de rayons ou le rendu iso-surface avec des cubes en marche.
Jusqu'à rendre des «trillions» d'atomes; Je ne pense pas qu'ils disent cela. À la place, ils recherchent des atomes W * H, c'est-à-dire un atome par pixel sur l'écran. Cela pourrait être accompli de nombreuses manières lentes et difficiles. Certaines façons d'accélérer cela sont les arbres KD et les arbres BSP, les octrees, etc. à cause des ombres / reflets dans leur démo, c'est incroyable. Alors cudos!
la source
la façon dont cela fonctionne est beaucoup plus simple que vous ne le pensez, au lieu de précharger un niveau de jeu, il ne charge qu'un seul écran, un ou quelques atomes par pixel sur votre écran, rien de plus, le jeu / moteur prédit alors ce que le les images suivantes sont et c'est la seule chose chargée, seule la partie de l'objet visible est rendue, pas l'objet entier lui-même. AVANTAGES: autant de définition et de résolution que votre moniteur peut gérer, faible utilisation de la mémoire
la source