Rumore di Perlin con OpenGL
-
27-09-2019 - |
Domanda
I studiava Rumore di Perlin attraverso alcuni esempi @ http://dindinx.net /OpenGL/index.php?menu=exemples&submenu=shaders e non poteva fare a notare che il suo make3DNoiseTexture()
negli usi perlin.c
noise3(ni)
invece di PerlinNoise3D(...)
Ora, perché è quello? Non è Perlin Noise dovrebbe essere una sommatoria di diverse frequenze di rumore e ampiezze?
Qestion 2 è quello che fa basamento ni, inci, incj, inck
per? Perché utilizzare ni
invece di coordinate x, y? Perché è ni
incrementate con
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Vedo Hugo Elias ha creato la sua Perlin2D con coordinate x, y, e così fa PerlinNoise3D (...).
Grazie in anticipo:)
Soluzione
Adesso capisco perché e ho intenzione di rispondere alla mia domanda, nella speranza che aiuta altre persone.
Il rumore di Perlin è in realtà una sintesi di rumori di gradiente. Nel suo processo di produzione, è necessario calcolare il prodotto scalare di un vettore che punta da uno degli angoli pavimentazione del punto di ingresso al punto di ingresso stessa con il vettore gradiente casuale generata.
Ora, se il punto di ingresso fosse un numero intero, come ad esempio le coordinate xyz di una texture che si desidera creare, il prodotto scalare sarebbe sempre tornare 0, che darebbe un rumore piatto. Così, invece, usiamo inci, incj, inck
come un indice alternativo. Sì, solo un indice, niente altro.
Ora tornando alla domanda 1, ci sono due metodi per implementare Rumore di Perlin:
1.Calculate i valori di rumore separatamente e memorizzarli nelle fessure RGBA nella texture
2.Synthesize i rumori prima mano e memorizzarli in uno degli slot RGBA nella consistenza
noise3(ni)
è l'effettiva attuazione del metodo 1, mentre PerlinNoise3D(...)
suggerisce quest'ultimo.
A mio parere personale, il metodo 1 è molto meglio perché si ha molta più flessibilità su come si usa ogni ottava nei vostri shaders.
Altri suggerimenti
La mia ipotesi sulla ragione per l'utilizzo in noise3(ni)
make3DNoiseTexture()
invece se PerlinNoise3D(...)
è che quando si utilizza tale consistenza rumore nella vostra Shader si vuole essere in grado di replicare e modificare la funzionalità di PerlinNoise3D(...)
direttamente nello shader.
mia ipotesi per il ragionamento dietro ni, inci, incj, inck
è che con x, y, z del volume direttamente non dare un buon risultato in modo scalando il rumore con la frequenza invece è possibile regolare la risoluzione del rumore indipendentemente dalla dimensione del volume.