Unity – Visual SFM – [Capture Google Map – 3DS Max – 3D Ripper]

Publié le Publié dans Création 3D, Idées diverses

L’objectif est de capturer les formes 3D mappé des textures des immeubles de Google Map pour intégrer les immeubles dans une simulation.

  • Les importer ensuite dans Unity.
  • Le point de départ : cette video : recherche Youtube « Extract 3D GoogleEarth »
  • Besoin :
    • Autocad 3DS Max => Pierre prend une licence étudiant. [Installation]
    • 3D Ripper  :
    • GoogleEarth 6.1 DirectX 9 (voir 6.2 en théorie)
    • NB : Fonctionne de temps en temps quand on bascule de Plein écran à fenêtre (F11) et que l’on appuis rapidement plusieurs fois sur F12, éventuellement en réactivant la fenêtre (clic barre cadre Windows )
    • NB : Pas de plugin pour Autodesk 3DS Max 2012 =>
      • FUCK !!!!!
  • Recherche STEREO PHOTOGRAMETRIE :
    • Open source :http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.4-manual.html
      • Comme d’hab : compliqué, plein de sous programme/composant à télécharger et ne fonctionne que sous LINUX .
      • FUCK !!!!!
    • INSIGHT3D : http://insight3d.sourceforge.net/
      • Permet de synchroniser les photos et trouver l’angle de prise de vue de chaque photos.
      • Permet de définir des polygones sur lesquels seront mappé (avec la bonne anamorphose) les éléments des photos.
      • Pas mal, mais jusque là impossible à exporter …
      • FUCK !!!!!!!!
    • VisualSFM :
      • http://ccwu.me/vsfm/
      • le kit haute reconstruction dense : http://www.visual-experiments.com/demos/sfmtoolkit/
        • mettre les fichiers :
          • cmvs.exe
          • genOption.exe
          • PMVS2.exe
          • pthreadVC2.dll
        • Dans le répertoire de VisualFM
      • Une vidéo du process complet avec import dans Blender :
      • Visual SFM à besoin de série de photos, de préférence « contiguës » pour générer la 3D stéréo : il existe un logiciel qui à partir d’un film (.avi; .mpg) génère cette succession de photos (.jpg) : FFmpeg
      • Didacticiels :
      • http://wedidstuff.heavyimage.com/index.php/2013/07/12/open-source-photogrammetry-workflow/
      • https://www.youtube.com/watch?v=SHa_LBIzDac
      • http://www.academia.edu/3649828/Generating_a_Photogrammetric_model_using_VisualSFM_and_post-processing_with_Meshlab 
        1. Créer un fichier .txt avec la liste des photos à charger (1 photo par ligne, photos dans le même répertoire que ce fichier => pas de chemin à mettre)
          1. Script.bat a mettre à la racine du répertoire photo  :
          2. dir « C:\Users\Yves\Documents\VisualSFM\Warhamer\test modelisation 3D warhammer »  /B /O:NEG > listefiles.txt
          3. virer de la liste les fichiers non-image.
        2. Chargement image : File => fichier texte de la liste des photos.
        3. Synchro des image : SFM => Pairwise Matching =>
          1. Compute(/Update) Pairewise.
          2. Si photos séquentielles => Compute SequenceMatch
          3. Si fichier texte avec liste de paires : nom1.jpg[espace]nom2.jpg[retour chariot] => Compute Specified Match
        4. SFM => Reconstruct Sparce (faible densité)
        5. SFM => Reconstruct Dense (CMVS) => nom fichier TOTO (les répertoires de données seront crées au même endroit)
      • CMPMVS : s’associe à VisualSFM et travail sur les fichiers de sortie de VisualSFM
        • http://ptak.felk.cvut.cz/sfmservice/websfm.pl?menu=cmpmvs
        • Démo : avec Blender : https://www.youtube.com/watch?v=ZRTEMKS3Sw0
        • Dans SFM : au moment de la « Dense Reconstruction » Créer un repertoire en « CMP-MVS »
        • aller dans : « Chemin_vers_photos\Nom_du_repertoire_CMVS.nvm.cmp\00 »
        • On y trouve le fichier « mvs.ini »
        • Nb installation en « C:\Program Files (x86)\CMPMVS_0_6_0 » sur mon PC, le programme « CMPMVS.exe  » sera lancé de ce répertoire en DOS.
        • Lancer le traitement avec la commande  :
        • CMPMVS « Chemin_vers_photos\Nom_du_repertoire_CMVS.nvm.cmp\00\mvs.ini »
        • allez dans :
        • « Chemin_vers_photos\Nom_du_repertoire_CMVS.nvm.cmp\00\data\_OUT\
        • On y trouve :
          • un fichier « video.avi » qui donne un bon aperçu de la réalisation.
          • des fichiers .ply et .wrl qui pourront être importés dans Meshlab (ou bien unity directement ?)
          • un répertoire : « \Simplified10\ » où se trouve les mêmes fichiers dans une résolution réduite par un facteur de 10.
      • MESHLAB avec CMPMVS
        • Dans MESHLAB => File => Open Project =>  dans le repertoire Chemin_vers_photos\Nom_du_repertoire_CMVS.nvm.cmp\00\data\_OUT\meshTextured.wrl« 
        • Supprimer les mesh des caméras (boutons vers la droite : commentaires au survol ci-dessous)
          • Select Vertexes + selection de la zone rectangulaire
          • Delete the current set of vertices
        • Export Mesh as (relever les fichiers de texture) :
          • soit .obj
          • Soit .dae (Pbs avec texture : tout noir)
          • Soit .dfx
      • MESHLAB sans CMPMVS

        1. Dans MESHLAB => File => Open Project =>  dans le repertoire TOTOMvs.nvm.cmvs => 00 (1 rep par 50 photos) fichier : bundle.rd.out Puis le fichier texte de la liste des photos utilisées dans VisualFM
        2. Cela ouvre les points et les photos avec les points mappés dessus (en mode Sparce)
        3. Détruire cette Mesh: clic droit Delete Current Mesh
        4. Remplacer par la Dense : File => Import Mesh => TOTOMvs.nvm.cmvs => 00 => model => option-0000.ply.
        5. Si plus de 50 photos => plusieurs fichiers .ply , les importer et les fusionner. Clic Droit sur l’une des mesh : Flatten Visible Layers (check Keep Unreferenced Vertices).
        6. Simplifier la structure de points : Filter => Sampling =>
        7. Clean Up :
          1. Edit =>Select Vertex
          2. Filter => Selection => Delete selected Vertices
        8. Sanity Check Camera :
          1. View=> Show Layer & Show Raster
          2. Render => Show Camera
            1. Param : Scal Factor : 0.001
        9. Meshing : Filter –> Points –> Surface Reconstruction: Poisson
          1. Use “Filters->Point Set->Surface Reconstruction Poisson” and set Octree Depth to 10. (If thisfails, you may need to use “Filters->Point Set->Compute Normals” first (Camera Normals semble bien fonctionner))
          2. Octree : Max avant saturation mémoire : 10 ? 11? 12?
          3. Solver divide : 7 ?
          4. Sample per Node : 1
          5. Surface Offsetting : 1
        10. Fix Manifold Hedge :
          1. Filters –> Selection –> Select Non-Manifold edges
          2. Filter => Selection => Delete selected Vertices
        11. Paramétre Texture :
          1. Filter –> Texture –> Parameterization from registered rasters
          2. Use distance Weight : OK
          3. Use Image border Weight : OK
          4. Clean Isolate Triangle : OK
          5. Texture Gutter = 4
        12. Projeter Textures :
          1. Filter –> Texture –> Project active rasters color to current mesh
          2. Nom fichier de sortie de la texture
          3. Pixel Size Image : 512 / 1024 / 2048 / 4096 / 8192
          4. Reste des Paramètres par default : OK
        13. Export mesh as :
          1. .obj
      • Dans Unity :
        1. Import comme Asset  dans Unity + la/les  textures.
          1. « projet ».nvm.cmp\00\data\out
          2. Fichiers :mesh : meshAvImgCol.ply
          3. Fichier Texture : meshAvImgTex.wrl_0.png
        2. Associer la texture à chaque level de Mesh de l’objet
          1. Select Mesh
          2. Mesh Render (Add Componet  Mesh => Mesh Render)
          3. Développer Material => glisser texture ou glisser texture directement sur la mesh.
    • CMPMVS dans BLENDER

    • ARC 3D :
  • Dragon :
    • CMPMVS « C:\Users\Yves\Documents\VisualSFM\Dragon\Dragon.nvm.cmp\00\mvs.ini »

Exemples :