Šta su shaderi u igri? Kako instalirati shader -ove na Minecraft? Šta odgovaraju shaderi.

Globalnom kompjuterizacijom u naš svijet došao je ogroman broj nerazumljivih pojmova. Suočavanje sa svima njima nije tako jednostavno kao što se čini na prvi pogled. Mnogi od njih su slični po imenu, mnogi imaju široku funkcionalnost. Vrijeme je da saznate šta je sjenilo, odakle je došlo, čemu služi i čemu služi.

Optimizer

Najvjerojatnije ste strastveni igrač Minecrafta i zato ste došli saznati o čemu se radi. Odmah treba napomenuti da se koncept "shader -a" lako odvaja od ove igre i može odvojeno "živjeti" od nje. Baš kao i modovi. Stoga nije vrijedno čvrsto povezivati ​​ova dva koncepta.

Općenito, shader dolazi iz programiranja, pojavio se kao pomoćnik stručnjacima. Vjerovatno će biti glasno nazvati ovaj alat optimizatorom, ali on zaista poboljšava sliku u igrama. Dakle, kad ste već počeli otprilike shvaćati o čemu se radi, prijeđimo na točno tumačenje.

Tumačenje

Šta je shader? koju izvode procesori video kartice. Ovi alati su razvijeni na posebnom jeziku. Ovisno o namjeni, može biti različito. Nakon toga, shaderi se uvjetno prevode u upute za procesore grafičkog akceleratora.

Aplikacija

Odmah se mora reći da je aplikacija u cjelini unaprijed određena svrhom. Programi su ugrađeni u procesore video kartica, što znači da rade na parametrima objekata i slika trodimenzionalne grafike. Mogu obavljati različite zadatke, uključujući rad s refleksijom, refrakcijom, zatamnjivanjem, efektima smicanja itd.

Prostor

Ljudi su već duže vrijeme pokušavali otkriti što je to sjenilo. Čak i prije ovih programa, programeri su sve radili ručno. Proces formiranja slike od nekih objekata nije automatiziran. Prije nego što se igra rodila, programeri su sami radili iscrtavanje. Radili su s algoritmom, sastavljali ga za različite zadatke. Tako su postojale upute za primjenu tekstura, video efekata itd.

Naravno, neki procesi su i dalje ugrađeni u rad video kartica. Programeri bi mogli koristiti takve algoritme. Ali nisu uspjeli nametnuti svoje algoritme na video kartici. Nestandardne instrukcije mogao je izvršavati CPU, koji je bio sporiji od GPU-a.

Primjer

Da biste razumjeli razliku, vrijedi pogledati nekoliko primjera. Očigledno je da u igri iscrtavanje može biti hardversko i softversko. Na primjer, svi se sjećamo poznatog Quake 2. Dakle, voda u igri bi mogla biti samo plavi filter kada je u pitanju hardversko iscrtavanje. No, softverskom intervencijom pojavio se prskanje vode. Ista je priča sa CS 1.6. Hardversko iscrtavanje dalo je samo bijeli bljesak, dok je softversko prikazivanje dodalo pikseliran ekran.

Pristup

Tako je postalo jasno da je potrebno riješiti takve probleme. Grafički akceleratori počeli su povećavati broj algoritama koji su bili popularni među programerima. Postalo je jasno da je nemoguće sve "nabiti". Bilo je potrebno otvoriti pristup stručnjacima za video kartice.

Prije nego što su postojale igre poput "Minecrafta" s modovima i shaderima, programeri su dobili priliku raditi s GPU blokovima u cjevovodima koji bi mogli biti odgovorni za različita uputstva. Tako su postali poznati programi pod imenom "shader". Za njihovo stvaranje posebno su razvijeni programski jezici. Dakle, video kartice su se počele učitavati ne samo standardnom "geometrijom", već i uputama za procesor.

Kad je takav pristup postao moguć, počele su se otvarati nove mogućnosti programiranja. Specijalisti bi mogli riješiti matematičke probleme na GPU -u. Ovi proračuni postali su poznati kao GPGPU. Za ovaj proces potrebni su posebni alati. Iz nVidia CUDA -e, iz Microsoft DirectCompute -a i OpenCL okvira.

Tipovi

Što su ljudi više učili šta su shaderi, otkrivalo se više informacija o njima i njihovim mogućnostima. U početku su akceleratori imali tri procesora. Svako je bio odgovoran za svoj tip sjenila. Vremenom su zamijenjeni univerzalnim. Svaki je imao određeni skup uputa koje su imale tri vrste sjenila odjednom. Unatoč spajanju djela, opis svake vrste preživio je do danas.

Vršni tip radio je s vrhovima oblika koji imaju mnogo lica. Uključeno je mnogo alata. Na primjer, govorimo o teksturalnim koordinatama, vektorima tangente, binormalnosti ili normale.

Geometrijski tip nije radio samo s jednim vrhom, već i s cijelim primitivom. Pixel je dizajniran za obradu fragmenata bitmap ilustracija i tekstura općenito.

U igrama

Ako tražite sjenčare za "Minecraft 1.5.2", najvjerojatnije samo želite poboljšati sliku u igri. Da bi to bilo moguće, programi su prošli kroz "vatrene, vodovodne i bakrene cijevi". Shaderi su testirani i dorađeni. Kao rezultat toga, postalo je jasno da ovaj alat ima prednosti i nedostatke.

Naravno, jednostavnost sastavljanja različitih algoritama veliki je plus. Ovo je i fleksibilnost i primjetno pojednostavljenje u procesu razvoja igara, a time i smanjenje troškova. Rezultirajuće virtualne scene postaju složenije i realnije. Također, sam razvojni proces postaje višestruko brži.

Od nedostataka vrijedi napomenuti samo to da ćete morati naučiti jedan od programskih jezika, a također uzeti u obzir da se različiti skupovi algoritama nalaze na različitim modelima video kartica.

Instalacija

Ako ste pronašli paket sjenila za Minecraft, morate shvatiti da u njegovoj instalaciji postoji mnogo zamki. Uprkos već opadajućoj popularnosti ove igre, njeni vjerni fanovi su i dalje ostali. Ne vole svi grafiku, posebno u 2017. Neki ljudi misle da će zahvaljujući shaderima to moći poboljšati. U teoriji je ova izjava tačna. Ali u praksi se nećete mnogo promijeniti.

Ali ako još uvijek tražite načine na "Minecraft 1.7", onda, prije svega, budite oprezni. Sam proces nije komplikovan. Osim toga, zajedno s bilo kojom datotekom za preuzimanje, postoji i uputa za njenu instalaciju. Glavna stvar je provjeriti verzije igre i sjenčanje. U suprotnom, optimizator neće uspjeti.

Postoji mnogo mjesta na Internetu na kojima možete instalirati i preuzeti takav alat. Zatim morate raspakirati arhivu u bilo koju mapu. Tamo ćete pronaći datoteku "GLSL-Shaders-Mod-1.7-Installer.jar". Nakon početka, prikazat će vam se put do igre, ako je točan, složite se sa svim narednim uputama.

Zatim morate premjestiti mapu "shaderpacks" u ".minecraft". Sada, kada pokrenete pokretač, morat ćete otići u postavke. Ovdje, ako je instalacija bila ispravna, pojavit će se redak "Shaders". Sa cijele liste možete odabrati paket koji želite.

Ako vam trebaju shaderi za Minecraft 1.7.10, samo pronađite shaderpack potrebne verzije i učinite isto. Nestabilne verzije mogu se pronaći na Internetu. Ponekad morate promijeniti, ponovo instalirati i potražiti odgovarajuću. Bolje je pogledati recenzije i odabrati najpopularnije.

Uvod

Svijet 3D grafike, uključujući igre, ispunjen je terminima. Pojmovi koji nemaju uvijek jedinu ispravnu definiciju. Ponekad se iste stvari nazivaju različito, i obrnuto, isti efekt se može nazvati "HDR", "Bloom", "Glow", pa "Postprocessing" u postavkama igre. Većina ljudi, iz razloga što se programeri hvale onim što su ugradili u svoj grafički engine, zbunjeni su šta oni zaista misle.

Ovaj članak ima za cilj pomoći vam da shvatite što neke od ovih riječi, koje se najčešće koriste u takvim slučajevima, znače. U okviru ovog članka nećemo govoriti o svim terminima 3D grafike, već samo o onima koji su posljednjih godina postali sve rasprostranjeniji kao prepoznatljive značajke i tehnologije koje se koriste u grafičkim mašinama za igre i kao nazivi za grafičke postavke modernih igara . Za početak, toplo preporučujem da se upoznate.

Ako vam nešto u ovom članku i u Aleksandrovim člancima nije jasno, onda ima smisla početi od najranijeg datuma, str. Ovi su članci već zastarjeli, naravno, ali postoje osnovni, početni i najvažniji podaci. Razgovarat ćemo s vama o više termina "višeg nivoa". Trebali biste imati osnovno razumijevanje 3D grafike u stvarnom vremenu i strukture grafičkog kanala. S druge strane, ne očekujte matematičke formule, akademsku preciznost i primjere koda - o tome ovaj članak uopće ne govori. Uslovi

Spisak pojmova opisanih u članku:

Shader

Shader u širem smislu je program za vizualno definiranje površine objekta. Ovo može biti opis osvjetljenja, teksturiranja, naknadne obrade itd. Shaderi su izrasli iz Cookovih stabala sjenila i Perlinovog jezika toka piksela. RenderMan Shading Language je sada najpoznatiji. Programabilni shaderi su prvi put uvedeni u Pixar -ovom RenderManu, koji definira nekoliko tipova sjenila: sjenila sa izvorima svjetla, površinska sjenila, pomaci, jačine zvuka , imager shaderi. Ovi shaderi se najčešće softverski izvode univerzalnim procesorima i nemaju potpunu hardversku implementaciju. Kasnije su mnogi istraživači opisali jezike slične RenderManu, ali oni su već bili dizajnirani za hardversko ubrzanje: PixelFlow sistem (Olano i Lastra), Quake Shader Language (koristi id Software u grafičkom stroju igre Quake III, koji je opisivao višepropusno iscrtavanje) itd. Peercy i njegove kolege razvili su tehniku ​​izvođenja programa s petljama i uvjetima na tradicionalnim hardverskim arhitekturama koristeći RenderMan shaderi su se razbili na nekoliko Broj prolaza koji su kombinirani u međuspremniku okvira. Kasnije su postojali jezici za koje vidimo da su hardverski ubrzani u DirectX -u i OpenGL -u. Na ovaj način su sjenila prilagođena grafičkim aplikacijama u stvarnom vremenu.

Rani video čipovi nisu se mogli programirati i izvršavali su samo unaprijed programirane radnje (fiksne funkcije), na primjer, algoritam rasvjete je bio čvrsto fiksiran u hardveru i ništa se nije moglo promijeniti. Zatim su proizvođači video čipova postupno uvodili elemente programabilnosti u svoje čipove, isprva su to bile vrlo slabe mogućnosti (NV10, poznat kao NVIDIA GeForce 256, već je bio sposoban za neke primitivne programe), koji nisu dobili softversku podršku u Microsoft DirectX API -ju, ali s vremenom su se mogućnosti stalno širile. Sljedeći korak je bio za NV20 (GeForce 3) i NV2A (video čip koji se koristi u Microsoft Xbox igraćoj konzoli), koji su postali prvi čipovi sa hardverskom podrškom za DirectX API shader -e. Verzija Shader modela 1.0 / 1.1, koja se pojavila u DirectX 8, bila je vrlo ograničena, svaki shader (posebno za piksele) mogao je biti relativno male dužine i kombinirati vrlo ograničen skup uputa. Kasnije je Shader Model 1 (skraćeno SM1) poboljšan sa Pixel Shaders 1.4 (ATI R200), koji je nudio veću fleksibilnost, ali i suviše ograničene mogućnosti. Shaderi tog vremena pisani su u takozvanom jeziku shader shader-a, koji je blizak asemblerskom jeziku za procesore opće namjene. Njegov nizak nivo donosi određene poteškoće u razumijevanju koda i programiranju, posebno kada je programski kod veliki, jer je daleko od elegancije i strukturiranosti modernih programskih jezika.

Verzija Shader Model 2.0 (SM2), koja se pojavila u DirectX 9 (koju je podržavao video čip ATI R300, koji je postao prvi GPU sa podrškom za model shader verzije 2.0), značajno je proširila mogućnosti shadera u stvarnom vremenu, nudi duže i složenije sjenčare i značajno proširen skup uputa. Dodana je mogućnost izvođenja proračunavanja s pomičnim zarezom u pixel shaderima, što je također bilo veliko poboljšanje. DirectX 9, usprkos SM2 mogućnostima, također je uveo jezik visoke razine sjenčanja (HLSL), koji je vrlo sličan jeziku C. I efikasan kompajler koji prevodi HLSL programe u kod na niskom nivou, prilagođen hardveru. Osim toga, na raspolaganju je nekoliko profila za različite hardverske arhitekture. Sada, programer može napisati jedan HLSL kôd za zasjenjivanje i kompajlirati ga koristeći DirectX u optimalni program za video čip koji je korisnik instalirao. Nakon toga, pušteni su čipovi iz NVIDIA, NV30 i NV40, koji su poboljšali mogućnosti hardverskih shadera korak dalje, dodajući još duže shader -e, mogućnost dinamičkih prijelaza u vertex i pixel shader -ovima, mogućnost dohvaćanja tekstura iz vertex shader -a itd. ... nisu, očekuju se krajem 2006. u DirectX 10 ...

Općenito, shaderi su dodali puno novih mogućnosti grafičkom cjevovodu za transformaciju i osvjetljavanje vrhova i pojedinačnu obradu piksela na način na koji to žele programeri svake određene aplikacije. Pa ipak, mogućnosti hardverskih shadera još uvijek nisu u potpunosti otkrivene u aplikacijama, a kako se njihove mogućnosti povećavaju u svakoj novoj generaciji hardvera, uskoro ćemo vidjeti nivo onih RenderMan shader -a koji su se nekad činili nedostižnim za akceleratore video igara. Do sada su u modelima shader-a u stvarnom vremenu podržani hardverskim video akceleratorima definirane samo dvije vrste shader-a: and (u definiciji DirectX 9 API). U budućnosti, DirectX 10 obećava da će im dodati sve više i više.

Vertex Shader

Vertex shaderi su programi koje izvode video čipovi koji izvode matematičke operacije s vrhovima (vertex, oni čine 3D objekte u igrama), drugim riječima, pružaju mogućnost izvođenja programabilnih algoritama za promjenu parametara vrhova i njihovog osvjetljenja (T&L - Transform & Lighting) ... Svaki je vrh definiran s nekoliko varijabli, na primjer, položaj vrha u 3D prostoru određen je koordinatama: x, y i z. Vrhovi se također mogu opisati karakteristikama boje, koordinatama teksture i slično. Vertex shaderi, ovisno o algoritmima, mijenjaju ove podatke u toku svog rada, na primjer, računanjem i pisanjem novih koordinata i / ili boja. Odnosno, ulazni podaci vertex shader -a su podaci o jednom tjemenu geometrijskog modela koji se trenutno obrađuje. Obično su to prostorne koordinate, normalne, komponente boje i koordinate teksture. Dobiveni podaci izvedenog programa služe kao ulaz za daljnji dio cjevovoda, rasterizator vrši linearnu interpolaciju ulaznih podataka za površinu trokuta i za svaki piksel izvršava odgovarajući pixel shader. Vrlo jednostavan i grub (ali jasan, nadam se) primjer: vertex shader vam omogućava da uzmete objekt 3D sfere i koristite vertex shader kako biste od njega napravili zelenu kocku :).

Prije pojavljivanja NV20 video čipa, programeri su imali dva načina, ili da koriste vlastite programe i algoritme koji mijenjaju parametre vrhova, ali tada bi sve proračune obavljao CPU (softver T&L), ili da se oslanjaju na fiksne algoritmi u video čipovima, sa podrškom za hardversku transformaciju i osvetljenje (hardverski T&L). Prvi model DirectX shader -a značio je veliki napredak od fiksnih funkcija za transformaciju i osvjetljavanje vrhova do potpuno programabilnih algoritama. Na primjer, postalo je moguće izvesti skidanje algoritma u potpunosti na video čipovima, a prije toga jedina mogućnost bila je njihova izvedba na univerzalnim centralnim procesorima. Sada, s znatno poboljšanim mogućnostima od gore spomenutog NVIDIA čipa, možete puno učiniti s vrhovima pomoću vertex shader -a (osim za njihovo stvaranje, možda) ...

Primjeri kako i gdje se primjenjuju vertex shaderi:

Pixel Shader

Shaderi piksela su programi koje video čip izvršava tokom rasterizacije za svaki piksel slike; oni izvode uzorkovanje teksture i / ili matematičke operacije na boji i dubini (Z-tampon) piksela. Sve upute za zasjenjivanje piksela izvode se piksel po piksel nakon što su geometrijska transformacija i operacije osvjetljenja dovršene. Kao rezultat svog rada, pixel shader proizvodi konačnu vrijednost boje piksela i Z-vrijednost za sljedeću fazu grafičkog cjevovoda, miješanje. Najjednostavniji primjer shader -a piksela koji se može navesti: banalno multiteksturiranje, samo miješanje dviju tekstura (na primjer difuzne i lightmap -a) i nametanje rezultata proračuna na piksel.

Prije pojavljivanja video čipova s ​​hardverskom podrškom za pixel shader -e, programeri su imali samo mogućnosti za konvencionalno multiteksturiranje i alfa miješanje, što je značajno ograničilo mogućnosti za mnoge vizualne efekte i nije dozvolilo mnogo toga što je sada dostupno. A ako bi se geometrijom moglo uraditi nešto drugo programski, onda pikselima - ne. Rane verzije DirectX -a (do 7.0 uključivo) uvijek su izvršavale sve proračune vertikalno i nudile izuzetno ograničenu funkcionalnost za osvjetljenje po pikselu (sjetite se EMBM - preslikavanje okoline i DOT3) u najnovijim verzijama. Shaderi piksela omogućili su osvjetljavanje bilo koje površine piksel po piksel koristeći materijale programirane od strane programera. Shaderi piksela 1.1 (u DirectX smislu) koji su se pojavili u NV20 mogli su ne samo raditi višestruko teksturiranje, već i mnogo više, iako je većina igara koje koriste SM1 jednostavno koristila tradicionalno multiteksturiranje na većini površina, izvršavajući složenije sjenila piksela samo na dijelu površine, za stvaranje raznih posebnih efekata (svi znaju da je voda i dalje najčešći primjer korištenja pixel shader -a u igrama). Sada, nakon pojave SM3 i video čipova koji ih podržavaju, mogućnosti pixel shader -a su narasle čak i dopuštajući raytracing, iako s nekim ograničenjima.

Primjeri upotrebe pixel shader -a:

Proceduralne teksture

Proceduralne teksture su teksture opisane matematičkim formulama. Takve teksture ne zauzimaju mjesto u video memoriji, stvaraju ih pixel shader "u hodu", svaki njihov element (texel) dobiva se kao rezultat izvršavanja odgovarajućih naredbi shader -a. Najčešće proceduralne teksture su: različite vrste buke (na primjer, fraktalna buka), drvo, voda, lava, dim, mramor, vatra itd., Odnosno one koje se mogu matematički opisati na relativno jednostavan način. Proceduralne teksture također vam omogućuju korištenje animiranih tekstura uz samo malu izmjenu matematičkih formula. Na primjer, oblaci napravljeni na ovaj način izgledaju prilično pristojno i u dinamici i u statici.

Prednosti proceduralnih tekstura također uključuju neograničen nivo detalja za svaku teksturu, jednostavno nema pikselizacije, tekstura se uvijek generira do veličine potrebne za prikaz. Animirani je također od velikog interesa, uz njegovu pomoć možete stvarati valove na vodi, bez korištenja unaprijed izračunatih animiranih tekstura. Još jedan plus takvih tekstura je da što se više koriste u proizvodu, umjetnici (iako više za programere) manje rade na stvaranju regularnih tekstura.

Nažalost, proceduralne teksture još se nisu pravilno koristile u igrama, u stvarnim aplikacijama i dalje je često lakše učitati uobičajenu teksturu, volumen video memorije raste skokovito, u najmodernije akceleratore već instaliraju 512 megabajta namjenska video memorija, koja je potrebna više od posudbe. Štaviše, i dalje često rade suprotno - da bi ubrzali matematiku u pixel shader -ima, koriste lookup table (LUT) - posebne teksture koje sadrže unaprijed izračunate vrijednosti dobivene kao rezultat proračuna. Kako ne bi izbrojali nekoliko matematičkih uputstava za svaki piksel, oni jednostavno čitaju unaprijed izračunate vrijednosti iz teksture. Međutim, što je veći naglasak na matematičkim proračunima, uzmite iste ATI video čipove nove generacije: RV530 i R580, koji imaju procesore od 12 i 48 piksela za svaku 4, odnosno 16 tekstualnih jedinica. Štoviše, ako govorimo o 3D teksturama, jer ako se dvodimenzionalne teksture mogu lako smjestiti u lokalnu memoriju akceleratora, tada 3D teksture zahtijevaju mnogo više toga.

Primjeri proceduralnih tekstura:

Bump Mapping / Specular Bump Mapping

Bumpmapping je tehnika za simulaciju nepravilnosti (ili modeliranje mikroreljefa, kako želite) na ravnoj površini bez velikih računskih troškova i promjena geometrije. Za svaki piksel na površini izračunava se osvjetljenje na osnovu vrijednosti u posebnoj karti visina koja se naziva bumpmap. Ovo je obično 8-bitna crno-bijela tekstura, a vrijednosti boje teksture ne preklapaju se kao uobičajene teksture, već se koriste za opisivanje hrapavosti površine. Boja svakog tekstila određuje visinu odgovarajuće tačke reljefa, veće vrijednosti znače veću visinu iznad izvorne površine, a niže vrijednosti, odnosno, niže. Ili obrnuto.

Stepen osvetljenosti tačke zavisi od ugla upada zraka svetlosti. Što je manji ugao između normale i zrake svetlosti, veće je osvetljenje tačke na površini. Odnosno, ako uzmete ravnu površinu, normale u svakoj točki bit će iste, a osvjetljenje također isto. A ako je površina neravna (u stvari, gotovo sve površine su u stvarnosti), tada će normale u svakoj točki biti različite. I osvjetljenje je drugačije, u jednom trenutku će biti više, u drugom - manje. Otuda princip bumpmappinga - za modeliranje nepravilnosti za različite točke poligona postavljaju se površinske normale koje se uzimaju u obzir pri izračunavanju osvjetljenja po pikselu. Kao rezultat toga, dobiva se prirodnija slika površine, bumpmapping daje površinama više detalja, poput udaraca na ciglama, pora na koži itd., Bez povećanja geometrijske složenosti modela, budući da se proračuni provode na nivo piksela. Štaviše, kada se položaj izvora svetlosti promeni, osvetljenje ovih nepravilnosti se pravilno menja.

Naravno, osvjetljenje vrhova je računski mnogo jednostavnije, ali izgleda previše nerealno, posebno s relativno niskom poli-geometrijom, interpolacija boja za svaki piksel ne može reproducirati vrijednosti veće od izračunatih vrijednosti za vrhove. To jest, pikseli u sredini trokuta ne mogu biti svjetliji od fragmenata u blizini vrha. Zbog toga se područja s naglim promjenama osvjetljenja, poput odsjaja i izvora svjetlosti vrlo blizu površine, neće fizički prikazati ispravno, a to će biti posebno vidljivo u dinamici. Naravno, problem se može djelomično riješiti povećanjem geometrijske složenosti modela, podjelom na više vrhova i trokuta, ali je osvjetljenje piksel po piksel najbolja opcija.

Za nastavak morate podsjetiti na komponente rasvjete. Boja površinske tačke izračunava se kao zbir ambijentalnih, difuznih i spekularnih komponenti iz svih izvora svjetlosti u sceni (idealno od svih, koje mnogi često zanemaruju). Doprinos ovoj vrijednosti od svakog izvora svjetlosti ovisi o udaljenosti između izvora svjetlosti i tačke na površini.

Komponente rasvete:

Hajde sada ovome dodati malo preslikavanja:

Ujednačena (ambijentalna) komponenta osvjetljenja je aproksimativno, "početno" osvjetljenje za svaku tačku scene, pri kojoj su sve tačke jednako osvijetljene i osvjetljenje ne zavisi od drugih faktora.
Difuzna komponenta svjetlosti ovisi o položaju izvora svjetlosti i o normalnoj površini. Ova komponenta osvjetljenja je različita za svaki vrh objekta, što im daje volumen. Svjetlo više ne ispunjava površinu istom sjenom.
Zrcalna komponenta osvjetljenja očituje se u refleksiji svjetlosnih zraka s površine. Za njegovo izračunavanje, osim vektora položaja izvora svjetlosti i normale, koriste se još dva vektora: vektor smjera pogleda i vektor refleksije. Model Specular Light prvi je predložio Phong Bui-Tong. Ove bljeskalice značajno povećavaju realizam slike, jer rijetke stvarne površine ne reflektiraju svjetlost, pa je zrcalna komponenta vrlo važna. Pogotovo u pokretu, jer odsjaj odmah pokazuje promjenu položaja kamere ili samog objekta. Kasnije su istraživači došli do drugih načina za izračunavanje ove komponente, složenije (Blinn, Cook-Torrance, Ward), uzimajući u obzir raspodjelu svjetlosne energije, njenu apsorpciju materijalima i rasipanje u obliku difuzne komponente.

Dakle, Specular Bump Mapping dobiva se na ovaj način:

Pogledajmo isto na primjeru igre Call of Duty 2:


Prvi fragment slike se prikazuje bez bumpmapping-a (), drugi (gore-desno) je bumpmapping bez spekularne komponente, treći je sa spekularnom komponentom normalne veličine, koja se koristi u igri, a posljednji , s desne donje strane, s najvećom mogućom spekularnom komponentom.

Što se tiče prve hardverske aplikacije, neke vrste bumpmappinga (Emboss Bump Mapping) počele su se koristiti još u doba video kartica zasnovanih na NVIDIA Riva TNT čipovima, ali su tadašnje tehnike bile izuzetno primitivne i nisu se široko koristile. Sljedeći poznati tip bio je Mapiranje preslikavanja okruženja (EMBM), ali su samo Matrox video kartice u to vrijeme imale hardversku podršku u DirectX -u, a upotreba je opet bila ozbiljno ograničena. Tada se pojavilo Dot3 Bump Mapping i tadašnji video čipovi (GeForce 256 i GeForce 2) su trebali tri prolaza kako bi se u potpunosti izveo takav matematički algoritam, budući da su ograničeni s dvije teksture koje se koriste istovremeno. Počevši od NV20 (GeForce3), postalo je moguće učiniti istu stvar u jednom prolazu pomoću pixel shader -a. Dalje više. Počeli su koristiti efikasnije tehnike kao što su.

Primjeri korištenja bumpmappinga u igrama:


Mapiranje pomaka je metoda dodavanja detalja 3D objektima. Za razliku od preslikavanja i drugih metoda po pikselu, kada je samo osvjetljenje točke pravilno modelirano kartama visine, ali se njen položaj u prostoru ne mijenja, što daje samo iluziju povećanja složenosti površine, karte pomaka omogućuju vam da dobijete pravi složeni 3D objekti iz vrhova i poligona, bez ograničenja, svojstveni metodama po pikselu. Ova metoda repozicionira vrhove trokuta normalizirajući ih za iznos na temelju vrijednosti u mapama pomaka. Mapa pomaka obično je crno-bijela tekstura, a vrijednosti u njoj koriste se za određivanje visine svake točke na površini objekta (vrijednosti se mogu pohraniti kao 8-bitni ili 16-bitni brojevi) , slično bumpmap. Karte pomaka često se koriste (u tom slučaju se nazivaju i karte visina) za stvaranje terena s brdima i dolinama. Budući da je teren opisan dvodimenzionalnom kartom pomaka, relativno ga je lako deformirati ako je potrebno, jer bi samo bilo potrebno izmijeniti kartu pomaka i renderirati površinu na osnovu nje u sljedećem okviru.

Stvaranje pejzaža pomoću mapa pomaka jasno je prikazano na slici. U početku su korištena 4 vrha i 2 poligona, što je rezultiralo punim dijelom krajolika.

Velika prednost prekrivanja karata pomaka nije samo mogućnost dodavanja detalja na površinu, već gotovo potpuno stvaranje objekta. Uzima se nisko-poli objekt, razdvaja (tesseliran) na više vrhova i poligona. Vrhovi nastali teselacijom tada se pomjeraju duž normale na osnovu vrijednosti pročitane na karti pomaka. Dobivamo složen 3D objekt od jednostavnog koristeći odgovarajuću mapu pomaka:


Broj trokuta stvorenih teselacijom mora biti dovoljno velik da uhvati sve detalje definirane kartom pomaka. Ponekad se dodatni trokuti stvaraju automatski pomoću N-zakrpa ili drugih metoda. Karte pomaka najbolje se koriste zajedno s mapiranjem izbočina za stvaranje finih detalja tamo gdje je dovoljno pravilno osvjetljenje piksel po piksel.

Mapiranje pomaka prvi je put podržano u DirectX 9.0. Ovo je bila prva verzija ovog API -ja koja podržava tehniku ​​mapiranja pomaka. DX9 podržava dvije vrste preslikavanja pomaka, filtrirano i prethodno uzorkovano. Prvu metodu podržao je zaboravljeni video čip MATROX Parhelia, a drugu ATI RADEON 9700. Filtrirana metoda razlikuje se po tome što omogućuje korištenje mip -nivoa za karte pomaka i primjenu trilinearnog filtriranja za njih. U ovoj metodi, nivo mip karte pomaka se bira za svako tjeme na osnovu udaljenosti od vrha do kamere, odnosno, automatski se bira nivo detalja. Time se postiže gotovo jednaka podjela scene kada su trokuti približno iste veličine.

Mapiranje pomaka u osnovi se može smatrati tehnikom kompresije geometrije; upotrebom mapa pomaka smanjuje se količina memorije potrebna za određeni detalj 3D modela. Skupni podaci geometrije zamjenjuju se jednostavnim 2D teksturama pomaka, obično 8-bitnim ili 16-bitnim. Time se smanjuje količina memorije i propusnost potrebna za isporuku geometrijskih podataka GPU -u, što su neka od najvećih ograničenja na današnjim sistemima. Alternativno, s jednakim propusnim opsegom i zahtjevima za pohranu, mapiranje pomaka omogućuje mnogo složenije geometrijske 3D modele. Upotreba modela mnogo manje složenosti, kada se umjesto desetina ili stotina hiljada trokuta koriste jedinice hiljada, to također omogućava ubrzanje njihove animacije. Ili ga poboljšajte primjenom složenijih složenih algoritama i tehnika, poput simulacije platna.

Još jedna prednost je ta što se pomoću mapa pomaka složene poligonalne 3D mreže pretvaraju u više 2D tekstura koje je lakše obraditi. Na primjer, za organizaciju možete koristiti uobičajeno mapiranje mipova za prekrivanje mapa pomaka. Također, umjesto relativno složenih algoritama za komprimiranje trodimenzionalnih mreža, možete koristiti uobičajene metode komprimiranja tekstura, čak i onih sličnih JPEG-u. A za proceduralno stvaranje 3D objekata možete koristiti uobičajene algoritme za 2D teksture.

Ali karte pomaka imaju i neka ograničenja, koja se ne mogu primijeniti u svim situacijama. Na primjer, glatki objekti koji ne sadrže puno finih detalja bit će bolje predstavljeni u obliku standardnih mreža ili drugih površina višeg nivoa, poput Bezierovih krivulja. S druge strane, vrlo složene modele poput drveća ili biljaka također nije lako predstaviti mapama pomaka. Postoje i problemi s pogodnošću njihove upotrebe, to gotovo uvijek zahtijeva specijalizirane alate, jer je vrlo teško izravno izraditi karte pomaka (ako ne govorimo o jednostavnim objektima, poput krajolika). Mnogi inherentni problemi i ograničenja mapa pomaka isti su kao i oni budući da su dvije metode u suštini dva različita prikaza slične ideje.

Kao primjer iz stvarnih igara navest ću igru ​​koja koristi uzorkovanje teksture iz vertex shader -a, značajku koja se pojavila u NVIDIA NV40 video čipovima i Shader Model 3.0. Teksturiranje vrhova može se primijeniti na jednostavnu metodu prekrivanja mapa pomaka koje u potpunosti izvodi GPU, bez teselacije (cijepanje na više trokuta). Upotreba takvog algoritma je ograničena, imaju smisla samo ako su karte dinamične, odnosno mijenjat će se u procesu. Na primjer, ovo je iscrtavanje velikih vodenih površina, što se radi u igri Pacific Fighters:


Normalno mapiranje je poboljšana verzija ranije opisane tehnike bumpmappinga, njegova proširena verzija. Bumpmapping je razvio Blinn još 1978. godine, gdje su normalne površine promijenjene ovom metodom mapiranja terena na osnovu informacija iz neravnih karata. Dok bumpmapping samo mijenja postojeću normalnu za površinske točke, normalmapping potpuno zamjenjuje normale preuzimanjem njihovih vrijednosti iz posebno pripremljene normalne karte. Ove karte su obično teksture s unaprijed izračunate normalne vrijednosti pohranjene u njima, predstavljene kao komponente boje RGB (međutim, postoje i posebni formati za normalne karte, uključujući one sa kompresijom), za razliku od 8-bitne crno-bijele visine karte u bumpmappingu.

Općenito, kao i mapiranje naglog oblika, to je također "jeftina" metoda za dodavanje detalja modelima relativno niske geometrijske složenosti, bez upotrebe stvarnije geometrije, samo naprednije. Jedna od najzanimljivijih upotreba tehnike je značajno povećanje detalja nisko-poli modela korištenjem normalnih karata dobivenih obradom istog modela velike geometrijske složenosti. Normalne karte sadrže detaljniji opis površine od bumpmappinga i omogućuju vam predstavljanje složenijih oblika. Ideje za dobijanje informacija iz vrlo detaljnih objekata izražene su sredinom 90-ih godina prošlog stoljeća, ali tada se radilo o upotrebi za. Kasnije, 1998. godine, predstavljene su ideje za prijenos detalja u obliku normalnih karata sa visoko-poli modela na one s niskim poli.

Normalne karte pružaju učinkovitiji način za pohranu detaljnih površinskih podataka od jednostavnog korištenja velikog broja poligona. Njihovo jedino ozbiljno ograničenje je da nisu baš prikladni za velike detalje, jer normalno mapiranje zapravo ne dodaje poligone niti mijenja oblik objekta, već samo stvara njegov izgled. Ovo je samo simulacija detalja zasnovana na proračunima osvjetljenja na nivou piksela. Na ekstremnim poligonima objekta i velikim kutovima nagiba površine to je vrlo uočljivo. Stoga je najrazumniji način primjene normalnog preslikavanja napraviti niskopoli model dovoljno detaljan za održavanje osnovnog oblika objekta i koristiti normalne karte za dodavanje sitnijih detalja.

Normalne karte obično se generiraju iz dvije verzije modela, niske i visoke poli. Low poly model sastoji se od minimuma geometrije, osnovnih oblika objekta, a high poly model sadrži sve što vam je potrebno za maksimalne detalje. Zatim se pomoću posebnih uslužnih programa međusobno uspoređuju, razlika se izračunava i pohranjuje u teksturu koja se naziva normalna mapa. Prilikom izrade, možete dodatno upotrijebiti neravnu mapu za vrlo male detalje koji se ne mogu modelirati čak ni u modelu s visokim poli (pore kože, druge male udubine).

Normalne karte prvobitno su bile predstavljene kao regularne RGB teksture, gdje se komponente boje R, G i B (0 do 1) tumače kao koordinate X, Y i Z. Svaki tekstel na normalnoj karti predstavljen je kao normala površinske tačke. Normalne karte mogu biti dva tipa: sa koordinatama u prostoru modela (opšti koordinatni sistem) ili tangentnim prostorom (izraz na ruskom je "tangentni prostor", lokalni koordinatni sistem trougla). Druga se opcija češće koristi. Kada su normalne karte predstavljene u prostoru modela, tada moraju imati tri komponente, budući da se svi pravci mogu predstaviti, a kada su u lokalnom koordinatnom sistemu tangentni prostor, tada se možete snaći s dvije komponente, a treću dobiti u pikselu shader.

Moderne aplikacije u stvarnom vremenu i dalje uvelike nadmašuju unaprijed prikazanu animaciju u smislu kvalitete slike, prije svega se to odnosi na kvalitetu osvjetljenja i geometrijsku složenost scena. Broj vrhova i trokuta izračunatih u stvarnom vremenu je ograničen. Stoga su metode za smanjenje količine geometrije vrlo važne. Prije normalnog mapiranja razvijeno je nekoliko takvih metoda, ali niskopoli modeli, čak i sa bumpmappingom, mnogo su gori od složenijih modela. Iako normalno preslikavanje ima nekoliko nedostataka (najočitiji - budući da model ostaje niskopoligrafiran, to se lako vidi po njegovim kutnim granicama), konačna kvaliteta iscrtavanja značajno se poboljšava, ostavljajući geometrijsku složenost modela niskom. Nedavno je jasno vidljiv porast popularnosti ove tehnike i njene upotrebe u svim popularnim motorima za igre. To je zbog kombinacije izvrsne rezultirajuće kvalitete i istodobnog smanjenja zahtjeva za geometrijsku složenost modela. Uobičajena tehnika mapiranja sada se koristi gotovo svugdje, sve nove igre koriste je što je moguće šire. Evo samo kratkog popisa poznatih PC igara koje koriste uobičajeno mapiranje: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Sve izgledaju mnogo bolje od igara iz prošlosti, uključujući i upotreba normala karata.

Postoji samo jedna negativna posljedica korištenja ove tehnike - povećanje volumena tekstura. Uostalom, normalna mapa snažno utječe na to kako će objekt izgledati, a ona mora biti dovoljno velike rezolucije, pa se zahtjevi za video memoriju i njen propusni opseg udvostručuju (u slučaju nekomprimiranih normalnih karata). No, sada se već proizvode video kartice s 512 megabajta lokalne memorije, njihov propusni opseg neprestano raste, metode kompresije razvijene su posebno za normalne karte, tako da ta mala ograničenja zapravo nisu jako važna. Učinak normalnog preslikavanja je mnogo veći, dopuštajući upotrebu relativno nisko-poli modela, smanjujući memorijske zahtjeve za pohranu geometrijskih podataka, poboljšavajući performanse i dajući vrlo pristojan vizualni rezultat.

Parallax Mapping / Offset Mapping

Normalno mapiranje, razvijeno 1984. godine, praćeno je Relief Texture Mapping, koje su uveli Olivera i Bishop 1999. To je tehnika mapiranja teksture zasnovana na dubinskim informacijama. Metoda nije našla primjenu u igrama, ali je njena ideja doprinijela nastavku rada na mapiranju paralakse i njenom poboljšanju. Kaneko je 2001. uveo mapiranje paralakse, što je bila prva efikasna metoda za isticanje paralaksnog efekta po pikselima. Godine 2004. Welsh je demonstrirao upotrebu mapiranja paralakse na programabilnim video čipovima.

Ova metoda ima možda najrazličitija imena. Navest ću one koje sam upoznao: Parallax Mapping, Offset Mapping, Virtual Displacement Mapping, Per-Pixel Displacement Mapping. Prvi naslov se u članku koristi za sažetost.
Parallax preslikavanje je još jedna alternativa preslikavanju i normalnim tehnikama mapiranja koja vam daje još bolji uvid u detalje površine, prirodniji prikaz 3D površina, a da pritom ne izgubite previše performansi. Ova tehnika je slična mapiranju pomaka i normalnom mapiranju u isto vrijeme, negdje je između. Metoda je također dizajnirana za prikaz više detalja površine nego što ima originalni geometrijski model. Slično je normalnom preslikavanju, ali razlika je u tome što metoda iskrivljuje preslikavanje teksture promjenom koordinata teksture tako da, kada pogledate površinu iz različitih kutova, izgleda konveksno, iako je u stvarnosti površina ravna i ne mijenja se . Drugim riječima, Parallax Mapping je tehnika za približavanje učinka pomicanja površinskih točaka ovisno o promjeni gledišta.

Tehnika mijenja koordinate teksture (zbog čega se tehnika ponekad naziva i offset preslikavanje) tako da površina izgleda voluminoznije. Ideja ove metode je vratiti tekstualne koordinate točke u kojoj vektor pogleda siječe površinu. Ovo zahtijeva praćenje zraka (traženje zraka) za visinsku kartu, ali ako nema previše promjenjivih vrijednosti ("glatko" ili "glatko"), tada se može izbjeći aproksimacija. Ova metoda je dobra za površine s glatko promjenjivim visinama, bez pogrešnog izračuna presjeka i velikih vrijednosti pomaka. Tako jednostavan algoritam razlikuje se od normalnog mapiranja sa samo tri instrumenta za zasjenjivanje piksela: dvije matematičke upute i jedno dodatno dohvaćanje iz teksture. Nakon izračunavanja nove koordinate teksture, koristi se za čitanje ostalih slojeva teksture: osnovne teksture, normalne karte itd. Ova metoda mapiranja paralakse na modernim video čipovima gotovo je jednako učinkovita kao i konvencionalno preslikavanje tekstura, a rezultat je realističniji prikaz površine od jednostavnog normalnog mapiranja.

No, upotreba konvencionalnog mapiranja paralakse ograničena je na karte visine s malim razlikama u vrijednostima. Algoritam pogrešno obrađuje "strme" nepravilnosti, pojavljuju se različiti artefakti, teksture "lebde" itd. Razvijeno je nekoliko modificiranih metoda za poboljšanje tehnike mapiranja paralakse. Nekoliko istraživača (Yerex, Donnelly, Tatarchuk, Policarpo) opisali su nove metode koje poboljšavaju početni algoritam. Gotovo sve ideje temelje se na praćenju zraka u pixel shaderu kako bi se odredilo sjecište detalja površine među sobom. Modificirane tehnike dobile su nekoliko različitih naziva: Parallax Mapping with Occlusion, Parallax Mapping with Distance Distance Functions, Parallax Occlusion Mapping. Radi sažetosti, sve ćemo ih nazvati Parallax Occlusion Mapping.

Metode mapiranja okluzije paralaksa također uključuju praćenje zraka za određivanje visine i uzimanje u obzir vidljivosti tekstila. Zaista, gledano pod kutom prema površini, tekseli se međusobno blokiraju, a imajući to na umu, efektu paralakse možete dodati još dublje. Dobivena slika postaje realističnija i takve poboljšane metode mogu se koristiti za dublji reljef, odlične su za prikazivanje zidova od opeke i kamena, pločnika itd. Posebno treba napomenuti da je glavna razlika između mapiranja paralakse i preslikavanja pomaka u tome što su proračuni sve su po pikselu, a ne površne. Zbog toga metoda ima nazive poput mapiranja virtualnog pomaka i preslikavanja pomaka po pikselu. Pogledajte sliku, teško je vjerovati, ali kamenje pločnika ovdje je samo efekt po piksel:

Metoda vam omogućuje učinkovito prikazivanje detaljnih površina bez milijuna vrhova i trokuta koji bi bili potrebni pri implementaciji ove geometrije. Istodobno, očuvani su visoki detalji (osim silueta / rubova), a izračuni animacije uvelike su pojednostavljeni. Ova tehnika je jeftinija od korištenja stvarne geometrije, a koristi se znatno manje poligona, posebno u slučajevima s vrlo malim detaljima. Postoji mnogo aplikacija za algoritam, a on je najprikladniji za kamenje, cigle i slično.

Dodatna prednost je i to što se karte visina mogu dinamički mijenjati (površina vode s valovima, rupe od metaka u zidovima i još mnogo toga). Nedostatak metode je nedostatak geometrijski ispravnih silueta (rubova objekta), jer je algoritam piksel po piksel i nije pravo preslikavanje pomaka. Ali štedi performanse u obliku smanjenog opterećenja transformacije, osvjetljenja i animacije geometrije. Štedi video memoriju potrebnu za pohranu velikih količina geometrijskih podataka. Prednosti tehnike su relativno jednostavna integracija u postojeće aplikacije i upotreba poznatih pomoćnih programa koji se koriste za normalno mapiranje u procesu.

Ova tehnika se nedavno već koristila u stvarnim igrama. Do sada su se snalazili s jednostavnim mapiranjem paralakse zasnovanim na kartama statičkih visina, bez praćenja zraka i izračunavanja presjeka. Evo nekoliko primjera kako se mapiranje paralakse može koristiti u igrama:

Naknadnu obradu

U širem smislu, naknadna obrada je sve što se događa nakon glavnih koraka snimanja. Drugim riječima, naknadna obrada je svaka promjena slike nakon što je prikazana. Postprocesiranje je skup alata za stvaranje posebnih vizualnih efekata, a njihovo stvaranje se izvodi nakon završetka glavnog rada na iscrtavanju scene, odnosno pri stvaranju efekata naknadne obrade koristi se gotova rasterska slika.

Jednostavan primjer sa fotografije: snimili ste prekrasno jezero sa zelenilom po vedrom vremenu. Nebo je jako svijetlo, a drveće previše tamno. Učitavate fotografiju u grafički uređivač i počinjete mijenjati svjetlinu, kontrast i druge parametre za područja slike ili za cijelu sliku. Ali više nemate priliku mijenjati postavke kamere, već radite na obradi gotove slike. Ovo je naknadna obrada. Ili drugi primjer: odabir pozadine u portretnoj fotografiji i primjenjivanje filtera zamućenja na to područje radi efekta dubinske oštrine s većom dubinom. To jest, kada promijenite ili ispravite okvir u grafičkom uređivaču, radite naknadnu obradu. Isto se može učiniti u igri, u stvarnom vremenu.

Postoji mnogo različitih mogućnosti za obradu slike nakon renderiranja. Vjerojatno su svi vidjeli mnogo takozvanih grafičkih filtera u grafičkim uređivačima. Upravo se to naziva postfilterima: zamućenje, otkrivanje rubova, izoštravanje, šum, glatko, utiskivanje itd. Kada se primijeni na 3D iscrtavanje u stvarnom vremenu, to se radi ovako - cijela scena se iscrtava u posebno područje, render target, a nakon glavnog iscrtavanja ova slika se dodatno obrađuje pomoću pixel shader -a i tek tada prikazuje na ekranu. Od efekata naknadne obrade u igrama, najčešće se koriste ,,. Postoje i mnogi drugi efekti: buka, bljesak, izobličenje, sepija itd.

Evo nekoliko vrhunskih primjera naknadne obrade u aplikacijama za igre:

Visoki dinamički raspon (HDR)

Visoki dinamički raspon (HDR) primijenjen na 3D grafiku predstavlja iscrtavanje visokog dinamičkog raspona. Suština HDR -a je opisati intenzitet i boju stvarnim fizičkim veličinama. Uobičajeni model za opisivanje slike je RGB, kada su sve boje predstavljene kao zbroj primarnih boja: crvena, zelena i plava, s različitim intenzitetom u obliku mogućih cjelobrojnih vrijednosti od 0 do 255 za svaku, kodirane sa osam bitova po boji. Omjer maksimalnog i minimalnog intenziteta koji može prikazati određeni model ili uređaj naziva se dinamički raspon. Dakle, dinamički raspon RGB modela je 256: 1 ili 100: 1 cd / m 2 (dva reda veličine). Ovaj model za opisivanje boje i intenziteta obično se naziva niski dinamički raspon (LDR).

Moguće vrijednosti LDR -a za sve slučajeve očito nisu dovoljne, osoba može vidjeti mnogo veći raspon, posebno pri niskom intenzitetu svjetla, a RGB model je u takvim slučajevima previše ograničen (i pri velikom intenzitetu). Dinamički raspon ljudskog vida je od 10 -6 do 10 8 cd / m 2, odnosno 10.000.000.000.000: 1 (14 redova veličine). Ne možemo vidjeti cijeli raspon u isto vrijeme, ali domet vidljiv oku u bilo kojem trenutku je približno 10.000: 1 (četiri reda veličine). Vizija se postupno prilagođava vrijednostima iz drugog dijela raspona osvjetljenja, koristeći takozvanu adaptaciju, koja se lako može opisati situacijom s isključivanjem svjetla u prostoriji noću - u početku oči vide vrlo malo, ali vremenom se prilagođavaju promijenjenim uvjetima osvjetljenja i vide mnogo više. ... Ista se stvar događa kada promijenite tamno okruženje u svijetlo.

Dakle, dinamički raspon RGB modela opisa nije dovoljan za predstavljanje slika koje osoba može vidjeti u stvarnosti, ovaj model značajno smanjuje moguće vrijednosti intenziteta svjetlosti u gornjem i donjem dijelu raspona. Najčešći primjer koji se navodi u HDR materijalima je slika zamračene sobe s prozorom na svijetloj ulici po sunčanom danu. S RGB modelom možete dobiti ili uobičajen prikaz onoga što je izvan prozora, ili samo onoga što je u prostoriji. Vrijednosti veće od 100 cd / m 2 u LDR -u općenito su obrezane, što je razlog zašto je u 3D renderovanju teško pravilno prikazati izvore jake svjetlosti usmjerene direktno u kameru.

Do sada se sami uređaji za prikaz podataka ne mogu ozbiljno poboljšati i ima smisla napustiti LDR u proračunima, možete koristiti stvarne fizičke vrijednosti intenziteta i boje (ili linearno proporcionalne) i prikazati maksimum koji može na monitor. Suština prikaza HDR -a je u korištenju intenziteta i boje u stvarnim fizičkim veličinama ili linearno proporcionalnim te u korištenju ne cijelih brojeva, već brojeva s pomičnim zarezom s velikom preciznošću (na primjer, 16 ili 32 bita). Time se uklanjaju ograničenja RGB modela i dramatično povećava dinamički raspon slike. Ali tada se bilo koja HDR slika može prikazati na bilo kojem mediju za prikaz (isti RGB monitor), uz najviši mogući kvalitet pomoću posebnih algoritama.

HDR renderiranje vam omogućuje da promijenite ekspoziciju nakon što smo renderirali sliku. Omogućava simulaciju učinka adaptacije ljudskog vida (prelazak sa svijetlih otvorenih prostora u tamne prostorije i obrnuto), omogućava fizički ispravno osvjetljenje, a ujedno je i jedinstveno rješenje za primjenu efekata naknadne obrade (odsjaj, blještavilo, cvjetanje) , zamućenje pokreta). Algoritmi obrade slike, korekcija boje, gama korekcija, zamućenje pokreta, cvjetanje i druge metode naknadne obrade bolje se izvode u HDR prikazu.

U aplikacijama za 3D renderiranje u stvarnom vremenu (igre, uglavnom), HDR renderiranje počelo se koristiti ne tako davno jer zahtijeva računanje i podršku za render cilj u formatima s pomičnim zarezom, koji je prvi put postao dostupan samo na video čipovima s podrškom za DirectX 9. Uobičajeni način prikazivanja HDR-a u igrama: iscrtavanje scene u međuspremniku s pomičnim zarezom, naknadna obrada slike u proširenom rasponu boja (promjena kontrasta i svjetline, balans boje, efekti zamućenja i zamućenja pokreta, bljeskanje objektiva i slično), primjenom mapiranja tonova za izlaz konačne HDR slike na LDR uređaj za prikaz. Ponekad se karte okruženja koriste u HDR formatima, za statičke refleksije na objektima, upotreba HDR -a za simulaciju dinamičkih prelamanja i refleksija je vrlo zanimljiva, za to se mogu koristiti i dinamičke karte u formatima s pomičnim zarezom. Ovome možete dodati još svjetlosnih karata, unaprijed izračunatih i spremljenih u HDR formatu. Veliki dio gore navedenog učinjen je, na primjer, u Half-Life 2: Lost Coast.

HDR renderiranje je vrlo korisno za složene naknadne obrade više kvalitete od konvencionalnih metoda. Isti procvat izgledat će realnije kada se izračuna u modelu HDR prikaza. Na primjer, kao što je to učinjeno u Crytek -ovoj igri Far Cry, ona koristi standardne HDR tehnike renderovanja: primjenu filtera za cvjetanje koje pruža Kawase i operatora mapiranja tonova Reinharda.

Nažalost, u nekim slučajevima programeri igara mogu sakriti pod imenom HDR samo bloom filter izračunat u uobičajenom LDR rasponu. I dok je većina onoga što se trenutno radi u igrama s HDR renderiranjem najkvalitetniji procvat, prednosti HDR renderiranja nisu ograničene samo na ovaj post-efekt, to je jednostavno najlakše učiniti.

Drugi primjeri HDR iscrtavanja u aplikacijama u stvarnom vremenu:


Mapiranje tonova je proces pretvaranja raspona sjajnosti HDR -a u raspon LDR -a koji prikazuje izlazni uređaj, poput monitora ili pisača, jer će za izlaz HDR slika na njih biti potrebno pretvoriti dinamički raspon i raspon HDR modela u odgovarajuću dinamiku LDR -a raspona, najčešće RGB. Uostalom, raspon svjetline predstavljen u HDR -u je vrlo širok, to je nekoliko redova veličine apsolutnog dinamičkog raspona odjednom, u jednoj sceni. Domet koji se može reproducirati na konvencionalnim izlaznim uređajima (monitori, televizori) je samo oko dva reda veličine dinamičkog raspona.

Pretvaranje HDR u LDR naziva se mapiranje tonova i ima gubitak i oponaša svojstva ljudskog vida. Ovi algoritmi se obično nazivaju iskazima mapiranja tonova. Operateri kategoriziraju sve vrijednosti svjetline slike u tri različite vrste: tamnu, srednju i svijetlu. Na osnovu procjene svjetline srednjih tonova, ukupna osvijetljenost se korigira, vrijednosti svjetline piksela u sceni se preraspodjeljuju kako bi ušle u izlazni raspon, tamni pikseli su posvijetljeni, a svijetli zatamnjeni. Zatim se najsvjetliji pikseli na slici skaliraju u raspon izlaznog uređaja ili modela prikaza izlaza. Sljedeća slika prikazuje najjednostavniju konverziju HDR slike u LDR raspon, linearnu transformaciju i složeniji operator mapiranja tonova primijenjen je na fragment u sredini, koji radi kako je gore opisano:

Može se vidjeti da samo korištenjem nelinearnog preslikavanja tonova možete dobiti najviše detalja na slici, a ako linearno pretvorite HDR u LDR, mnoge se stvari jednostavno izgube. Ne postoji jedan ispravan algoritam mapiranja tonova, postoji nekoliko operatora koji daju dobre rezultate u različitim situacijama. Evo dobrog primjera dvije različite izjave o mapiranju tonova:

Zajedno s iscrtavanjem HDR -a, mapiranje tonova nedavno se koristi u igrama. Postalo je moguće izborno simulirati svojstva ljudskog vida: gubitak oštrine u mračnim prizorima, prilagođavanje novim uslovima osvjetljenja tokom prijelaza sa vrlo svijetlih područja u tamna područja i obrnuto, osjetljivost na promjene kontrasta, boje ... Ovako imitacija sposobnosti vida da se prilagodi u Far Cryu izgleda. Prvi snimak ekrana prikazuje sliku koju igrač vidi upravo kako se okreće iz mračne sobe u svijetlo osvijetljeni otvoreni prostor, a druga prikazuje istu sliku nekoliko sekundi nakon adaptacije.

Bloom

Bloom je jedan od filmskih efekata naknadne obrade koji osvjetljava najsvjetlije dijelove slike. Ovo je učinak vrlo jakog svjetla, koje se očituje u obliku sjaja oko svijetlih površina, nakon nanošenja filtera za cvjetanje, takve površine ne dobivaju samo dodatnu svjetlinu, svjetlost od njih (oreol) djelomično utječe na tamnija područja u susjedstvu na svijetle površine u okviru. Najlakši način da to pokažete je na primjeru:

U 3D Bloom grafici, filter se vrši dodatnom naknadnom obradom - miješanjem okvira zamućenog filterom zamućenja (cijeli okvir ili njegova pojedinačna svijetla područja, filter se obično primjenjuje nekoliko puta) i originalnim okvirom. Jedan od najčešće korištenih algoritama za filtriranje cvjetanja u igrama i drugim aplikacijama u stvarnom vremenu:

  • Scena se iscrtava u framebuffer -u, intenzitet sjaja objekata se upisuje u alfa kanal bafera.
  • Framebuffer se kopira u posebnu teksturu za obradu.
  • Rezolucija teksture je smanjena, na primjer, za 4 puta.
  • Filteri za uklanjanje aliasinga (zamućenje) primjenjuju se na sliku nekoliko puta, na osnovu podataka o intenzitetu snimljenih u alfa kanalu.
  • Rezultirajuća slika se miješa s originalnim okvirom u međuspremniku okvira i rezultat se prikazuje.

Kao i druge vrste naknadne obrade, cvjetanje se najbolje koristi pri iscrtavanju u visokom dinamičkom rasponu (HDR). Dodatni primjeri obrade konačne slike bloom filterom iz 3D aplikacija u stvarnom vremenu:

Motion blur

Do zamućenja pokreta dolazi na fotografijama i filmovima zbog kretanja objekata u kadru tokom vremena ekspozicije kadra, dok je zatvarač objektiva otvoren. Okvir snimljen kamerom (fotografija, film) ne prikazuje snimak snimljen odmah sa nultim trajanjem. Zbog tehnoloških ograničenja okvir prikazuje određeni vremenski period, za to vrijeme objekti u okviru mogu se pomaknuti na određenu udaljenost, a ako se to dogodi, tada će biti prikazani svi položaji objekta u pokretu tijekom otvorenog zatvarača objektiva na okviru kao zamućena slika duž vektora kretanja ... To se događa ako se objekt kreće u odnosu na kameru ili je kamera u odnosu na objekt, a količina zamućenja daje nam ideju o veličini brzine kretanja objekta.

U trodimenzionalnoj animaciji, u bilo kojem trenutku u vremenu (kadru), objekti se nalaze na određenim koordinatama u trodimenzionalnom prostoru, slično virtualnoj kameri s beskonačno velikom brzinom zatvarača. Kao rezultat toga, nema zamućenja sličnog onom koje dobivaju kamera i ljudsko oko pri gledanju objekata koji se brzo kreću. Izgleda neprirodno i nerealno. Razmotrimo jednostavan primjer: nekoliko sfera rotira oko neke osi. Evo slike kako bi ovaj pokret izgledao sa i bez zamućenja:

Na slici bez zamućenja ne može se čak ni reći da li se sfere kreću ili ne, dok zamućenje pri kretanju daje jasnu ideju o brzini i smjeru kretanja objekata. Usput, nedostatak zamućenja pokreta također je razlog zašto se kretanje u igrama pri 25-30 sličica u sekundi čini trznutim, iako filmovi i video zapisi izgledaju sjajno pri istim parametrima brzine kadrova. Da bi se nadoknadio nedostatak zamućenja pokreta, poželjna je ili velika brzina kadrova (60 sličica u sekundi ili veća) ili upotreba dodatnih metoda obrade slike za oponašanje efekta zamućenja pokreta. Ovo se koristi za poboljšanje glatkoće animacije i za učinak foto i filmskog realizma u isto vrijeme.

Najjednostavniji algoritam zamućenja pokreta za aplikacije u stvarnom vremenu je korištenje podataka iz prethodnih okvira animacije za iscrtavanje trenutnog okvira. No, postoje učinkovitije i modernije metode zamućivanja pokreta, koje ne koriste prethodne okvire, već se temelje na vektorima kretanja objekata u kadru, dodajući također samo još jedan korak naknadne obrade procesu iscrtavanja. Efekt zamućenja može biti na cijelom ekranu (obično se radi u naknadnoj obradi) ili za pojedinačne objekte koji se najbrže kreću.

Moguće primjene efekta zamućenja pokreta u igrama: sve trkačke igre (za stvaranje efekta vrlo velike brzine kretanja i za korištenje pri gledanju repriza sličnih TV-u), sportske igre (iste reprize, a u samoj igri zamućivanje može primjenjuju se na vrlo brzo pokretne objekte, poput lopte ili paka), borbene igre (brzo kretanje oružja u bliskom okršaju, ruku i nogu), mnoge druge igre (tijekom 3D prizora u igri na motoru). Evo nekoliko primjera efekta zamućenja pokreta iz igara:

Dubinska oštrina (DOF)

Dubinska oštrina, ukratko, je zamućivanje objekata ovisno o njihovom položaju u odnosu na fokus kamere. U stvarnom životu, na fotografijama i u filmovima, ne vidimo sve objekte jednako jasno, to je zbog posebnosti strukture oka i strukture optike kamera i kino kamera. Optika za fotografije i kino ima određenu udaljenost, objekti koji se nalaze na takvoj udaljenosti od fotoaparata su u fokusu i na slici izgledaju oštro, a objekti udaljeniji od kamere ili blizu nje izgledaju, naprotiv, mutni, oštrina se postepeno smanjuje sa povećanjem ili smanjenjem udaljenosti ...

Kao što ste mogli pretpostaviti, ovo je fotografija, a ne iscrtavanje. U računarskoj grafici svaki objekat iscrtane slike je savršeno jasan, jer se u proračunima ne oponašaju sočiva i optika. Stoga, kako bi se postigao foto i filmski realizam, moraju se koristiti posebni algoritmi za nešto slično za računarsku grafiku. Ove tehnike simuliraju učinak različitog fokusa na objekte na različitim udaljenostima.

Jedna od uobičajenih tehnika za iscrtavanje u stvarnom vremenu je miješanje originalnog kadra i njegove zamućene verzije (više prolaza filtera zamućenja) na osnovu podataka o dubini za piksele na slici. U igrama DOF efekt ima nekoliko namjena, na primjer, scene s igrama na motoru za igre, ponavljanja u sportskim i trkaćim igrama. Primjeri dubinske oštrine u realnom vremenu:

Nivo detalja (LOD)

Nivo detalja u 3D aplikacijama je metoda smanjenja složenosti iscrtavanja okvira, smanjenja ukupnog broja poligona, tekstura i drugih resursa u sceni, te općenito smanjenja njene složenosti. Jednostavan primjer: model glavnog lika sastoji se od 10.000 poligona. U slučajevima kada se u obrađenoj sceni nalazi blizu kamere, važno je da se koriste svi poligoni, ali na vrlo velikoj udaljenosti od kamere, zauzet će samo nekoliko piksela u konačnoj slici, a nema tačka u obradi svih 10.000 poligona. Možda će u ovom slučaju stotine poligona ili čak nekoliko poligona i posebno pripremljena tekstura biti dovoljni za približno isti prikaz modela. U skladu s tim, na srednjim udaljenostima ima smisla koristiti model koji se sastoji od više trokuta od najjednostavnijeg modela i manje od najsloženijeg.

LOD metoda se obično koristi pri modeliranju i prikazivanju trodimenzionalnih scena, koristeći nekoliko nivoa složenosti (geometrijske ili na neki drugi način) za objekte, proporcionalno udaljenosti od njih do kamere. Ovu tehniku ​​često koriste programeri za smanjenje broja poligona u sceni i za poboljšanje performansi. Kada se nalaze blizu kamere, koriste se modeli s najviše detalja (broj trokuta, veličina tekstura, složenost teksturiranja), za najveću moguću kvalitetu slike i obrnuto, kada se modeli uklone s fotoaparata , modeli s manje trokuta koriste se za povećanje brzine iscrtavanja. Promjena složenosti, posebno broja trokuta u modelu, može se dogoditi automatski na osnovu jednog 3D modela maksimalne složenosti, ili možda na osnovu nekoliko unaprijed pripremljenih modela sa različitim nivoima detalja. Korištenjem modela s manje detalja za različite udaljenosti, procjenjuje se složenost iscrtavanja, gotovo bez pogoršanja ukupnih detalja slike.

Metoda je posebno efikasna ako je veliki broj objekata u sceni veliki i ako se nalaze na različitim udaljenostima od kamere. Na primjer, uzmite sportsku igru ​​poput hokeja ili nogometnog simulatora. Modeli sa niskim poli znakom koriste se kada su udaljeni od kamere, a kada se zumiraju, modele zamjenjuju drugi s velikim brojem poligona. Ovaj primjer je vrlo jednostavan i pokazuje suštinu metode zasnovanu na dva nivoa detalja modela, ali niko se ne trudi stvoriti nekoliko nivoa detalja tako da učinak promjene razine LOD -a nije previše uočljiv, tako da detalji postupno "rastu" kako se objekt približava.

Osim udaljenosti od kamere, za LOD mogu biti važni i drugi faktori - ukupan broj objekata na ekranu (kada je jedan ili dva znaka u kadru, tada se koriste složeni modeli, a kada je 10-20, oni prebacite se na jednostavnije) ili broj sličica u sekundi (postavljaju se granice FPS vrijednosti, pri kojima se mijenja nivo detalja, na primjer, pri FPS ispod 30 smanjujemo složenost modela na ekranu, a na 60, naprotiv, povećanje). Drugi mogući faktori koji utječu na razinu detalja su brzina kretanja objekta (malo je vjerojatno da ćete imati vremena razmotriti raketu u pokretu, ali puž - lako), važnost lika s gledišta igre (uzmite isti fudbal - za model igrača koji kontrolirate možete koristiti složeniju geometriju i teksture, vidite ga najbliže i najčešće). Sve ovisi o željama i mogućnostima određenog programera. Glavna stvar je ne pretjerivati, česte i primjetne promjene u nivou detalja su dosadne.

Dopustite mi da vas podsjetim da se nivo detalja ne odnosi nužno samo na geometriju, već se metoda može koristiti i za uštedu drugih resursa: pri teksturiranju (iako video čipovi već koriste mip kartiranje, ponekad ima smisla mijenjati teksture u hodu drugima s različitim detaljima), tehnike osvjetljenja (bliski objekti se osvjetljavaju pomoću složenog algoritma, a udaljeni - pomoću jednostavnog), tehnike teksturiranja (složeno mapiranje paralakse koristi se na bliskim površinama, a normalno se koristi na udaljenim) itd. .

Nije tako lako prikazati primjer iz igre, s jedne strane, u određenoj mjeri LOD se koristi u gotovo svakoj igri, s druge strane, to nije uvijek moguće jasno pokazati, inače bi bilo malo smisla u samom LOD -u.

Ali u ovom primjeru još uvijek je jasno da najbliži model automobila ima najviše detalja, sljedeća dva ili tri automobila su također vrlo blizu ovog nivoa, a svi udaljeni imaju vidljiva pojednostavljenja, evo samo najznačajnijih: postoje bez retrovizora, registarskih tablica, brisača vetrobrana itd. dodatne opreme za osvetljenje. A od najudaljenijeg modela nema ni sjene na cesti. Ovo je nivo detaljnog algoritma na djelu.

Globalno osvjetljenje

Teško je simulirati realistično osvjetljenje scene, svaki zrak svjetlosti u stvarnosti se više puta reflektira i prelama, broj ovih refleksija nije ograničen. A u 3D iscrtavanju, broj refleksija jako ovisi o mogućnostima dizajna, svaki proračun scene je pojednostavljeni fizički model, a rezultirajuća slika je samo blizu realizma.

Algoritmi osvjetljenja mogu se podijeliti u dva modela: direktno ili lokalno osvjetljenje i globalno osvjetljenje (direktno ili lokalno osvjetljenje i globalno osvjetljenje). Model lokalnog osvjetljenja koristi proračun direktnog osvjetljenja, svjetlosti od izvora svjetlosti do prvog presjeka svjetlosti s neprozirnom površinom, međusobna interakcija objekata ne uzima se u obzir. Iako ovaj model to pokušava nadoknaditi dodavanjem pozadinskog ili jednoličnog (ambijentalnog) osvjetljenja, ovo je najjednostavnija aproksimacija, vrlo pojednostavljeno osvjetljenje svih indirektnih zraka izvora svjetlosti, koje određuje boju i intenzitet osvjetljenja objekata u odsutnosti direktni izvori svetlosti.

Isti trag zraka izračunava osvjetljenje površina samo direktnim zrakama iz izvora svjetlosti, a bilo koja površina, da bi bila vidljiva, mora biti direktno osvijetljena izvorom svjetlosti. To nije dovoljno za postizanje fotorealističnih rezultata, osim direktnog osvjetljenja, potrebno je uzeti u obzir i sekundarno osvjetljenje zrakama odbijenim od drugih površina. U stvarnom svijetu zraci svjetlosti se odbijaju od površina nekoliko puta sve dok se potpuno ne ugase. Sunčeva svjetlost koja prolazi kroz prozor osvjetljava cijelu prostoriju, iako zrake ne mogu direktno doprijeti do svih površina. Što je izvor svjetlosti jači, to će se više puta reflektirati. Boja reflektirajuće površine također utječe na boju reflektirane svjetlosti, na primjer crveni zid će uzrokovati crvenu mrlju na susjednom bijelom objektu. Evo jasne razlike, proračunavanja i uzimanja u obzir sekundarnog osvjetljenja:

U modelu globalnog osvjetljenja, globalno osvjetljenje, osvjetljenje se izračunava uzimajući u obzir utjecaj objekata jedan na drugi, uzimaju se u obzir višestruke refleksije i lomovi svjetlosnih zraka s površina objekta, kaustika i podzemno rasipanje. Ovaj model vam omogućuje da dobijete realniju sliku, ali komplicira proces, zahtijevajući znatno više resursa. Postoji nekoliko globalnih algoritama osvjetljenja, bacićemo kratki pogled na radijalnost (izračun indirektnog osvjetljenja) i mapiranje fotona (proračun globalnog osvjetljenja na osnovu fotonskih karata unaprijed izračunatih pomoću praćenja). Postoje i pojednostavljene metode za simulaciju indirektnog osvjetljenja, poput mijenjanja ukupne svjetline scene ovisno o broju i svjetlini izvora svjetlosti u njoj, ili korištenja velikog broja svjetla sa tačkama postavljenih oko scene za simulaciju reflektirane svjetlosti, ali ipak ovo je daleko od pravog algoritma.

Algoritam radijalnosti je proces izračunavanja sekundarnih refleksija svjetlosnih zraka s jedne površine na drugu, kao i od okoline do objekata. Zrake iz izvora svjetlosti prate se sve dok njihova snaga ne padne ispod određene razine ili zrake dosegnu određeni broj refleksija. Ovo je uobičajena GI tehnika, proračuni se obično rade prije iscrtavanja, a rezultati izračuna mogu se koristiti za iscrtavanje u stvarnom vremenu. Osnovne ideje o zračenju zasnovane su na fizici prijenosa topline. Površine objekata podijeljene su na male površine koje se nazivaju mrlje, a pretpostavlja se da se reflektirana svjetlost ravnomjerno raspršuje u svim smjerovima. Umjesto izračunavanja svakog zraka za svjetla, koristi se tehnika usrednjavanja, koja dijeli svjetla na mrlje na osnovu nivoa energije koju proizvode. Ova energija se proporcionalno raspoređuje po površinskim mrljama.

Druga metoda za izračunavanje globalnog osvjetljenja, koju je predložio Henrik Wann Jensen, je metoda mapiranja fotona. Fotonske karte su još jedan algoritam globalnog osvjetljenja praćen zrakama koji se koristi za simulaciju interakcije svjetlosnih zraka s objektima u sceni. Algoritam izračunava sekundarne refleksije zraka, lom svjetlosti kroz prozirne površine, raspršene refleksije. Ova metoda se sastoji u izračunavanju osvjetljenja tačaka na površini u dva prolaza. Prvi je izravno praćenje svjetlosnih zraka sa sekundarnim refleksijama, ovo je preliminarni proces koji se izvodi prije glavnog iscrtavanja. Ova metoda izračunava energiju fotona koji idu od izvora svjetlosti do objekata u sceni. Kad fotoni dosegnu površinu, mjesto presjeka, smjer i energija fotona pohranjuju se u predmemoriju koja se naziva fotonska karta. Fotonske karte mogu se spremiti na disk za kasniju upotrebu, tako da ne moraju biti iscrtane u svakom kadru. Refleksije fotona se računaju sve dok rad ne prestane nakon određenog broja refleksija ili kada se postigne određena energija. U drugom prolazu renderiranja izračunava se osvjetljenje piksela scene direktnim zrakama, uzimajući u obzir podatke pohranjene na fotonskim kartama, energija fotona se dodaje energiji direktnog osvjetljenja.

Proračuni globalnog osvjetljenja koji koriste veliki broj sekundarnih refleksija traju mnogo duže od proračuna direktnog osvjetljenja. Postoje tehnike za hardverski proračun radijskog grada u stvarnom vremenu, koje koriste mogućnosti najnovijih generacija programabilnih video čipova, ali do sada bi scene za koje se računa globalno osvjetljenje u stvarnom vremenu trebale biti prilično jednostavne i potrebno je mnogo pojednostavljenja u algoritmima.

No, ono što se već dugo koristi je statičko unaprijed izračunato globalno osvjetljenje, koje je prihvatljivo za scene bez promjene položaja izvora svjetlosti i velikih objekata koji snažno utječu na osvjetljenje. Uostalom, proračun globalnog osvjetljenja ne ovisi o položaju posmatrača, a ako se položaj takvih objekata u sceni i parametri izvora svjetlosti ne promijene na sceni, tada se prethodno izračunate vrijednosti osvjetljenja mogu biti korišteno. Ovo se koristi u mnogim igrama, spremajući podatke o proračunu geografske oznake u obliku svjetlosnih karata.

Postoje i prihvatljivi algoritmi za simulaciju dinamičkog globalnog osvjetljenja. Na primjer, postoji tako jednostavna metoda za upotrebu u aplikacijama u stvarnom vremenu za izračunavanje indirektnog osvjetljenja objekta u sceni: pojednostavljeno prikazivanje svih objekata sa smanjenim detaljima (osim onog za koje se osvjetljenje izračunava) u nisko -mapa kocke rezolucije (može se koristiti i za prikaz dinamičkih refleksija na površini objekta), zatim filtriranje ove teksture (nekoliko prolaza zamućenog filtera) i primjena podataka iz izračunate teksture za osvjetljavanje ovog objekta kao dopunu za usmjeravanje rasvjeta. U slučajevima kada je dinamički proračun pretežak, statičke karte radijske jakosti se mogu zanemariti. Primjer iz igre MotoGP 2, koji jasno pokazuje blagotvoran učinak čak i tako jednostavne imitacije geografske oznake:



"itemprop =" image ">

"Šta su shaderi?" Vrlo je često pitanje znatiželjnih igrača i programera početnika. U ovom članku ću vam na lucidan i razumljiv način pričati o ovim strašnim sjenčarima.

Smatram da su kompjuterske igre motor napretka prema fotorealističnim slikama u računarskoj grafici, pa hajde da pričamo o tome šta su „sjenila“ u kontekstu video igara.

Prije nego što su se pojavili prvi grafički akceleratori, sav posao iscrtavanja okvira video igara obavljao je loš centralni procesor.

Crtanje okvira je zapravo prilično rutinski posao: morate uzeti "geometriju" - poligonalne modele (svijet, lik, oružje itd.) I rasterisati ih. Šta je Rasterize? Cijeli 3d model sastoji se od najmanjih trokuta, koje rasterizator pretvara u piksele (to jest, "rasterizirati" znači pretvaranje u piksele). Nakon rasterizacije uzmite podatke o teksturi, parametre osvjetljenja, maglu itd. I izračunajte svaki rezultirajući piksel okvira igre, koji će biti prikazan igraču.

Dakle, centralna procesorska jedinica (CPU - Central Processing Unit) je previše pametan čovjek da bi ga natjerao na takvu rutinu. Umjesto toga, logično je dodijeliti neku vrstu hardverskog modula koji rasterećuje CPU kako bi mogao obavljati važnije intelektualne poslove.

Takav hardverski modul je grafički akcelerator ili video kartica (GPU - Graphics Processing Unit). Sada CPU priprema podatke i opterećuje kolegu rutinskim poslom. S obzirom na to da GPU sada nije samo jedan kolega, to je gomila minions-jezgri, a onda se s tom vrstom posla nosi odjednom.

No, još nismo dobili odgovor na glavno pitanje: Šta su to sjenila? Čekaj, dolazim do ovoga.

Lijepa, zanimljiva i bliska fotorealizmu grafika zahtijevala je od programera video kartica da implementiraju mnoge algoritme na hardverskom nivou. Sjene, svjetla, istaknuti dijelovi i tako dalje. Ovaj pristup - implementacijom algoritama u hardveru naziva se "Fiksni cjevovod ili cjevovod", a tamo gdje je potrebna visokokvalitetna grafika više se ne nalazi. Njegovo mjesto zauzeo je programabilni cjevovod.

Zahtjevi igrača „Hajde, unesite dobar grafonij! iznenađenje! ”, gurnuli su programere igara (odnosno proizvođače video kartica) na sve složenije algoritme. Do sada, u jednom trenutku, postoji premalo hardverskih algoritama za njih.

Sada je vrijeme da grafičke kartice postanu inteligentnije. Donesena je odluka da se programerima omogući programiranje GPU blokova u proizvoljne cjevovode koji implementiraju različite algoritme. Odnosno, programeri igara, grafički programeri sada su mogli pisati programe za video kartice.

I konačno, došli smo do odgovora na naše glavno pitanje.

"Šta su shaderi?"

Shader (engleski shader - program za zasjenjivanje) je program za video karticu koji se koristi u trodimenzionalnoj grafici za određivanje konačnih parametara objekta ili slike, može uključivati ​​opis apsorpcije i rasipanja svjetlosti, preslikavanje teksture, refleksiju i refrakcija, zasjenjivanje, pomak površine itd. mnogi drugi parametri.

Šta su shaderi? Na primjer, možete postići ovaj efekat, ovo je senka za vodu nanesena na sferu.

Grafički cjevovod

Prednost programabilnog cjevovoda u odnosu na prethodnika je u tome što sada programeri mogu sami stvarati vlastite algoritme, a ne koristiti skup ožičenih opcija.

U početku su video kartice bile opremljene s nekoliko specijaliziranih procesora koji podržavaju različite skupove uputa. Shaderi su podijeljeni u tri vrste, ovisno o tome koji ih procesor izvodi. No tada su video kartice počele biti opremljene univerzalnim procesorima koji podržavaju setove instrukcija za sve tri vrste sjenila. Podjela shader -a na tipove sačuvana je kako bi se opisala namjena shader -a.

Osim grafičkih zadataka s takvim inteligentnim video karticama, postalo je moguće izvršiti proračune opće namjene (koji se ne odnose na računarsku grafiku) na GPU-u.

Po prvi put, punopravna podrška za shader-e pojavila se u video karticama GeForce 3 serije, ali su osnove implementirane još u GeForce256 (u obliku Registar Kombinatora).

Tipovi sjenila

Ovisno o stupnju cjevovoda, shaderi su podijeljeni u nekoliko tipova: vertex, fragment (pixel) i geometric. A u najnovijim tipovima cjevovoda postoje i sjenila za sjećanje. Nećemo detaljno raspravljati o grafičkom cjevovodu, još uvijek razmišljam hoću li o tome napisati poseban članak za one koji se odluče proučavati sjenčare i grafičko programiranje. Napišite u komentarima ako vas zanima, znat ću je li vrijedno gubljenja vremena.

Vertex shader

Vertex shaderi stvaraju animacije likova, trave, drveća, stvaraju valove na vodi i mnoge druge stvari. U vertex shaderu, programer ima pristup podacima koji se odnose na vrhove, na primjer: koordinate vrha u prostoru, njegove koordinate teksture, njegovu boju i normalni vektor.

Geometrijska sjenila

Geometrijski zasjenjivači mogu stvoriti novu geometriju i mogu se koristiti za stvaranje čestica, mijenjanje detalja modela u hodu, stvaranje silueta i još mnogo toga. Za razliku od prethodnog vrha, oni mogu obraditi ne samo jedan vrh, već i cijeli primitiv. Primitiv može biti segment (dva vrha) i trokut (tri vrha), a ako postoje podaci o susjednim vrhovima (engleska susjednost) za trokutasti primitiv, može se obraditi do šest vrhova.

Pixel shader

Pixel shader -i izvode preslikavanje tekstura, osvjetljenje i različite efekte teksture, poput refleksije, refrakcije, magle, Bump Mapping, itd. Pixel shader -i se koriste i za post efekte.

Shader piksela radi s bitmap presjecima i teksturama - obrađuje podatke povezane s pikselima (na primjer, boju, dubinu, koordinate teksture). Shader piksela se koristi u posljednjoj fazi grafičkog cjevovoda za formiranje fragmenta slike.

Na čemu pišu shaderi?

U početku su se shader-i mogli pisati na asemblerskom jeziku, ali kasnije su postojali shader jezici visokog nivoa slični C jeziku, kao što su Cg, GLSL i HLSL.

Takvi su jezici mnogo jednostavniji od C, jer su zadaci riješeni uz njihovu pomoć mnogo jednostavniji. Sistem tipova na takvim jezicima odražava potrebe grafičkih programera. Stoga programeru pružaju posebne tipove podataka: matrice, uzorke, vektore itd.

RenderMan

Sve o čemu smo gore govorili odnosi se na grafiku u stvarnom vremenu. Ali postoje grafike koje se ne pojavljuju u stvarnom vremenu. Koja je razlika - u stvarnom vremenu - u stvarnom vremenu, to jest ovdje i sada - dati 60 sličica u sekundi u igri, ovo je proces u stvarnom vremenu. Ali generiranje složenog okvira za vrhunsku animaciju na nekoliko minuta nije u stvarnom vremenu. Suština je u vremenu.

Na primjer, ne možemo dobiti grafiku takve kvalitete kao u najnovijim animiranim filmovima studija Pixar u stvarnom vremenu. Vrlo velike farme rendera izračunavaju simulacije svjetlosti koristeći potpuno različite algoritme, vrlo skupe, ali daju gotovo fotorealne slike.

Super realistična grafika u Sand Piper -u

Na primjer, pogledajte ovaj slatki crtić, zrnce pijeska, ptičje perje, valovi, sve izgleda nevjerojatno stvarno.

* Videozapisi se mogu zabraniti s Youtube -a, ako se ne otvore, google pixar sandpiper - kratki crtani film o hrabrom pješčaniku vrlo je sladak i pahuljast. Dodirnut će i pokazati koliko kompjuterska grafika može biti cool.

Ovo je RenderMan iz Pixara. Postao je prvi shader programski jezik. RenderMan API je de facto standard za profesionalno iscrtavanje i koristi se u svim Pixar poslovima i šire.

Korisne informacije

Sada znate što su shaderi, ali osim shader -a, postoje i druge vrlo zanimljive teme u razvoju igara i računarskoj grafici koje će vas zasigurno zanimati:

  • je tehnika za stvaranje zadivljujućih efekata u modernim video igrama. Pregled članaka i video s vodičima o stvaranju efekata u Unity3d
  • - Ako razmišljate o razvoju video igara kao profesionalne karijere ili hobija, ovaj članak sadrži odličan skup preporuka "odakle početi", "koje knjige čitati" itd.

Ako imate pitanja

Kao i obično, ako imate još pitanja, postavite ih u komentarima, ja ću vam uvijek odgovoriti. Bio bih vam zahvalan na bilo kakvoj dobroj riječi ili ispravljanju grešaka.

Ovaj vodič će vam pomoći da instalirate shader -ove u Minecraft i na taj način poboljšate svijet igara dodavanjem dinamičkih sjena, buke vjetra i trave, realne vode i još mnogo toga.

Odmah treba napomenuti da shaderi prilično opterećuju sistem, a ako imate slabu ili integriranu video karticu, preporučujemo da se suzdržite od instaliranja ovog moda.

Instalacija se sastoji od dvije faze, prvo morate instalirati mod na shader -e, a zatim mu dodati dodatne pakete shader -a

KORAK # 1 - Instaliranje moda za sjenila

  1. Preuzmite i instalirajte Java
  2. Instaliraj OptiFine HD
    ili ShadersMod;
  3. Raspakiramo rezultirajuću arhivu na bilo koje mjesto;
  4. Pokrenite jar datoteku jer on je instalater;
  5. Program će vam pokazati put do igre, ako je sve ispravno, kliknite Da, U redu, U redu;
  6. Idi .minecraft i tamo stvorite mapu shaderpacks;
  7. Ulazimo u pokretač i vidimo u redu novi profil s imenom "ShadersMod", ako ne, onda ga odaberite ručno.
  8. Zatim morate preuzeti shaderpacks

KORAK 2 - Instaliranje shaderpack -a

  1. Preuzmite shaderpack koji vas zanima (popis na kraju članka)
  2. Pritisnite tastere WIN + R
  3. Idi .minecraft / shaderpacks... Ako ne postoji takva mapa, kreirajte je.
  4. Premjestite ili raspakirajte arhivu sjenila u .minecraft / shaderpacks... Put bi trebao izgledati ovako: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [. fsh i .vsh datoteke unutra]
  5. Pokrenite Minecraft i krenite Postavke> Shaderi... Ovdje ćete vidjeti popis dostupnih sjenila. Odaberite traženo
  6. U postavkama sjenila omogućite "tweakBlockDamage", onemogućite "CloudShadow" i "OldLighting"

Nevjerovatni Shaderi kompanije Sonic Ether
Sildur -ove senke
Shacarovi Chocapic13 "
yShader -i senzi277 "
MrMeep_x3 "Shaderi
Naelegova Cel Shaders -a
Shaderi RRe36 "
DeDelnerovi CUDA Shaderi
kisele sjenila bruceatsr44 "
Beed28 -ovi Shaderi
Ziipzaap -ov Shader paket
robobo1221 "Shaderi
dvv16 "Shaderi
Stazza85 super sjenila
hoo00 "Shaders pack B
Regi24 -ove talasaste biljke
MrButternuss ShaderPack
DethRaid -ova sjajna grafika na Nitro Shaderima
Edijev Shader ForALLPc
CrankerMan TME Shaderi
Kadir Nck Shader (za skate702)
Werrusovi Shaderi
Knewtonwako -ovi Life Nexus Shaders
CYBOX shaderpack
CrapDeShoes CloudShade Alpha
AirLoocke42 Shader
CaptTatsu -ovi BSL Shaderi
Trilitonove sjenčare
ShadersMcOfficial "Bloominx Shaders (Chocapic13" Shaders)
dotModded "Continuum Shaders"
Qwqx71 "Lunar Shader (chocapic13" s shader)

Dizajnirano za izvođenje od strane procesora video kartica (GPU). Shaderi su sastavljeni u jednom od specijaliziranih programskih jezika (vidi) i kompilirani u upute za GPU.

Aplikacija

Prije upotrebe shadera, korišteno je proceduralno generiranje teksture (na primjer, korišteno u igri Unreal za stvaranje animiranih tekstura vode i vatre) i multiteksturiranje (na kojem je zasnovan jezik shader -a korišten u igri Quake 3). Ovi mehanizmi nisu pružali istu fleksibilnost kao shaderi.

Pojavom rekonfigurabilnih grafičkih kanala, postalo je moguće izvoditi matematičke proračune (GPGPU) na GPU -u. Najpoznatiji GPGPU mehanizmi su nVidia CUDA, Microsoft DirectCompute i OpenCL otvorenog koda.

Tipovi sjenila

Vertex shaderi

Sjenilo vrhova radi na podacima povezanim s vrhovima poliedra, na primjer, s koordinatama vrha (točke) u prostoru, s koordinatama teksture, s bojom vrha, s tangentnim vektorom, s binormalnim vektorom, s normom vektor. Shader vertex se može koristiti za pregled i perspektivnu transformaciju vrhova, za generiranje tekstualnih koordinata, za izračunavanje osvjetljenja itd.

Primjer koda za vertex shader na jeziku:

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

Geometrijski sjenila

Geometrijski shader, za razliku od jednog vrha, sposoban je obraditi ne samo jedan vrh, već i cijeli primitiv. Primitiv može biti segment (dva vrha) i trokut (tri vrha), a ako postoje podaci o susjednim vrhovima (engleska susjednost) za trokutasti primitiv, može se obraditi do šest vrhova. Geometrijski zasjenjivač može generirati primitive u hodu (bez upotrebe centralnog procesora).

Geometrijski sjenila su prvi put korištena na grafičkim karticama Nvidia 8 serije.

Pixel (fragment) shaders

Shader piksela radi s bitmap presjecima i teksturama - obrađuje podatke povezane s pikselima (na primjer, boju, dubinu, koordinate teksture). Shader piksela se koristi u posljednjoj fazi grafičkog cjevovoda za formiranje fragmenta slike.

Primjer koda za pixel shader na jeziku:

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

Prednosti i nedostaci

Prednosti:

  • mogućnost sastavljanja bilo kojeg algoritma (fleksibilnost, pojednostavljenje i smanjenje troškova ciklusa razvoja programa, povećanje složenosti i realizma prikazanih scena);
  • povećana brzina izvršavanja (u poređenju sa brzinom izvršavanja istog algoritma izvedenog na centralnom procesoru).

Nedostaci:

  • potreba za učenjem novog programskog jezika;
  • postojanje različitih skupova uputstava za grafičke procesore različitih proizvođača.

Programski jezici

Stvoren je veliki broj programskih jezika za zasjenjivanje kako bi se zadovoljile različite potrebe tržišta (računarska grafika ima mnogo područja primjene).

Obično jezici za pisanje shader-a pružaju programeru posebne tipove podataka (matrice, uzorci, vektori itd.), Skup ugrađenih varijabli i konstanti (za interakciju sa standardnom funkcionalnošću 3D API-ja).

Profesionalno iscrtavanje

Slijede programski jezici shader -a usmjereni na postizanje maksimalnog kvaliteta iscrtavanja. Na takvim jezicima svojstva materijala opisana su apstrakcijama. To omogućava ljudima koji nemaju posebne vještine programiranja i ne poznaju specifičnosti hardverske implementacije da pišu kod. Na primjer, umjetnici mogu napisati ove zasjenjivače kako bi osigurali "pravi izgled" (preslikavanje tekstura, postavljanje svjetla itd.).

Obično je obrada takvih zasjenjivača prilično zahtjevna za resurse: stvaranje fotorealističnih slika zahtijeva mnogo računalne snage. Obično se većina računanja vrši velikim kompjuterskim klasterima ili blade sistemima.

RenderMan Shader programski jezik, implementiran u Pixar -ovom RenderMan softveru, bio je prvi shader programski jezik. RenderMan API, koji je razvio Rob Cook i opisan u specifikaciji RenderMan interfejsa, de facto je standard za profesionalno iscrtavanje, koji se koristi u cijelom Pixar -ovom poslu. OSL OSL - eng. Open Shading Language je programski jezik za zasjenjivanje koji je razvila kompanija Sony Pictures Imageworks i nalik jeziku. Koristi se u vlasničkom programu "Arnold", koji je razvila "Sony Pictures Imageworks" i namijenjen je za iscrtavanje, te u besplatnom programu Blender, namijenjenom za stvaranje trodimenzionalne računarske grafike. Renderiranje GLSL-a u stvarnom vremenu GLSL otvoreno GL S hading L anguage) je shader programski jezik opisan u OpenGL standardu i zasnovan na verziji jezika opisanom u ANSI C standardu. Jezik podržava većinu ANSI C funkcija, podržava tipove podataka koji se često koriste pri radu s trodimenzionalnom grafikom (vektori, matrice). Riječ "shader" u GLSL -u odnosi se na nezavisno sastavljenu jedinicu napisanu na ovom jeziku. Riječ "program" odnosi se na zbirku sastavljenih shadera povezanih zajedno. Cg (eng. C for g raphics) je shader programski jezik koji je nVidia razvila zajedno s Microsoftom. Jezik je sličan jeziku i HLSL jeziku koji je razvio Microsoft i uključen u DirectX 9... Jezik koristi tipove "int", "float", "half" (broj s pomičnim zarezom od 16 bita). Jezik podržava funkcije i strukture. Jezik ima svojevrsne optimizacije u obliku "upakovanih nizova" (