Sammanfattning Block 4

Bakgrund

Med hjälp utav olika matematiska algoritmer har spelvärlden kunnat skapa spel som utspelar sig på en yta som är mycket större än man någonsin kan tänka sig.

Det klart nyaste exemplet som finns på spel med en spelvärld som genererats fram är Minecraft där olika algoritmer räknar fram världens form utseende och funktionalitet.

Det jag ville undersöka under detta block är ett par algoritmer som kan användas vid generering utav spelvärldar, Perlin Noise och Brownian Motion.

Den undersökande biten handlar om hur algoritmerna fungerar, hur det kan användas tillsammans och hur jag kan skapa en guide till dessa algoritmer för andra intresserade.

Jag har också planer på att använda det jag lär mig om dessa algoritmer i mitt kandidatarbete.

Frågeställning:

På vilket sätt kan man skapa en guide till Perlin noise och Brownian Motion?

Syfte:

Att på ett undersökande sätt utforska hur dessa algoritmer fungerar och producera en förklarande guide.

Metod:

Ta reda på hur Perlin Noise och Brownian Motion fungerar och återskapa dessa programmatiskt.

Sedan fokusera på att undersöka möjliga bra sätt att förklara dem på.

Och hitta exempel och metoder att förklara dem på.

Sedan att kompilera en guide baserat på mina efterforskningar.

Literär studie utav Perlin Noise och Brownian Motion.

Utforskning igenom att programmatiskt återskapa dessa algoritmer.

Kunskapsmål:

Utvecklat mitt sätt att förklara och förmedla information.

Kunna redogöra för hur Perlin Noise och Brownain Motion fungerar och vilka applikationer dessa kan ha.

Fördjupa och eller bredda mina professionskunskaper i digitala medier.

Algoritmerna:

Brownian Motion

Jag började med ett fokus på Brownian Motion eftersom min bakgrunds research menade att det var en mer lättförstådd algoritm iallafall i den form som jag behagade använda den alltså för generering utav 2D mönster.

Det gick ganska snabbt att få ihop en bra bild om hur den fungerar och bakgrunden till dess upptäckt.

Den upptäcktes utav Robert Brown som var botanist och studerade pollen. Han la pollenpartiklar i vatten för att försöka hålla kvar dem under sitt mikroskop då han noterade att de rörde sig på ett mycket speciellt sätt och hoppade fram och tillbaka han skrev ner sina observationer i en rapport publicerad 1828.

Sedan glömdes de i princip bort tills att Einstein konstaterade att partiklar rör sig enlight ett speciellt mönster som är mycket slumpmässigt då de blir påverkade utav andra partiklar som krockar med dem så att de studsar runt.

Applikationen detta har inom datorgrafik är att om man återskapar en partikel i from av en pixel och sedan studsar man runt den med hjälp utav en slumpgenerator och ritar ut ett spår vart än den partikelpixeln rör sig så får man fram bilder som ser ut såhär:

Weighteds

Så fort jag hade skrivit ett program som kunde generera dessa bilder så började jag att forska om Perlin Noise som uppfans utav Ken Perlin under mitten utav 80-talet.

Perlin Noise – Del 1

Det är en algortim tillsammans med sin efterträdare Simplex Noise är mycket kända för sin förmåga att generera mjuka brus bilder som kan användas vid bland annat terräng generering.

Jag fokuserade på hur Perlin Noise fungerade och lämnade den mer optimerade Simplex Noise bakom mig.

Det tog tid att få fram några vättiga renderingar efter all research jag gjort så hade mina försök att återskapa algiritmen misslykats med om män spännande resultat fortfarande relativt oanvändbara bilder.

Pedagogik

Jag passade på att göra lite research innom pedagoggik för att inte hamna efter men det känndes svårt att koncentrera sig på att hiatta bra literatur efter mitt ganska långvariga misslykande med Perlin Noise.

Jag läste delar ur lite rapporter för att försöka få lite bra tips på hur jag skulle kunna formulera min guide på ett lärorikt sätt.

Jens hjälpte mig också och föreslog att jag skulle kolla upp begrepp så som constructive alignment och jag hittade en del information och fann den intressant men svår att följa ordagrann för just guide skrivande eftersom constructive alignment är ett lite mer övergripande koncept som handlar om att studenten ska riktas in på att lösa verkliga problem med en form utav tydlig röd tråd.

Men jag tog till mig agendan att det är bra med verkliga exempel och att få lösa riktiga problem.

Under tiden jag researchade pedagogik så fann jag också en ny källa för information om Perlin Noise som var lite mer vinklad till verkliga applikationer då den källan jag misslyckats att skapa var mer inriktad åt det mer matematiska hållet.

Hemsidan jag hittade är skapad utav Elias. H. Och han använder sig utav något som kallas för Pseudo codevilket är ett sätt att destillera ner en algoritm till olika steg som måste utföras och representera de som ickefungerande men beskrivande programkod. Detta hjälpte mig något otråligt eftersom jag är programmerare så hade jag lätt att förstå hur saker och ting hängde ihop men på ett sätt som var anpassningsbart hur man än ville använda det.

Jag bestämde mig för att kolla upp pseudokod kod och se om det används på andra ställen och visst gör det det, på universitets nivå är det vanligt att man förklarar algoritmer med hjälp utav pseudokod kod så jag passade på att ta med det i min guide.

Perlin Noise – Del 2

Med min nyfunna information så kunde jag konstruera en ny perlin noise algoritm som inte bara fungerade men som hade en mycket mer lättförstådd med mindre delar i processen.

De bilder jag nu kunde generera fram var perfekta för att användas till Terräng generering.

Perlin1D_1024_6

Om man jämför med de bilder jag genererat innan så ser man en tydlig skillnad

PerlinNotWorking

Resultat:

Guiden jag producerade bygger på ett par relativt enkla riktlinjer.

Jag började med att kort beskriva vad som kommer att gås igenom för att lägga grunden för en bra struktur. Jag ger en kort bakgrund till ämnet och hur det uppkom men inte för specifikt för att hålla fokus på förståendet.

Jag lägger upp ett tanke exempel i form utav något som är mer vardagligt för att det ska vara lätt att visualisera. Och förklarar ett händelseförlopp som mynnar ut i resultatet utav händelseföljden.

Sedan förtydligar jag igenom att visa upp lite snällt kommenterad pseudokod kod som är mer konkret än vad mitt exempel är.

Jag tar sedan upp lite problematik och beskriver möjliga lösningar.

Allting fokuserat på att bygga upp förståelsen för hur det fungerar och hur det kan användas.

Efter att ha förklarat var och en utav algoritmerna för sig ger jag ett exempel på hur de kan användas tillsammans för att skapa en koppling mellan det jag precis pratade om och de resultat man kan förvänta sig när man har fullbordat sitt arbete med att tolka guiden och programmera verktygen.

Länkar med källkoden till mina egna verktyg jag skapat utifrån det jag lärt mig och länkar till informationen som jag använde.

Min guide går att hämta härifrån: https://practicalproblem.files.wordpress.com/2014/01/guide1.pdf (Ville gärna ha den i inlägget men den fick hamna som en länk)

Reflektion:

Tanken som ligger i topp nu i mitt huvud är nog om jag inte har haft ett lite felvridet fokus i min undersökning.

Det jag ville få ut ur mitt arbete var just förståelsen för dessa algoritmer jag arbetat med och inte alls lika mycket själva skrivandet utav guiden och den pedagogiska research som jag har behövt göra.

Med andra ord undrar jag om jag inte skulle ha valt en annan typ av frågeställning. Även om jag är nöjd med min guide till Perlin Noise och Brownian Motion så har jag ganska svårt att tillexempel bevisa att min guide är skriven på ett bra sätt förutom då att det jag beskriver i den bevisligen fungerar i och med att jag har byggt verktygen som renderar dessa matematiska konstverk.

Det jag känner mig nöjd med för den mesta delen är det jag har lyckats förstå hur Perlin Noise fungerar vilket kändes ganska långt borta när jag började. Jag har också haft en del svårigheter med att finna ordentliga referenser jag upplevde en känsla av att det inte var lönt att försöka låna böcker ifrån Karlskrona om pedagogik och så vidare eftersom det var så kort tid kvar och att pedagogik inte ligger inom varken mitt intresseområde eller mitt professions område.

Men det som jag har lärt mig om dessa algoritmer i deras procedurella form kommer absolut till stor hjälp vid framtida projekt och det är nog dom och den förståelse som jag har fått för dom som gör så att det känns värt det.

Tills nästa gång jag ska skriva ett arbete måste jag tänka igenom det och planera det bättre så att så mycket tid utav arbetet går ut på att skapa information och förståelse som är mer användbart inom mitt område eftersom jag är en väldigt praktisk människa har jag också en aning svårt för att göra mängder med litterär research när jag vet själv att jag lär mig bättre utav att skapa och att inspireras utav det andra skapar i kombination med mina egna erfarenheter.

Referenser:

Uppsala Universitet. (2008). Constructive alignment (samband mellan förväntade studieresultat, undervisningsformer och examination). Hämtad 2014-01-11, från URL http://www.pu.uu.se/wiki/Constructive_alignment_(samband_mellan_f%C3%B6rv%C3%A4ntade_studieresultat,_undervisningsformer_och_examination)

Hansson, T. (2012). Pedagogik, undervisining och lärande. Köpenhamn: Bookboon. Ventus Publishing ApS.

Quach, Q. (2008, 07, jan). 11 Essential Tips to Writing the Ultimate Tutorial [Blogginlägg]. Hämtad frånhttp://www.dailyblogtips.com/11-essential-tips-to-writing-the-ultimate-tutorial/

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

Information ifrån skaparen utav Perlin Noise, Ken Perlin Själv, här finns bakgrunden och excempel.

Perlin, K. (1999). Making Noise[Blogginlägg]. 
Hämtad från http://www.noisemachine.com/talk1/ (13-12-20)

Imformation om hur Brownian Motion kan framställas och användas.

Vidal. S. (2012,  02,06) Café Math : Brownian Motion (Part 1) [Blogginlägg].

Hämtad från http://www.cafemath.fr/mathblog/article.php?page=BrownianMotion.php (13-12-20)

Pedagogik, undervisning och lärande (intressant bpk om pedagogik och lite pedagogik historia)

Hansson, T. (2012). Pedagogik, undervisining och lärande. Köpenhamn: Bookboon. Ventus Publishing ApS.

Simpla tips för att skapa en tydlig och lärorik tutorial.

Quach, Q. (2008, 07, jan). 11 Essential Tips to Writing the Ultimate Tutorial [Blogginlägg]. Hämtad frånhttp://www.dailyblogtips.com/11-essential-tips-to-writing-the-ultimate-tutorial/

Advertisements

Min Guide

Tanken med mitt arbete var att resultatet skulle kunna precenteras i en guide till hur man kan använda brownian motion och perlin noise tillsammans för att skapa en procedurellt genererad värld. Och det blev något liknande, jag har försökt att förklara hur dessa matematiska algoritmer fungerar och hur de kan användas för att framställa heightmaps.

Jag har studerat en aning pedagogik och kollat hur constructive alignment, konstruktiv länkning används men jag anser att jag inte har gjort ett bra jobb att implementera det i någon guide form. Visst har min guide en röd tråd som leder till en produkt men det är ungefär där likheterna slutar. Något som jag har märkt fungerat bra för mig i mitt lärande är dock att få prova och testa på det jag lär mig.

Och jag fann ett bra sätt att relatera till det man själv gör igenom Pseudokod alltså låssas kod so är förenklad och bara finns där för att beskriva hur någonting fungerar igenom att dela upp det i instruktioner eller moment.

Det dåliga med Pseudokod är att man måste förstå lite programmering och matematik för att kunna hänga med så jag har försökt att förklara hur det fungerar i ord med liknelser också för att även om man inte förstår allt så ska man kunna hänga med och lära sig något.

Den referens jag har till Pseudokod som i alla fall är utav någon akademisk härkomst är ett kort beskrivande papper som beskrivs bäst som en “handout” ifrån Cornell University skriven utav Nishimura. N.

http://www.cs.cornell.edu/Courses/cs482/2003su/handouts/pseudocode.pdf

Min guide går att läsa här: Guide

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

Kort update

Under veckan har jag knåpat med min Perlin Noise algoritm. Har problem med något någonstans som skapar ett felaktigt noise an aning drygt.

Jag har fått en rätt bra förståelse för hur Noise algoritmen fungerar och börjar fundera på hur man kan förklara hur den fungerar.

Kommit fram till att perlin noise kan beskrivas rätt bra med hjälp utav ett rutnät med vikter hängande i sig. Idén fick jag utav Carl Sagan som måste vara/var en av de bästa  i världen på att förklara saker. Iden med rutnätet fick jag ifrån Cosmos (1980) där Carl Sagan förklarar hur svarta förändrar universum.

Såhär ser en bild ifrån min perlin noise ut för tillfället, inte så smooth.

Capture

Sagan, C. Druvan, A. Soter, S. (Författare), & Malone, A. (Regissör). (1980). Cosmos A Personal Voyage [TV-program]. USA:KCET

.

En aning pedagogik.

Idag har jag spenderat morgonen med att läsa igenom delar ur en bok om Pedagogik som jag hittade på summon som till synes är skriven utav någon utav lärarna på kampus Gräsvik. Boken heter ”Pedagogik, undervisning och lärande”. Jag har inte läst igenom hela boken men läste igenom delar och kapittel 3-4 som handlar om Pedagogens professionalism och Pedagogens hantverk.

Efter att ha läst igenom det så känns det inte som jag fått ut det jag förväntade mig. Sättet som pedagogiken framförs i den här boken känns väldigt filosofiskt och nästan lite ”kinesisk mästare med vitt långt skägg” på en del bitar. Troligtvis lite på lite för hög nivå för mig.

Jag plockade också fram en något mindre akademisk källa (en blogg artikel) som är mer som en tutorial till hur man gör bra tutorials bra utifrån författarens eget perspektiv iallafall.

Något ifrån boken jag läste som just slog mig va hur han pratade om att det finns mycket lätt tillgänglig kunskap på internet men att man ofta blir lämnad till att försöka verifiera äktheten utav informationen själv.

Hur som helst tog jag med mig ett par saker ifrån denna artikel.

Det är viktigt att först beskriva vad målet är med att läsa/titta igenom tutorialn.

Att man ska vara kort, koncis och tydlig.

Att använda verktyg så som bilder och demonstrationer är viktigt för att skapa förstående.

Förklara så att en 10åring kan följa med.

Referenser:

Hansson, T. (2012). Pedagogik, undervisining och lärande. Köpenhamn: Bookboon. Ventus Publishing ApS.

Quach, Q. (2008, 07, jan). 11 Essential Tips to Writing the Ultimate Tutorial [Blogginlägg]. Hämtad från http://www.dailyblogtips.com/11-essential-tips-to-writing-the-ultimate-tutorial/

Brownian Motion

Innan min arbetsplan var klar hade jag börjat undersöka brownian motion som jag hittade i samband med att jag letade efter information om perlin noise för min bakgrund. Brownian motion upptäcktes utav Robert Brown år 1827. 

Brownian motion är namnet på en modell baserat på en observation som beskriver hur partiklar rör sig. Om man gör den till en graf där man genererar Browniam motion kallas det för  “Random Walk”. Den algoritm jag har använt mig utav för att generera bilder/grafer utav Brownian motion är en Random Walk algoritm i 2D (den är altså uträknad och utrirad i två dimensioner) är relativt simpel och jag lyckades utforma den utifrån den korta beskrivning som finns på Wikipedia. Jag har också tragglat mig igenom delar utav den text som Robert skrev i 1800-talets begynnelse för  och det är en rätt intressant läsning som handlar om hur han observerat små pollen partiklars rörelser och förändringar.

Det jag själv har experimenterat med har gett en del positiva resultat i mån utav användbarhet inom Procedural generation, här kommer ett par utav de textur grafer jag har genererat matematiskt.

Test

Den här bilden i kombination med en Perlin Noise skulle kunna beskriva vart man ska placera vatten tillexempel.

Alternativt att man skulle kunna ha den för att bestämma vart det ska finnas landmassor eller ha den för att styra blandningen utav olika terräng typer.

 

 

 

 

 

 

 

 

 

 

 

Test_x4_smudge_2

Den här bilden är en modifierad version utav algoritmen jag satte ihop och den genererar denna “Random walk” med  med mellanrum och ger en effekt utav en suddigare mer utsmoothad graf. Denna skulle man kunna använda för att beskriva bergskedjor på en kontinent.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Algoritmen jag använder är relativt lättförstådd och jag kommer att utveckla en bättre förklaring med tiden men den fungerar igenom att man väljer ut en punkt att börja på. Man väljer sedan ut en riktning att börja dra ett sträck åt och för varje pixel i bilden väljer vi att addera en ny riktning på den riktning som vi drar sträcket på. Den riktningen som adderas ska vara utav helt slumpmässigt genererad. Eftersom en dator inte kan generera helt slumpmässiga tal måste vi använda oss utav en en slumpgenerator som iallafall försöker efterlikna helt slumpmässiga tal.

Här är ett kodexempel jag skrivit:

http://pastebin.com/LaUCtycm

 

 

 

Brown, R, “A brief account of microscopical observations made in the months of June, July and August, 1827, on the particles contained in the pollen of plants; and on the general existence of active molecules in organic and inorganic bodies.” Phil. Mag. 4, 161–173, 1828