Protseduuriline müra

Allikas: Vikipeedia

Protseduurilise müra (inglise keeles procedural noise) all mõeldakse arvutigraafikas juhuslikku ja struktureerimata mustrit. Matemaatiliselt võib sellest mõelda kui 𝑛-kohalisest deterministlikust funktsioonist 𝑓, mis kujutab iga 𝑛-kohalise reaalarvude vektori mingiks juhuslikuks reaalarvuks.

Kuigi osad mürad on juhuslikud, siis enamik mürasid kasutab arvude genereerimiseks mingit pseudojuhuslikku arvu, mida nimetatakse seemneks. Selle tõttu on võimalik täpselt sama juhuslik müra saada ühe kindla seemnega. See on kasulik kohtades, kus on vajadus luua samasuguseid ulatuslikke detaile mitmeid kordi ilma kindla struktuurita. Müra kasutus on laialt levinud pilditöötluses ja modelleerimises, kuid tihti kasutatakse seda ka videomängudes sisu juurde loomisel (arvuti juhuslik käitumine, erinevate mängumaailmade genereerimine jms).[1][2][3]

Protseduurilised mürafunktsioonid[muuda | muuda lähteteksti]

Ülevaade[muuda | muuda lähteteksti]

Mürafunktsioone hakati kasutusele võtma 1980. aastatel, et asendada objektidele lisatavad mälurohked pildid, kuna tol ajal ei olnud arvutil piisavalt mälu ning taheti luua reaalsusega võimalikult sarnaseid tekstuure. Esmalt loodi väärtusmürasarnaseid algoritme, kuid need meenutasid rohkem udukogusid. 1985. aastal avaldas Ken Perli, kes oli gradientmüra alal üks esimesi ja andis esimese detailse kirjelduse gradientmürast, mida teatakse tänapäeval Perlini mürana. Ken Perli eesmärk oli muuta ümber arvutigraafika frustreeriv "masinlik" vaade.[4]

Mürafunktsioone võime liigitada kolme kategooriasse:

  • väärtusmüra,
  • gradientmüra,
  • hõredatel konvendimuutustel põhinev müra või punktidel põhinev müra.[1]

Gradientmüra[muuda | muuda lähteteksti]

Gradientmürade ühine element on võre või võrk, mis jagab ala väiksemates sektsioonides (tavaliselt ruutudeks, kuid mitte tingimata). Gradientmüra puhul määratakse igale võrestiku tipule pseudojuhuslik gradient, mille järgi interpoleeritakse lineaarselt vahepealsed väärtused. Gradient on mitme muutuja funktsiooni 𝑓 kiireima kasvamise suunda ja kiirust antud punktis iseloomustav vektor.[3] Algoritm liigub mööda ruudustikku, mis tekitab mürafunktsiooni igas ruudus. Tavaliselt tundub see müra "udune", nii et seda protsessi korratakse mitu korda, kasutades väiksemaid võrke, mis asetsevad eelmise kihi peal, et parandada määratlust. Igal kihil on kitsaribaline sagedusala, mis on proportsioonis ruudukujulise suurusega. Lisades uusi väiksemaid võrgukihte, suurendame müra kõrget sagedust ja parandame selle määratlust. Igat kihti kutsutakse oktaaviks. Peamised (ja peaaegu ainsad) üldkasutatavad gradientmüra algoritmid on Perlini müra ja selle derivaadid (simpleksalgoritmina).[5]

Väärtusmüra[muuda | muuda lähteteksti]

Nagu gradientmüral on ka väärtusmüral ühiseks elemendiks kas võre või võrk. Väärtusmüra erinebki põhiliselt ainult selle poolest, et gradientmüra puhul määratakse igale võrestiku tipule pseudojuhuslik gradient, aga väärtusmüral on selle asemel skalaarsed väärtused. Väärtusmüra tagastab mürafunktsioon interpoleeritud numbri, lähtudes ümbritsevate võre punktide väärtustest.[1]

Hõredatel konvendimuutustel põhinev müra[muuda | muuda lähteteksti]

Hõredatel konvendimuutustel põhinev müra tekib juhuslikult ja suvaliselt asetatud ning kaalutud punktide summana. Hõredatel konvendimuutustel põhinev müra kõige tuntumad esindajad on hõre konvolutsioonimüra, punktmüra ja Gabori müra.[1]

Viited[muuda | muuda lähteteksti]

  1. 1,0 1,1 1,2 1,3 Ares Lagae, Sylvain Lefebvre, Rob Cook, Tony Derose, George Drettakis (2010). "A Survey of Procedural Noise Functions" (pdf). Computer Graphics Forum (Inglise keel). Wiley: The Eurographics Association and Blackwell Publishing Ltd. Protseduuriliste mürafunktsioonide kokkuvõte. Vaadatud 03.11.2018.{{netiviide}}: CS1 hooldus: mitu nime: autorite loend (link) CS1 hooldus: tundmatu keel (link)
  2. Richard Moss (2006). "7 Uses of Procedural Generation That All Developers Should Study" (html). Computer Graphics Forum (Inglise keel). gamasutra.com: Gamasutra. Seitse protseduurilise genereerimise viisi, mida iga arendaja peaks teadma. Vaadatud 03.11.2018.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
  3. 3,0 3,1 Andreas Sepp (2016). "Protseduuriline lõpmatu maastiku genereerimine" (pdf). TÜ arvutiteaduse instituudi bakalaureusetöö (Eesti keel). Tartu: TÜ arvutiteaduse instituut. Protseduuriline maastiku genereerimine, kus kasutati mürafunktsioone. Vaadatud 03.11.2018.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
  4. Ken Perli (09.12.1999). "Making noise". GDCHardCore (Inglise keel). GDCHardCore. Ken perli mürafunktsioonidest. Originaali (powerpoint) arhiivikoopia seisuga 3. märts 2016. Vaadatud 03.11.2018.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
  5. Juan Ignacio Tel (20. november 2014). "A Generic Lattice Noise Algorithm, An Evolution of Perlin Noise" (html). Codeproject (Inglise keel). Codeproject. Mürafunktsioonide evolutsioon. Vaadatud 03.11.2018.{{netiviide}}: CS1 hooldus: tundmatu keel (link)