Dove iniziare quando si costruisce un editor di terreno 3D? [chiuso]


22

Sto cercando di costruire (per iniziare) uno strumento semplice, che potrebbe sollevare, abbassare, levigare e strutturare il terreno.

Quindi, quali sono le cose che devo fare per realizzare un tale editor del terreno?

E forse ci sono risorse preziose disponibili sull'argomento?

Sì, ho dimenticato di menzionare che sono interessato a un editor del terreno 3D.

Risposte:


24

Per un editor di terreno 3D "classico", i passaggi potrebbero essere quelli:

Genera una mesh (ad esempio una griglia di quadrati, ogni quadrato composto da due triangoli), tutti i vertici sono condivisi tra i triangoli (in modo che vi sia solo una normale per intersezione). inserisci qui la descrizione dell'immagine

Questo dovrebbe essere realizzato in 3DMesh e renderizzato nel tuo programma.

Crea uno strumento per alzare e abbassare parti (più piccole e più grandi) della griglia (devi calcolare dove si trova il cursore del mouse sulla mesh e modificare i vertici delle mesh, ma solo su e giù).

Crea una trama grande (come 1024x1024x4 o migliore) e tessila con quella che viene chiamata mappa splat: inserisci qui la descrizione dell'immagine

Rendi possibile dipingerlo (con R, G, B OR Alpha, non rosa per esempio) e scegliere trame che sostituiscono quei brutti colori primari (Rosso, Blu, Verde, Alpha), o inoltre, essere rappresentati da loro:

Lo shader (che dovrai creare) dovrebbe moltiplicare quelle belle trame (diciamo pietra, erba, ...) per l'intensità nella splatmap (quella brutta) e quindi mescolare il tutto in modo che appaia, ad esempio (con come solo 2 colori), in questo modo: inserisci qui la descrizione dell'immagine

Scusate per le immagini grandi, ho montato questo insieme al lavoro ...


Ah, questo ha reso un po 'più chiaro. Teoricamente, dopo la mesh 3D è semplicemente il riposizionamento dei vertici (su / giù) e la trama in questo esempio hai fatto il modo "splatmap", dopo di che lo shader lo assomiglia in un terreno "3D"?
joltmode

1
Corretto per la mesh 3D. Lo shader non fa nulla di speciale con la mesh (lo shader di vertice), il grande lavoro è nello shader di frammenti (lo "shader di pixel") dove la ricerca texel dalla splatmap fornisce quanta erba, pietra ecc. Il pixel finale deve ottenere (puoi ovviamente avere anche una trama 'base', come ad esempio la pietra che è sempre al 100% e altre trame vengono schizzate su di essa).
Valmond,

6

La prima cosa è essere chiari sulla struttura dei dati del tuo terreno e su ciò che desideri da un editor. È una maglia? Una serie di altezze? Una sorta di sistema voxel in stile Minecraft? Devi essere in grado di aggiungere elementi del terreno mesh come alberi ed edifici? Manualmente, automaticamente o entrambi? Potrei continuare, ma hai avuto l'idea.

Un editor di terreno di base non è così difficile da scrivere, ma i dettagli variano molto a seconda del gioco che stai creando e quindi del tipo di terreno che vuoi creare.


Bene, una mesh / matrice di altezze / voxel ecc. È solo un modo per memorizzare i dati associati, ero più interessato, su come scrivere gli strumenti per popolare questi dati. In realtà, non ho assolutamente idea di come un editor del terreno appaia "dietro le quinte". Posso reverese progettarlo, ma solo a modo mio, scommetto che ci sono alcune linee guida che dovrei seguire però ...
joltmode

2
-1. Questa non mi sembra molto una risposta. Stai ponendo alcune domande, che sarebbero state più adatte come commento.
Bummzack,

5

Questo è solo principalmente un seguito alla risposta di Valmond, ma non sembra abbastanza breve da aggiungere come commento.

Una volta che sei pronto a creare un editor di base, potresti voler sperimentare generando la heightmap interamente sulla GPU. Questo è completamente opzionale, ma è un buon modo per scaricare il lavoro sulla GPU per un terreno in continua evoluzione. Valmond ha già menzionato lo splatting delle trame eseguito sul pixel shader, ma è possibile utilizzare anche lo shader di vertici, usando una ricerca delle trame per alzare e abbassare i vertici nella griglia. Ecco un tutorial su come ottenere questo risultato con lo shader di vertice. Le cose non shader sono specifiche per C # e XNA, ma le cose importanti sono nel codice shader.

In questo caso, il codice sul lato CPU si occuperà solo di modificare la trama in scala di grigi memorizzata. La griglia della mesh rimane piatta, i vertici non vengono aggiornati dalla CPU. Ogni volta che la trama viene cambiata, la nuova trama può essere passata alla GPU.

Tieni presente che non tutti i modelli di shader supportano il campionamento delle trame sullo shader di vertici (ad esempio in HLSL è necessario almeno il modello di shader 3.0).


0

Puoi dare un'occhiata all'ETM di Ogre http://www.ogre3d.org/addonforums/viewforum.php?f=16 , dovrebbe darti alcune idee. Artifex Terra si basa su di esso se vuoi vederlo in azione.


2
Ti suggerisco di unire le tue risposte ed eliminare quelle non utilizzate.
jolt

Per il terreno creato / manipolato dalla GPU, consulta gli articoli Scape di Gilliam de Carpentier, una lettura molto istruttiva sull'argomento. decarpentier.nl/scape-render
Johann

Come già suggerito da Tom, gli articoli di Scape potrebbero essere già serviti come riferimento interessante sulla generazione e il rendering del terreno. Ma da quel suggerimento, ho pubblicato ancora un altro articolo di Scape che è ancora più rilevante per questo argomento, coprendo completamente la sua pipeline di editing basata su pennello. Quindi ho pensato di farti sapere. www.decarpentier.nl/scape-brush-pipeline
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.