Ho lavorato su alcuni perfezionamenti al fine di avere questo plugin di lavoro nel miglior modo possibile (ho anche provato a personalizzare il prossimo Godot 3
,1!). Quindi cominciamo.
Aggiunta della forma di collisione
Che è stato abbastanza facile in realtà, anche se, devo dire, come sto testando con un veicolo a trovare a volte un ostacolo ' invisibile ' che rende il veicolo stop, o talvolta Flip (si sente più o meno come una roccia invisibile posto sul terreno).
in ogni caso, per farlo ho dovuto usare questo codice:
$TerrainCollision. Shape = ConcavePolygonShape. New ()
$TerrainCollision. Shape. set _faces ($TerrainMesh. mesh. Get _faces ())
Per spiegarlo un po':
- $TerrainMesh è la mesh generata da heightmap
- $TerrainCollision è la forma di collisione che vogliamo generare dalla mesh
Quindi è molto semplice, l'unica cosa che non sono sicuro è se ConcavePolygonShape è in realtà il tipo di forma che dovrei usare, come alcune aree sono in realtà convesso.
Miglioramenti di rendering mesh
Dal momento che il primo articolo su questo addon sono stato in grado di migliorare il rendering della mesh piastrelle quando ho finalmente capito come utilizzare la funzione add_smooth_group.
Ho anche modificato la generazione di mesh utilizzando un ventilatore triangolo, le prestazioni complessive permettono di generare molto più veloce, circa 2,5 secondi per tessera sul mio vecchio portatile.
La cosa interessante è che mi permette anche di salvare alcuni vertici quando il cambiamento di altezza è lineare. Quello che voglio dire è che la ventola triangolo è disegnato come nel Pucture qui, a partire dal centro si disegnano 8 triangoli ognuno condivide il vertice centrale, ora ogni vertice ha un'altezza diversa, ma la parte superiore, inferiore, vertice sinistro e destro (numerato 3 , 7, 9, 5) può anche essere saltato se l'altezza cambia linearmente, per esempio:
Vertex 2 | Vertex 3 | Vertex 4 | |
Esempio 1 | 20m | 40m | |
Esempio 2 | 0m | 0m | |
Esempio 3 | 20m | 25m | 15m |
Nella tabella precedente, l'esempio 1 e l'esempio 2 possono saltare il vertice 3, poiché la modifica è lineare, pertanto non influisce sulla rappresentazione della mesh.
Saltare un triangolo può rendere la mesh più piccola e probabilmente ridurre il tempo di rendering e l'utilizzo della memoria.
Discussioni
Una cosa fastidiosa che stavo vivendo durante lo sviluppo era Godot congelamento durante la generazione della mesh. Io uso le discussioni quando mi sviluppo in C#, ma non in Godot, così ho voluto provare e scoperto un paio di cose..
Primo tentativo è stato un fallimento, il processo lanciato.. ma non è successo niente, nemmeno un messaggio di errore o di avvertimento, così ho googled, meglio, ho controllato il q & a sezione di Godot (una fonte molto utile di informazioni), e ha scoperto che è ancora in discussione se è un bug o meno (qui): è sempre necessario dichiarare un parametro per il funzione si chiama in un thread separato, inoltre, è necessario utilizzare un solo parametro (essendo vuoto o una matrice di sotto-parametri).
Beh, a parte questo, ha funzionato! E mi piace il fatto che ora posso ancora utilizzare l'editor durante il download della tessera, l'unica cosa è che sulle discussioni il processo sembra essere più lento.
Todos e limitazioni
Texture painting, mappa altezza modificabile e mappe normali
Come ho ottenuto una macchina migliore (ancora, non un PC di fascia alta, ma abbastanza buono per ora), ho deciso di testare anche gli altri addons che sono simili, come Zylann ' s HTerrain, una caratteristica interessante che ha è che è possibile modificare il terreno, dipingerlo, e probabilmente altre caratteristiche non ho ancora visto. Beh, credo che il mio modulo trarrebbe vantaggio da avere una tale serie di caratteristiche, chissà, un giorno mi prenderò il mio tempo per fare qualcosa di simile.
LOD, allineamento di diverse piastrelle di livello zoom
Inoltre non posso ancora posizionare le mattonelle dei livelli differenti dello zoom, nè ho implementato LOD. Ma come Godot diventerà più maturo, e ottenere nuove funzionalità che sarebbe diventato più facile da implementare.
Mattonelle betweel lisce
Se si prova il mio addon si può capire che c'è una linea che separa chiaramente le maglie, che è indesiderato effetto collaterale a causa del fatto che smooting avrebbe funzionato solo su una singola rete, forse le mappe normali possono risolvere questo?
Mondo non è piatta
Su livelli di zoom elevati è OK per avere piastrelle piatte, ma quando lo zoom fuori mondo non dovrebbe, come sappiamo mondo è sferico (non del tutto, ma quasi).
Ho provato ad attuarlo, ma ho avuto problemi di precisione e velocità. Quindi, per ora il codice è lì, ma non utilizzato (e ha bisogno di un sacco di pulizia).
Test con un (quasi) esempio di vita reale
Beh, ho voluto provarlo, e mi è venuto in mente di utilizzare un veicolo, così ho trascorso un bel po' l'importazione del modello Blender in Godot, e poi modificare i parametri del veicolo.
Questa è stata la parte difficile, e bene, ho anche colto l'occasione per provarlo su Godot 3,1 (un Custom Build che ho fatto), ma, Beh, ha alcuni problemi, così ho cambiato di nuovo a 3,0 e, infine, qualche risultato accettabile qui.
La cosa brutta che ho scoperto è che solo con l'aggiunta di 9 piastrelle (ridimensionato quasi ad una dimensione realistica rispetto alla vettura), ci sono voluti più di un minuto per caricare il "livello". Creando la mesh in modo dinamico (invece di archiviarlo come file) ci sarebbero voluti circa 20-30 secondi per rendere le 9 tessere, può valere la pena di provare che per una eventuale nuova versione dell'addon.
Crediti:
Grazie a 3DHaup per la modalità 3D gratuita ha messo a disposizione di chiunque voglia usarlo. E naturalmente a SketchFab.
È possibile testare l'addon da soli scaricando l'addon dal repo GitHub (istruzioni nel README).