Perlin Noise, äntligen!

Under helgen har jag främst arbetat med att få min perlin noise generator att fungera som den ska med blandade framgångar.

Dock så bestämde jag mig för att bygga om den ifrån grunden för att försöka göra den mer lättförståelig mestadels för mig själv och för att försöka inse vilka snedsteg jag tagit under konstruktionen utav min första prototyp.

Jag behöver gå till botten med hur saker och ting ter sig så därför bestämde jag mig för att applicera Perlins noise algoritm på en dimension för att se hur den ter sig resultatet blev en ganska tråkig bild men den är på helt rätt väg.

1DPerlin

Om man nu skulle låta den röda kurvan kontrollera ljusstyrkan hos pixlarna i en bild så blir det ganska klart iallafall för mig hur detta skulle kunna appliceras på en multidimensionell nivå.

För att återgå till de problemen jag hade med min förra generator så finns det ett par oupptäkta fel som får mina noice renderingar att bli väldigt kantiga.

Jag arbetade vidare med den nya prototypen med ett bättre underlag.

Men med hjälp utav en webbsida troligtvis skriven utav en person som heter Hugo Elias och hans förklaring och

Pseudo-code:

kunde jag ta reda på vad som gått fel.

Först som jag befarade hade jag utfört det som i princip är Perlin noise och det råkar vara så att man lägger ihop lager utav olika storlekar på varandra för att få fram ett brus som jämnar ut sig själv.

Det andra ganska fundamentala felet jag gjorde var att jag inte använde en bättre metod för att blanda pixlarna med vilket ledde till den kantiga bilden ovan.

Under arbetet med den nya metoden som beskrivs mindre utförligt i ord än vad den förra artikeln jag läste men denna artikel har pseudo-kod för att förklara de de flesta momenten. pseudo -kod är programmkod som inte är designad för att fungera men beskriver hur någonting går till. Som ett påhittat programspråk. Det hjälpte mig förstå bättre hur saker och ting fungerade i och med att jag inte är matematiker.

Hur som helst nu kan jag generera bilder som faktiskt ser ut som och är perlin noise:

PerlinSmooth PerlinLessSmooth

Dessa bilder genererade jag nu under måndagskvällen direkt efter att jag fått min generator att fungera! Otroligt glad över att jag fick den att utföra sig uppgift korrekt den här gången.

Började bli kämpigt att försöka få denna algoritm att fungera.

Min förra generator prototyp genererade bilder som såg ut såhär bara som referens:

PerlinNotWorking

Jag kombinerade en utav mina ny genererade noise bilder med en bild genererad ifrån min Brownian motion generator och fick fram följande bild:
terrain_myperlin_8_v2

De lite svartare fläckarna är en Brownian motion rendering som jag blandade in i min perlin noise rendering för att skapa en terräng med sjöar och resultatet blev som följer i World Machine som är ett terräng renderings redskap. Jag matade in den svarvita bilden för att kontrollera höjden på världen:

BrownianPerlin

BrownianMotionPerlin_32

Det blev ganska fint om man jämför med hur det är att titta på hundratals svartvita bilder som har matematiska artefakter i sig.

Ref:

Zucker, M. (2001). The Perlin noise math FAQ [Webbsida]. Hämtad ifrån http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html

Elias, H (2003). Perlin Noise [Websida]. Hämtad ifrån http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

Advertisements