Come si inizia con la generazione procedurale?


147

La generazione procedurale è stata messa in luce recentemente (da Spore, MMO, ecc.) E sembra una tecnica di programmazione interessante / potente.

Le mie domande sono queste:

  • Conosci progetti di medie dimensioni che utilizzano tecniche di generazione procedurale?
  • Quale lingua / classe di lingue è la migliore per la generazione procedurale?
  • Puoi usare la generazione procedurale per codice "serio"? (cioè non un gioco)

1
Ti chiedi se trovi utile questo articolo di X-Team? x-team.com/blog/…
Adam Gerard

Risposte:


117

Probabilmente dovresti iniziare con una piccola teoria e semplici esempi come l' algoritmo di spostamento del punto medio . Dovresti anche imparare qualcosa sul rumore di Perlin se sei interessato a generare grafica. L'ho usato per iniziare con il mio progetto dell'ultimo anno sulla generazione procedurale.

I frattali sono strettamente correlati alla generazione procedurale.

Terragen e SpeedTree ti mostreranno alcune incredibili possibilità di generazione procedurale.

La generazione procedurale è una tecnica che può essere utilizzata in qualsiasi linguaggio (non è assolutamente limitata a linguaggi procedurali come C, in quanto può essere utilizzata in linguaggi OO come Java e linguaggi logici come Prolog). Una buona comprensione della ricorsione in qualsiasi lingua rafforzerà la tua comprensione della generazione procedurale.

Per quanto riguarda il codice "serio" o non di gioco, sono state utilizzate tecniche di generazione procedurale per:

  • simulare la crescita delle città al fine di pianificare la gestione del traffico
  • per simulare la crescita dei vasi sanguigni
  • SpeedTree è utilizzato in film e presentazioni architettoniche

Questo rumore Perlin assomiglia molto al filtro "nuvole" di Photoshop.
doubleOrt

Il primo collegamento è interrotto
Jean Carlo Machado il

Parte della musica Electro utilizza la generazione procedurale per essere creata
Poyda


12

La generazione di contenuti procedurali è ora tutta scritta per la GPU, quindi dovrai conoscere un linguaggio shader. Ciò significa GLSL o HLSL. Queste sono lingue legate rispettivamente a OpenGL e DirectX.

Mentre la mia preferenza personale è per Dx11 / HLSL a causa della velocità, una curva di apprendimento più semplice e Frank D Luna , OpenGL è supportato su più piattaforme.

Dovresti anche dare un'occhiata a WebGL se vuoi passare direttamente alla scrittura di shader senza dover passare il (considerevole) tempo necessario per configurare un motore di gioco OpenGL / DirectX.

Il contenuto procedurale inizia con il rumore.

Quindi dovrai conoscere il rumore di Perlin (e il suo successore Simplex ).

Shadertoy è un ottimo riferimento per conoscere la programmazione degli shader. Ti consiglierei di prenderti una volta che hai dato uno shader coding a te stesso, poiché il codice non esiste per i matematicamente schizzinosi, ma è così che viene fatto il contenuto procedurale.

Shadertoy è stato creato da un genio procedurale, Inigo Quilez , un prodotto della scena demo che lavora alla Pixar. Ha alcuni video di YouTube ( ottimo esempio ) di sessioni di codifica live e posso anche consigliarli.


17
Cosa intendi con "la generazione di contenuti procedurali è ora tutta scritta per la GPU"? Stai solo parlando di cose come fili d'erba? Non intendi la generazione di mappe o città per i giochi, per esempio, vero?
Dronz,

2
Sì, penso che il commento "tutto" qui sia un'eccessiva generalizzazione, ma nell'area della generazione del paesaggio (che immagino sia il tipo più comune), questa è una risposta utile. Anche se non riesco a immaginare chi vorrebbe guardare qualcuno digitare il codice in un video.
Nate CK,

1
Qualcuno che vuole imparare a scrivere codice intricato, come shader, o imparare a utilizzare schemi complessi nel loro design. E questo è solo graffiare la superficie.
Ultroman the Tacoman,

"La generazione di contenuti procedurali è ora tutta scritta per la GPU, quindi dovrai conoscere un linguaggio shader." è semplicemente falso e fuorviante al 100%. (Sto realizzando un semplice progetto di generazione procedurale, ho scritto 0 righe di codice shader nella mia vita)
riducendo l'attività il


8

Non sono un esperto in questo, ma posso provare a dare alcune risposte:

  1. NetHack ed i suoi fratelli sono open source e si basano fortemente sulla generazione procedurale di livelli (mappe). Link ai download di esso. Se sei più interessato alla generazione di paesaggi / texture / nuvole, ti consiglio di cercare Gamasutra e GameDev che hanno parecchi articoli su questi argomenti.

  2. AFAIK Non penso che ci sia molta differenza tra le lingue. La maggior parte del codice che vedi sarà in C / CPP perché è ancora la lingua ufficiale degli sviluppatori di giochi, ma puoi usare tutto ciò che vuoi ...

  3. Beh, dipende se hai un progetto che può beneficiare di tale tecnologia. Ho visto la generazione procedurale utilizzata nei simulatori per l'esercito (che può essere considerato un gioco, anche se non sono molto giocabili :)).

E una piccola nota: la mia definizione se la generazione procedurale è qualcosa che genera molti dati da una piccola quantità di regole o modelli e molta casualità, i risultati possono variare :)


8

C'è un libro eccellente sull'argomento:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

È distorto verso effetti visivi non in tempo reale e generazione di animazioni, ma suppongo che la teoria e le idee siano utilizzabili al di fuori di questi campi.

Vale anche la pena ricordare che esiste un pacchetto software professionale che implementa un flusso di lavoro procedurale completo chiamato SideFX's Houdini. Puoi usarlo per inventare e prototipare soluzioni procedurali a problemi, che puoi successivamente tradurre in codice.

Sebbene sia un pacchetto piuttosto costoso, ha una licenza di valutazione gratuita, che può essere usata come un ottimo strumento educativo e / o ingegneristico.


7

La generazione procedurale è utilizzata pesantemente nel demoscene per creare grafica complessa in un piccolo eseguibile. Will Wright ha anche detto di essere stato ispirato dal demoscene mentre faceva Spore. Questo potrebbe essere il tuo miglior punto di partenza.

http://en.wikipedia.org/wiki/Demoscene


3

la cosa più importante è analizzare come sono strutturate strade, città, blocchi ed edifici. scopri cosa hanno in comune tutti gli edifici, ad es. guarda foto, mappe, piani e realtà. se lo farai sarai un passo avanti rispetto alle persone che considerano la costruzione di città come una questione meramente tecnologica.

successivamente dovresti sviluppare soluzioni su come creare quella geometria in piccoli passi distinti. devi definire regole che compongono una città credibile. se ti piacciono i modelli 3d devi ripensare molto di ciò che hai imparato in modo che il computer possa seguire le tue istruzioni in ogni situazione.

per non perdere la strada dovresti creare molti operatori responsabili solo di piccole parti dell'intero processo. ciò semplifica notevolmente il debug, l'espansione e il miglioramento del sistema. nel passaggio successivo è necessario collegare tali operatori e controllare i risultati modificando i parametri.

ho visto troppi "generatori di città" che consistono principalmente in scatole a forma casuale con alcune trame di finestre su di esse: (


3

(Più di 10 anni dopo ...)

Generazione procedurale significa solo che il codice viene utilizzato per generare i dati anziché essere fatti a mano. Per esempio, se si desidera generare una foresta con vari alberi che si sta non sta per progettare ogni albero a mano , la codifica in tal modo è più efficiente per generare le variazioni. Potrebbe essere la generazione della grafica dell'albero, dimensione, struttura, posizionamento ...

In generale c'è una sorta di interazione con alcune regole , oltre a ciò puoi aggiungere una certa casualità e una logica tutta tua, combinare tutte queste tecniche ... Qualsiasi cosa in qualche modo caotica ma non troppo caotica può produrre risultati interessanti.

Ecco alcune tecniche degne di nota:

Alcuni giochi famosi per la loro generazione procedurale:

Tutorial video sulla generazione procedurale di terre emerse .

Conferenza sulla generazione di contenuti procedurali per i giochi, ha molti video sull'argomento: tutto procedurale

Divertiti.

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.