Deel 4: Meshroom
Ik gebruik dus Meshroom, een GRATIS open source photogrammetry programma van Alice Vision. Je kan het hier downloaden: https://alicevision.org/#meshroom
Op dit moment van schrijven is de versie 2019.2.0 de nieuwste en ook de versie die ik gebruik. Hiervoor gebruikte ik de 2018 versie, maar die werkte voor mijn laptop niet goed.
!! Zoals eerder vermeld heb je voor Meshroom wel een grafische kaart van NVIDIA nodig !!
Goed, download Meshroom en open het! Ik neem je eerst even mee in wat je ziet.
De interface is vrij simpel:

1) Hier komen al je foto’s te staan die je hebt gemaakt van het object
2) Als je op een foto klikt bij Images, krijg je het in de Image Viewer groot te zien in plaats van een thumbnail. Kan handig zijn om te kijken of er foto’s, bijvoorbeeld, wazig zijn.
3) De 3D viewer, hier krijg je tijdens en na het renderen te zien wat het programma voor 3D model gaat maken. Je ziet de standen van de camerahoeken en zogeheten Point Clouds. Als de render klaar is kan je hier ook je 3D model bekijken. Hierover zometeen meer.
4) De Graph Editor, hier zie je het proces van begin tot eind. Elk onderdeel is afkomstig van een node. Door op een node te klikken krijg je meer details en kan je eventueel aanpassingen maken. De nodes kan je verslepen en je kan zelfs nodes toevoegen.
Laten we gelijk verdergaan! We gaan nu de foto’s van het object importeren:
Dat doe je door de foto’s uit je map te selecteren en te slepen naar het Images gedeelte in Meshroom
4) De Graph Editor, hier zie je het proces van begin tot eind. Elk onderdeel is afkomstig van een node. Door op een node te klikken krijg je meer details en kan je eventueel aanpassingen maken. De nodes kan je verslepen en je kan zelfs nodes toevoegen.
Laten we gelijk verdergaan! We gaan nu de foto’s van het object importeren:
Dat doe je door de foto’s uit je map te selecteren en te slepen naar het Images gedeelte in Meshroom
Tadaaa! Nu staan je foto's erin. Kijk nu naar het icoontje dat eruit ziet als een cameralens. De kleur van dit icoontje geeft aan of Meshroom de camera herkent en wat voor instellingen er zijn gebruikt tijdens het fotograferen. Rood (slecht) Oranje (sommige informatie ontbreekt, maar meestal goed genoeg) Groen (goed!)

Mijn foto’s waren allemaal oranje, maar er was voldoende data. Dus werkten deze foto's gelukkig prima om een goede render eruit te krijgen. Als het icoontje rood is of als je een error krijgt bij de eerste node, is er een grote kans dat je cameradata niet in de lijst staat die Meshroom gebruikt. Mocht dat gebeuren, niet getreurd! Je kan handmatig je camera toevoegen aan de lijst. Hoe je dat doet, zie je hier.
Sla nu je project alvast op. Mocht het programma vastlopen, dan hoef je niet je foto’s opnieuw in te laden. De map waar je het project opslaat, daar komt ook de “MeshroomCache” map in te staan. Als je straks gaat renderen komt er in die map per node een mapje, zodat je specifieke informatie snel terug kan vinden.
Technisch gezien kan je nu al op ‘Start’ drukken. Hoe lang het renderproces duurt ligt deels aan je hardware, deels aan de instellingen in de nodes en het aantal foto's dat je gebruikt. Op mijn zes jaar oude laptop en met iets aangepaste instellingen duurt een render tussen de 6 en 7 uur(!) Dat is aardig lang.
Voordat ik verder inga op sommige nodes om aan te passen, laat ik eerst het renderproces in een notendop uitleggen:
Eerst wordt er vooral gekeken naar het soort camera en daarna waar die allemaal is geweest. Met deze kennis worden daarna de pointclouds berekend. Vervolgens wordt de vorm van het object neergezet. Daarna volgt het omzetten van deze vorm naar een 3D mesh en de texture.
Het handige van dit opgeknipte proces is dat het best flexibel is. Als het programma tussendoor crasht of als er iets anders gebeurd, onthoudt Meshroom per node wat er al wel en nog niet gedaan is. Dat kan je zien aan de groene balkjes bovenin de nodes als die klaar zijn.
Voordat we op START klikken, kan je eerst nog een aantal handige aanpassingen doen.
Voor de texture:
Klik op de node zodat je de opties te zien krijgt. Standaard staat de texture size op 8192, dat is heel groot! Die kan je alvast lager zetten. Wat ook handig is om hier aan te passen, is de Unwrap Method. Deze staat standaard op Basic. Het nadeel daarvan is dat die meerdere texture files geeft. Met het idee in ons achterhoofd dat we straks de texture gaan baken van een highpoly naar een lowpoly model, is het makkelijker om één texture file te hebben. Kies dus voor de methode LSCM of ABF. (Het verschil in deze twee zit in het aantal faces van je 3D model. Bij 300k of minder faces is ABF beter geschikt. Voor 600k faces of minder kies je voor LSCM)

Meshing:
Door de waardes hier aan te passen, kan je het aantal faces beïnvloeden. Het nadeel van photogrammetry is dat de 3D modellen die eruit komen vaak een miljoen of meer faces hebben. Dat is extreem veel voor een game object.

Zeg, er is een MeshDecimate node, waarom raadt je die niet gewoon aan?
Het 3D model wat deze node produceerd was voor mij niet zo goed. Omdat het een model voor een game is, wil ik niet dat het model te veel faces heeft. Maar bij de Decimate node gaat er toch veel verloren aan vormgeving. Het algemene silhouette wordt echter wel goed aangehouden. Er is ook nog een MeshResampling node. De triangle verdeling wordt wel mooi, maar het silhoutte wordt flink aangetast. Ik raad dus aan om het aantal faces buiten Meshroom om te verlagen.
Voordat ik verder inga op sommige nodes om aan te passen, laat ik eerst het renderproces in een notendop uitleggen:
Eerst wordt er vooral gekeken naar het soort camera en daarna waar die allemaal is geweest. Met deze kennis worden daarna de pointclouds berekend. Vervolgens wordt de vorm van het object neergezet. Daarna volgt het omzetten van deze vorm naar een 3D mesh en de texture.
Het handige van dit opgeknipte proces is dat het best flexibel is. Als het programma tussendoor crasht of als er iets anders gebeurd, onthoudt Meshroom per node wat er al wel en nog niet gedaan is. Dat kan je zien aan de groene balkjes bovenin de nodes als die klaar zijn.
Voordat we op START klikken, kan je eerst nog een aantal handige aanpassingen doen.
Voor de texture:
Klik op de node zodat je de opties te zien krijgt. Standaard staat de texture size op 8192, dat is heel groot! Die kan je alvast lager zetten. Wat ook handig is om hier aan te passen, is de Unwrap Method. Deze staat standaard op Basic. Het nadeel daarvan is dat die meerdere texture files geeft. Met het idee in ons achterhoofd dat we straks de texture gaan baken van een highpoly naar een lowpoly model, is het makkelijker om één texture file te hebben. Kies dus voor de methode LSCM of ABF. (Het verschil in deze twee zit in het aantal faces van je 3D model. Bij 300k of minder faces is ABF beter geschikt. Voor 600k faces of minder kies je voor LSCM)

Meshing:
Door de waardes hier aan te passen, kan je het aantal faces beïnvloeden. Het nadeel van photogrammetry is dat de 3D modellen die eruit komen vaak een miljoen of meer faces hebben. Dat is extreem veel voor een game object.

Zeg, er is een MeshDecimate node, waarom raadt je die niet gewoon aan?
Het 3D model wat deze node produceerd was voor mij niet zo goed. Omdat het een model voor een game is, wil ik niet dat het model te veel faces heeft. Maar bij de Decimate node gaat er toch veel verloren aan vormgeving. Het algemene silhouette wordt echter wel goed aangehouden. Er is ook nog een MeshResampling node. De triangle verdeling wordt wel mooi, maar het silhoutte wordt flink aangetast. Ik raad dus aan om het aantal faces buiten Meshroom om te verlagen.



En dan gaan we wachten,
En nog veel meer wachten,
En hoera! De render is klaar. Alle balkjes in de nodes zijn nu groen.
In de 3D Viewer zie je alle camerapunten, die zijn afkomstig van de foto’s. Zoals je nu goed kan zien, denkt het programma dat wij met de camera rondom het object zijn geweest

De puntjes die je ziet vormen overigens een goede indicator of het model goed gerenderd kan worden! Deze zijn al zichtbaar na de StructureFromMotion node. Dus als je dan al ziet dat je erg veel camera/hoeken mist, of als er wel eeeeerg weinig puntjes staan, kan je waarschijnlijk beter de render stoppen. Herken je het silhouet van je object in deze puntjes? Grote kans dat het dan prima gaat!
Naast dat je de render kan bekijken als pointcloud, kan je ook op ‘Load Model’ klikken. Nu kan je het 3D model beter en gedetailleerder bekijken.
Weet je nog dat ik vertelde dat je glimmende objecten beter niet kan fotograferen? Dat kan ik in de 3D Viewer goed laten zien. Het object dat ik toen fotografeerde had als achterkant een kartonnen verpakking. Maar die was erg glad, er zat een dun glad laagje op. Zoals je kan zien op dit filmpje:
In de 3D viewer kan je goed zien dat de achterkant (het gladde stuk karton) helemaal niet gerenderd kan worden. Al die camerapunten zijn afgewezen!!!
Het 3D model komt er dus zo uit:
Goed, dat was het voor deze stap, op naar het volgende deel: Retopology -klik-!
TL;DR
- Je moet een grafische kaart hebben van NVIDIA
- Je kan instellingen aanpassen, maar dit hoeft niet
- Als de metadata van je camera niet wordt herkend, kan je die alsnog zelf toevoegen.
- Je kan nodes toevoegen
- Crasht het programma halverwege? Dan kan je vanaf de node waar het programma bezig was weer verder. Je hoeft niet van begin af aan te starten.
- Hoe meer foto’s je hebt, hoe langer je rendertijd is
- Hoe beter je hardware is, hoe sneller het renderproces gaat
- Tijdens het renderen kan je aan de pointcloud zien hoe goed je 3D model vormgegeven wordt.
Hier nog een handige link:
Mocht je programma vastlopen of crashen en je hebt problemen met het herstarten van het proces:
https://meshroom-manual.readthedocs.io/en/latest/faq/graph-external/graph-external.html