Raytracing temps-réel

Cette discussion a été créée à partir de réponses séparées de : $coin.

Réponses

  • C'est carrément pas mon truc la création graphique :(
    Mais par curiosité... dernière fois que j'ai essayé la 3D c'était avec povray sur un 386DX40, 1 semaine pour calculer un bête échiquier au format VGA. Ca doit aller un peu plus vite maintenant :D

  • DrakenDraken Membre
    août 2019 modifié #3

    @Harlo a dit :smile:
    Mais par curiosité... dernière fois que j'ai essayé la 3D c'était avec povray sur un 386DX40, 1 semaine pour calculer un bête échiquier au format VGA. Ca doit aller un peu plus vite maintenant :D

    Un peu, oui ..
    Les nouvelles cartes graphiques RTX de NVIDIA ont des capacités de Ray-Tracing en temps réel. La RTX 2070 peut calculer 5 millions de rayons à la seconde ..

    Une petite vidéo montrant ce que peut faire le moteur graphique Unity avec une carte NVIDIA RTX :
    https://unity.com/ray-tracing

  • klogklog Membre
    août 2019 modifié #4

    @Draken a dit :
    Les nouvelles cartes graphiques RTX de NVIDIA ont des capacités de Ray-Tracing en temps réel. La RTX 2070 peut calculer 5 millions de rayons à la seconde ..

    Je crois que c'est plutôt 5 milliards de rayons par seconde...

  • klogklog Membre
    août 2019 modifié #5

    @klog a dit :

    @Draken a dit :
    Les nouvelles cartes graphiques RTX de NVIDIA ont des capacités de Ray-Tracing en temps réel. La RTX 2070 peut calculer 5 millions de rayons à la seconde ..

    Je crois que c'est plutôt 5 milliards de rayons par seconde...

    Et je crois avoir lu qu'il s'agit de rayons "virtuels", et non effectifs (on tourne plutôt au dessus de 700 mega rays / sec). Nvidia inclut visiblement dans son calcul les capacités du denoiser qui permettrait d'obtenir un bon résultat visuel similaire à du 6 giga rays/sec.

    C'est visiblement pour cela que le ray tracing temps réel vanté reste pour le moment hybride (mélange rasterisation et ray tracing) alors que si on avait vraiment 6 giga rays/sec, on aurait grosso modo 80 rayons par pixel, largement suffisant pour un rendu ray tracing pur (sans rasterisation).

    Et pour info, hors le RTX de NVidia, une Radeon Vega (sans module dédié sur le GPU) est par exemple à environ 400 mega rays par sec.

    Mais bon, ces valeurs marketings ne veulent pas dire grand chose, parce qu'on en sait rien de la scene utilisée pour les engendrer. On peut facilement obtenir ce genre de chiffre avec un seul triangle. Tout dépend après de la qualité de la BVH (bounding volume hierarchy) générée, de la complexité de la scène, de la quantité d'éléments animés, du nombre de sources lumineuses, des matériaux, etc.

  • Le plus simple pour se faire une idée c’est de regarder ce que cela donne sur les jeux vidéos. On est très loin d’un vrai Ray-Traycing. Les démos technologiques avec un seul objet et un environnement simple sont impressionnantes, mais non représentatives de l’utilisation réel.

    La puissance de calcul n’étant pas suffisante pour calculer toute l’image en RT, seules les surfaces réfléchissantes en bénéficient (reflets sur les flasques d’eau, les vitres et les carrosseries de véhicules). Il paraît que les ombres sont améliorées aussi, mais je n’ai rien vu de flagrant.

    Visuellement c’est un petit plus sympathique, mais pas un saut quantique dans la qualité graphique.

  • CéroceCéroce Membre, Modérateur
    août 2019 modifié #7

    @klog a dit :

    Et je crois avoir lu qu'il s'agit de rayons "virtuels", et non effectifs (on tourne plutôt au dessus de 700 mega rays / sec). Nvidia inclut visiblement dans son calcul les capacités du denoiser qui permettrait d'obtenir un bon résultat visuel similaire à du 6 giga rays/sec.

    Effectivement, si on fait le calcul pour du Full HD @ 60 images/s, ça nous fait réellement 700 * 10^6 / (1920*1080)/60 ~= 5,63 rayons/pixel.

    Les démonstrations dans les moteurs hybrides montrent que ça permet déjà de calculer les réflexions et une illumination globale pour une source de lumière. Pas si mal!

    C'est visiblement pour cela que le ray tracing temps réel vanté reste pour le moment hybride (mélange rasterisation et ray tracing) alors que si on avait vraiment 6 giga rays/sec, on aurait grosso modo 80 rayons par pixel, largement suffisant pour un rendu ray tracing pur (sans rasterisation).

    Et encore; dans mes tests, il faut au moins 300 rayons/pixel pour un résultat propre. Ça peut passer dans une scène animée.

  • @klog a dit :

    @Draken a dit :
    Les nouvelles cartes graphiques RTX de NVIDIA ont des capacités de Ray-Tracing en temps réel. La RTX 2070 peut calculer 5 millions de rayons à la seconde ..

    Je crois que c'est plutôt 5 milliards de rayons par seconde...

    Oui, je suis fatigué moi. C’est 5 milliards de rayons en effet ( 5 GRayons dans la doc).

  • CéroceCéroce Membre, Modérateur

    @Harlo a dit :
    C'est carrément pas mon truc la création graphique :(
    Mais par curiosité... dernière fois que j'ai essayé la 3D c'était avec povray sur un 386DX40, 1 semaine pour calculer un bête échiquier au format VGA. Ca doit aller un peu plus vite maintenant :D

    Je pense que tu exagères un peu. POV avait calculé une sphère sur mon Atari ST en seulement une dizaine d'heures ;-)

  • Carrément pas, c'était super lent.
    Une simple sphère prenait moins de temps mais un jeu d'échec complet c'était vraiment pas rapide.

    Certainement pas optimisé non plus, je me souviens d'un shareware qui servait à émuler un coprocesseur 387 et avec lequel tu gagnais pas mal (limité à 15mn d'utilisation).

  • @Céroce a dit :

    Effectivement, si on fait le calcul pour du Full HD @ 60 images/s, ça nous fait réellement 70010^6 / (19201080)/60 ~= 5,63 rayons/pixel.

    C’est peu, d’autant plus que maintenant les constructeurs de cartes graphiques et les éditeurs de jeux vidéo ne parlent plus que du 4K. Cela ne fait même pas un rayon/pixel, d’où la limitation du RT à quelques objets dans les jeux.

    Les démonstrations dans les moteurs hybrides montrent que ça permet déjà de calculer les réflexions et une illumination globale pour une source de lumière. Pas si mal!

    Oui et non. C’est rien une source de lumière dans un jeu vidéo. Chaque explosion, tir de laser, tirs d’armes à feu, champs de force, sabres lasers, réacteurs de véhicules, etc. est une source de lumière temporaire.

  • CéroceCéroce Membre, Modérateur
    août 2019 modifié #12

    @Draken a dit :

    @Céroce a dit :
    Les démonstrations dans les moteurs hybrides montrent que ça permet déjà de calculer les réflexions et une illumination globale pour une source de lumière. Pas si mal!

    Oui et non. C’est rien une source de lumière dans un jeu vidéo. Chaque explosion, tir de laser, tirs d’armes à feu, champs de force, sabres lasers, réacteurs de véhicules, etc. est une source de lumière temporaire.

    Une seule source de lumière en illumination globale.
    https://www.gdcvault.com/play/1022392/NVIDIA-VXGI-Dynamic-Global-Illumination

  • klogklog Membre
    août 2019 modifié #13

    @Céroce a dit :
    Et encore; dans mes tests, il faut au moins 300 rayons/pixel pour un résultat propre. Ça peut passer dans une scène animée.

    Ne pas confondre rayons et samples... Si tu parles d'illumination globale par path tracing par exemple, effectivement il faut plus de 300 samples par pixels pour obtenir une illumination correcte. La force d'un denoiser (je vous invite à voir les résultats bluffants du denoiser gratuit d'Intel [Open Image Denoise], récemment intégré dans blender et Cinema 4D, et qui utilise du deep learning), c'est de limiter considérablement ce nombre de samples par pixel... Certains parlent déjà de résultats corrects avec un seul sample par pixel !

    Mais notre propos initial, faisait mention de ray tracing (pour les réflexions, les ombres, etc.), et non de path tracing. Un seul sample en path tracing engendre souvent des dizaines de rayons (rebond sur la matière, sources, etc.). Donc avec 80 rayons par pixel, on peut tout au plus générer 1 ou 2 samples de path tracing. Ce qui est assez peu.

    Au SIGGRAPH cette année, il y avait une conf qui pronostiquait du full path tracing temps réel dans un environnement dynamique modérément complexe en 2023... Pas si loin...

  • Imagine un jeu de combat où un camion d’essence explose dans une rue. La lumière vas s’étendre dans toute la scène.

    J’envisage de monter un nouveau PC Gamer. As-tu un conseil de carte vidéo pour faire joujou avec toutes ces nouveautés ? RTX 2070, RTX 2080 ou autre ?

  • CéroceCéroce Membre, Modérateur

    @klog a dit :

    @Céroce a dit :
    Et encore; dans mes tests, il faut au moins 300 rayons/pixel pour un résultat propre. Ça peut passer dans une scène animée.

    Ne pas confondre rayons et samples...

    Oui, tu as raison, j'ai confondu les deux. Ce sont bien 300 samples/pixel pour avoir quelque chose de propre.

    Certains parlent déjà de résultats corrects avec un seul sample par pixel !

    Sans vouloir dire que la techno n'a pas d'intérêt, actuellement ça produit comme des effets de vas-et-viens sur les textures. Soit les prochains algorithmes s'amélioreront sur les images animées, soit il faudra quand même calculer un peu plus d'échantillons pour que l'algo ait moins d'information à inventer.

  • @Céroce a dit :
    Sans vouloir dire que la techno n'a pas d'intérêt, actuellement ça produit comme des effets de vas-et-viens sur les textures. Soit les prochains algorithmes s'amélioreront sur les images animées, soit il faudra quand même calculer un peu plus d'échantillons pour que l'algo ait moins d'information à inventer.

    Oui c'est vrai : il y a encore des défauts en environnement dynamique (quoique certaines technos de denoising tiennent désormais compte des variations temporelles avec de très bons résultats)... Ce ne sera pas utilisé en production, mais plutôt pour les aperçus, facilitant grandement le travail de modélisation.

    Pour info, concernant les denoisers temporels, Apple en a intégré un dans ses performances shaders (MPSSVGFDenoiser). Je ne sais pas ce qu'il vaut vraiment, mais il est basé sur un algorithme assez récent (Spatiotemporal Variance Guided Filtering), dont on peut voir quelques résultats de recherche ici. Il y a encore quelques flickering et ce n'est pas, qualitativement, au niveau d'un denoiser avec deep learning comme celui d'Intel, mais on a un bon aperçu de ce qu'un seul sample peut déjà engendrer. La version 1.2 du denoiser d'Intel, prévu pour la fin de l'année devrait quant à elle intégrer la gestion du temps.

  • DrakenDraken Membre
    août 2019 modifié #17

    Faut-il s’attendre à la fin des triangles 3D dans 10-15 ans, remplacés par une modélisation à base de courbes de Béziers ?

    Il faut un nombre hallucinant de triangles pour décrire les surfaces complexes, notamment les objets organiques. Sans parler des objets mous dont la forme est modifiée par les interactions avec l’environnement, comme la neige, la boue ou la vase. Ou encore les surfaces liquides. Cela doit être nettement plus simple à gérer avec des objets composés de courbes de Béziers.

  • CéroceCéroce Membre, Modérateur
    août 2019 modifié #18

    @Draken a dit :
    Faut-il s’attendre à la fin des triangles 3D dans 10-15 ans, remplacés par une modélisation à base de courbes de Béziers ?

    Non.
    Je vais même te dire, la modélisation NURBS n'a pas trop la côte. Les courbes de Bézier se prêtent bien pour décrire les objets industriels, mais pas trop le reste.

    Ce qui progresse, c'est la photogrammétrie — donc les triangles. Avec l'avénement des jeux en «monde ouvert», les environnements deviennent de plus en plus vaste, et la difficulté est d'avoir une variété d'éléments suffisante, tout en maîtrisant les coûts de production. Pour l'instant, seuls les gros éditeurs de jeux ont leur propres banques d'objets photogrammétrés, mais il est probable que des entreprises proposeront des banques à la location prochainement.

    Il faut un nombre hallucinant de triangles pour décrire les surfaces complexes, notamment les objets organiques.

    Certes mais les courbes de Béziers ne sont pas particulière appropriées. Pense plutôt fractales et génération algorithmique.

    Par ailleurs, on dispose aujourd'hui d'un tas d'astuces. Par exemple, les maillages existent en plusieurs niveaux de détails (LODs) qui sont choisis par rapport à la distance à la caméra.

    Sans parler des objets mous dont la forme est modifiée par les interactions avec l’environnement, comme la neige, la boue ou la vase. Ou encore les surfaces liquides.

    À ma connaissance, les simulations de fluide calculent surtout des micro-sphères en collisions avec des formes simples — donc sphères et triangles!

  • @Céroce a dit :

    @Draken a dit :
    Faut-il s’attendre à la fin des triangles 3D dans 10-15 ans, remplacés par une modélisation à base de courbes de Béziers ?

    Non.
    Je vais même te dire, la modélisation NURBS n'a pas trop la côte. Les courbes de Bézier se prêtent bien pour décrire les objets industriels, mais pas trop le reste.

    Exact... Les méthodes de subdivision de surfaces (Catmull-Clark, Stam Loop, ...) sont bien plus facile à appréhender et à maintenir que les NURBS pour des formes "souples" (même s'il existe une techno [breveté - donc disponible dans 1 ou 2 modeleur tout au plus] pour mixer le meilleur de ces 2 mondes). Mais au bout du bout, en en arrive presque toujours au triangle (ou quadrilatère) comme primitive élémentaire.

    Dans l'autres sens (du général au particulier), la génération procédurale, les fractales ou le displacement ont le vent en poupe.

    En matière de solutions alternatives aux triangles, je vous invite quand même à jeter un oeil aux (fantastiques) travaux d'Inigo Quilez (iq sur ShaderToy / je vous conseille en particulier "Happy Jumping", "Sphere Gears", "Rainforest" ou "Volcanic", dans lesquels il n'y a pas il ne doit pas il y avoir beaucoup de triangles), qui pousse la géométrie descriptive et les primitives procédurales, les fractales, le raymarching et autres dans ses retranchements... Ce type est un dieu !

  • CéroceCéroce Membre, Modérateur

    @klog a dit :
    En matière de solutions alternatives aux triangles, je vous invite quand même à jeter un oeil aux (fantastiques) travaux d'Inigo Quilez qui pousse la géométrie descriptive et les primitives procédurales, les fractales, le raymarching et autres dans ses retranchements...

    Il est fantastique de partir d'une page blanche et de produire de telles images dans un fragment shader, donc uniquement en faisant travailler le GPU. Mais en même temps, le résultat est décevant: c'est lent et les scènes sont petites. On est quand même loin de ce qu'on peut obtenir avec des techniques traditionnelles.

  • C'est souvent lent sur nos Macs et leurs petits GPU pour portables...

  • CéroceCéroce Membre, Modérateur

    Les algorithmes sont lents, c'est pour cela qu'il faut un GPU puissant pour que ce soit fluide.

  • muqaddarmuqaddar Administrateur

    Quand je faisais de la 3D entre 1997 et 2003 pour situer, elles avaient pourtant la cote ces NURBS. Je me souviens du modeleur NURBS d'ElectricImage, CInema4D, Rhino3D, FormZ...

  • @muqaddar a dit :
    Quand je faisais de la 3D entre 1997 et 2003 pour situer, elles avaient pourtant la cote ces NURBS. Je me souviens du modeleur NURBS d'ElectricImage, CInema4D, Rhino3D, FormZ...

    Elles ont toujours la côte dans certains domaines industriels et dans le design, où la finalité reste industrielle. C'est lié à leurs adéquations naturelles avec la réalité technique des machines-outils (par exemple pour le trimming). Mais en termes de modélisation, elles sont beaucoup plus complexes à manipuler que les surfaces de subdivision. Particulièrement en ce qui concerne les raccords et leurs continuités.

    Les surfaces de subdivision, mises en lumière par Pixar et qui ont pris le dessus dans le jeu et la production cinématographique, produisent des résultats assez similaires en terme topologique, mais on lisse en partant d'un maillage de triangles et de quadrilatères quelconques (low poly)... Quoiqu'on fasse subir à ce maillage (y compris des déformations), qu'on le découpe, qu'on fasse des opérations booléennes, il continuera à produire une surface lisse. Du coup, un simple modeleur polygonal suffit et il est très difficile de mettre le lissage en défaut. Par contre, il y a peu de contrôle sur la courbure des surfaces générées, ce qui reste indispensable lors de processus de dessin industriel.

  • muqaddarmuqaddar Administrateur

    Je suis bien d'accord.
    Je me souviens avoir fait joujou avec les surfaces de subdivision dans Cinema4D quand ça a été implémenté.
    On partait d'un cube, et à force de divisions là où on voulait, on modélisait un personnage. ça peut aller très vite quand on connaît les raccourcis claviers des softs.

Connectez-vous ou Inscrivez-vous pour répondre.