Terreno basato su una mappa altimetrica con una strada


12

Qual è il modo migliore per implementare una funzione di dettaglio, come una strada, su un terreno basato su una mappa di altezza?

inserisci qui la descrizione dell'immagine

Aggiornamento: è un po 'difficile da vedere nell'immagine, ma la strada scende dalla cima della cava per fare la sua base.

Risposte:


14

La cosa fantastica delle immagini è che di solito incorporano fino a 4 canali (rosso, verde, blu e alfa). Poiché una mappa di altezza richiede solo una dimensione, puoi semplicemente utilizzare il canale rosso per memorizzare le informazioni sull'altezza (hai ancora 256 livelli per l'altezza), quindi utilizzare altri canali per altri scopi (come utilizzare il canale verde per mappare le strade , canale blu per acqua / umidità) ecc ...

In questo modo potresti assicurarti che quando costruisci il tuo terreno, le zone in cui dovrebbe essere costruita una strada appariranno piatte invece di seguire la pendenza dell'altezza.


1
È possibile utilizzare l'immagine HDRI, quindi i numeri float possono essere utilizzati per memorizzare informazioni più precise sull'altezza?
Quazi Irfan,

1
L'immagine HDRI non è un formato di file ma un concetto, ma sì, è possibile utilizzare formati di file specifici per consentire una maggiore precisione. Dipenderebbe principalmente dal tuo hardware / software, ma esiste un'immagine RG mobile che puoi memorizzare su 32 o 64 bit. Ma qualunque sia il formato, se usi più bit per canale, puoi sempre convertire i valori int in un numero in virgola mobile come questo: f = (v / 256.0) dove f è il tuo float, v il valore int corrente
XGouchet

È una buona idea memorizzare tutti gli oggetti statici di una mappa su una (altezza) mappa? come vegetazione, fogliame, casa? o puntatori su dove verrà posizionato un altro oggetto? o esiste un altro modo?
Quazi Irfan,

Non memorizzerei la posizione esatta, ma forse solo un'informazione sulla densità, e quindi genererei i dati (vegetazione, casa ecc ...) dalle informazioni sulla densità. Ma il modo migliore è posizionare questi oggetti a mano e salvarli usando un file di dati binari o un file di descrizione XML
XGouchet

1
@iamcreasy ovviamente puoi usare l'altezza per fare in modo che la tua casa tocchi il pavimento, ma devi descrivere l'aspetto del modello di casa (pareti, porte, qualsiasi mobile all'interno), che non può essere descritto in un pixel. Inoltre, le informazioni sui pixel jsut non ti daranno un orientamento preciso, quindi le tue case saranno tutte allineate (che non sembreranno naturali o "belle").
XGouchet,

1

Il modo in cui lo faccio è di separare la heightmap (uso float per esempio, 513 * 513) e splatmap (la "texture di controllo") che spesso necessita di una risoluzione maggiore (utilizzo 32 bit bmps, 512x512).

La heightmap crea la mesh (il terreno, i triangoli).

La mappa di controllo si estende su tutto il terreno e ciascuno dei suoi livelli (RGBA) dice quanto si dice Stone, Dirt, Road ecc. Che dovresti vedere sul terreno.

In questo modo puoi usare un editor per a) creare il terreno eb) Dipingere il terreno (con Rock, Dirt, Road ecc.)

Fai una rapida chiacchierata su "painting heightmap", "heightmap splatmap" e simili per una spiegazione più completa o scarica dire Unity3D per scoprire come potrebbe funzionare nella "realtà".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.