Modello 3D texturizzato: OBJ, GLB e 3D Tiles da WebODM

Intermedio Entrambe le linee 11 min di lettura

Ultimo aggiornamento:

Testato con: WebODM 3.2.8, motore ODX / ODM 3.6.0

In questa pagina

Il modello 3D texturizzato è l'output più spettacolare di WebODM e quello che i clienti capiscono al primo sguardo. È anche il più frainteso: non è una misura, è una rappresentazione. Qui vedi cosa contiene, come influenzarne qualità e peso, e come usarlo fuori da WebODM. Termini nel glossario.

1. Dalla nuvola alla mesh texturizzata#

Il motore (ODX in WebODM, ODM nella distribuzione OpenDroneMap) parte dalla nuvola di punti e costruisce una mesh: una superficie continua fatta di triangoli che collega i punti. Poi proietta le foto originali su quella superficie e produce le texture, immagini che vestono i triangoli con i colori reali.

Ne escono due modelli distinti:

Modello Cartella A cosa serve
Mesh 3D completa odm_texturing/ La scena tridimensionale: facciate, alberi, volumi. È quella della vista 3D.
Mesh 2.5D odm_texturing_25d/ Una superficie "a rilievo" senza sottosquadri, usata per generare l'ortofoto.

Di norma ti interessa la prima. L'opzione --use-3dmesh indica al motore di usare la mesh 3D completa anche per l'ortofoto, invece di quella 2.5D: utile su scene con molte strutture verticali, a costo di tempi maggiori.

Se ti serve solo l'ortofoto, --skip-3dmodel salta la costruzione della mesh 3D e risparmia tempo (ottimizzare tempi e memoria).

2. I formati prodotti#

Il formato predefinito è OBJ, uno standard testuale aperto letto da qualunque software 3D. Nella cartella odm_texturing/ trovi:

  • odm_textured_model_geo.obj: la geometria (vertici, facce, coordinate UV);
  • odm_textured_model_geo.mtl: il file dei materiali, che collega la mesh alle texture;
  • una serie di file immagine (le texture), tipicamente diversi PNG o JPG.

I tre elementi vanno sempre insieme. Se copi solo l'OBJ, il modello si apre grigio: è l'errore più comune.

Due formati aggiuntivi si attivano con un'opzione:

Formato Opzione Quando serve
GLB (glTF binario) --gltf Un solo file con mesh, materiali e texture. Ideale per Sketchfab, browser, Blender, visualizzatori web e realtà aumentata.
3D Tiles --3d-tiles Struttura a tasselli con livelli di dettaglio, pensata per lo streaming di modelli grandi in Cesium e visualizzatori compatibili.

Il suffisso _geo indica che le coordinate sono georeferenziate: i vertici sono nel sistema del task (UTM), con valori nell'ordine delle centinaia di migliaia di metri. Alcuni programmi 3D soffrono con numeri così grandi; nel §5 vedi come gestirlo.

Cartella odm_texturing con OBJ, MTL e file di texture

3. Dettaglio e peso: --mesh-size e --mesh-octree-depth#

Due opzioni governano la geometria della mesh.

--mesh-size (predefinito 200.000) è il numero massimo di vertici della mesh finale. È il limite superiore alla complessità: più vertici, più dettaglio geometrico e più peso. Per un edificio singolo rilevato con obliqui, valori di 500.000–1.000.000 restituiscono spigoli più netti; per un campo agricolo non cambia nulla.

--mesh-octree-depth (predefinito 11) controlla la profondità dell'albero con cui l'algoritmo di ricostruzione (Poisson) suddivide lo spazio. Ogni livello in più raddoppia la risoluzione spaziale della ricostruzione e moltiplica memoria e tempo. Valori 12–13 fanno emergere dettagli fini su modelli di dimensione contenuta; oltre, il rischio è un'elaborazione che non termina o una mesh "rugosa" che segue il rumore della nuvola.

Le due opzioni lavorano insieme: un octree profondo con --mesh-size basso viene poi decimato e perde il dettaglio; un --mesh-size enorme con octree basso produce triangoli tanti ma inutili. Aumenta entrambe in proporzione, di un passo alla volta, e giudica sul risultato. La qualità di partenza resta però la nuvola: --pc-quality conta più di qualsiasi parametro di mesh.

4. La texture: opzioni --texturing-*#

Le opzioni con prefisso --texturing- controllano come le foto vengono proiettate sulla mesh. Le più utili:

  • --texturing-single-material: produce un unico materiale e una texture unica invece di molti file. Semplifica l'importazione in motori di gioco e visualizzatori web, ma limita la risoluzione complessiva.
  • --texturing-keep-unseen-faces: mantiene i triangoli che nessuna foto vede (per esempio sotto le gronde), che altrimenti vengono rimossi lasciando buchi. Il modello è più "chiuso", ma con zone senza colore reale.
  • Le opzioni che disattivano il livellamento delle cuciture (seam leveling) globale o locale: velocizzano la fase di texturing ma rendono visibili le differenze di esposizione tra foto adiacenti.

L'elenco completo con i nomi esatti e i valori predefiniti è nella guida alle opzioni e nella documentazione ufficiale linkata in fondo.

5. La vista 3D di WebODM#

Dal pannello del task, il pulsante della vista 3D apre il visualizzatore integrato (basato su Potree). Mostra la nuvola di punti e, con l'apposito interruttore, il modello texturizzato; puoi misurare distanze e aree, cambiare la modalità di colorazione, regolare la dimensione dei punti e attivare una vista "camere" con le posizioni degli scatti. La vista è condivisibile con un link pubblico, come la mappa 2D.

Il visualizzatore carica i dati in streaming: per modelli grandi il primo caricamento può richiedere qualche secondo, ma il browser non scarica l'intero file.

Vista 3D di WebODM con il modello texturizzato di un edificio e gli strumenti di misura

6. Portare il modello fuori da WebODM#

Blender#

Gratuito e completo. File → Import → Wavefront (.obj) per l'OBJ, o glTF 2.0 per il GLB. Il modello georeferenziato è lontanissimo dall'origine e Blender lavora meglio con coordinate piccole: dopo l'importazione seleziona il modello, azzera la posizione (Object → Set Origin → Origin to Geometry, poi sposta all'origine) oppure lavora su una copia traslata. Le texture si caricano da sole se l'MTL e i file immagine sono nella stessa cartella dell'OBJ.

MeshLab#

Gratuito, leggero, ottimo per pulire, decimare e misurare. File → Import Mesh apre l'OBJ con texture. Filtri utili: Remeshing → Simplification (Quadric Edge Collapse Decimation) per alleggerire mantenendo la texture; Cleaning and Repairing per rimuovere isole di triangoli sospese. MeshLab esporta in molti formati, incluso PLY, STL (per la stampa 3D, senza colore) e OBJ ridotto.

Sketchfab e il web#

Sketchfab accetta OBJ+MTL+texture (in un archivio ZIP) o GLB. Il GLB da --gltf è la via più comoda: un file solo, nessun collegamento da rompere. Controlla i limiti di dimensione del tuo piano Sketchfab e decima prima in MeshLab se necessario. Per pubblicare su un sito tuo, il GLB si mostra con visualizzatori web leggeri, e i 3D Tiles da --3d-tiles si servono da uno spazio statico verso Cesium.

QGIS e CAD#

QGIS non apre mesh OBJ texturizzate come layer nativo; per le analisi geografiche usa nuvola di punti, DEM e ortofoto (esportare in QGIS). I CAD leggono l'OBJ ma non conoscono il sistema di riferimento: annota l'EPSG del task (sistemi di riferimento italiani) e, se serve, riproietta prima la nuvola e ricostruisci la mesh nel software di destinazione.

Come verificare

Il modello è a posto se:

  • si apre con i colori (non grigio) in Blender o MeshLab: OBJ, MTL e texture sono nella stessa cartella;
  • le facciate degli edifici sono presenti e leggibili, non "stirate" verso il basso;
  • non ci sono grandi triangoli piatti che coprono zone d'acqua o cielo ai bordi;
  • il GLB, se richiesto, si carica su Sketchfab o in un visualizzatore web senza errori.

Problemi frequenti#

Facciate stirate o mancanti. Il volo era solo nadirale: la mesh non ha informazioni sui lati. Servono immagini oblique e il preset "Buildings" (casi particolari).

Modello "bolloso" o fuso. Nuvola troppo rada o rumorosa per la profondità dell'octree richiesta: alza --pc-quality o abbassa --mesh-octree-depth.

Veli e "tende" ai bordi del modello. La ricostruzione Poisson chiude le superfici anche dove non ci sono dati. Aumenta --crop oppure usa --auto-boundary per limitare l'area ricostruita a quella davvero fotografata.

Il file è troppo grande per Sketchfab o per il browser. Decima in MeshLab o riduci --mesh-size; attiva --texturing-single-material per un unico atlante di texture.

L'OBJ si apre grigio. Manca l'MTL o mancano le texture: copia l'intera cartella odm_texturing/.

Prossimi passi#

Fonti

Guide correlate