1 points par GN⁺ 2024-04-03 | 1 commentaires | Partager sur WhatsApp
  • CityGaussian (CityGS) est une méthode présentée à l’ECCV 2024 qui étend le 3D Gaussian Splatting (3DGS) à des scènes à l’échelle d’une ville, avec l’objectif d’améliorer à la fois l’efficacité de l’apprentissage et la qualité de l’exploration en temps réel
  • Pour surmonter la difficulté de traiter de grandes scènes en une seule fois, l’approche combine un apprentissage par division pour régner et une stratégie de niveau de détail (LoD)
  • En s’appuyant sur des informations globales préalables sur la scène et sur une sélection adaptative des données d’apprentissage, elle aligne plus efficacement les résultats appris bloc par bloc et les fusionne de manière fluide
  • Les primitives gaussiennes fusionnées sont compressées pour créer plusieurs niveaux de détail, puis le rendu sélectionne et agrège le niveau approprié pour chaque bloc
  • Sans LoD, représenter MatrixCity avec 25 millions de gaussiennes plafonne à 18 FPS sur un A100, tandis que CityGS avec LoD atteint un rendu en temps réel à 36 FPS en moyenne

Structure d’apprentissage et de rendu pour le 3DGS à grande échelle

  • Le 3D Gaussian Splatting (3DGS) a démontré ses points forts pour la reconstruction de scènes 3D en temps réel et la synthèse de nouveaux points de vue, mais l’apprentissage sur des scènes de grande taille et le rendu en temps réel à différentes échelles restent coûteux
  • CityGaussian aborde ce problème en deux étapes
    • Apprentissage par division pour régner : la scène à grande échelle est découpée en blocs pour être apprise plus efficacement
    • Stratégie LoD : seul le niveau de détail nécessaire est utilisé selon l’échelle d’observation afin d’accélérer le rendu
  • Les informations globales préalables sur la scène et la sélection adaptative des données d’apprentissage améliorent l’efficacité de l’apprentissage et aident à fusionner plus naturellement les fragments de scène séparés
  • Les primitives gaussiennes fusionnées passent par un processus de compression pour former plusieurs niveaux de détail
  • À l’étape de rendu, une stratégie de sélection et d’agrégation du niveau de détail par bloc permet une génération d’image rapide à plusieurs échelles

Performances et ressources publiques

  • Sans application du LoD, la scène MatrixCity est représentée par 25 millions de gaussiennes et mesurée à 18 FPS sur un A100
    • Cette vitesse est jugée insuffisante pour offrir une expérience de navigation fluide
  • CityGS avec LoD permet un rendu en temps réel même à des échelles très différentes, avec une moyenne de 36 FPS sur A100
  • Dans les expériences sur des scènes à grande échelle, CityGS affiche une qualité de rendu de tout premier plan et prend en charge un rendu temps réel cohérent sur de grandes scènes à différentes échelles
  • Ressources publiques

1 commentaires

 
GN⁺ 2024-04-03
Avis sur Hacker News
  • Vu que le nom du dataset de la vidéo est Matrix city, il est très probable qu’il ait été extrait de la démo Matrix d’Unreal Engine 5 publiée il y a quelques années
    Les points de vue sont très similaires, donc le rendu est photoréaliste, mais il ne semble pas provenir de vraies photos
    En cherchant davantage, c’était bien ça : https://city-super.github.io/matrixcity/

    • Comme Epic a racheté il y a quelque temps la société de photogrammétrie Quixel, il est probable qu’ils aient utilisé une bibliothèque d’assets scannés à partir de photos pour créer Matrix city
      Ce qui est amusant, c’est que l’article original reviendrait alors à reconstruire à nouveau des objets réels déjà reconstruits
    • Une partie des assets de la démo The Matrix Awakens a été publiée séparément sous forme de packs sur la marketplace Unreal Engine : [1] carte, [2] bâtiments·foule·véhicules
      La carte de MatrixCity est différente, mais elle ressemble dans une certaine mesure à celle de Matrix Awakens. On peut aussi le voir dans l’analyse de conception de [3] cette page écrite par le responsable technique du projet Matrix Awakens
      En allant plus loin, la section MatrixPlugin du code source GitHub [4] indique explicitement que le projet city-sample a été utilisé
      [1] https://www.unrealengine.com/marketplace/en-US/product/city-...
      [2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
      [3] https://quentinmarmier.artstation.com/projects/xYeKNO
      [4] https://github.com/city-super/MatrixCity
    • En utilisant des données issues d’un moteur de jeu, on peut obtenir une pose de caméra exacte correspondant à chaque image
      Cela facilite donc un peu l’entraînement de NeRF ou du Gaussian Splatting, car il n’y a pas d’erreur d’optimisation sur la pose de la caméra
      C’est aussi pour cette raison que les premiers articles sur NeRF utilisaient la célèbre pelleteuse Lego jaune rendue avec Blender
    • S’il existe déjà une scène Unreal Engine entièrement modélisée, je me demande s’il ne serait pas possible de générer les splats sans phase d’entraînement
      Pour une scène comme Matrix city, il ne semble pas nécessaire de passer beaucoup de temps à entraîner un modèle juste pour reproduire les données
    • Toutes les vidéos ne viennent pas de Matrix City, certaines montrent aussi des lieux réels
  • J’ai essayé ce week-end d’assembler le mesh 3D Tiles de Google Maps avec du Gaussian Splatting ; ce n’est pas exactement la même chose, mais l’effet était assez proche et utile
    Exemple 1 avec code lié : https://twitter.com/kfarr/status/1773934700878561396
    Exemple 2 : https://twitter.com/3dstreetapp/status/1775203540442697782

    • C’est vraiment impressionnant ; je me demande s’il existe un GitHub avec le code
      Une erreur apparaît dans les outils de développement sur le premier lien
      Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>;)...
    • Je bricolais justement avec Aframe et les contours de bâtiments OSM, mais cette approche semble bien meilleure
      Je vais regarder aframe-loader-3dtiles-component
    • Pour les personnes qui n’utilisent pas xitter, ce serait bien de publier aussi ici le lien vers le dépôt du code
  • « Vitesse moyenne de 36 FPS (testé sur A100) » : on dirait que « temps réel » veut dire qu’il faut un GPU à 8 000 $

    • C’est du temps réel version SIGGRAPH à l’ancienne
      Quand un article de graphisme affirme avoir atteint des performances en temps réel, il faut toujours vérifier si c’est vraiment du temps réel, ou bien du genre « 20 fps en 640x480 sur le matériel le plus cher qu’on puisse acheter »
      Si on baisse assez le niveau d’exigence, tout peut devenir temps réel
    • Cela semble être le premier 3DGS à utiliser des LOD et des blocs, donc il y a peut-être encore de la marge pour l’optimiser
      Ça pourrait devenir utile pour des usages comme la production virtuelle, mais sans doute pas pour le mobile
    • Ça me rappelle les anciens benchmarks GPU qui tournaient à 10 fps lors de leur sortie, avant que les choses changent avec le temps
      https://www.techpowerup.com/forums/attachments/all-cards-png...
    • Malheureusement, beaucoup de recherches 3DGS/NeRF fonctionnent ainsi
      Si vous voulez quelque chose qui tourne sur un ordinateur portable vieux de 10 ans, voire sans GPU, regardez https://github.com/pierotofy/OpenSplat. C’est moi qui l’ai créé
    • Le GPU grand public de prochaine génération, le 5090, sera probablement deux fois plus rapide qu’un A100 sans coûter 8 000 $
      Donc cela ne semble pas être un problème insurmontable
  • Quelqu’un peut-il me convaincre que le 3D Gaussian splatting n’est pas une impasse ?
    Le rendu est bien trop lent, d’un facteur à un chiffre, et les données sont aussi bien trop volumineuses, d’un facteur à un chiffre. Ça donne l’impression de revoir l’opposition entre rastérisation et ray tracing.
    La rastérisation sera toujours plus rapide que le ray tracing, et si le ray tracing devient 10 fois plus rapide, la rastérisation le deviendra aussi 10 fois
    Générer une géométrie et des matériaux traditionnels à partir d’un nuage de points gaussiens peut être intéressant. Mais la photogrammétrie existe déjà depuis longtemps
    Essayer de rendre en temps réel une ville gigantesque avec des splats ne donne pas l’impression d’aller dans la “bonne direction”
    C’est cool, amusant et intéressant, mais je ne sais pas si ça deviendra vraiment utile. Je pose sérieusement la question, je ne suis pas expert

    • Le potentiel est énorme. C’est une approche différente, mais proche des technologies brevetées utilisées dans Unreal Engine
      La plupart des recherches actuelles ne se concentrent pas sur les performances, et il n’existe même pas encore de consensus sur un format unifié, y compris pour la compression
      Le potentiel d’optimisation est très clair, et c’est aussi facile à adapter à différents appareils. Un peu comme les LOD de nuages de points ou le culling de meshes
      Les performances des splats peuvent être un avantage compétitif temporaire pour certains viewers, mais comme le décodage vidéo ou d’autres standards 3D se sont diffusés en open source, il est très probable que, dans quelques années, l’affichage de splats de haute qualité à fréquence d’images élevée devienne une exigence de base sur la plupart des appareils
      La vraie question ensuite, c’est : à quoi va-t-on s’en servir ?
    • Ce n’est pas lent d’un facteur à un chiffre. Même aujourd’hui, on obtient facilement 200~400fps dans Unreal ou Unity
      Plus de 100 fps dans le navigateur : https://current-exhibition.com/laboratorio31/
      900 fps : https://m-niemeyer.github.io/radsplat/
      Les moteurs traditionnels cumulent 30 ans de R&D, donc il faudra du temps pour que les outils et les optimisations rattrapent leur niveau
      Mais quand on regarde d’où sortent les papiers, on voit souvent Apple et Meta, et ça ressemble à la technologie qui fera tourner l’ère du métavers / spatial computing que ces deux entreprises poussent
      La capacité à transformer des contenus à très faible coût de production, comme des vidéos d’iPhone, en environnements 3D va balayer une grande partie de la R&D des approches traditionnelles
    • La photogrammétrie rencontre des difficultés avec certains matériaux, comme les surfaces réfléchissantes
      Elle a aussi beaucoup de mal à capturer les détails fins comme les structures minces ou les cheveux. La 3DGS est bonne sur ce terrain
      Des recherches sont en cours pour améliorer ses faiblesses actuelles, y compris des méthodes d’extraction de meshes utilisables dans les pipelines graphiques traditionnels
    • En matière de réalisme pour reconstruire le monde réel en 3D crédible, il n’y a actuellement presque rien de comparable
      La photogrammétrie ne fonctionne bien que quand les données de surface sont propres, alors que les Gaussian splats excellent sur des données semi-volumétriques comme la fourrure, la végétation, les particules ou les surfaces rugueuses
      Ils conviennent aussi bien aux surfaces brillantes ou réfléchissantes, aux volumes aux propriétés de surface très fragmentées, et aux matériaux fortement dépendants du point de vue
    • La question importante, c’est : impasse pour quoi faire ?
      Pour des usages relevant d’une vraie photo 3D complète, c’est plutôt génial et c’est un cas d’usage tout à fait valable
      Pour un moteur de jeu 3D, j’ai l’impression qu’il est difficile de manipuler dynamiquement les primitives de base comme le demandent les moteurs de jeu. Il y aura d’autres tentatives, mais sous cet angle les gaussiennes ressemblent davantage à un format de rendu final qu’à une représentation intermédiaire utile
      Pour un usage pratique dans un moteur, il faudra inventer autre chose pour combler l’écart, et il reste encore beaucoup de questions ouvertes
      Je ne sais pas pour les autres usages, mais le monde ne se résume pas aux jeux 3D et aux effets visuels
  • Il y a tellement de choses portant le nom de Gauss, et le fait qu’on continue à en créer de nouvelles, comme le Gaussian splatting, rappelle de façon assez amusante à quel point Gauss a influencé de nombreux domaines
    Ce n’est pas lui qui l’a inventé directement, mais il a énormément contribué aux mathématiques derrière tout ça

  • J’ai hâte de voir sous quelle licence ce sera publié
    J’aimerais voir un jeu open source qui utilise ça

    • Indépendamment des performances, pour l’utiliser réellement dans un jeu, il faut d’abord trouver une méthode généralisée pour rendre la scène dynamique
      L’histoire est pleine d’approches qui semblaient prometteuses comme alternative aux meshes triangulaires, avant de disparaître quand on s’est aperçu qu’il n’existait pas de moyen efficace de les animer
    • C’est fondamentalement un très grand nuage de points composé de points aux formes étranges, donc c’est vraiment difficile
      Les objets dans le nuage de points n’embarquent pas de métadonnées intrinsèques du type “chaise, table, personne”, donc toute interaction devient très compliquée
      Ce n’est pas impossible, mais ce n’est pas pratique aujourd’hui
      Et en plus, ce n’est pas particulièrement optimisé pour le rendu temps réel. Même avec beaucoup de points élagués, utiliser un mesh basse résolution est bien plus efficace
  • Ça n’a pas l’air beaucoup mieux que quelque chose comme Cities: Skylines
    Il n’y a ni zoom avant ni zoom arrière, et on voit toujours des frames très limitées, donc est-ce que je rate quelque chose ?

    • Les autres réponses donnent l’impression d’avoir été écrites sans réelle réflexion ni recherche
      Le papier renvoie à plusieurs reprises à MatrixCity, et https://city-super.github.io/matrixcity/ — trouvé aussi par quelqu’un plus haut — indique clairement qu’il s’agit de données entièrement synthétiques
      Si j’ai bien compris, elles sont extraites d’Unreal Engine
    • Ce n’est pas du rendu de jeu, c’est de la reconstruction 3D
    • Je pense que c’est rendu à partir de photos
    • Ce n’est pas un moteur de jeu, c’est la conversion de vraies photos en points de vue 3D gaussiens
  • J’apprends avec pygame et je me demande comment ajouter du motion blur dans un jeu
    Par exemple, si je crée Mario avec pygame, j’aimerais qu’il paraisse flou quand il saute
    Je pourrais faire une version floue de Mario en prenant la moyenne de 9 pixels, mais je ne sais pas si c’est aussi comme ça qu’on fait d’habitude dans d’autres jeux
    Beaucoup de jeux sont aussi très nets sans motion blur, donc je me demande si c’est réellement utilisé
    C’est un élément assez important au cinéma, et ça me fait aussi penser qu’il faut filmer à 25 fps pour obtenir un motion blur cinématographique

    • Il suffit de rendre les vecteurs de mouvement de l’objet dans une autre texture de rendu
      Autrement dit, on calcule la vitesse de chaque objet, on la rend sous forme de couleur, puis on l’utilise à l’étape de post-traitement pour déterminer l’intensité et la direction de l’effet de flou
      Il peut aussi falloir prendre en compte le mouvement par rapport à la caméra. Pour Mario, probablement pas, mais dans un FPS, on voudra que les bords de l’écran deviennent flous quand la caméra avance
  • Ressource associée : https://city-super.github.io/octree-gs/

  • C’est une approche assez avancée pour rendre de plus grandes scènes avec des gaussiennes 3D, donc j’ai hâte de tester le code dès sa publication