Rumore perlin

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Rispondi
Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Rumore perlin

Messaggio da aironenero »

Volevo documentarmi sugli algoritmi per creare mondi infiniti (esempio minecraft) e ho trovato che vengono generati dal rumore perlin (perlin noise), esattamente come si può creare un algoritmo per generare un mondo contimuamente? I vari tile non verranno con i bordi non continui?
Unity Developer
Immagine
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Rumore perlin

Messaggio da Jak »

Il concetto di perlin noise è quello di stratificare la casualità.
Ossia prima pensare a celle grandi, poi applicare a queste un filtro più piccolo ed a questo applicarne uno ancora più piccolo e così via. In pratica se prendiamo l'esempio di minecraft prima pensi a generare la "zona" dei biomi, poi passi a generare l'altezza del terreno, poi passi a generare gli alberi i fiori ecc ed infine mescoli tutto assieme.
Separa ogni cosa che nella tua testa è effettivamente diversa (un fiume, una grotta, un villaggio) e gestiscile separatamente per poi mescolarle assieme.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: Rumore perlin

Messaggio da aironenero »

Jak ha scritto:Il concetto di perlin noise è quello di stratificare la casualità.
Ossia prima pensare a celle grandi, poi applicare a queste un filtro più piccolo ed a questo applicarne uno ancora più piccolo e così via. In pratica se prendiamo l'esempio di minecraft prima pensi a generare la "zona" dei biomi, poi passi a generare l'altezza del terreno, poi passi a generare gli alberi i fiori ecc ed infine mescoli tutto assieme.
Separa ogni cosa che nella tua testa è effettivamente diversa (un fiume, una grotta, un villaggio) e gestiscile separatamente per poi mescolarle assieme.
Non ho capito l'ultima frase... Dovrei generare più rumori ognuno per la disposizione di ogni oggetto?
Unity Developer
Immagine
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Rumore perlin

Messaggio da Jak »

ogni oggetto avrà il suo rumore il quale genererà le istanze del determinato oggetto.
Un'esempio di tutto il sistema può essere un rumore che genera biomi (qui un deserto, li una foresta) ed un'altro rumore per generare alberi. Infine mescoli assieme i due rumori ad esempio aumentando la soglia per la generazione di alberi vicino al bordo della foresta per diradarli o annullare completamente in caso di deserto.
Separa i concetti ed infine fondili aggiungendo dei filtri in base ai concetti più rilevanti (come può essere un bioma, poco rilevanti invece sono ad esempio i fiori)
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: Rumore perlin

Messaggio da Homunculus »

Jak potrebbe non essere così complicato. Non so il rumore perlin, ma io ho creato tempo fa il diamond square che fa all'incirca la stessa cosa e il pattern generato è facilmente adattabile per essere affiancato a piacere (cerca nel forum diamond square).

In sostanza per generare pattern affiancabili basta modificare leggermente il funzionamento dell'algoritmo ai lati esterni. I singoli pixel vengono calcolati come una media (più una varianza random) dei punti adiacenti, e ovviamente ai bordi dove mancano alcuni pixel adiacenti si usa un valore fisso (o random). Se si vuole generare un pattern affiancabile, basta usare al posto di qesto valore fisso o random ai bordi il valore del chunck adiacente.

Non fossi in giappone ti farei un esempio, magari sett prossima quando torno

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: Rumore perlin

Messaggio da aironenero »

Homunculus ha scritto:Jak potrebbe non essere così complicato. Non so il rumore perlin, ma io ho creato tempo fa il diamond square che fa all'incirca la stessa cosa e il pattern generato è facilmente adattabile per essere affiancato a piacere (cerca nel forum diamond square).

In sostanza per generare pattern affiancabili basta modificare leggermente il funzionamento dell'algoritmo ai lati esterni. I singoli pixel vengono calcolati come una media (più una varianza random) dei punti adiacenti, e ovviamente ai bordi dove mancano alcuni pixel adiacenti si usa un valore fisso (o random). Se si vuole generare un pattern affiancabile, basta usare al posto di qesto valore fisso o random ai bordi il valore del chunck adiacente.

Non fossi in giappone ti farei un esempio, magari sett prossima quando torno
Alla fine ci sei andato in jap eh? Comunque, stavo studiando un algoritmo per generare infinitamente un terrano, usando una griglia chunk che è una mesh con 32x32 quadrati tutti uguali e volevo usare perlin per modificarla e poi in mase ad un bioma dargli una diplacement map per smussarla molto. Oltre alla contiguità nei bordi ho bisogno anche di avere delle variabili nel perlin, che se non sbaglio ne usa 4. Stavo leggendo quì: Perlin noise math
EDIT: ovviamente sto usando unity engine e C#.
Unity Developer
Immagine
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Rumore perlin

Messaggio da Jak »

Non è nulla di difficile homu. Sto solo dicendo che oltre all'utilizzo del rumore in se si può usare la stessa tecnica del perlin anche per i vari elementi dello scenario e non solo per la generazione del terreno.
Il concetto del perlin noise è avere vari segnali random (indipendendemente dall'algoritmo usato) a diverse risoluzioni ed intensità e poi sommarle assieme. In pratica il primo strato avrà una grande intensità e bassa risoluzione (ovviamente interpolando) e quindi può identificare ad esempio le montagne, un secondo strato avrà un'intensità minore ed una risoluzione più alta e può identificare ad esempio le rocce, un'altro con risoluzione ancora più bassa e puoi usarlo per la ghiaia, ne aggiungi un'altro per i batteri (ok sto esagerando :asd: ma è solo per far capire il concetto)
Il perlin non ha necessariamente 4 variabili, dipende dalla situazione, nel caso specifico che dici tu due servono alla funzione di random, uno per il fattore di risoluzione dei vari strati e l'ultimo per l'intensità dei vari strati (una proporzione rispetto allo strato successivo)
Nel caso di un minecraft gestisci prima le cose più importanti le quali applicheranno dei filtri alle cose meno importanti, l'oceano annullerà il rumore degli alberi mentre una foresta lo userà a manetta.

Chiaramente ti serviranno delle funzioni di random 2D che game maker non ha, sia per il perlin che diamond square. In giro per internet ne trovi parecchie. Per l'interpolazione chiaramente consiglio quella cubica che anche se pesa un po (ma neanche tanto visto che puoi memorizzare il segnale random a piacimento) ne vale sicuramente la pena in termini di qualità.

EDIT: Questo è un buon paper sul perlin noise: http://freespace.virgin.net/hugo.elias/ ... perlin.htm
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: Rumore perlin

Messaggio da aironenero »

difatti non sto usando GM e l'ho anche scritto... Uso unity hce ha la perlin function già fatta. A questo punto non mi basterebbe creare un perlin a 4 dimensioni in vece che due perlin a 2 dimensioni?
Unity Developer
Immagine
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Rumore perlin

Messaggio da Jak »

Non sono la stessa cosa inoltre se è perlin dovrebbe già includere gli "strati" quindi dovrebbe avere già il risultato finale da ottenere.
Per definizione un perlin 4D è un perlin 3D che cambia nel tempo, almeno a livello visivo. Poi chiaramente dipende da cosa devi farci, nulla ti vieta di usare N dimensioni se lo si necessita.
Nel tuo caso controlli le alture in una mappa diciamo bidimensionale quindi ti serve una funzione 2D.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: Rumore perlin

Messaggio da aironenero »

Jak ha scritto:Non sono la stessa cosa inoltre se è perlin dovrebbe già includere gli "strati" quindi dovrebbe avere già il risultato finale da ottenere.
Per definizione un perlin 4D è un perlin 3D che cambia nel tempo, almeno a livello visivo. Poi chiaramente dipende da cosa devi farci, nulla ti vieta di usare N dimensioni se lo si necessita.
Nel tuo caso controlli le alture in una mappa diciamo bidimensionale quindi ti serve una funzione 2D.
Generare una heigt map? e se usassi le 3 dimensioni applicandole ad una displacement?
Unity Developer
Immagine
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Rumore perlin

Messaggio da Jak »

Il random è molto... random appunto. Non credo verrebbe fuori una cosa tanto bella se pensi in full 3D. E' per questo che ti consigliavo di separare i concetti il più possibile per poi fonderli assieme.
Per farti un'esempio di come verrebbe fuori con il 3D.

Dipende tutto da cosa vuoi fare chiaramente ma se ciò che vuoi fare è generare un terreno dubito che usare il 3D ti aiuterebbe anzi.
Che poi una heightmap è a tutti gli effetti una displacement, son texture bidimensionali non tridimensionali.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti