Mappatura luna

Stai vedendo 25 articoli - dal 1 a 25 (di 72 totali)
  • Autore
    Articoli
  • #1845

    ValterVB
    Partecipante
    • Blenderista
    • Post sul forum 185

    Dopo le debite presentazioni, eccomi a postare una prima richiesta di aiuto.

    Sto cercando di fare un modello della luna, utilizzando i dati altimetrici ottenuti dalla sonda giapponese Kaguya, per poter applicare successivamente come texture le immagini ricavate dalla sonda LRO.

    Sono riuscito a convertire i dati altimetrici, in coordinate x,y,z e quindi riesco a importarle in Blender utilizzando uno script che ho trovato in rete..

    Il problema nasce a questo punto: quello che importo sono dei vertici che dovrei trasformare in Mesh, farlo a mano è impossibile, e quindi servirebbe uno script per farlo automaticamente.

    Tenendo conto che i vertici rappresentano praticamente un griglia, non credo sia impossibile. Allegato trovate la disposizione dei vertici, con una parte già  trasformato a manina…

    Qualche soluzione?

    Grazie per le eventuali risposte

    Ciao https://www.blender.it/uploads/monthly_03_2011/post-1843-1301572925,8149.jpg


    #54463

    KKKK
    Partecipante
    • Blenderista
    • Post sul forum 251

    prova a selezionare tutto e fare F (poi scegli l’ultima opzioni)

    se non funziona craa un piano con i 4 vertici estremi e poi suddividi fino a trovarti con i vertici….potresti usare anche CTRL+R cosi da crearti gli edge


    #54464

    ValterVB
    Partecipante
    • Blenderista
    • Post sul forum 185

    Prima soluzione: non funziona: ci avevo già  provato, ma restituisce No Vertloops found.

    Con la seconda soluzione ottengo semplicemente un piano diviso come la mia griglia ma piatta, il fatto è che i punti hanno “altezze diverse”.

    Allego una immagine un po’ più chiara.

    Ho paura che senza script sia impossibile

    Ciao

    ValterVB https://www.blender.it/uploads/monthly_03_2011/post-1843-1301572925,9778.jpg


    #54465

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    prova in questo modo, non so se funziona ma è un’idea… allora come dicevano crei un piano suddiviso in modo che le suddivisioni corrispondano ai vertici da te inseriti, quindi in edit mode selezioni tutti i vertici (Akey) quindi attivi il pulsante retopo (credo sia nel pannello mesh tools se non erro) e “fingi” con Gkey di spostare i vertici selezionati in questo modo la superficie dovrebbe adattarsi ai vertici sottostanti… da provare, non son sicuro del risultato… se non è chiara la mia spiegazione trovi dei videotutorial che spiegano meglio il RETOPO. 😎 come si suol dire “incrociamo i diti!”… 😎 😀


    #54466

    ValterVB
    Partecipante
    • Blenderista
    • Post sul forum 185

    Ottima idea, provato, ma purtroppo non funziona 🙁 . Il retopo non si applica ai vertici ma solo alle facce.

    Ciao

    ValterVB


    #54467

    KKKK
    Partecipante
    • Blenderista
    • Post sul forum 251

    e allora ti tocca fare manualmente


    #54468

    ValterVB
    Partecipante
    • Blenderista
    • Post sul forum 185

    No…… Non ci posso credere 😯 anche se lo sto facendo parzialmente per vedere come viene..

    Nessuno che conosce Pyton?

    La mia idea era poter automatizzare almeno la creazione degli Edges: seleziono una serie di vertici uno di fianco all’altro, e con uno script mi creo gli edges, una volta che ho una serie di edges uno sotto l’altro uso il comando F che così funziona.

    Credo proprio che inizierò a studiare Pyton per vedere se ci capisco qualcosa.

    Grazie a tutti per i consigli

    Ciao

    ValterVB


    #54469

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    hai provato selezionando 4 o 5 vertici su 2 orizzontali , Fkey e scegliere l’ultima opzione, quella di automazione della creazione delle facce? seleziona i vertici di 2 sole file pero’ in modo da far capire a Blender che sono degli allineamenti da looppare…


    #54470

    KKKK
    Partecipante
    • Blenderista
    • Post sul forum 251

    riki non funziona…ho provato


    #54471

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    mannaggia…. mumble mumble, eppure deve esserci un modo… hai provato a selezionare solo i vertici di una linea in modo da formare proprio una linea che li colleghi, sempre col comando F…


    #54472

    KKKK
    Partecipante
    • Blenderista
    • Post sul forum 251
    riky70 wrote:
    mannaggia…. mumble mumble, eppure deve esserci un modo… hai provato a selezionare solo i vertici di una linea in modo da formare proprio una linea che li colleghi, sempre col comando F…

    si..ho provato…non è che spuntando la spunta “retopo all” il retopo funziona anche con i vertici?


    #54473

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    non saprei… poi provo e più tardi ti aggiorno se trovo un sistema…


    #54474

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    Ce l’ho fatta… col RETOPO

    funziona perfettamente… ho deselezionato tutti i pulsanti del pannello del comando, quindi ho attivato solo RETOPO, e funziona… ho provato con un dozzina di vertici a diverse altezze…

    forse non l’hai fatto giusto…

    allora

    in object mode, deselezioni tutti

    crei un piano grande quanto la tua superficie

    in edit mode selezioni tutti i vertici

    lo suddividi in modo da avere la stessa suddivisione dei tuoi punti

    selezioni quindi tutti i punti nuovi

    sempre restando in edit mode attivi retopo, non retopo all, solo retopo

    quindi in visuale dall’alto in modo da vedere la nuova superficie che si sovrappne ai vertici singoli Gkey

    sposti leggermente la mesh di un nonnulla proprio ed i vertici vanno a sovrapporsi con le diverse altezze…

    tadan!!! 😎


    #54475

    ValterVB
    Partecipante
    • Blenderista
    • Post sul forum 185

    Ho provato con il retopo come indicato da ricky70, in effetti qualcosa succede, vedi immagine 🙁

    [attachment=1973:Retopo.jpg]

    Credo che il problema sia dovuto al fatto che non è un piano vero, ma una parte di un sfera, e quindi è tutta curvata, inoltre sempre per lo stesso motivo, diventa difficile allinearsi secondo un asse preciso.

    Comunque ho risolto diversamente. Per chi fosse interessato:

    Avendo pieno controllo sul file che mi scrive le coordinate perchè è un programmino in VB che ho fatto io, ho aggiunto una routine alla fine della scrittura delle coordinate dei punti che mi genera i dati per costruire le mesch. per capire come dovevano essere ho fatto un’operazione di reverse engineering 😀 : ho esportato in formato ply delle superfici e ho guardato come erano “raggruppati” i vertici per indicare che è una superficie, basta indicarli in senso antiorario, a questo punto sapendo che i miei vertici sono un rettangolo il cui numero di punti è noto, con un semplice ciclo ho scritto i dati, dopodichè ho modificato leggermente lo script pyton in modo che finita la lettura dei dati crei le mesh. per ora questi ultimi dati sono su un file separato, perchè la mi conoscenza del pyton è proprio basilare.

    Questo è il risultato per una porzione della luna di circa 123Km x 123 Km.

    [attachment=1974:RISULTATO.jpg]

    ho lasciato anche lo script che mi importa i dati caso mai servisse a qualcuno.

    Grazie a tutti

    Ciao

    ValterVB https://www.blender.it/uploads/monthly_03_2011/post-1843-1301572927,6289.jpg https://www.blender.it/uploads/monthly_03_2011/post-1843-1301572927,78.jpg


    #54476

    riky70
    Partecipante
    • Veterano Bronzo
    • ★★★
    • Post sul forum 2503

    perfetto dai, meno male che hai trovato io sistema… bel lavoro… anzi, lavoraccio!! 😀


    #54477

    Utente cancellato
    Partecipante

      Va che hai risolto bravo!

      Probabilmente dico un eresia ma il terraforming script inglobato in blender comunque non dava la possibilità  di localizzare delle coordinate spaziali?o ricordo male? ❓

      Oppure anche un terragen esterno sicuramente lo può fare per poi importare tutto in Blender, magari ti risparmierà  un lavoraccio prossimo.

      Comunque ottimo problem solving complimenti Valter, progetto molto interessante seguo.


      #54478

      ValterVB
      Partecipante
      • Blenderista
      • Post sul forum 185
      Quote:
      terraforming script inglobato in blender

      Urca e dove sta? Ho smontato anche l’hard disk, ma non l’ho trovato 😀

      Comunque per ora devo trovare dei rilievi a risoluzione più alta, perchè così è troppo grossolana per applicarci delle texture con la definizione che ha raggiunto la Nasa, purtroppo la maggior parte delle informazioni sui dati altimetrici per ora sono in giapponese 🙁

      Ciao

      ValteVB


      #54479

      KKKK
      Partecipante
      • Blenderista
      • Post sul forum 251
      ValterVB wrote:
      Quote:
      terraforming script inglobato in blender

      Urca e dove sta? Ho smontato anche l’hard disk, ma non l’ho trovato 😀

      Comunque per ora devo trovare dei rilievi a risoluzione più alta, perchè così è troppo grossolana per applicarci delle texture con la definizione che ha raggiunto la Nasa, purtroppo la maggior parte delle informazioni sui dati altimetrici per ora sono in giapponese 🙁

      Ciao

      ValteVB

      chiedi aiuto a MmAaXx


      #54480

      ValterVB
      Partecipante
      • Blenderista
      • Post sul forum 185

      Siccome mi sono stati chiesti dettagli su come ci sono riuscito, scrivo qua, nel caso possa servire a qualcuno, anche per mostrare il metodo per giungere al risultato anche non disponendo di sufficienti conoscenze Nel mio caso, a parte un po’ di Blender avevo conoscenza di VB, zero sul formato del file e zero su Phython.

      Scusate la lunghezza…..

      Nel caso fosse considerato off topic, si potrebbe spostare nella sezione OFF TOPIC appunto 😉

      Ciao

      ValterVB

      Per scaricarsi i dati:

      https://www.soac.selene.isas.jaxa.jp/ar … ex.html.en

      Crei un account

      Premi DataSearch, ti logghi con l’account appena creato. Premi Product selection, selezioni LALT, poi selezioni HighLevel poi selezioni GlobalTopographiMAP…, poi ADD, poi Determination, poi Search Determination, poi spunti la casella sotto Order e confirm. Dopo un po’ ti arriva sulla posta un Link a un sito FTP con il file da scaricare (in questo caso sono poco più di 60 mega), è un file con estensione SL2 ma in realtà  è un file compresso apribile con 7-ZIP. Il file più grande è quello con i dati dell’altimetria di tutta la luna. Se lo guardi con un Editor (per es. XVI32) , vedrai che all’inizio del file ci sono caratteri ASCII con tutte le informazioni sul contenuto del file. Semplificando i dati sono così composti:

      Per ogni punto della luna su cui hanno fatto i rilievi nel file è registrata la distanza dal centro della luna, per semplificazione la luna è stat considerata una sfera perfetta. I punti sono stati rilevati a una distanza di 1895 m uno dall’altro (1/16 di grado). I dati sono registrati da Nord a sud e da ovest a est. (dettagli nell’intestazione del file). Tieni conto che ci sono 16588800 punti, quindi visualizzarli tutti contemporaneamente sia impossibile.

      I punti sono divisi in 2880 linee (li puoi considerare i paralleli) e ogni linea è divisa in 5760 punti, praticamente ogni linea rappresenta una circonferenza a una data latitutdine. Con un piccolo programma in Visual Basic (se uno non avesse VB, si può usare tranquillamente il VBA presente in un prodotto Office, o probabilmete uno script in VBS che dovrebbe essere disponibile su qualsiasi installazione Windows) estraggo i dati di altezza (coordinata Z) e calcolo le coordinate X e Y sapendo che dovranno essere riportate su una sfera basta un minimo di geometria.

      A questo punto ho un file di testo con indicato per ogni vertice le coordinate x,y,z.

      Prime righe del file (notate le dimensioni, i punti si trovano anche a più di 1600 unità  dal centro di Blender:

      620.967154243645 61.5431592549666 –1620.31566305881

      622.717418005197 61.5414933581678 -1619.59348752146

      624.466845183452 61.5398274655943 -1618.86942169753

      Con lo script indicato qua sotto (trovato cercando su GOOGLE: import+point+blender) posso importare i vertici. I commenti, quelli scritti dopo il simbolo # sono una mia interpretazione, ma credo abbastanza reale, di quello che dovrebbe fare quella linea.

      Code:
      import Blender
      from Blender import Scene, Mesh
      filename=’C:Mappa LunaMappaLALT_GGT_MAP.txt’ #Apre il file con i dati
      data=[] #Creo una matrice che conterrà  tutti i vertici
      for line in open(filename): #Per ogni linea del file memorizzo i 3 dati (x,y,z)
      line=line.rstrip(“n”) #Queste 2 righe indicano il carattere di new line e di separazione del dato.
      line=line.rstrip(“r”)
      temp=line.split()
      data.append((float(temp[0]),
      float(temp[1]),
      float(temp[2])))
      me = Mesh.New(‘point cloud’) #Creo una mesh con nome Point cloudob
      me.verts.extend(data)
      Scene.GetCurrent().objects.new(me,”pointcloudob”)
      Blender.Redraw()

      Eseguito lo script hai tutti i vertici disegnati , quello che ti serve è collegarli per creare delle mesh. Per capire come fare ho cercato su Google, quello che per me era il comando chiave dello script precedente: erts.extend, da li sono risalito a altri comadi e ne ho cercato uno simile per i lati, ed ecco saltar fuori faces.extend. Da un esempio si vede che per disegnare una mesh devi indicare i vertici che fanno parte della mesh in un certo ordine. Siccome questo ordine non era spiegato, ho esportato in formato PLY un mesh semplice (2 piani affiancati e guardando il file generato (basta NotePad), ho visto che i vertici sono indicati seguendo un percorso antiorario. A questo punto ho fatto una piccola modifica al programma in VB per aggiungere le sequenze di vertici su un file separato, (sicuramente si può fare tutto in un unico file, ma non ho avuto tempo per cercare come fare).

      Prime righe del secondo file:

      1 0 66 67

      2 1 67 68

      3 2 68 69

      poi ho modificato lo script precedente aggiungendo le linee che servivano per importare i dati delle mesh:

      Code:
      import Blender
      from Blender import Scene, Mesh

      filename=’C:Mappa LunaMappaPoint.txt’
      filename1=’C:Mappa LunaMappaMesh.txt’
      data=[]
      data1=[]
      for line in open(filename):
      line=line.rstrip(“n”)
      line=line.rstrip(“r”)
      temp=line.split()
      data.append((float(temp[0]),
      float(temp[1]),
      float(temp[2])))

      me = Mesh.New(‘point cloud’)
      me.verts.extend(data)
      for line in open(filename1):
      line=line.rstrip(“n”)
      line=line.rstrip(“r”)
      temp=line.split()
      data1.append((int(temp[0]),
      int(temp[1]),
      int(temp[2]),
      int(temp[3])))
      me.faces.extend(data1)

      Scene.GetCurrent().objects.new(me,”pointcloudob”)
      Blender.Redraw()

      et voilà , ecco la mappa lunare. Naturalmente il file di qua sopra si può sicuramente migliorare, ma sembra funzionare.

      Ultime considerazioni:

      Il dettaglio in questo caso non è elevato, quindi si potrebbe utilizzare solo per un rendering della luna intera, esistono sul sito della NASA delle fotografie della luna intera che arrivano a 4000×2000 pixel e sono tutte liberamente utilizzabili, (come tutto il materiale prodotto dalla NASA). Chiaramente per un rendering simile bisogna ridurre i numeri di vertici, per esempio scrivendo un dato ogni 5 o ogni dieci, o renderizzando solo la metà  della luna che interessa.

      Per fare quello che volevo fare io, servono delle mappe più dettagliate. Sul sito della jaxa esistono delle mappe parziali con una griglia di meno di 10X10 m ma devo ancora capire il formato perchè è diverso da quello del file precedente, e sulla NASA stanno iniziando a pubblicare i rilievi effettuati con il LOLA che dovrebbe arrivare a una risoluzione di 1×50 m ma anche di questi devo capire il formato. Questi dovrebbero permettere di applicare le foto della LRO che come detto hanno una risoluzione di 0,5 m a pixel (ogni “strisciata” ha una misura superiore ai 5000×50000 pixel)

      Questo è il listato in VB2005, buttato giù brutalmente, senza ottimizzazioni o finezze stilistiche…. 😀

      Per renderlo flessibile bisognerebbe fare una finestra di scelta della coordinata che interessa e dell’ampiezza della mappa

      Code:
      —————————-
      Public Class Form1
      Sub Leggi()
      Const FILE_NAME As String = “C:Mappa LunaMappaLALT_GGT_MAP.IMG”
      Const FILE_SCRIVI As String = “C:Mappa LunaMappaPoint.txt”
      Const FILE_SCRIVI_MESH As String = “C:Mappa LunaMappaMesh.txt”

      Dim fs As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)
      Dim i As Integer : Dim j As Integer : Dim h As Double
      Dim x As Double : Dim y As Double : Dim z As Double
      Dim xs As String : Dim ys As String : Dim zs As String
      Dim r As New BinaryReader(fs)
      Dim MoonRadius As Double = 1737.4 ‘Raggio della luna
      Dim Risoluzione As Double = 0.0625 ‘Risoluzione della mappa in radianti=1/16 di grado
      Dim Righe As Integer = 2880
      Dim Campioni As Integer = 5760
      Dim GradiToRad As Double = 0.017453292519943295 ‘fattore di conversione da gradi sessadecimali a radianti
      Dim PrimaLatitudine As Double = 89.96875 ‘Latitudine della prima riga
      Dim PrimaLongitudine As Double = 0.03125 ‘Longitudine del primo punto
      Dim Latitudine As Double : Dim Longitudine As Double
      Dim DistanzaCentro As Double : Dim TempRad As Double
      Dim cont As Long

      ‘Qua ho deciso di prendere solo una porzione della mappa di 66×66 punti
      Dim Row As Long = 66 : Dim Col As Long = 66

      Dim ContRow As Long : Dim ContCol As Long
      ‘I dati iniziano dal byte n° 9559
      r.ReadBytes(9558) ‘Mi posiziono direttamente sul primo byte di dati
      Using sw As StreamWriter = New StreamWriter(FILE_SCRIVI)
      For i = 0 To Righe – 1
      Latitudine = PrimaLatitudine – i * Risoluzione
      For j = 0 To Campioni – 1
      Longitudine = PrimaLongitudine + j * Risoluzione
      h = r.ReadSingle
      cont = cont + 1
      DistanzaCentro = MoonRadius + CSng(h)
      TempRad = DistanzaCentro * Math.Cos(Latitudine * GradiToRad)
      x = TempRad * Math.Sin(Longitudine * GradiToRad)
      y = DistanzaCentro * Math.Sin(Latitudine * GradiToRad)
      z = -TempRad * Math.Cos(Longitudine * GradiToRad)
      ‘Il decimale deve essere un punto e non la virgola
      xs = Replace(CStr(x), “,”, “.”)
      ys = Replace(CStr(y), “,”, “.”)
      zs = Replace(CStr(z), “,”, “.”)
      ‘Questo IF mi fa scrivere solo i dati della porzione che mi interessa
      If i >= 837 And i < = 902 And j >= 0 And j < = 5759 Then
      sw.Write(xs & vbTab & ys & vbTab & zs & vbCrLf) ‘Scrivi le coordinate del vertice
      cont = cont + 1
      End If
      Next
      Next
      End Using
      Using sw As StreamWriter = New StreamWriter(FILE_SCRIVI_MESH)
      For ContRow = 1 To Row – 1
      For ContCol = 2 To Col
      ‘Qua scrivo i dati per creare le Mesh. é possibile che ci sia un errore
      ‘Ma per porzioni della mappa funziona
      sw.Write(ContCol + (ContRow – 1) * Col – 1 & vbTab & ContCol – 1 + (ContRow – 1) * Col – 1 & vbTab & ContCol – 1 + Col) + (ContRow – 1) * Col – 1 & vbTab & (ContCol + Col) + (ContRow – 1) * Col – 1 & vbCrLf)
      Next
      Next
      End Using
      r.Close()
      fs.Close()


      #54481

      Utente cancellato
      Partecipante
        ValterVB wrote:
        Urca e dove sta? Ho smontato anche l’hard disk, ma non l’ho trovato

        Passi alla finestra script window, negli script wizard ci trovi il landscape generator ma vedo che non faceva al caso tuo…comunuqe provalo non è nulla male 😉


        #54482

        ValterVB
        Partecipante
        • Blenderista
        • Post sul forum 185

        Se qualcuno fosse interessato, ho iniziato un blog, per affrontare in maniera un po’ più approfondita questo argomento.

        Spero che non venga considerato spam:

        http://moonmaplab.blogspot.com/

        Ciao

        VB


        #54483

        andcamp
        Moderatore
        • Veterano Platino
        • ★★★★★★
        • Post sul forum 5619
        • Blender Italia Staff

        sarebbe quasi da metterlo nei tutorials 🙂


        presso https://www.blender.it/manuali/ puoi trovare un manuale per muovere i primi passi
        altro: http://www.html.it/guide/blender-3d-guida/

        #54484

        ValterVB
        Partecipante
        • Blenderista
        • Post sul forum 185

        Finalmente sono riuscito a fare un script che funziona tutto all’interno dei Blender. Questo è il risultato

        [attachment=2670:MoonRender02.jpg]

        Questa è la porzione più grossa di cui riesco a fare un render senza che vada in crash (poco più di 2 milioni di vertici)

        Ciao

        VB https://www.blender.it/uploads/monthly_03_2011/post-1843-1301573095,655.jpg


        #54485

        t0m0
        Partecipante
        • Blenderista
        • Post sul forum 153

        uao!

        magari,prova a creare tutta al luna e a usare il modificatore ‘decimate’ per vedere se riesci ad abbattere un pò il numero di facce.

        complimenti ancora x il lavoraccio 😉


        #54486

        nukkio
        Partecipante
        • Blenderista
        • Post sul forum 184

        😯

        è interessantissimo. altro che bump o normal map!!

        Più da vicino come viene?

        Per il render, prova a renderizzare a regioni, magari così regge.

        ciao!


      Stai vedendo 25 articoli - dal 1 a 25 (di 72 totali)

      Il forum ‘Richiesta di supporto’ è chiuso a nuove discussioni e risposte.