Mis on mängus varjutajad? Kuidas installida varjutid Minecraftile? Mida varjutajad vastavad.

Ülemaailmse arvutistamisega on meie maailma jõudnud tohutu hulk arusaamatuid termineid. Kõigi nendega tegelemine pole nii lihtne, kui esmapilgul tundub. Paljud neist on nime poolest sarnased, paljudel on lai funktsionaalsus. On aeg teada saada, mis on shader, kust see pärineb, milleks see on mõeldud ja mis see on.

Optimeerija

Tõenäoliselt olete innukas Minecrafti mängija ja sellepärast tulite uurima, mis see on. Kohe tuleb märkida, et mõiste "varjutaja" on sellest mängust kergesti eraldatav ja võib sellest eraldi "elada". Täpselt nagu modifikatsioonid. Seetõttu ei tasu neid kahte mõistet tihedalt siduda.

Üldiselt pärineb varjutaja programmeerimisest, ilmus spetsialistide assistendina. Tõenäoliselt on seda tööriista optimeerijaks nimetamine valju, kuid see parandab tõesti mängude pilti. Niisiis, kui olete juba hakanud umbes aru saama, mis see on, liigume edasi täpse tõlgendamise juurde.

Tõlgendamine

Mis on shader? mida täidavad videokaardi protsessorid. Need tööriistad on välja töötatud spetsiaalses keeles. Sõltuvalt eesmärgist võib see olla erinev. Pärast seda tõlgitakse varjutid tinglikult graafikakiirendi protsessorite juhisteks.

Rakendus

Peab kohe ütlema, et rakendus tervikuna on määratud eesmärgiga. Programmid on integreeritud videokaardiprotsessoritesse, mis tähendab, et need töötavad kolmemõõtmelise graafika objektide ja piltide parameetrite kallal. Nad saavad täita mitmesuguseid ülesandeid, sealhulgas töötada peegelduse, murdumise, tumenemise, nihkeefektide jms abil.

Eeldus

Inimesed on juba pikka aega püüdnud teada saada, mis on varjutaja. Juba enne neid programme tegid arendajad kõik käsitsi. Mõnest objektist pildi moodustamise protsessi ei automatiseeritud. Enne mängu sündi tegid arendajad ise renderdamise. Nad töötasid algoritmiga, koostasid selle erinevate ülesannete jaoks. Nii et seal olid juhised tekstuuride, videoefektide jms rakendamiseks.

Muidugi, mõned protsessid olid videokaartide töösse ikka sisse ehitatud. Selliseid algoritme saavad arendajad kasutada. Kuid nad ei suutnud oma algoritme videokaardile peale suruda. Mittestandardseid juhiseid võis täita protsessor, mis oli aeglasem kui GPU.

Näide

Erinevuse mõistmiseks tasub vaadata paari näidet. Ilmselt võib mängus renderdamine olla riist- ja tarkvara. Näiteks mäletame me kõik kuulsat Quake 2. Niisiis, mängu vesi võib riistvara renderdamise puhul olla lihtsalt sinine filter. Kuid tarkvara sekkumisega ilmnes veepritsmed. CS 1.6 -ga on sama lugu. Riistvara renderdamine andis ainult valge välgu, samas kui tarkvara renderdamine lisas piksliga ekraani.

Juurdepääs

Nii sai selgeks, et selliseid probleeme on vaja lahendada. Graafika kiirendid hakkasid arendajate seas populaarsete algoritmide arvu laiendama. Sai selgeks, et kõike “toppida” on võimatu. Vaja oli avada juurdepääs videokaardi spetsialistidele.

Enne mänge nagu Minecraft koos modifikatsioonide ja varjunditega anti arendajatele võimalus töötada GPU plokkidega torujuhtmetes, mis võivad vastutada erinevate juhiste eest. Nii said tuntuks programmid nimega "shader". Nende loomiseks töötati spetsiaalselt välja programmeerimiskeeled. Niisiis, videokaarte hakati laadima mitte ainult tavalise "geomeetriaga", vaid ka protsessori juhistega.

Kui selline juurdepääs sai võimalikuks, hakkasid avanema uued programmeerimisvõimalused. Spetsialistid saaksid lahendada GPU matemaatilisi probleeme. Neid arvutusi hakati nimetama GPGPU -ks. See protsess nõudis spetsiaalseid tööriistu. Alates nVidia CUDA -st, Microsoft DirectCompute'ist ja OpenCL -i raamistikust.

Tüübid

Mida rohkem inimesi õppis, mis on varjutajad, seda rohkem teavet nende ja nende võimete kohta paljastati. Esialgu oli kiirenditel kolm protsessorit. Igaüks vastutas oma varjutajatüübi eest. Aja jooksul asendati need universaalsega. Igal neist oli teatud juhiste komplekt, millel oli korraga kolme tüüpi varjutus. Vaatamata teose liitmisele on iga tüübi kirjeldus säilinud tänapäevani.

Vertex tüüp töötas paljude nägudega kujundite tippudega. Kaasatud on palju tööriistu. Näiteks räägime tekstuuri koordinaatidest, puutuja, binormaalse või normaalse vektoritest.

Geomeetriline tüüp töötas mitte ainult ühe tipuga, vaid ka terve primitiiviga. Pixel oli mõeldud bitikaardi illustratsioonide fragmentide ja tekstuuride töötlemiseks üldiselt.

Mängudes

Kui otsite Minecraft 1.5.2 jaoks varjendeid, siis soovite suure tõenäosusega lihtsalt mängu pilti parandada. Selle võimaldamiseks käisid programmid läbi "tule-, vee- ja vasktorud". Varjusid testiti ja täiustati. Selle tulemusena sai selgeks, et sellel tööriistal on oma eelised ja puudused.

Muidugi on erinevate algoritmide koostamise lihtsus tohutu pluss. See on nii paindlikkus kui ka märgatav lihtsustus mänguarendusprotsessis ja seega ka kulude vähenemine. Saadud virtuaalsed stseenid muutuvad keerukamaks ja realistlikumaks. Samuti muutub arendusprotsess ise kordades kiiremaks.

Puudustest väärib märkimist ainult see, et peate õppima ühe programmeerimiskeele ja arvestama ka sellega, et videokaartide erinevatel mudelitel asuvad erinevad algoritmide komplektid.

Paigaldamine

Kui olete leidnud Minecrafti jaoks varjupaketi, peate mõistma, et selle installimisel on palju lõkse. Vaatamata selle mängu niigi hääbuvale populaarsusele on selle ustavad fännid endiselt alles. Kõigile ei meeldi graafika, eriti 2017. aastal. Mõned inimesed arvavad, et tänu varjutajatele suudavad nad seda parandada. Teoreetiliselt on see väide õige. Kuid praktikas ei muuda te palju.

Kuid kui otsite endiselt võimalusi "Minecraft 1.7" jaoks, siis olge esiteks ettevaatlik. Protsess ise pole keeruline. Lisaks on koos allalaaditava failiga selle installimise juhis. Peamine asi on kontrollida mängu ja varjutaja versioone. Vastasel juhul ebaõnnestub optimeerija.

Internetis on palju kohti, kus saate sellist tööriista installida ja alla laadida. Järgmisena peate arhiivi mis tahes kausta lahti pakkima. Sealt leiate faili "GLSL-Shaders-Mod-1.7-Installer.jar". Pärast alustamist näidatakse teile mängu teed, kui see on õige, siis nõustuge kõigi järgnevate juhistega.

Seejärel peate kausta "shaderpacks" teisaldama kausta ".minecraft". Nüüd, kui käivitate käivitaja, peate minema seadete juurde. Siin, kui installimine oli õige, ilmub rida "Shaders". Saate valida soovitud paketi kogu loendist.

Kui vajate Minecraft 1.7.10 jaoks varjendeid, leidke lihtsalt vajaliku versiooni varjupakk ja tehke sama. Ebastabiilseid versioone võib leida Internetist. Mõnikord peate vahetama, uuesti installima ja sobiva otsima. Parem on vaadata ülevaateid ja valida kõige populaarsemad.

Sissejuhatus

3D -graafika maailm, sealhulgas mängud, on täis termineid. Mõisted, millel pole alati ainus õige määratlus. Mõnikord nimetatakse samu asju erinevalt ja vastupidi, sama efekti võib mängu seadetes nimetada "HDR", siis "Bloom", siis "Glow", seejärel "Postprocessing". Enamik inimesi, arendajate kiidelda, mida nad on ehitatud oma graafika mootor, on segaduses, mida nad tegelikult tähendavad.

Artikli eesmärk on aidata teil mõista, mida mõned neist sõnadest, mida sellistel juhtudel kõige sagedamini kasutatakse, tähendavad. Selle artikli raames ei räägi me kõigist 3D -graafika tingimustest, vaid ainult nendest, mis on viimastel aastatel laiemalt levinud kui mängugraafika mootorites kasutatavad eripärad ja tehnoloogiad ning kaasaegsete mängude graafiliste seadete nimed . Alustuseks soovitan soojalt tutvuda.

Kui miski selles artiklis ja Aleksandri artiklites pole teile selge, siis on mõttekas alustada kõige varasemast, lk. Need artiklid on muidugi juba mõnevõrra vananenud, kuid põhilised, kõige esialgsemad ja olulisemad andmed on olemas. Me räägime teiega rohkem "kõrgema taseme" tingimustest. Teil peaks olema põhiteadmised 3D-reaalajas graafikast ja graafikatoru struktuurist. Teisest küljest ärge oodake matemaatilisi valemeid, akadeemilist täpsust ja koodinäiteid - see pole üldse see artikkel. Tingimused

Artiklis kirjeldatud terminite loend:

Varjutaja

Shader laiemas mõttes on programm objekti pinna visuaalseks määratlemiseks. See võib olla valgustuse, tekstuuri, järeltöötluse jms kirjeldus. Varjurid kasvasid välja Cooki varjundipuudest ja Perlini pikslivoo keelest. RenderMan Shading Language on nüüd kõige kuulsam. Programmeeritavad varjutid võeti esmakordselt kasutusele Pixari RenderManis, mis määratleb mitut tüüpi varjundeid: valgusallika varjud, pinna varjud, nihkevarjud, helitugevuse varjundid , pildistajate varjundid. Neid varjendeid teostavad kõige sagedamini universaalsed protsessorid tarkvaras ja neil puudub täielik riistvara. Hiljem kirjeldasid paljud teadlased RenderManiga sarnaseid keeli, kuid need olid juba mõeldud riistvarakiirenduseks: PixelFlow süsteem (Olano ja Lastra), Quake Shader Language (kasutab id Software tarkvara mängu Quake III graafikamootoris, mis kirjeldas mitmeliigilist renderdamist) jne RenderMani varjutajad murdsid mitmesse Kaadripuhveris kombineeritud söötude arv. Hiljem oli keeli, mille puhul näeme DirectXis ja OpenGLis riistvara kiirendatud. Nii kohandati varjutid reaalajas graafikarakenduste jaoks.

Varased videokiibid ei olnud programmeeritavad ja sooritasid ainult eelprogrammeeritud toiminguid (fikseeritud funktsiooniga), näiteks valgustusalgoritm oli riistvaras jäigalt fikseeritud ja midagi ei saanud muuta. Seejärel tutvustasid videokiipide tootjad oma kiipidesse järk -järgult programmeeritavuse elemente, algul olid need väga nõrgad võimalused (NV10, tuntud kui NVIDIA GeForce 256, oli juba võimeline mõningate primitiivsete programmide jaoks), mis ei saanud tarkvaratoetust Microsoft DirectX API -s, kuid kuna aja jooksul on võimalused pidevalt laienenud. Järgmine samm oli nii NV20 (GeForce 3) kui ka NV2A (Microsoft Xboxi mängukonsoolis kasutatav videokiip) jaoks, millest said esimesed kiibid, millel oli riistvaraline tugi DirectX API varjunditele. Versioon Shader Model 1.0 / 1.1, mis ilmus DirectX 8 -s, oli väga piiratud, iga varjutaja (eriti pikslite puhul) võis olla suhteliselt väikese pikkusega ja kombineerida väga piiratud juhiseid. Hiljem täiustati Shader Model 1 (lühidalt SM1) Pixel Shaders 1.4 (ATI R200) ​​abil, mis pakkus rohkem paindlikkust, kuid millel oli ka liiga piiratud võimalused. Toonased varjutajad olid kirjutatud niinimetatud assembly shaderi keeles, mis on üldotstarbeliste protsessorite koostamiskeele lähedane. Selle madal tase tekitab teatud raskusi koodi mõistmisel ja programmeerimisel, eriti kui programmikood on suur, sest see pole kaugeltki kaasaegsete programmeerimiskeelte elegants ja struktuur.

Shader Model 2.0 (SM2) versioon, mis ilmus DirectX 9-s (mida toetas videokiip ATI R300, millest sai esimene varjutaja mudeli versiooni 2.0 toetav GPU), laiendas oluliselt reaalajas varjutusvõimalusi, pakub pikemaid ja keerukamaid varje ning märkimisväärselt laiendatud juhiseid. Lisati võimalus ujukoma arvutusi teha pikslivarjudes, mis oli samuti suur edasiminek. DirectX 9 tutvustas SM2 võimaluste ees ka kõrgetasemelist varjutajakeelt (HLSL), mis on väga sarnane C keelega. Ja tõhus kompilaator, mis teisendab HLSL-programmid madala tasemega riistvara sõbralikuks koodiks. Lisaks on erinevate riistvaraarhitektuuride jaoks saadaval mitmeid profiile. Nüüd saab arendaja kirjutada ühe HLSL -varjutajakoodi ja kompileerida selle DirectX -i abil kasutaja installitud videokiibi optimaalsesse programmi. Pärast seda ilmusid NVIDIA, NV30 ja NV40 kiibid, mis täiustasid riistvaraliste varjutusvõimaluste sammu võrra edasi, lisades veelgi pikemaid varjundeid, dünaamiliste üleminekute võimalust tippude ja pikslite varjundites, võimalust tippude varjunditest tekstuure hankida jne. . ei olnud, neid oodatakse DirectX 10 -s 2006. aasta lõpus ...

Üldiselt on varjutajad lisanud graafika torustikule palju uusi võimalusi tippude teisendamiseks ja valgustamiseks ning pikslite individuaalseks töötlemiseks nii, nagu iga konkreetse rakenduse arendajad seda soovivad. Ja veel, riistvara varjutusvõimalusi pole rakendustes veel täielikult avalikustatud ja kuna nende võimalused suurenevad iga uue riistvarapõlvkonnaga, näeme peagi nende RenderMani varjude taset, mis kunagi tundusid videomängude kiirendajate jaoks kättesaamatud. Siiani on riistvaraliste videokiirenditega toetatud reaalajas varjamudelites määratletud ainult kahte tüüpi varje: ja (DirectX 9 API määratluses). DirectX 10 lubab neile tulevikus lisada.

Vertex Shader

Vertex -varjundid on programmid, mida täidavad videokiibid, mis sooritavad tippudega matemaatilisi toiminguid (tipp, need moodustavad mängudes 3D -objekte), teisisõnu, need võimaldavad käivitada programmeeritavaid algoritme tippude ja nende valgustuse parameetrite muutmiseks (T&L - Teisendamine ja valgustus) ... Iga tipp on määratletud mitme muutujaga, näiteks määratakse tipu asukoht 3D -ruumis koordinaatide abil: x, y ja z. Tippe saab kirjeldada ka värviomaduste, tekstuuri koordinaatide jms abil. Vertexi varjutid muudavad olenevalt algoritmidest neid andmeid oma töö käigus, näiteks arvutades ja kirjutades uusi koordinaate ja / või värvi. See tähendab, et tipu varjutaja sisendandmed on andmed parajasti töödeldava geomeetrilise mudeli ühe tipu kohta. Tavaliselt on need ruumilised koordinaadid, normaalsed, värvikomponendid ja tekstuuri koordinaadid. Saadud käivitatud programmi andmed on sisendiks torujuhtme edasisele osale, rasterisaator teeb kolmnurga pinna sisendandmete lineaarse interpoleerimise ja täidab iga piksli jaoks vastava pikslivarjundi. Väga lihtne ja konarlik (aga selge, ma loodan) näide: tippude varjutaja võimaldab teil võtta 3D -sfääri objekti ja tipuvarjutaja abil sellest rohelise kuubi teha :).

Enne NV20 videokiibi tulekut oli arendajatel kaks võimalust, kas kasutada oma programme ja algoritme, mis muudavad tippude parameetreid, kuid siis teeks kõik arvutused protsessor (tarkvara T&L) või tugineks fikseeritud videokiipide algoritmid, mis toetavad riistvara ümberkujundamist ja valgustust (riistvara T&L). Esimene DirectX varjamudel tähendas suurt sammu edasi tippude teisendamise ja valgustamise fikseeritud funktsioonidelt täielikult programmeeritavatele algoritmidele. Võimalikuks sai näiteks nülgimisalgoritmi täitmine täielikult videokiipidel ja enne seda oli ainus võimalus nende täitmine universaalsetel keskprotsessoritel. Nüüd, kui võimalused on pärast eelnimetatud NVIDIA kiipi tunduvalt paranenud, saate tippudega palju ära teha, kasutades tippude varjundeid (välja arvatud nende loomine) ...

Näited selle kohta, kuidas ja kus kasutatakse tippude varjundeid:

Pixel Shader

Pikslivarjundid on programmid, mida videokiip täidab pildi iga piksli jaoks rasteriseerimise ajal, nad võtavad tekstuuri proovivõtmise ja / või matemaatilised toimingud pikslite värvi- ja sügavuseväärtusele (Z-puhver). Kõik pikslivarjundi juhised täidetakse pikslite kaupa pärast geomeetria muundamise ja valgustusoperatsioonide lõpuleviimist. Oma töö tulemusena toodab pikslivarjutaja pikslivärvi lõpliku väärtuse ja Z-väärtuse graafilise torujuhtme järgmiseks etapiks, segamiseks. Lihtsaim näide pikslivarjundist, mida saab tsiteerida: banaalne multitekstreerimine, lihtsalt kahe tekstuuri (näiteks hajus ja valguskaart) segamine ja arvutuse tulemuse pikslile surumine.

Enne pikslivarjurite riistvaratoega videokiipide tulekut oli arendajatel ainult tavapärase multitekstreerimise ja alfa -segamise võimalused, mis piirasid oluliselt paljude visuaalsete efektide võimalusi ega võimaldanud teha suurt osa sellest, mis praegu saadaval on. Ja kui geomeetriaga saaks programmiliselt midagi muud teha, siis pikslitega - ei. DirectXi varasemad versioonid (kuni 7,0 (kaasa arvatud)) tegid alati kõik arvutused vertikaalselt ja pakkusid viimastel versioonidel äärmiselt piiratud funktsionaalsust pikslivalgustuse jaoks (pidage meeles EMBM - keskkonna löögi kaardistamine ja DOT3). Pikslivarjundid võimaldasid arendaja programmeeritud materjalide abil pikslit pikslit pinda valgustada. NV20 -s ilmunud pikslivarjundid 1.1 (DirectX -mõttes) ei suutnud mitte ainult multitekstreerida, vaid ka palju muud, kuigi enamik SM1 -d kasutavaid mänge kasutasid enamikul pindadel lihtsalt traditsioonilist multitekstreerimist, teostades keerukamaid pikslivarjendeid ainult osal pinnad, erinevate eriefektide loomiseks (kõik teavad, et vesi on endiselt kõige tavalisem näide pikslivarjude kasutamisest mängudes). Nüüd, pärast SM3 ja neid toetavate videokiipide tulekut, on pikslivarjurite võimalused kasvanud, et lubada isegi kiirreisimist, ehkki teatud piirangutega.

Näiteid pikslivarjundite kasutamisest:

Protseduurilised tekstuurid

Protseduurilised tekstuurid on matemaatiliste valemitega kirjeldatud tekstuurid. Sellised tekstuurid ei võta videomälus ruumi, need on loodud pikslivarju abil "lennult", iga nende element (texel) saadakse vastavate varjutajakäskude täitmise tulemusena. Kõige tavalisemad protseduurilised tekstuurid: erinevat tüüpi müra (näiteks fraktaalmüra), puit, vesi, laava, suits, marmor, tuli jne, st need, mida saab suhteliselt lihtsalt matemaatiliselt kirjeldada. Protseduurilised tekstuurid võimaldavad teil kasutada ka animeeritud tekstuure, muutes vaid pisut matemaatilisi valemeid. Näiteks näevad sel viisil tehtud pilved päris korralikud välja nii dünaamikas kui ka staatilises vormis.

Protseduuriliste tekstuuride eelised hõlmavad ka iga tekstuuri piiramatut detailsust, pikseldamist lihtsalt ei toimu, tekstuur genereeritakse alati selle kuvamiseks vajaliku suurusega. Animeeritud pakub ka suurt huvi, selle abiga saate veele laineid lüüa, ilma eelnevalt arvutatud animeeritud tekstuure kasutamata. Selliste tekstuuride pluss on ka see, et mida rohkem neid tootes kasutatakse, seda vähem tööd kunstnikel (ehkki programmeerijatel rohkem) tavaliste tekstuuride loomiseks.

Kahjuks pole protseduurilisi tekstuure mängudes veel korralikult kasutatud, reaalsetes rakendustes on sageli lihtsam tavalist tekstuuri laadida, videomälu mahud kasvavad hüppeliselt, kõige kaasaegsematesse kiirenditesse installivad nad juba 512 megabaiti spetsiaalne videomälu, mida on vaja rohkem kui midagi laenata. Veelgi enam, nad teevad sageli vastupidist - pikslivarjundite matemaatika kiirendamiseks kasutavad nad otsingutabeleid (LUT) - spetsiaalseid tekstuure, mis sisaldavad arvutuste tulemusena saadud eelnevalt arvutatud väärtusi. Et mitte arvestada iga piksli kohta paar matemaatikajuhendit, loevad nad tekstuurist lihtsalt ette arvutatud väärtused. Kuid mida kaugemale, seda rohkem peaks rõhk matemaatiliste arvutuste poole liikuma, võtke samad uue põlvkonna ATI videokiibid: RV530 ja R580, millel on vastavalt 12 ja 48 piksliprotsessorit iga 4 ja 16 tekstuuriühiku kohta. Veelgi enam, kui me räägime 3D-tekstuuridest, sest kui kahemõõtmelisi tekstuure saab kiirendi kohalikku mällu probleemideta paigutada, siis 3D-tekstuurid nõuavad seda palju rohkem.

Menetluslike tekstuuride näited:

Muhke kaardistamine / Specular Bump Mapping

Bumpmapping on tehnika ebakorrapärasuste simuleerimiseks (või mikroreljeefi modelleerimiseks, kui soovite) tasasele pinnale ilma suurte arvutuskulude ja geomeetria muutusteta. Iga pinna piksli kohta tehakse valgustusarvutus, mis põhineb väärtustel spetsiaalsel kõrguskaardil, mida nimetatakse bumpmapiks. Tavaliselt on see 8-bitine mustvalge tekstuur ja tekstuuri värviväärtused ei ole kaetud tavaliste tekstuuridega, vaid neid kasutatakse pinna kareduse kirjeldamiseks. Iga tekstiili värv määrab vastava reljeefipunkti kõrguse, kõrgemad väärtused tähendavad kõrgemat kõrgust algpinnast ja madalamad vastavalt madalamad. Või vastupidi.

Punkti valgustusaste sõltub valguskiirte langemisnurgast. Mida väiksem on nurk normaalse ja valguskiire vahel, seda suurem on pinnale valgustatud punkti valgustus. See tähendab, et kui võtate tasase pinna, on normaalsed punktid ühesugused ja valgustus on sama. Ja kui pind on ebaühtlane (tegelikult on peaaegu kõik pinnad tegelikkuses), siis on iga punkti normid erinevad. Ja valgustus on erinev, ühel hetkel on seda rohkem, teisel - vähem. Siit tuleneb ka põrkekujunduse põhimõte - hulknurga erinevate punktide ebakorrapärasuste modelleerimiseks määratakse pinna normid, mida võetakse arvesse pikslivalgustuse arvutamisel. Selle tulemusel saadakse pinnale loomulikum pilt, muhkude kaardistamine annab pinnale rohkem detaile, näiteks löögid tellistel, poorid nahal jne, suurendamata mudeli geomeetrilist keerukust, kuna arvutused tehakse pikslite tasemel välja. Veelgi enam, kui valgusallika asukoht muutub, muutub nende ebakorrapärasuste valgustus õigesti.

Loomulikult on tippude valgustus arvutuslikult palju lihtsam, kuid see tundub liiga ebareaalne, eriti suhteliselt madala polügeomeetria korral ei saa iga piksli värvide interpoleerimine reprodutseerida tippude arvutatud väärtustest suuremaid väärtusi. See tähendab, et kolmnurga keskel asuvad pikslid ei saa olla heledamad kui tipu lähedal asuvad killud. Järelikult kuvatakse järsult muutuva valgustusega alasid, näiteks pimestamist ja pinnale väga lähedal asuvaid valgusallikaid füüsiliselt valesti ning see on dünaamikas eriti märgatav. Muidugi saab probleemi osaliselt lahendada, suurendades mudeli geomeetrilist keerukust, jagades selle rohkemateks tippudeks ja kolmnurkadeks, kuid pikslipõhine valgustus on parim valik.

Jätkamiseks peate meelde tuletama valgustuse komponente. Pinnapunkti värv arvutatakse kõikide stseeni valgusallikate ümbritsevate ümbritsevate, hajusate ja peegeldavate komponentide summana (ideaaljuhul kõigist, paljud on sageli tähelepanuta jätnud). Iga valgusallika panus sellesse väärtusse sõltub kaugusest valgusallika ja punkti vahel.

Valgustuse komponendid:

Lisagem nüüd sellele ka kokkuvõtteid:

Valgustuse ühtlane (ümbritsev) komponent on stseeni iga punkti jaoks ligikaudne, "algne" valgustus, mille korral kõik punktid on võrdselt valgustatud ja valgustus ei sõltu muudest teguritest.
Valguse hajuv komponent sõltub valgusallika asukohast ja pinna normaalsusest. See valgustuskomponent on objekti iga tipu jaoks erinev, mis annab neile helitugevuse. Valgus ei täida enam pinda sama varjundiga.
Valgustuse peegeldav komponent avaldub valguskiirte peegeldumisel pinnalt. Selle arvutamiseks kasutatakse lisaks valgusallika asukoha vektorile ja normaalväärtusele veel kahte vektorit: pilgu suuna vektorit ja peegeldusvektorit. Spekulaarse valgustuse mudeli pakkus esmakordselt välja Phong Bui-Tong. Need raketid suurendavad oluliselt pildi realismi, sest haruldased tegelikud pinnad ei peegelda valgust, seega on peegeldav komponent väga oluline. Eriti liikudes, sest pimestamine näitab kohe kaamera või objekti enda asukoha muutumist. Hiljem leidsid teadlased selle komponendi arvutamiseks muid võimalusi, keerukamaid (Blinn, Cook-Torrance, Ward), võttes arvesse valgusenergia jaotust, selle neeldumist materjalide poolt ja hajumist hajusa komponendi kujul.

Niisiis, Specular Bump Mapping saadakse järgmisel viisil:

Ja vaatame sama ka mängu näitel Call of Duty 2:


Pildi esimene fragment renderdatakse ilma löögita (), teine ​​(paremal üleval) on löögikomponent ilma peegelduskomponendita, kolmas on mängus kasutatava normaalsuurusega peegelkomponendiga ja viimane , paremalt alt, maksimaalse võimaliku peegelduskomponendiga.

Mis puudutab esimest riistvararakendust, siis mõningaid tõrkeid (Emboss Bump Mapping) hakati kasutama juba NVIDIA Riva TNT kiipidel põhinevate videokaartide päevil, kuid toonased tehnikad olid äärmiselt primitiivsed ja neid ei kasutatud laialdaselt. Järgmine teadaolev tüüp oli Environment Mapped Bump Mapping (EMBM), kuid ainult Matroxi videokaartidel oli sel ajal DirectX -i riistvaratoetus ja taas oli kasutamine tugevalt piiratud. Siis ilmus Dot3 Bump Mapping ja tolle aja videokiibid (GeForce 256 ja GeForce 2) nõudsid sellise matemaatilise algoritmi täielikuks täitmiseks kolm läbimist, kuna neid piiravad kaks korraga kasutatavat tekstuuri. Alustades NV20 -st (GeForce3), sai võimalikuks pikslivarjundite abil sama töö ühe korraga. Edasi veel. Nad hakkasid kasutama tõhusamaid tehnikaid nagu.

Näiteid löökide kasutamise kohta mängudes:


Displacement Mapping on meetod 3D -objektidele detailide lisamiseks. Erinevalt löögikaardistamisest ja muudest pikslipõhistest meetoditest, kui kõrgusekaardid modelleerivad õigesti ainult punkti valgust, kuid selle asukoht ruumis ei muutu, mis annab ainult illusiooni pinna keerukuse suurenemisest, võimaldavad nihkekaardid teil saada tõelised keerukad 3D-objektid tippudest ja hulknurkadest ilma piiranguteta. See meetod paigutab kolmnurkade tipud ümber, normaliseerides need summa võrra, mis põhineb nihkekaartide väärtustel. Nihkekaart on tavaliselt mustvalge tekstuur ja selle väärtusi kasutatakse objekti pinna iga punkti kõrguse määramiseks (väärtusi saab salvestada 8-bitiste või 16-bitiste arvudena) , sarnane bumpmap'iga. Mägede ja orgudega maastiku loomiseks kasutatakse sageli nihkekaarte (sel juhul nimetatakse neid ka kõrguskaartideks). Kuna maastikku kirjeldab kahemõõtmeline nihkekaart, on seda vajaduse korral suhteliselt lihtne deformeerida, kuna see nõuaks vaid nihkekaardi muutmist ja selle alusel pinna kajastamist järgmises kaadris.

Maastiku loomine nihkekaartide abil on pildil selgelt näidatud. Esialgu kasutati 4 tippu ja 2 hulknurka, mille tulemusena selgus maastiku täisväärtuslik tükk.

Nihkekaartide katmise suur eelis pole mitte ainult võimalus pinnale üksikasju lisada, vaid objekti peaaegu täielik loomine. Võetakse madala polüpolümeeriga objekt, mis on jagatud (tesselteeritud) rohkemateks tippudeks ja hulknurkadeks. Seejärel nihutatakse tessellatsiooniga tekitatud tipud nihkekaardilt loetud väärtuse põhjal mööda normaali. Lõpuks saame keeruka 3D -objekti lihtsast, kasutades sobivat nihkekaarti:


Tessellatsiooniga loodud kolmnurkade arv peab olema piisavalt suur, et jäädvustada kõik nihkekaardi määratletud detailid. Mõnikord luuakse automaatselt täiendavaid kolmnurki, kasutades N-plaastreid või muid meetodeid. Nihkekaarte on kõige parem kasutada koos muhkekaardistamisega, et luua peeneid detaile, kus piisab pikslipõhisest valgustusest.

Nihkekaardistamist toetas esmalt DirectX 9.0. See oli selle API esimene versioon, mis toetas nihke kaardistamise tehnikat. DX9 toetab kahte tüüpi nihkekaardistamist, filtreeritud ja eelproovitud. Esimest meetodit toetas unustatud MATROX Parhelia videokiip ja teist - ATI RADEON 9700. Filtreeritud meetod erineb selle poolest, et võimaldab nihkekaartide jaoks kasutada mip -tasemeid ja rakendada nende jaoks trilineaarset filtreerimist. Selle meetodi puhul valitakse nihkekaardi mip -tase iga tipu jaoks, tuginedes kaugusele tipust kaamerasse, see tähendab, et detailsuse tase valitakse automaatselt. See saavutab stseeni peaaegu ühtlase jaotuse, kui kolmnurgad on ligikaudu sama suured.

Nihkekaardistamist võib põhimõtteliselt pidada geomeetria tihendusmeetodiks; nihkekaartide kasutamine vähendab konkreetse 3D -mudeli detaili jaoks vajalikku mälu. Mahukad geomeetriaandmed asendatakse lihtsate 2D nihkega tekstuuridega, tavaliselt 8- või 16-bitised. See vähendab mälu ja ribalaiust, mida on vaja geomeetriaandmete edastamiseks GPU -sse, mis on tänapäeva süsteemide peamised piirangud. Teise võimalusena, võrdse ribalaiuse ja salvestusnõuetega, võimaldab nihke kaardistamine palju keerukamaid geomeetrilisi 3D -mudeleid. Palju vähem keerukate mudelite kasutamine, kui kümnete või sadade tuhandete kolmnurkade asemel kasutatakse tuhandete ühikuid, võimaldab see ka nende animatsiooni kiirendada. Või täiustage seda, rakendades keerukamaid keerukaid algoritme ja tehnikaid, näiteks riide simulatsiooni.

Teine eelis on see, et nihkekaartide kasutamine muudab keerukad hulknurksed 3D -võrgud mitmeks 2D -tekstuuriks, mida on lihtsam töödelda. Näiteks korralduse jaoks saate nihkekaartide ülekandmiseks kasutada tavalist mip-kaardistamist. Samuti saate suhteliselt keerukate kolmemõõtmeliste võrkude kokkusurumise algoritmide asemel kasutada tavalisi tekstuuride, isegi JPEG-sarnaste tihendamise meetodeid. 3D -objektide protseduuriliseks loomiseks saate kasutada tavalisi algoritme 2D -tekstuuride jaoks.

Kuid nihkekaartidel on ka teatud piirangud, neid ei saa rakendada kõikides olukordades. Näiteks siledad objektid, mis ei sisalda palju peeneid detaile, esitatakse paremini standardsete võrkude või muude kõrgema taseme pindade, näiteks Bezieri kõverate kujul. Teisest küljest ei ole ka väga keerukaid mudeleid, nagu puud või taimed, lihtne nihkekaartidega esitada. Samuti on probleeme nende kasutamise mugavusega, see nõuab peaaegu alati spetsialiseeritud kommunaalteenuseid, sest nihkekaartide otsene loomine on väga raske (kui me ei räägi lihtsatest objektidest, näiteks maastikust). Paljud nihkekaartide olemuslikud probleemid ja piirangud on samad, mis neil, kuna need kaks meetodit on sisuliselt sarnase idee kaks erinevat kujutist.

Tõeliste mängude näitena toon mängu, mis kasutab tekstuuriproovimist tippude varjutajalt - funktsioon, mis ilmus NVIDIA NV40 videokiipides ja Shader Model 3.0. Vertexi tekstureerimist saab rakendada lihtsale meetodile, millega nihkekaardid katta täielikult GPU abil, ilma tessellatsioonita (jagades mitmeks kolmnurgaks). Sellise algoritmi kasutamine on piiratud, neil on mõtet ainult siis, kui kaardid on dünaamilised, st nad muutuvad selle käigus. Näiteks on see suurte veepindade renderdamine, mida tehakse mängus Pacific Fighters:


Normalmapping on täiustatud versioon varem kirjeldatud bumpmapping tehnikast, selle laiendatud versioon. Bumpmapping töötati välja Blinnis juba 1978. aastal, kus pinnanormaale muudetakse selle maastiku kaardistamismeetodi abil, mis põhineb muhkekaartidel. Kui bumpmapping muudab ainult pinnapunktide olemasolevat normaali, asendab normalmapping täielikult normaalsed, tuues nende väärtused spetsiaalselt ettevalmistatud normaalkaardilt. Need kaardid on tavaliselt tekstuurid, millesse on salvestatud eelnevalt arvutatud normaalväärtused ja mis on kujutatud RGB värvikomponentidena (tavaliste kaartide jaoks on olemas ka erivormingud, sealhulgas tihendatud), erinevalt 8-bitisest mustvalgest kõrgusest kaardid bumpmappingis.

Üldiselt on see sarnaselt muhkude kaardistamisega ka "odav" meetod detailide lisamiseks suhteliselt väikese geomeetrilise keerukusega mudelitele, ilma reaalsemat geomeetriat kasutamata, vaid ainult arenenumana. Selle tehnika üks huvitavamaid kasutusviise on madala polüpolümeeriga mudelite detailsuse märkimisväärne suurendamine, kasutades tavalisi kaarte, mis on saadud sama suure geomeetrilise keerukusega mudeli töötlemisel. Tavalised kaardid kirjeldavad pinda üksikasjalikumalt kui muhke kaardistades ja võimaldavad teil kujutada keerulisemaid kujundeid. Ideid teabe hankimiseks väga üksikasjalikest objektidest esitati eelmise sajandi 90ndate keskel, kuid siis oli see mõeldud kasutamiseks. Hiljem, 1998. aastal, esitati ideid detailide teisaldamiseks tavaliste kaartide kujul kõrge polü-mudeliga mudelitelt madala polü-tasemega mudelitele.

Tavalised kaardid pakuvad tõhusamat viisi üksikasjalike pinnaandmete salvestamiseks kui suure hulga hulknurkade kasutamine. Nende ainus tõsine piirang on see, et need ei sobi eriti hästi suurte detailide jaoks, sest tavaline kaardistamine ei lisa tegelikult hulknurki ega muuda objekti kuju, vaid loob ainult selle välimuse. See on lihtsalt detailide simulatsioon, mis põhineb pikslitaseme valgustuse arvutustel. Objekti äärmiste hulknurkade ja pinna suurte kaldenurkade juures on see väga märgatav. Seetõttu on kõige mõistlikum viis tavalise kaardistamise rakendamiseks teha madala polü mudel piisavalt detailseks, et säilitada objekti põhikuju, ja kasutada tavaliste kaartide abil peenemate detailide lisamist.

Tavalised kaardid genereeritakse tavaliselt mudeli kahest versioonist - madal ja kõrge polü. Madala polü mudel koosneb minimaalsest geomeetriast, objekti põhikujudest ja kõrge polü mudel sisaldab kõike, mida vajate maksimaalse detailsuse saavutamiseks. Seejärel võrreldakse neid spetsiaalsete utiliitide abil üksteisega, arvutatakse erinevus ja salvestatakse tekstuuriks, mida nimetatakse tavaliseks kaardiks. Selle loomisel saate lisaks kasutada muhkekaarti väga väikeste detailide jaoks, mida ei saa modelleerida isegi kõrge polü-mudeliga (nahapoorid, muud väikesed lohud).

Tavalisi kaarte kujutati algselt tavaliste RGB -tekstuuridena, kus R-, G- ja B -värvikomponente (0 kuni 1) tõlgendatakse X-, Y- ja Z -koordinaatidena. Iga teksti tavalisel kaardil kujutatakse pinnapunkti normaalina. Tavalisi kaarte võib olla kahte tüüpi: koordinaatidega mudelruumis (üldine koordinaatsüsteem) või puutujaruumiga (vene keeles on termin "puutujaruum", kolmnurga kohalik koordinaatsüsteem). Teist võimalust kasutatakse sagedamini. Kui mudeli ruumis esitatakse tavalisi kaarte, peab neil olema kolm komponenti, kuna kõiki suundi saab esitada, ja kui kohalikus koordinaatsüsteemis on puutujaruum, saate kahe komponendiga hakkama ja kolmanda piksli varjutaja.

Kaasaegsed reaalajarakendused edestavad pildikvaliteedi osas endiselt suuresti eelrenderdatud animatsiooni, see puudutab ennekõike valgustuse kvaliteeti ja stseenide geomeetrilist keerukust. Reaalajas arvutatud tippude ja kolmnurkade arv on piiratud. Seetõttu on geomeetria vähendamise meetodid väga olulised. Enne tavalist kaardistamist töötati välja mitu sellist meetodit, kuid madalad polü -mudelid, isegi muhke kaardistamise korral, on palju halvemad kui keerukamad mudelid. Kuigi tavalisel kaardistamisel on mitmeid puudusi (kõige ilmsem - kuna mudel jääb madala polü -polümeeriga, on see hõlpsasti näha selle nurgapiiride järgi), paraneb lõplik renderduskvaliteet märgatavalt, jättes mudelite geomeetrilise keerukuse madalaks. Viimasel ajal on selle tehnika populaarsuse kasv ja selle kasutamine kõigis populaarsetes mängumootorites olnud selgelt nähtav. Selle põhjuseks on suurepärase tulemuslikkuse kombinatsioon ja mudelite geomeetrilise keerukuse nõuete samaaegne vähendamine. Tavalist kaardistamistehnikat kasutatakse nüüd peaaegu kõikjal, kõik uued mängud kasutavad seda võimalikult laialdaselt. Siin on vaid lühike nimekiri kuulsatest arvutimängudest, mis kasutavad tavalist kaardistamist: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Need kõik näevad palju paremad välja kui mineviku mängud, sealhulgas tavaliste kaartide kasutamine.

Selle tehnika kasutamisel on ainult üks negatiivne tagajärg - tekstuuride mahu suurenemine. Tavaline kaart mõjutab ju tugevalt seda, kuidas objekt välja näeb, ning see peab olema piisavalt suure eraldusvõimega, seega kahekordistuvad nõuded videomälule ja selle ribalaiusele (tihendamata tavakaartide puhul). Nüüd aga toodetakse juba 512 megabaiti kohaliku mäluga videokaarte, selle ribalaius kasvab pidevalt, tihendusmeetodid on välja töötatud spetsiaalselt tavaliste kaartide jaoks, seega pole need väikesed piirangud tegelikult väga olulised. Tavalise kaardistamise mõju on palju suurem, võimaldades kasutada suhteliselt madala polü-mudeliga mudeleid, vähendades mälunõudeid geomeetriliste andmete salvestamiseks, parandades jõudlust ja andes väga korraliku visuaalse tulemuse.

Parallaxi kaardistamine / nihke kaardistamine

Tavalisele kaardistamisele, mis töötati välja juba 1984. aastal, järgnes Relief Texture Mapping, mille tutvustasid Olivera ja Bishop 1999. aastal. See on tekstuuri kaardistamise tehnika, mis põhineb sügavusteabel. Meetod ei leidnud rakendust mängudes, kuid selle idee aitas kaasa parallaksi kaardistamise töö jätkamisele ja selle täiustamisele. Kaneko tutvustas parallaksi kaardistamist 2001. aastal, mis oli esimene tõhus meetod parallaksi efekti pikslite abil. 2004. aastal demonstreeris Welsh parallaksi kaardistamise kasutamist programmeeritavatel videokiipidel.

Sellel meetodil on ehk kõige erinevamad nimed. Loetlen need, kellega kohtusin: Parallaxi kaardistamine, nihkekaardistamine, virtuaalse nihke kaardistamine, pikslite vahelise nihke kaardistamine. Esimest pealkirja kasutatakse artiklis lühiduse huvides.
Parallaxi kaardistamine on veel üks alternatiiv muhke kaardistamisele ja tavalistele kaardistamismeetoditele, mis annab teile veelgi parema ülevaate pinna detailidest, loomulikuma 3D -pindade kuvamise, kaotamata seejuures liiga palju jõudlust. See tehnika sarnaneb samaaegselt nii nihkekaardistamise kui ka tavalise kaardistamisega, see on kuskil vahepeal. Meetod on loodud ka selleks, et kuvada rohkem pinna üksikasju kui algsel geomeetrilisel mudelil. See sarnaneb tavalise kaardistamisega, kuid erinevus seisneb selles, et meetod moonutab tekstuuri kaardistamist, muutes tekstuuri koordinaate nii, et kui vaadata pinda erinevate nurkade alt, tundub see kumer, kuigi tegelikult on pind tasane ja ei muutu . Teisisõnu, Parallax Mapping on tehnika, mis lähendab pinnapunktide nihutamise mõju sõltuvalt vaatenurga muutumisest.

Tehnika nihutab tekstuuri koordinaate (seetõttu nimetatakse seda tehnikat mõnikord ka nihke kaardistamiseks), nii et pind tundub mahukam. Meetodi idee on tagastada selle punkti tekstuurikoordinaadid, kus vaatevektor lõikab pinda. See nõuab kõrgusekaardi kiirkiiret (kiirjälgimist), kuid kui sellel ei ole liiga palju muutuvaid väärtusi ("sile" või "sile"), võib lähendamisest loobuda. See meetod sobib hästi sujuvalt erineva kõrgusega pindadele, ilma ristmike valearvestuseta ja suurte nihkeväärtusteta. Selline lihtne algoritm erineb tavalisest kaardistamisest vaid kolme pikslilise varjundi juhisega: kaks matemaatilist juhist ja üks täiendav toomine tekstuurist. Pärast uue tekstuuri koordinaadi arvutamist kasutatakse seda edasi teiste tekstuurikihtide lugemiseks: alusstruktuur, tavaline kaart jne. See parallaksi kaardistamise meetod kaasaegsetel videokiipidel on peaaegu sama tõhus kui tavaline tekstuuri kaardistamine ja selle tulemus on realistlikum pinna kuvamine kui tavaline tavaline kaardistamine.

Kuid tavapärase parallaksi kaardistamise kasutamine piirdub kõrgusekaartidega, millel on vähe väärtusi. "Järske" ebakorrapärasusi töötleb algoritm valesti, ilmuvad mitmesugused esemed, tekstuurid "ujuvad" jne. Parallaksi kaardistamise tehnika täiustamiseks on välja töötatud mitmeid muudetud meetodeid. Mitmed teadlased (Yerex, Donnelly, Tatarchuk, Policarpo) on kirjeldanud uusi meetodeid, mis parandavad esialgset algoritmi. Peaaegu kõik ideed põhinevad kiirte jälgimisel pikslivarjus, et määrata pinna detailide ristumiskohad üksteisega. Muudetud tehnikad on saanud mitu erinevat nime: Parallax Mapping with occlusion, Parallax Mapping with Distance Functio ns, Parallax Occlusion Mapping. Lühiduse huvides nimetame neid kõiki parallaksi oklusiooni kaardistamiseks.

Parallaxi oklusiooni kaardistamise meetodid hõlmavad ka kiirte jälgimist kõrguste määramiseks ja tekstiilide nähtavuse arvestamiseks. Tõepoolest, pinna suhtes nurga all vaadates blokeerivad tekstiilid üksteist ja seda silmas pidades saate parallaksi efektile rohkem sügavust lisada. Saadud pilt muutub realistlikumaks ja selliseid täiustatud meetodeid saab kasutada sügavama reljeefi jaoks, see sobib suurepäraselt tellistest ja kivist seinte, kõnniteede jms kujutamiseks. Eriti tuleb märkida, et peamine erinevus parallalaksimise ja nihkekaardistamise vahel on see, et arvutused on kõik piksli kohta ja mitte pealiskaudsed. Seetõttu on meetodil sellised nimed nagu virtuaalse nihke kaardistamine ja pikslite vahelise nihke kaardistamine. Vaadake pilti, seda on raske uskuda, kuid siinsed kõnnitee kivid on vaid pikslihaaval:

Meetod võimaldab teil tõhusalt kuvada üksikasjalikke pindu ilma miljonite tippude ja kolmnurkadeta, mida selle geomeetria rakendamisel vaja oleks. Samal ajal säilivad kõrged detailid (välja arvatud siluetid / servad) ja animatsiooni arvutused on oluliselt lihtsustatud. See tehnika on odavam kui tegeliku geomeetria kasutamine ja palju vähem hulknurki kasutatakse, eriti väga väikeste detailidega juhtudel. Algoritmi jaoks on palju rakendusi ja see sobib kõige paremini kivide, telliste jms jaoks.

Täiendav eelis on see, et kõrgusekaardid võivad dünaamiliselt muutuda (lainetega veepind, kuuliaugud seintes ja palju muud). Meetodi puuduseks on geomeetriliselt õigete siluettide (objekti servad) puudumine, sest algoritm on pikslite kaupa ja see ei ole tegelik nihkekaardistus. Kuid see säästab jõudlust ümberkujundamise, valgustuse ja geomeetria animatsiooni vähendatud koormuse näol. Säästab suure hulga geomeetriaandmete salvestamiseks vajalikku videomälu. Tehnika eelised on suhteliselt lihtne integreerimine olemasolevatesse rakendustesse ja tavapäraste kaardistamiste jaoks kasutatavate tuttavate utiliitide kasutamine protsessis.

Seda tehnikat on viimasel ajal juba päris mängudes kasutatud. Siiani saavad nad hakkama lihtsate parallakskaardistustega, mis põhinevad staatilistel kõrgusekaartidel, ilma kiirte jälgimise ja ristmike arvutamiseta. Siin on mõned näited selle kohta, kuidas parallaksi kaardistamist mängudes kasutada:

Järeltöötlus

Laias tähenduses on järeltöötlus kõik, mis toimub pärast peamisi pildistamisetappe. Teisisõnu, järeltöötlus on pildi muutmine pärast selle renderdamist. Järeltöötlus on tööriistakomplekt visuaalsete eriefektide loomiseks ja nende loomine toimub pärast stseeni renderdamise põhitöö tegemist, st järeltöötlusefektide loomisel kasutatakse valmis bitkaarti.

Lihtne näide fotolt: olete pildistanud ilusa ilmaga kaunist rohelusega järve. Taevas on väga hele ja puud liiga tumedad. Laadite foto graafilisse redigeerijasse ja hakkate muutma pildi piirkondade või kogu pildi heledust, kontrastsust ja muid parameetreid. Kuid teil pole enam võimalust kaamera seadeid muuta, teete valmis pildi töötlemise. See on järeltöötlus. Või teine ​​näide: tausta valimine portreefotograafias ja sellele alale hägususfiltri rakendamine suurema sügavusega teravussügavuse saavutamiseks. See tähendab, et kui muudate või parandate graafikaredaktoris raami, teete järeltöötlust. Sama saab teha ka mängus, reaalajas.

Renderdamisjärgse pilditöötluse jaoks on palju erinevaid võimalusi. Kõik on ilmselt näinud graafilistes redigeerijates palju nn graafilisi filtreid. Just seda nimetatakse postfiltriteks: hägusus, servade tuvastamine, teravustamine, müra, sile, reljeef jne. Reaalajas 3D -renderdamisel rakendatakse seda järgmiselt - kogu stseen renderdatakse spetsiaalsesse piirkonda, renderdus sihtmärki ja pärast peamist renderdamist töödeldakse seda pilti täiendavalt pikslivarjendeid kasutades ja alles seejärel kuvatakse ekraanil. Mängude järeltöötlusefektidest kasutatakse kõige sagedamini ,,. On ka palju teisi järelmõjusid: müra, helk, moonutus, seepia jne.

Siin on paar suurepärast näidet mängurakenduste järeltöötlusest:

Kõrge dünaamiline ulatus (HDR)

Kõrge dünaamiline ulatus (HDR), mida kasutatakse 3D -graafika puhul, on suure dünaamilise ulatuse renderdamine. HDR -i olemus on kirjeldada intensiivsust ja värvi reaalsete füüsikaliste kogustega. Tavaline kujutise kirjeldamise mudel on RGB, kui kõik värvid on esitatud põhivärvide summana: punane, roheline ja sinine, erineva intensiivsusega võimalike täisarvude kujul 0 kuni 255 kummagi jaoks, kodeeritud kaheksa bitti värvi kohta. Maksimaalse intensiivsuse ja minimaalse suhte suhet, mida konkreetne mudel või seade saab kuvada, nimetatakse dünaamiliseks vahemikuks. Niisiis, RGB mudeli dünaamiline ulatus on 256: 1 või 100: 1 cd / m 2 (kaks suurusjärku). Seda värvi ja intensiivsuse kirjeldamise mudelit nimetatakse tavaliselt madalaks dünaamiliseks vahemikuks (LDR).

Võimalikest LDR -i väärtustest kõigil juhtudel ei piisa ilmselgelt, inimene näeb palju suuremat vahemikku, eriti vähese valguse korral, ja RGB -mudel on sellistel juhtudel (ja ka kõrge intensiivsusega) liiga piiratud. Inimese nägemise dünaamiline ulatus on vahemikus 10–6 kuni 10 8 cd / m 2, see tähendab 10 000 000 000 000: 1 (14 suurusjärku). Me ei näe kogu vahemikku korraga, kuid silmaga nähtav vahemik on igal ajahetkel ligikaudu 10 000: 1 (neli suurusjärku). Nägemine kohaneb valgustusvahemiku teise osa väärtustega järk -järgult, kasutades nn kohandamist, mida saab hõlpsasti kirjeldada olukorraga, kus öösel ruumis valgus välja lülitatakse - alguses näevad silmad väga vähe, kuid aja jooksul kohanevad nad muutunud valgustingimustega ja näevad palju muud .... Sama juhtub ka siis, kui muudate pimeda keskkonna tagasi heledaks.

Niisiis, RGB kirjeldusmudeli dünaamilisest vahemikust ei piisa, et kujutada pilte, mida inimene reaalselt näeb, see mudel vähendab oluliselt valguse intensiivsuse võimalikke väärtusi vahemiku ülemises ja alumises osas. Kõige tavalisem näide, mida HDR -materjalides tuuakse, on pilt pimendatud aknaga ruumist heledal tänaval päikesepaistelisel päeval. RGB mudeli puhul saate kas tavalise kuva selle kohta, mis on aknast väljas, või ainult selle, mis on ruumis. Väärtused üle 100 cd / m 2 LDR -is katkestatakse täielikult, mistõttu on 3D -renderdamisel raske otse kaamerasse suunatud eredate tulede õigesti kuvada.

Siiani ei ole andmete kuvamise seadmeid ennast tõsiselt võimalik parandada ja arvutustes on mõttekas loobuda LDR -st, saate kasutada intensiivsuse ja värvi (või lineaarselt proportsionaalse) tegelikke füüsilisi väärtusi ning kuvada maksimaalset monitori. HDR -i esituse põhiolemus on kasutada intensiivsust ja värviväärtusi reaalsetes füüsilistes kogustes või lineaarselt proportsionaalselt ning kasutada mitte täisarvu, vaid ujukomaarvu suure täpsusega (näiteks 16 või 32 bitti). See kõrvaldab RGB mudeli piirangud ja suurendab dramaatiliselt pildi dünaamilist ulatust. Kuid siis saab mis tahes HDR -pilti kuvada mis tahes kuvamiskandjal (sama RGB -monitor), kasutades selleks parima algoritmi, kasutades selleks spetsiaalseid algoritme.

HDR -renderdus võimaldab pärast pildi renderdamist muuta säritust. See võimaldab simuleerida inimese nägemise kohanemise mõju (liikumine heledatest avatud ruumidest pimedatesse ruumidesse ja vastupidi), võimaldab füüsiliselt õiget valgustust ning on ka ühtne lahendus järeltöötlusefektide (pimestamine, raketid, õitsemine) rakendamiseks , liikumise hägusus). Pilditöötlusalgoritmid, värvikorrektsioon, gammakorrektsioon, liikumise hägusus, õitsemine ja muud järeltöötlusmeetodid on HDR-i esituses paremini teostatavad.

Reaalajas 3D-renderdusrakendustes (peamiselt mängudes) hakati HDR-renderdamist kasutama mitte nii kaua aega tagasi, kuna see nõuab arvutusi ja toetust renderdamise sihtmärgi jaoks ujukoma vormingus, mis sai esmakordselt kättesaadavaks ainult videokiipidel, millel on DirectX 9. Tavaline HDR-renderdamise viis mängudes: stseeni renderdamine ujukoma puhvrisse, pildi järeltöötlus laiendatud värvivalikus (kontrasti ja heleduse muutmine, värvitasakaal, pimestamise ja liikumise hägususe efektid, objektiivi sära ja jms), rakendades toonide kaardistamist lõpliku HDR -pildi väljastamiseks LDR -kuvaseadmesse. Mõnikord kasutatakse keskkonnakaarte HDR -vormingus, objektide staatiliseks peegelduseks on HDR -i kasutamine dünaamiliste murdumiste ja peegelduste simuleerimisel väga huvitav, selleks saab kasutada ka ujukoma vormingus dünaamilisi kaarte. Sellele saate lisada veel kergeid kaarte, mis on eelnevalt arvutatud ja salvestatud HDR -vormingus. Suur osa ülaltoodust on tehtud näiteks filmis Half-Life 2: Lost Coast.

HDR-renderdamine on väga kasulik tavapäraste meetoditega võrreldes kõrgema kvaliteediga keeruka järeltöötluse jaoks. Sama õitseng näeb HDR -vaate mudelis arvutatuna välja realistlikum. Näiteks, nagu seda tehakse Cryteki Far Cry mängus, kasutab see standardseid HDR -renderdustehnikaid: rakendab õitsemisfiltreid, mida pakub Kawase ja toonide kaardistamise operaator Reinhard.

Kahjuks võivad mänguarendajad mõnel juhul peita HDR nime all lihtsalt tavalises LDR -vahemikus arvutatud õitsemisfiltri. Ja kuigi enamik sellest, mida HDR-renderdusega mängudes praegu tehakse, on parima kvaliteediga õitseng, ei piirdu HDR-renderdamise eelised ainult selle järelmõjuga, vaid seda on kõige lihtsam teha.

Muud näited HDR-i renderdamisest reaalajas rakendustes:


Toonide kaardistamine on protsess, mille käigus muudetakse HDR -i heleduse vahemik väljundseadme, näiteks monitori või printeri kuvatavaks LDR -vahemikuks, kuna neile HDR -kujutiste väljastamiseks on vaja HDR -mudeli dünaamiline ulatus ja gamma teisendada vastavaks LDR -dünaamikaks vahemikus, kõige sagedamini RGB. Lõppude lõpuks on HDR -is esitatud heledusvahemik väga lai, see on mitu suurusjärku absoluutsest dünaamilisest vahemikust korraga, ühes stseenis. Ja vahemik, mida saab taasesitada tavapärastel väljundseadmetel (monitorid, telerid), on ainult umbes kaks suurusjärku dünaamilist vahemikku.

HDR -i LDR -i teisendamist nimetatakse toonide kaardistamiseks ning see on kadudega ja jäljendab inimese nägemise omadusi. Neid algoritme nimetatakse tavaliselt toonide kaardistamise avaldusteks. Operaatorid liigitavad kõik pildi heleduse väärtused kolme tüüpi: tume, keskmine ja hele. Kesktoonide heleduse hinnangu põhjal korrigeeritakse üldist valgustust, stseeni pikslite heledusväärtusi jaotatakse ümber, et siseneda väljundvahemikku, tumedad pikslid heledamaks ja heledad tumedamaks. Seejärel skaleeritakse pildi heledamad pikslid väljundseadme või väljundvaate mudeli vahemikku. Järgmisel pildil on kujutatud HDR -kujutise lihtsaim teisendamine LDR -vahemikku, lineaarne teisendus ja keskel asuvale fragmendile rakendatakse keerukamat toonide kaardistamise operaatorit, mis töötab ülalkirjeldatud viisil:

On näha, et ainult mittelineaarse tooni kaardistamise abil saate pildil maksimaalselt detaile ja kui teisendada HDR lineaarselt LDR -iks, lähevad paljud väikesed asjad lihtsalt kaduma. Puudub ühtne õige toonide kaardistamise algoritm, on mitmeid operaatoreid, kes annavad häid tulemusi erinevates olukordades. Siin on hea näide kahest erinevast toonide kaardistamise avaldusest:

Koos HDR -renderdusega on mängudes hiljuti kasutatud toonide kaardistamist. Võimalik oli valikuliselt simuleerida inimese nägemise omadusi: teravuse kadu pimedates stseenides, kohanemine uute valgustingimustega üleminekul väga heledatelt aladelt ja vastupidi, tundlikkus kontrasti muutuste, värvide suhtes ... Nii näeb välja nägemise kohanemisvõime imiteerimine Far Cry's. Esimesel ekraanipildil on kujutis, mida mängija näeb lihtsalt pimedast ruumist eredalt valgustatud avatud ruumi pööramas, ja teine ​​näitab sama pilti paar sekundit pärast kohanemist.

Õitsema

Bloom on üks filmijärgsetest järeltöötlusefektidest, mis helendab pildi eredamaid osi. See on väga ereda valguse mõju, mis ilmneb helendavate pindade ümber, pärast õitsemisfiltri rakendamist ei saa sellised pinnad lihtsalt täiendavat heledust, vaid nende valgus (halo) mõjutab osaliselt heledate pindadega külgnevaid tumedamaid alasid. raami. Lihtsaim viis selle näitamiseks on näide:

3D Bloomi graafikas kasutatakse filtrit täiendava järeltöötluse abil - segatakse hägususfiltri (kogu kaader või selle üksikud eredad alad, filtrit rakendatakse tavaliselt mitu korda) ja häguse kaadri hägune kaader ning originaalraam. Üks mängudes ja muudes reaalajas rakendustes kõige sagedamini kasutatavat õitsemise järelfiltri algoritmi:

  • Stseen renderdatakse kaadripuhveriks, objektide sära intensiivsus kirjutatakse puhveri alfa -kanalile.
  • Kaadripuhver kopeeritakse töötlemiseks spetsiaalsesse tekstuuri.
  • Tekstuuri eraldusvõimet vähendatakse näiteks 4 korda.
  • Pildile rakendatakse alias-filtreid (hägusus) mitu korda, lähtudes alfa-kanalisse salvestatud intensiivsusandmetest.
  • Saadud pilt segatakse kaadripuhveris algsesse raami ja kuvatakse tulemus.

Nagu muud tüüpi järeltöötlust, on õitsemist kõige parem kasutada kõrge dünaamilise ulatusega (HDR) renderdamisel. Täiendavad näited lõpliku pildi töötlemisest reaalajas 3D-rakenduste õitsemisfiltri abil:

Liikumise hägusus

Fotodel ja filmidel tekib liikumishägus, mis on tingitud kaadris olevate objektide liikumisest kaadri säriajal, kui objektiivi katik on avatud. Kaameraga tehtud kaader (foto, film) ei näita hetkepilti, mis on tehtud null kestusega. Tehnoloogiliste piirangute tõttu näitab kaader teatud ajavahemikku, selle aja jooksul võivad kaadris olevad objektid liikuda teatud kaugusele ja kui see juhtub, esitatakse kõik liikuva objekti asendid objektiivi avatud katiku ajal raamil uduse pildina mööda liikumisvektorit ... See juhtub siis, kui objekt liigub kaamera suhtes või kaamera on objekti suhtes ning hägusus annab meile aimu objekti kiiruse suurusest.

Kolmemõõtmelises animatsioonis asetsevad objektid igal ajahetkel (kaadris) teatud koordinaatidel kolmemõõtmelises ruumis, sarnaselt lõpmatu kiire säriajaga virtuaalse kaameraga. Selle tulemusena ei teki kiiret liikuvat objekti vaadates kaamera ja inimsilma sarnast hägusust. See tundub ebaloomulik ja ebareaalne. Vaatleme lihtsat näidet: mitu sfääri pöörlevad ümber mõne telje. Siin on pilt sellest, kuidas see liikumine näeks hägususega ja ilma:

Hägustamata kujutise põhjal ei saa isegi öelda, kas sfäärid liiguvad või mitte, samas kui liikumise hägusus annab selge ettekujutuse objektide liikumise kiirusest ja suunast. Muide, liikumise hägususe puudumine on ka põhjus, miks liikumine mängudes kiirusega 25–30 kaadrit sekundis tundub tõmblev, kuigi filmid ja videod näevad samade kaadrisageduse parameetrite juures suurepärased välja. Liikumise hägususe puudumise kompenseerimiseks on soovitav kasutada suurt kaadrisagedust (60 kaadrit sekundis või rohkem) või kasutada täiendavaid pilditöötlusmeetodeid, et jäljendada liikumise hägusust. Seda kasutatakse animatsiooni sujuvuse parandamiseks ning foto- ja filmirealismi efekti saavutamiseks.

Reaalajas rakenduste lihtsaim liikumise hägususe algoritm on praeguse kaadri renderdamiseks kasutada eelmiste animatsioonikaadrite andmeid. Kuid on ka tõhusamaid ja kaasaegsemaid liikumise hägususe meetodeid, mis ei kasuta varasemaid kaadreid, vaid põhinevad kaadris olevate objektide liikumisvektoritel, lisades renderdamisprotsessile veel ühe järeltöötlusetapi. Hägususe efekt võib olla täisekraan (tavaliselt järeltöötlus) või üksikute kõige kiiremini liikuvate objektide puhul.

Liikumise hägususe efekti võimalikud rakendused mängudes: kõik võidusõidumängud (väga suure liikumiskiiruse efekti loomiseks ja televiisori sarnaste korduste vaatamiseks), spordimängud (samad kordused ja mängus endas võib hägusus tekkida) rakendada väga kiiresti liikuvatele objektidele, nagu pall või litter), võitlusmängudele (lähivõitlusrelvade, käte ja jalgade kiire liigutamine), paljudele teistele mängudele (mängusiseste 3D-stseenide ajal mootoril). Siin on mõned näited mängude liikumise hägususe post -efektist:

Teravussügavus (DOF)

Lühidalt, teravussügavus on objektide hägustumine sõltuvalt nende asukohast kaamera fookuse suhtes. Reaalses elus, fotodel ja filmides, ei näe me kõiki objekte võrdselt selgelt, see on tingitud silma struktuuri eripärast ning kaamerate ja kinokaamerate optika struktuurist. Foto- ja kinooptikal on teatav kaugus, kaamerast sellisel kaugusel asuvad objektid on fookuses ja näevad pildil teravad välja ning kaamerast kaugemal või selle lähedal olevad esemed näevad vastupidi udused, teravus väheneb järk -järgult kauguse suurenemise või vähenemisega ...

Nagu arvata võis, on see foto, mitte renderdus. Arvutigraafikas on kõik renderdatud pildi objektid täiesti selged, kuna arvutustes ei jäljendata läätsi ega optikat. Seetõttu tuleb foto- ja filmireaalsuse saavutamiseks kasutada spetsiaalseid algoritme, et teha midagi sarnast arvutigraafika jaoks. Need tehnikad simuleerivad erineva fookuse mõju erineval kaugusel asuvatele objektidele.

Üks levinumaid reaalajas renderdamise tehnikaid on algse kaadri ja selle häguse versiooni (hägususfiltri mitu korda) segamine pildi pikslite sügavuse andmete põhjal. Mängudes saab DOF-efekti kasutada mitmel viisil, näiteks on see mängusisene kinematograafia mängumootoril, kordused spordi- ja võidusõidumängudes. Reaalajas teravussügavuse näited:

Detailide tase (LOD)

Detailide tase 3D -rakendustes on meetod kaadri renderdamise keerukuse vähendamiseks, polügoonide, tekstuuride ja muude ressursside koguarvu vähendamiseks stseenis ning üldiselt selle keerukuse vähendamiseks. Lihtne näide: peategelase mudel koosneb 10 000 hulknurgast. Juhtudel, kui see asub töödeldud stseenis kaamera lähedal, on oluline kasutada kõiki hulknurki, kuid kaamerast väga suurel kaugusel võtab see lõplikul pildil vaid mõned pikslid ja kõigi 10 000 hulknurga töötlemisel. Võib -olla piisab sel juhul mudeli ligikaudu sama kuvamiseks sadadest polügoonidest või isegi paarist hulknurgast ja spetsiaalselt ettevalmistatud tekstuurist. Seega on keskmistel vahemaadel mõttekas kasutada mudelit, mis koosneb lihtsamatest mudelitest ja vähem kui kõige keerukamatest kolmnurkadest.

LOD -meetodit kasutatakse tavaliselt 3D -stseenide modelleerimisel ja renderdamisel, kasutades objektide jaoks mitut keerukustaset (geomeetrilist või muul viisil), proportsionaalselt nende kaugusega kaamerast. Mängude arendajad kasutavad seda tehnikat sageli stseeni polügoonide arvu vähendamiseks ja jõudluse parandamiseks. Kui need asuvad kaamera lähedal, kasutatakse mudeleid, mis sisaldavad maksimaalselt detaile (kolmnurkade arv, tekstuuride suurus, tekstureerimise keerukus), parima pildikvaliteedi saavutamiseks ja vastupidi, kui mudelid kaamerast eemaldatakse. , renderduskiiruse suurendamiseks kasutatakse vähem kolmnurgaga mudeleid. Keerukuse, eriti mudeli kolmnurkade arvu muutmine võib toimuda automaatselt ühe maksimaalse keerukusega 3D -mudeli põhjal või võib -olla mitme varem koostatud erineva detailsusega mudeli põhjal. Kasutades erinevate vahemaade jaoks väiksema detailsusega mudeleid, vähendatakse renderdamise hinnangulist keerukust, ilma et pildi üldised detailid peaaegu üldse halveneksid.

Meetod on eriti efektiivne, kui stseenis on palju objekte ja need asuvad kaamerast erineval kaugusel. Võtke näiteks mõni spordimäng, näiteks hoki või jalgpallisimulaator. Madala polü -märgiga mudeleid kasutatakse siis, kui need on kaamerast kaugel, ja suumimisel asendatakse mudelid teistega, millel on suur hulk hulknurki. See näide on väga lihtne ja see näitab meetodi olemust, mis põhineb kahel mudeli üksikasjalikkuse tasemel, kuid keegi ei viitsi luua mitut detailsustaset, nii et LOD taseme muutmise mõju ei oleks liiga märgatav, nii et üksikasjad järk -järgult "kasvama" objekti lähenedes.

Lisaks kaugusele kaamerast võivad LOD -i jaoks olulised olla ka muud tegurid - ekraanil olevate objektide koguarv (kui kaadris on üks või kaks märki, siis kasutatakse keerukaid mudeleid ja kui 10-20, siis üleminek lihtsamatele) või kaadrite arv sekundis (piirid on seatud FPS väärtustele, mille juures detailide tase muutub, näiteks kui FPS on alla 30, vähendame ekraanil olevate mudelite keerukust ja 60, vastupidi, suureneb). Teised võimalikud detailide taset mõjutavad tegurid on objekti liikumiskiirus (teil on vaevalt aega raketi liikumist kaaluda, kuid näete kergesti tigu), tegelase tähtsus mängu seisukohast ( võtke sama jalgpall - teie juhitava mängija mudeli jaoks saate kasutada keerukamat geomeetriat ja tekstuure, näete seda kõige lähemal ja kõige sagedamini). Kõik sõltub konkreetse arendaja soovidest ja võimalustest. Peaasi, et mitte üle pingutada, sagedased ja märgatavad detailitaseme muutused on tüütud.

Tuletan meelde, et detailsus ei pruugi olla seotud ainult geomeetriaga, seda meetodit saab kasutada ka muude ressursside säästmiseks: tekstureerimisel (kuigi videokiibid kasutavad juba mipmappingut, on mõnikord mõttekas muuta tekstuure lennult teistele erinevate detailidega), valgustehnikad (lähedased objektid on valgustatud keerulise algoritmi abil ja kaugemad - lihtsa algoritmi abil), tekstureerimistehnikad (kompleksset parallaksi kaardistamist kasutatakse lähedalasuvatel pindadel ja tavalist kaardistamist kaugemal) jne .

Mängust näite näitamine pole nii lihtne, ühest küljest kasutatakse LOD -i mingil määral peaaegu igas mängus, teisest küljest pole seda alati võimalik selgelt näidata, vastasel juhul poleks mõtet LODis endas.

Kuid selle näite puhul on siiski selge, et lähimal automudelil on maksimaalne detailsus, järgmised kaks või kolm autot on samuti sellele tasemele väga lähedal ja kõigil kaugemal on nähtavaid lihtsustusi, siin on vaid kõige olulisemad: puuduvad tahavaatepeeglid, numbrimärgid, klaasipuhastid jm täiendavad valgustusseadmed. Ja kaugeimast mudelist pole isegi varju teel. See on üksikasjalik algoritm tegevuses.

Globaalne valgustus

Stseeni realistlikku valgustust on raske simuleerida, tegelikkuses peegeldub ja murdub iga valguskiir korduvalt, nende peegelduste arv pole piiratud. Ja 3D -renderdamisel sõltub peegelduste arv tugevalt disainivõimalustest, iga stseeniarvutus on lihtsustatud füüsiline mudel ja sellest tulenev pilt on vaid realistlik.

Valgustusalgoritmid võib jagada kaheks mudeliks: otsene või kohalik valgustus ja globaalne valgustus (otsene või kohalik valgustus ja globaalne valgustus). Kohaliku valgustuse mudelis kasutatakse otsese valgustuse arvutamist, valgusallikatest lähtuvat valgust kuni valguse esimese ristumiskohani läbipaistmatu pinnaga, esemete vastastikust mõju ei võeta arvesse. Kuigi see mudel püüab seda kompenseerida, lisades taust- või ühtlase (ümbritseva) valgustuse, on see lihtsaim lähendus, kõikide valgusallikate kaudsete kiirte ülimalt lihtsustatud valgustus, mis täpsustab objektide valgustuse värvi ja intensiivsuse, kui neid pole. otsesed valgusallikad.

Sama kiirjälgimine arvutab pindade valgustuse ainult valgusallikate otsekiirte abil ja mis tahes pind peab nähtavuse tagamiseks olema otse valgustusallikaga valgustatud. Sellest ei piisa fotorealistlike tulemuste saavutamiseks, lisaks otsesele valgustusele on vaja arvestada teisest valgustust teistelt pindadelt peegelduvate kiirte abil. Reaalses maailmas peegelduvad valguskiired pindadelt mitu korda, kuni need on täielikult kustunud. Aknast läbiv päikesevalgus valgustab kogu ruumi, kuigi kiired ei pääse otse kõikidele pindadele. Mida heledam on valgusallikas, seda rohkem kordi see peegeldub. Peegeldava pinna värv mõjutab ka peegeldunud valguse värvi, näiteks punane sein põhjustab punase laigu külgneval valgel objektil. Siin on selge erinevus, arvutamine ilma teisese valgustuseta ja seda arvesse võtmata:

Globaalse valgustusmudeli puhul arvutatakse globaalne valgustus, valgustus, võttes arvesse objektide mõju üksteisele, arvesse võetakse valguskiirte mitmekordset peegeldust ja murdumist objektide pindadelt, söövitust ja maapinna hajumist. See mudel võimaldab teil saada realistlikuma pildi, kuid raskendab protsessi, nõudes oluliselt rohkem ressursse. Globaalseid valgustuse algoritme on mitmeid, vaatame kiirelt kiirgust (kaudse valgustuse arvutamine) ja footonite kaardistamist (globaalne valgustusarvutus, mis põhineb jälgimisel eelnevalt arvutatud footonkaartidel). On ka lihtsustatud meetodeid kaudse valgustuse simuleerimiseks, näiteks stseeni üldise heleduse muutmine sõltuvalt selles olevate valgusallikate arvust ja heledusest või suure hulga stseeni ümber paigutatud punktvalgusallikate kasutamine peegelduva valguse simuleerimiseks, kuid see pole siiski päris algoritmist kaugel.

Kiirgusalgoritm on valguskiirte sekundaarse peegelduse arvutamine ühelt pinnalt teisele, samuti keskkonnast objektidele. Valgusallikatest pärinevaid kiiri jälgitakse seni, kuni nende tugevus langeb alla teatud taseme või kiired jõuavad teatud arvu peegeldusteni. See on tavaline GI tehnika, arvutused tehakse tavaliselt enne renderdamist ja arvutuste tulemusi saab kasutada reaalajas renderdamiseks. Raadiosageduse põhiideed põhinevad soojusülekande füüsikal. Objektide pinnad on jagatud väikesteks aladeks, mida nimetatakse laikudeks, ja eeldatakse, et peegeldunud valgus on kõikides suundades ühtlaselt hajutatud. Tulede iga valgusvihu arvutamise asemel kasutatakse keskmistamistehnikat, mis jagab tuled plaastriteks nende toodetud energiataseme alusel. See energia jaotub proportsionaalselt pinnalappide vahel.

Teine meetod globaalse valgustuse arvutamiseks, mille pakkus välja Henrik Wann Jensen, on footonite kaardistamise meetod. Fotooniline kaardistamine on veel üks kiirtega jälgitav globaalse valgustuse algoritm, mida kasutatakse valguskiirte stseeni objektidega suhtlemise simuleerimiseks. Algoritm arvutab kiirte teisese peegelduse, valguse murdumise läbi läbipaistvate pindade, hajutatud peegeldusi. See meetod seisneb pinna punktide valgustuse arvutamises kahe käiguga. Esimene on valguskiirte otsene jälgimine sekundaarse peegeldusega, see on esialgne protsess, mis viiakse läbi enne peamist renderdamist. See meetod arvutab valgusallikast stseeni objektidesse suunduvate footonite energia. Kui footonid pinnale jõuavad, salvestatakse footoni lõikumispunkt, suund ja energia vahemällu, mida nimetatakse footonkaardiks. Fotoonilised kaardid saab hilisemaks kasutamiseks kettale salvestada, nii et neid ei pea igal kaadril renderdama. Footonite peegeldusi arvutatakse seni, kuni töö peatub pärast teatud arvu peegeldusi või teatud energia saavutamiseni. Teisel renderduskäigul arvutatakse stseenipikslite valgustus otsekiirtega, võttes arvesse footonkaartidele salvestatud andmeid, lisatakse footoni energia otsese valgustuse energiale.

Globaalsed valgustuse arvutused, mis kasutavad suurt hulka sekundaarseid peegeldusi, võtavad palju kauem aega kui otsesed valgustuse arvutused. Raadiolinna reaalajas arvutamiseks on olemas tehnikaid, mis kasutavad uusimate põlvkondade programmeeritavate videokiipide võimalusi, kuid siiani peaksid stseenid, mille jaoks reaalajas globaalne valgustus arvutatakse, olema üsna lihtsad ja palju lihtsustatud algoritmides.

Kuid see, mida on pikka aega kasutatud, on staatiline eelarvestatud globaalne valgustus, mis on stseenide jaoks vastuvõetav ilma valgusallikate ja valgustust tugevalt mõjutavate suurte objektide asendit muutmata. Lõppude lõpuks ei sõltu globaalse valgustuse arvutamine vaatleja positsioonist ja kui selliste objektide asukoht stseenis ja valgusallikate parameetrid stseenis ei muutu, siis võivad eelnevalt arvutatud valgustusväärtused kasutada. Seda kasutatakse paljudes mängudes, salvestades GI arvutusandmed valguskaartide kujul.

Dünaamilise globaalse valgustuse simuleerimiseks on olemas ka vastuvõetavad algoritmid. Näiteks on reaalajas rakendustes kasutamiseks nii lihtne meetod stseenis oleva objekti kaudse valgustuse arvutamiseks: kõikide vähendatud detailidega objektide (välja arvatud see, mille jaoks valgustust arvutatakse) lihtsustatud renderdamine madala eraldusvõimega kuubikaart (seda saab kasutada ka dünaamiliste peegelduste kuvamiseks objekti pinnal), seejärel selle tekstuuri filtreerimine (hägususfiltri mitu käiku) ja arvutatud tekstuuri andmete rakendamine selle objekti valgustamiseks täiendusena otsene valgustus. Juhtudel, kui dünaamiline arvutus on liiga raske, võib staatilistest kiirguskaartidest loobuda. Näide MotoGP 2 mängust, mis näitab selgelt isegi sellise lihtsa GI jäljendamise kasulikku mõju:



"itemprop =" image ">

"Mis on varjutajad?" See on uudishimulike mängijate ja algajate mänguarendajate väga levinud küsimus. Selles artiklis räägin teile selgelt ja selgelt nende kohutavate varjude kohta.

Pean arvutimänge arvutigraafika fotorealistlike piltide suunas liikumise mootoriks, seega räägime sellest, mis on „varjutajad” videomängude kontekstis.

Enne esimeste graafikakiirendite ilmumist tegi kogu videomängude kaadrite renderdamise töö vilets keskprotsessor.

Raami joonistamine on tegelikult üsna rutiinne töö: peate võtma "geomeetria" - hulknurksed mudelid (maailm, iseloom, relv jne) ja rasteriseerima. Mis on Rasterize? Kogu 3D -mudel koosneb väikseimatest kolmnurkadest, mille rasterisaator muudab piksliteks (st "rasteriseerimine" tähendab muutmist piksliteks). Pärast rasteriseerimist võtke tekstuuriandmed, valgustusparameetrid, udu jne ja arvutage välja kõik mänguraami pikslid, mis kuvatakse mängijale.

Niisiis, keskprotsessor (CPU - Central Processing Unit) on liiga tark mees, et panna ta sellist rutiini tegema. Selle asemel on loogiline eraldada mingi riistvaramoodul, mis laadib protsessori maha, et see saaks teha olulisemat intellektuaalset tööd.

Selline riistvaramoodul on graafika kiirendaja või videokaart (GPU - Graphics Processing Unit). Nüüd valmistab protsessor andmed ette ja laadib kolleegile rutiinse töö. Arvestades, et GPU pole praegu ainult üks kolleeg, see on rahvahulk minione-tuumasid, siis tuleb ta sellise tööga korraga toime.

Kuid me pole veel saanud vastust põhiküsimusele: Mis on varjutajad? Oota, ma lähen selle juurde.

Kena, huvitav ja fotorealismi lähedane graafika nõudis videokaartide arendajatelt paljude algoritmide rakendamist riistvaratasandil. Varjud, tuled, tipphetked ja nii edasi. Seda lähenemist - algoritmide rakendamisel riistvaras nimetatakse "fikseeritud torujuheks või torujuhtmeks" ja seal, kus on vaja kvaliteetset graafikat, seda enam ei leita. Tema koha võttis programmeeritav torujuhe.

Mängijate palved „tulge, tooge sisse hea grafoonium! üllatus! ”, tõukas mängude arendajad (ja vastavalt videokaartide tootjad) järjest keerukamate algoritmide juurde. Siiani pole mingil hetkel nende jaoks piisavalt kõvaketastega riistvara algoritme.

Nüüd on aeg graafikakaartide jaoks intelligentsemaks muutuda. Otsus tehti selleks, et arendajad saaksid programmeerida GPU plokke suvalisteks torujuhtmeteks, mis rakendavad erinevaid algoritme. See tähendab, et mänguarendajad, graafilised programmeerijad on nüüd saanud videokaartidele programme kirjutada.

Ja nüüd, lõpuks, oleme jõudnud vastusele oma põhiküsimusele.

"Mis on varjutajad?"

Shader (inglise keeles shader - shadowing programme) on videokaardi programm, mida kasutatakse kolmemõõtmelises graafikas objekti või pildi lõplike parameetrite määramiseks, võib sisaldada valguse neeldumise ja hajumise kirjeldust, tekstuuri kaardistamist, peegeldust ja murdumine, varjutus, pinna nihkumine jne paljud muud parameetrid.

Mis on varjutajad? Näiteks saate selle efekti, see on sfäärile paigaldatud veevarjutaja.

Graafiline torujuhe

Programmeeritava torujuhtme eelis eelkäija ees on see, et nüüd saavad programmeerijad luua oma algoritme ja mitte kasutada kõvaketast.

Alguses olid videokaardid varustatud mitme spetsialiseeritud protsessoriga, mis toetavad erinevaid juhiseid. Varjud jagati kolme tüüpi, sõltuvalt sellest, milline protsessor neid käivitab. Kuid siis hakati videokaarte varustama universaalsete protsessoritega, mis toetavad kõigi kolme tüüpi varjutusjuhendite komplekti. Varjendi otstarbe kirjeldamiseks on säilinud varjude jagamine tüüpideks.

Lisaks graafilistele ülesannetele selliste intelligentsete videokaartidega sai võimalikuks GPU-l üldotstarbeliste arvutuste tegemine (mitte arvutigraafikaga seotud).

Esimest korda ilmus GeForce 3 seeria videokaartidele varjude täieõiguslik tugi, kuid algust rakendati GeForce256-s (registrikombinaatorite kujul).

Varjutajate tüübid

Sõltuvalt torujuhtme staadiumist on varjutid jagatud mitut tüüpi: tipp, fragment (piksel) ja geomeetriline. Ja uusimat tüüpi torujuhtmetes on ka tessellatsioonivarjundeid. Me ei aruta graafikatorustikku üksikasjalikult, mõtlen endiselt, kas kirjutada selle kohta eraldi artikkel neile, kes otsustavad õppida varjendeid ja graafikat. Huvi korral kirjuta kommentaaridesse, tean, kas tasub aega raisata.

Vertex varjutaja

Vertexi varjurid teevad animatsioone tegelastest, rohust, puudest, tekitavad vees laineid ja palju muud. Tipuvarjutajas on programmeerijal juurdepääs tippudega seotud andmetele, näiteks: tipu koordinaadid ruumis, selle tekstuuri koordinaadid, värv ja tavaline vektor.

Geomeetriline varjund

Geomeetrilised varjundid on võimelised looma uut geomeetriat ja neid saab kasutada osakeste loomiseks, mudeli detailide muutmiseks lennul, siluettide loomiseks ja muuks. Erinevalt eelmisest tipust on nad võimelised töötlema mitte ainult ühte tippu, vaid ka tervet primitiivi. Primitiiv võib olla segment (kaks tippu) ja kolmnurk (kolm tippu) ning kui kolmnurkse primitiivi kohta on teavet kõrvuti asetsevate tippude kohta (inglise külgnevus), saab töödelda kuni kuut tippu.

Pikslivari

Pikslite varjundid teostavad tekstuuri kaardistamist, valgustust ja erinevaid tekstuuriefekte, nagu peegeldus, murdumine, udu, löökide kaardistamine jne. Pikslivarjendeid kasutatakse ka postiefektide jaoks.

Pikslivarjutaja töötab bitikaardi viilude ja tekstuuridega - see töötleb pikslitega seotud andmeid (näiteks värv, sügavus, tekstuuri koordinaadid). Pikslivarjundit kasutatakse graafika torujuhtme viimases etapis kujutise fragmendi moodustamiseks.

Millele varjutajad kirjutavad?

Esialgu võis varjutajaid kirjutada montaažitaolises keeles, kuid hiljem oli C-keelega sarnaseid kõrgetasemelisi varjutajakeeli, näiteks: Cg, GLSL ja HLSL.

Sellised keeled on palju lihtsamad kui C, sest nende abiga lahendatud ülesanded on palju lihtsamad. Selliste keelte tüübisüsteem peegeldab graafika programmeerijate vajadusi. Seetõttu pakuvad nad programmeerijale spetsiaalseid andmetüüpe: maatriksid, proovivõtjad, vektorid jne.

RenderMan

Kõik, mida me eespool käsitlesime, on seotud reaalajas graafikaga. Kuid on ka reaalajas graafikat. Mis vahe on - reaalajas - reaalajas, see tähendab siin ja praegu - anda mängus 60 kaadrit sekundis, see on reaalajas toimuv protsess. Kuid keeruka kaadri renderdamine tipptasemel animatsiooni jaoks mõneks minutiks ei ole reaalajas. Põhiolemus on ajas.

Näiteks ei saa me reaalajas saada sellise kvaliteediga graafikat nagu Pixari stuudio viimastes animafilmides. Väga suured renderdusfarmid arvutavad valgussimulatsioone, kasutades täiesti erinevaid algoritme, mis on väga kallid, kuid annavad peaaegu fotorealistlikke pilte.

Super realistlik graafika liivapiperis

Näiteks vaadake seda armsat koomiksit, liivaterasid, linnusulgi, laineid, kõik tundub uskumatult tõeline.

* Videod saab Youtube'ist ära keelata, kui need ei avane, google pixar sandpiper - lühike koomiks vaprat tuulelippu kohta on väga armas ja kohev. Puudutab ja demonstreerib, kui lahe võib olla arvutigraafika.

Nii et see on Pixari RenderMan. Sellest sai esimene shaderi programmeerimiskeel. RenderMani API on de facto professionaalse renderdamise standard ja seda kasutatakse kogu Pixari töös ja mujal.

Kasulik informatsioon

Nüüd teate, mis on varjutajad, kuid peale varjundite on mänguarenduses ja arvutigraafikas ka teisi väga huvitavaid teemasid, mis teid kindlasti huvitavad:

  • on tehnika uimastavate efektide loomiseks kaasaegsetes videomängudes. Ülevaateartikkel ja video koos õpetustega Unity3d -s efektide loomise kohta
  • - Kui mõtlete videomängude arendamisele professionaalse karjääri või hobi korras, sisaldab see artikkel suurepäraseid soovitusi "kust alustada", "milliseid raamatuid lugeda" jne.

Kui sul on küsimusi

Nagu tavaliselt, kui teil on veel küsimusi, küsige neid kommentaarides, vastan alati. Igasuguse sõna või vigade parandamise eest oleksin väga tänulik.

See õpetus aitab teil Minecrafti varjendeid installida ja seeläbi mängumaailma parandada, lisades dünaamilisi varje, tuule- ja murumüra, realistlikku vett ja palju muud.

Kohe tuleb märkida, et varjud laadivad süsteemi üsna tugevalt ja kui teil on nõrk või integreeritud videokaart, soovitame selle modi installimisest hoiduda.

Paigaldamine koosneb kahest etapist, kõigepealt peate installima varjule modi ja seejärel sellele täiendavad varjupakid

SAMM # 1 - varjude jaoks modifikatsiooni installimine

  1. Laadige alla ja installige Java
  2. Installi OptiFine HD
    või ShadersMod;
  3. Pakime saadud arhiivi lahti suvalisse kohta;
  4. Käivitage jar -fail, sest ta on paigaldaja;
  5. Programm näitab teile mängu teed, kui kõik on õigesti, klõpsake nuppu Jah, Ok, Ok;
  6. Minema .minecraft ja looge sinna kaust varjupakid;
  7. Me läheme käivitusprogrammi ja näeme real uut profiili nimega "ShadersMod", kui mitte, siis valige see käsitsi.
  8. Järgmisena peate alla laadima varjupakid

SAMM # 2 - varjupaketi paigaldamine

  1. Laadige alla huvipakkuv varjupakk (loend artikli lõpus)
  2. Vajutage klahve WIN + R.
  3. Minema .minecraft / shaderpacks... Kui sellist kausta pole, looge see.
  4. Teisaldage või eraldage varjuarhiiv kausta .minecraft / shaderpacks... Tee peaks välja nägema selline: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [. fsh ja .vsh failid sees]
  5. Käivitage Minecraft ja minge Seaded> Varjud... Siin näete saadaolevate varjundite loendit. Valige vajalik
  6. Varjutaja seadetes lubage "tweakBlockDamage", keelake "CloudShadow" ja "OldLighting"

Sonic Eteri uskumatud varjutajad
Silduri varjud
Chocapici 13 varjud
sensi277 "yShaders
MrMeep_x3 varjud
Naelego Cel Shaders
RRe36 varjud
DeDelneri CUDA varjud
bruceatsr44 "happelised varjutid
Beed28 varjud
Ziipzaapi varjupakett
robobo1221 varjud
dvv16 varjud
Stazza85 supervarjud
hoo00 "varjud B
Regi24 lehvitavad taimed
MrButternuss ShaderPack
DethRaidi fantastiline graafika nitrovarjurite kohta
Edi Shader ForALLPc
CrankerMani TME varjutajad
Kadir Nck Shader (skate702 jaoks)
Werruse varjud
Knewtonwako elu Nexuse varjutajad
CYBOX shaderpack
CrapDeShoes CloudShade Alpha
AirLoocke42 varjutaja
CaptTatsu BSL -varjud
Trilitoni varjud
ShadersMcOfficiali Bloominxi varjutajad (Chocapic13 "varjud)
dotModded'i pidevad varjutajad
Qwqx71 "Lunar Shaderid (chocapic13" shader)

Mõeldud videokaardi protsessorite (GPU) täitmiseks. Varjud on kompileeritud ühte spetsiaalsest programmeerimiskeelest (vt) ja koondatud GPU juhisteks.

Rakendus

Enne varjude kasutamist kasutati protseduurilist tekstuuri genereerimist (näiteks kasutati mängus Unreal vee ja tule animeeritud tekstuuride loomiseks) ja multitekstreerimist (millel põhines Quake 3 -s kasutatud varjutajakeel). Need mehhanismid ei pakkunud sama paindlikkust kui varjutid.

Ümberkonfigureeritavate graafikatorustike tulekuga sai võimalikuks GPU -l matemaatiliste arvutuste (GPGPU) tegemine. Tuntumad GPGPU mehhanismid on nVidia CUDA, Microsoft DirectCompute ja avatud lähtekoodiga OpenCL.

Varjutajate tüübid

Vertex varjutid

Tipu varjutaja töötab andmetel, mis on seotud polühedra tippudega, näiteks tipu (punkti) koordinaatidega ruumis, tekstuuri koordinaatidega, tipuvärviga, puutujavektoriga, binormaalse vektoriga, normaalsega vektor. Tippvarjutajat saab kasutada tippude vaatamiseks ja perspektiivi teisendamiseks, tekstuuri koordinaatide genereerimiseks, valgustuse arvutamiseks jne.

Näidiskood tipu varjutajale keeles:

vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3

Geomeetrilised varjundid

Geomeetriline varjund, erinevalt tipust, on võimeline töötlema mitte ainult ühte tippu, vaid ka tervet primitiivi. Primitiiv võib olla segment (kaks tippu) ja kolmnurk (kolm tippu) ning kui kolmnurkse primitiivi kohta on teavet kõrvuti asetsevate tippude kohta (inglise külgnevus), saab töödelda kuni kuut tippu. Geomeetria varjund on võimeline genereerima primitiive lennult (ilma keskset protsessorit kasutamata).

Geomeetrilisi varjundeid kasutati esmakordselt Nvidia 8 seeria graafikakaartidel.

Pikslite (fragmentide) varjundid

Pikslivarjutaja töötab bitikaardi viilude ja tekstuuridega - see töötleb pikslitega seotud andmeid (näiteks värv, sügavus, tekstuuri koordinaadid). Pikslivarjundit kasutatakse graafika torujuhtme viimases etapis kujutise fragmendi moodustamiseks.

Näidiskood pikslivarjutajale keeles:

ps.1.4 texld r0, t0 mul r0, r0, v0

Eelised ja puudused

Eelised:

  • võime koostada mis tahes algoritme (paindlikkus, lihtsustamine ja programmi arendustsükli kulude vähendamine, renderdatud stseenide keerukuse ja realistlikkuse suurenemine);
  • suurenenud täitmiskiirus (võrreldes sama protsessori täitmise kiirusega, mis käivitati keskprotsessoril).

Puudused:

  • vajadus õppida uut programmeerimiskeelt;
  • erinevate tootjate erinevate graafikaprotsessorite juhiste olemasolu.

Programmeerimiskeeled

Turu erinevate vajaduste rahuldamiseks on loodud suur hulk shaderi programmeerimiskeeli (arvutigraafikal on palju rakendusvaldkondi).

Tavaliselt pakuvad varjutuskeelte kirjutamise keeled programmeerijale spetsiaalseid andmetüüpe (maatriksid, proovivõtjad, vektorid jne), sisseehitatud muutujate ja konstantide komplekti (3D API standardfunktsioonidega suhtlemiseks).

Professionaalne renderdamine

Järgmised on varjutusprogrammeerimiskeeled, mis on keskendunud maksimaalse renderduskvaliteedi saavutamisele. Sellistes keeltes kirjeldatakse materjalide omadusi abstraktsioonide abil. See võimaldab inimestel, kellel pole programmeerimise erilisi oskusi ja kes ei tea riistvara juurutamise eripära, koodi kirjutada. Näiteks võivad kunstnikud need varjutid kirjutada, et pakkuda "õiget välimust" (tekstuuri kaardistamine, valguse paigutus jne).

Tavaliselt on selliste varjude töötlemine üsna ressursimahukas: fotorealistlike piltide loomine nõuab palju arvutusvõimsust. Tavaliselt teevad suurema osa arvutustest suured arvutiklastrid või tera süsteemid.

RenderMan Shaderi programmeerimiskeel, mis rakendati Pixari tarkvaras RenderMan, oli esimene shaderi programmeerimiskeel. Rob Cooki välja töötatud ja RenderMani liidese spetsifikatsioonis kirjeldatud RenderMani API on de facto professionaalse renderdamise standard, mida kasutatakse kogu Pixari töös. OSL OSL - eng. Open Shading Language on ettevõtte poolt välja töötatud programmeerimiskeel Sony Pictures Imageworks ja sarnaneb keelega. Seda kasutatakse patenteeritud programmis "Arnold", mille on välja töötanud "Sony Pictures Imageworks" ja mis on mõeldud renderdamiseks, ning tasuta programmis Blender, mis on mõeldud kolmemõõtmelise arvutigraafika loomiseks. Reaalajas renderdamine GLSL GLSL avatud GL S haaramine L keelt) on varju programmeerimiskeel, mida on kirjeldatud OpenGL -i standardis ja mis põhineb ANSI C -standardis kirjeldatud keele versioonil. Keel toetab enamikku ANSI C funktsioone, toetab andmetüüpe, mida sageli kasutatakse kolmemõõtmelise graafikaga töötamisel (vektorid, maatriksid). Sõna "shader" GLSL -is viitab selles keeles kirjutatud iseseisvalt koostatud üksusele. Sõna "programm" viitab kompileeritud varjude kogumile, mis on omavahel ühendatud. Cg (ing. C eest g rafikad) on Shader programmeerimiskeel, mille on välja töötanud nVidia koos Microsoftiga. Keel sarnaneb Microsofti välja töötatud keelele ja HLSL -i keelele DirectX 9... Keel kasutab tüüpe "int", "float", "half" (ujukomaarv 16 bitti). Keel toetab funktsioone ja struktuure. Keelel on omapärased optimeeringud pakitud massiivide kujul (