Kas ir ēnotāji spēlē? Kā instalēt ēnotājus Minecraft? Uz ko atbild ēnotāji.

Ar globālu datorizāciju mūsu pasaulē ir nonācis milzīgs skaits nesaprotamu terminu. Ar tiem visiem tikt galā nav tik vienkārši, kā šķiet pirmajā mirklī. Daudzi no tiem pēc nosaukuma ir līdzīgi, daudziem ir plaša funkcionalitāte. Ir pienācis laiks uzzināt, kas ir ēnotājs, no kurienes tas radies, kam tas paredzēts un kas tas ir.

Optimizētājs

Visticamāk, jūs esat dedzīgs Minecraft spēlētājs, un tāpēc jūs ieradāties, lai uzzinātu, kas tas ir. Uzreiz jāatzīmē, ka jēdziens "shader" ir viegli atdalāms no šīs spēles un var no tā "dzīvot" atsevišķi. Gluži kā modi. Tāpēc nav vērts cieši savienot šos divus jēdzienus.

Kopumā shader nāk no programmēšanas, parādījās kā speciālistu palīgs. Iespējams, būs skaļi nosaukt šo rīku par optimizētāju, taču tas patiešām uzlabo attēlu spēlēs. Tātad, kad esat jau sācis aptuveni saprast, kas tas ir, pāriesim pie precīzas interpretācijas.

Interpretācija

Kas ir ēnotājs? kuru izpilda videokartes procesori. Šie rīki ir izstrādāti īpašā valodā. Atkarībā no mērķa tas var būt atšķirīgs. Pēc tam ēnotāji nosacīti tiek pārtulkoti grafikas paātrinātāja procesoru instrukcijās.

Pieteikums

Uzreiz jāsaka, ka lietojumprogrammu kopumā nosaka mērķis. Programmas ir iestrādātas video karšu procesoros, kas nozīmē, ka tās strādā pie trīsdimensiju grafikas objektu un attēlu parametriem. Viņi var veikt dažādus uzdevumus, tostarp strādāt ar atstarošanu, refrakciju, aptumšošanu, bīdes efektiem utt.

Priekšnoteikums

Cilvēki jau sen cenšas noskaidrot, kas ir ēnotājs. Pat pirms šīm programmām izstrādātāji visu darīja ar rokām. Attēla veidošanas process no dažiem objektiem nebija automatizēts. Pirms spēles piedzimšanas izstrādātāji paši veica renderēšanu. Viņi strādāja ar algoritmu, sastādīja to dažādiem uzdevumiem. Tātad bija instrukcijas tekstūru, video efektu utt.

Protams, daži procesi joprojām tika iebūvēti video karšu darbā. Šādus algoritmus izstrādātāji varētu izmantot. Bet viņiem neizdevās uzspiest savus algoritmus videokartei. Nestandarta instrukcijas varēja izpildīt CPU, kas bija lēnāks nekā GPU.

Piemērs

Lai saprastu atšķirību, ir vērts aplūkot pāris piemērus. Acīmredzot spēlē renderēšana varētu būt aparatūra un programmatūra. Piemēram, mēs visi atceramies slaveno Quake 2. Tātad, spēles ūdens varētu būt tikai zils filtrs, kad runa ir par aparatūras atveidošanu. Bet ar programmatūras iejaukšanos parādījās ūdens šļakatas. Tas pats stāsts ar CS 1.6. Aparatūras atveidošana deva tikai baltu zibspuldzi, bet programmatūras renderēšana pievienoja pikseļu ekrānu.

Piekļuve

Tātad kļuva skaidrs, ka šādas problēmas ir jāatrisina. Grafikas paātrinātāji sāka paplašināt izstrādātāju vidū populāro algoritmu skaitu. Kļuva skaidrs, ka visu nav iespējams "piebāzt". Bija nepieciešams atvērt piekļuvi video karšu speciālistiem.

Pirms bija tādas spēles kā "Minecraft" ar modifikācijām un ēnotājiem, izstrādātājiem tika dota iespēja strādāt ar GPU blokiem cauruļvados, kas varētu būt atbildīgi par dažādiem norādījumiem. Tā kļuva zināmas programmas ar nosaukumu "shader". Lai tos izveidotu, tika īpaši izstrādātas programmēšanas valodas. Tātad, videokartes sāka ielādēt ne tikai ar standarta "ģeometriju", bet arī ar instrukcijām procesoram.

Kad šāda piekļuve kļuva iespējama, sāka atvērties jaunas programmēšanas iespējas. Speciālisti varētu atrisināt matemātiskas problēmas GPU. Šie aprēķini kļuva pazīstami kā GPGPU. Šim procesam bija nepieciešami īpaši instrumenti. No nVidia CUDA, no Microsoft DirectCompute un OpenCL ietvara.

Veidi

Jo vairāk cilvēku uzzināja, kas ir ēnotāji, jo vairāk tika atklāta informācija par viņiem un viņu iespējām. Sākotnēji paātrinātājiem bija trīs procesori. Katrs bija atbildīgs par sava veida ēnotāju. Laika gaitā tie tika aizstāti ar universālu. Katram bija noteikts instrukciju kopums, kurā vienlaikus bija trīs veidu ēnotāji. Neskatoties uz darba apvienošanu, katra veida apraksts ir saglabājies līdz mūsdienām.

Virsotnes tips strādāja ar formu virsotnēm, kurām ir daudz seju. Ir iesaistīti daudzi rīki. Piemēram, mēs runājam par tekstūras koordinātām, pieskares, binormālas vai normālas vektoriem.

Ģeometriskais tips strādāja ne tikai ar vienu virsotni, bet arī ar veselu primitīvu. Pixel tika izstrādāts, lai apstrādātu bitkaršu ilustrāciju fragmentus un tekstūras kopumā.

Spēlēs

Ja jūs meklējat ēnotājus "Minecraft 1.5.2", tad, visticamāk, vienkārši vēlaties uzlabot spēles attēlu. Lai tas būtu iespējams, programmas gāja caur "uguns, ūdens un vara caurulēm". Ēnotāji tika pārbaudīti un uzlaboti. Tā rezultātā kļuva skaidrs, ka šim instrumentam ir priekšrocības un trūkumi.

Protams, dažādu algoritmu apkopošanas vienkāršība ir milzīgs pluss. Tas ir gan elastīgums, gan ievērojams vienkāršojums spēļu izstrādes procesā, un līdz ar to arī izmaksu samazinājums. Iegūtās virtuālās ainas kļūst sarežģītākas un reālistiskākas. Arī pats izstrādes process kļūst daudzkārt ātrāks.

No trūkumiem ir vērts atzīmēt tikai to, ka jums būs jāapgūst viena no programmēšanas valodām, kā arī jāņem vērā, ka dažādi algoritmu komplekti atrodas dažādos video karšu modeļos.

Uzstādīšana

Ja esat atradis Minecraft shader iepakojumu, jums jāsaprot, ka tā instalēšanā ir daudz kļūdu. Neskatoties uz šīs spēles popularitātes samazināšanos, tās uzticamie fani joprojām paliek. Ne visiem patīk grafika, it īpaši 2017. gadā. Daži cilvēki domā, ka, pateicoties ēnotājiem, viņiem izdosies to uzlabot. Teorētiski šis apgalvojums ir pareizs. Bet praksē jūs daudz nemainīsit.

Bet, ja jūs joprojām meklējat veidus, kā izmantot "Minecraft 1.7", tad, pirmkārt, esiet piesardzīgs. Process pats par sevi nav sarežģīts. Turklāt kopā ar jebkuru lejupielādējamu failu ir norādījumi par tā instalēšanu. Galvenais ir pārbaudīt spēles versijas un ēnotāju. Pretējā gadījumā optimizētājs neizdosies.

Internetā ir daudz vietu, kur var instalēt un lejupielādēt šādu rīku. Tālāk jums jāizpako arhīvs jebkurā mapē. Tur jūs atradīsit failu "GLSL-Shaders-Mod-1.7-Installer.jar". Pēc sākuma jums tiks parādīts ceļš uz spēli, ja tā ir pareiza, tad piekrītiet visiem turpmākajiem norādījumiem.

Tad jums ir jāpārvieto mape "shaderpacks" uz ".minecraft". Tagad, palaižot palaidēju, jums būs jāiet uz iestatījumiem. Šeit, ja instalācija bija pareiza, parādīsies rinda "Shaders". Jūs varat izvēlēties vēlamo paketi no visa saraksta.

Ja jums ir nepieciešami ēnotāji Minecraft 1.7.10, tad vienkārši atrodiet vajadzīgās versijas shaderpack un dariet to pašu. Nestabilas versijas var atrast internetā. Dažreiz jums ir jāmaina, jāpārinstalē un jāmeklē piemērots. Labāk ir apskatīt pārskatus un izvēlēties populārākos.

Ievads

3D grafikas pasaule, ieskaitot spēles, ir piepildīta ar terminiem. Termini, kuriem ne vienmēr ir vienīgā pareizā definīcija. Dažreiz vienas un tās pašas lietas tiek sauktas atšķirīgi, un otrādi, to pašu efektu spēles iestatījumos var saukt par "HDR", "Bloom", "Glow", pēc tam - "Postprocessing". Lielākā daļa cilvēku no izstrādātāju lielīšanās par to, ko viņi ir iebūvējuši savā grafiskajā dzinējā, ir neizpratnē par to, ko viņi patiesībā nozīmē.

Raksts ir paredzēts, lai palīdzētu jums saprast, ko nozīmē daži no šiem vārdiem, kurus visbiežāk izmanto šādos gadījumos. Šī raksta ietvaros mēs nerunāsim par visiem 3D grafikas noteikumiem, bet tikai par tiem, kas pēdējos gados ir kļuvuši arvien izplatītāki kā spēļu grafikas dzinējos izmantotās atšķirīgās iezīmes un tehnoloģijas un kā mūsdienu spēļu grafisko iestatījumu nosaukumi. . Vispirms es ļoti iesaku jums iepazīties ar.

Ja kaut kas šajā rakstā un Aleksandra rakstos jums nav skaidrs, tad ir jēga sākt ar agrāko, lpp. Šie raksti, protams, jau ir nedaudz novecojuši, taču pamata, sākotnējie un svarīgākie dati ir pieejami. Mēs ar jums runāsim par citiem "augstāka līmeņa" noteikumiem. Jums vajadzētu būt pamatzināšanām par 3D reāllaika grafiku un grafikas cauruļvada struktūru. No otras puses, negaidiet matemātiskas formulas, akadēmisku precizitāti un koda piemērus - šis raksts vispār nav par to. Noteikumi

Rakstā aprakstīto terminu saraksts:

Ēnotājs

Shader plašā nozīmē ir programma, lai vizuāli noteiktu objekta virsmu. Tas var būt apgaismojuma, teksturēšanas, pēcapstrādes uc apraksts. Ēnotāji izauga no Kuka ēnu kokiem un Perlinas pikseļu plūsmas valodas. Pašlaik slavenākā ir RenderMan ēnojuma valoda. Programmējamie ēnotāji pirmo reizi tika ieviesti Pixar's RenderMan, kas definē vairākus ēnotāju veidus: gaismas avota ēnotājus, virsmas ēnotājus, pārvietošanas ēnotājus, skaļuma ēnotājus , attēla ēnotājus. Visbiežāk šos ēnotājus programmatūrā izpilda universālie procesori, un tiem nav pilnīga aparatūras ieviešana. Vēlāk daudzi pētnieki aprakstīja valodas, kas līdzīgas RenderMan, taču tās jau bija paredzētas aparatūras paātrināšanai: PixelFlow sistēma (Olano un Lastra), Quake Shader Language (izmanto id programmatūra spēles Quake III grafiskajā dzinējā, kurā aprakstīta daudzpāreju atveidošana) u.c. RenderMan ēnotāji ielauzās vairākās Rāmja buferī apvienoto piespēļu skaits. Vēlāk bija valodas, kurās mēs redzam aparatūras paātrinājumu DirectX un OpenGL. Šādi ēnotāji tika pielāgoti reāllaika grafikas lietojumprogrammām.

Agrīnās video mikroshēmas nebija programmējamas un veica tikai iepriekš ieprogrammētas darbības (fiksētas funkcijas), piemēram, apgaismojuma algoritms bija stingri fiksēts aparatūrā, un neko nevarēja mainīt. Pēc tam video mikroshēmu ražotāji savās mikroshēmās pakāpeniski ieviesa programmējamības elementus, sākumā tās bija ļoti vājas iespējas (NV10, kas pazīstama kā NVIDIA GeForce 256, jau bija spējīga uz dažām primitīvām programmām), kuras nesaņēma programmatūras atbalstu Microsoft DirectX API, bet kopš tā laika iespējas nepārtraukti paplašinās. Nākamais solis bija gan NV20 (GeForce 3), gan NV2A (video mikroshēma, ko izmanto Microsoft Xbox spēļu konsolē), kas kļuva par pirmajām mikroshēmām ar aparatūras atbalstu DirectX API ēnotājiem. Shader Model 1.0 / 1.1 versija, kas parādījās DirectX 8, bija ļoti ierobežota, katrs ēnotājs (īpaši pikseļu modeļiem) varēja būt salīdzinoši neliels un apvienot ļoti ierobežotu instrukciju kopumu. Vēlāk Shader Model 1 (saīsināti SM1) tika uzlabots ar Pixel Shaders 1.4 (ATI R200), kas piedāvāja lielāku elastību, bet arī ar pārāk ierobežotām iespējām. Tā laika ēnotāji tika uzrakstīti tā sauktajā asamblejas ēnu valodā, kas ir tuvu montāžas valodai vispārējas nozīmes procesoriem. Tā zemais līmenis rada zināmas grūtības saprast kodu un programmēšanu, it īpaši, ja programmas kods ir liels, jo tas ir tālu no mūsdienu programmēšanas valodu elegances un strukturēšanas.

Shader Model 2.0 (SM2) versija, kas parādījās DirectX 9 (ko atbalstīja ATI R300 video mikroshēma, kas kļuva par pirmo GPU ar atbalstu shader modeļa versijai 2.0), ievērojami paplašināja reālā laika ēnotāju iespējas, piedāvājot garākus un sarežģītākus ēnotājus un ievērojami paplašinātu instrukciju kopumu. Tika pievienota iespēja veikt peldošā komata aprēķinus pikseļu ēnotājos, kas arī bija būtisks uzlabojums. DirectX 9, ņemot vērā SM2 iespējas, ieviesa arī augsta līmeņa ēnotāju valodu (HLSL), kas ir ļoti līdzīga C valodai. Un efektīvs kompilators, kas pārvērš HLSL programmas zema līmeņa, aparatūrai draudzīgā kodā. Turklāt ir pieejami vairāki profili dažādām aparatūras arhitektūrām. Tagad izstrādātājs var uzrakstīt vienu HLSL ēnojuma kodu un, izmantojot DirectX, to apkopot optimālajā lietotāja instalētās video mikroshēmas programmā. Pēc tam tika izlaistas mikroshēmas no NVIDIA, NV30 un NV40, kas vēl vienu soli uzlaboja aparatūras ēnotāju iespējas, pievienojot vēl garākus ēnotājus, iespēju dinamiskām pārejām virsotņu un pikseļu ēnotājos, iespēju iegūt tekstūras no virsotņu ēnotājiem utt. . nebija, tie ir gaidāmi 2006. gada beigās DirectX 10 ...

Kopumā ēnotāji ir pievienojuši daudz jaunu iespēju grafikas cauruļvadam, lai pārveidotu un apgaismotu virsotnes un individuāli apstrādātu pikseļus tā, kā to vēlas katras konkrētās lietojumprogrammas izstrādātāji. Un tomēr, aparatūras ēnotāju iespējas vēl nav pilnībā atklātas lietojumprogrammās, un, palielinoties to iespējām katrā jaunās aparatūras paaudzē, drīzumā redzēsim to RenderMan ēnotāju līmeni, kas kādreiz videospēļu paātrinātājiem šķita nesasniedzami. Līdz šim reāllaika ēnojuma modeļos, kurus atbalsta aparatūras video paātrinātāji, ir definēti tikai divu veidu ēnotāji: un (DirectX 9 API definīcijā). Nākotnē DirectX 10 sola tiem pievienot arvien vairāk.

Vertex Shader

Virsotņu ēnotāji ir programmas, ko izpilda video mikroshēmas, kuras veic matemātiskas operācijas ar virsotnēm (virsotnes, tās veido 3D objektus spēlēs), citiem vārdiem sakot, tās nodrošina iespēju izpildīt programmējamus algoritmus virsotņu un to apgaismojuma parametru maiņai (T&L - Pārveidot un apgaismot) ... Katru virsotni nosaka vairāki mainīgie, piemēram, virsotnes stāvokli 3D telpā nosaka koordinātas: x, y un z. Virsotnes var aprakstīt arī ar krāsu īpašībām, faktūras koordinātām un tamlīdzīgi. Vertex ēnotāji atkarībā no algoritmiem maina šos datus darba gaitā, piemēram, aprēķinot un ierakstot jaunas koordinātas un / vai krāsu. Tas ir, virsotņu ēnotāja ievades dati ir dati par vienu ģeometriskā modeļa virsotni, kas pašlaik tiek apstrādāta. Parasti tās ir telpiskās koordinātas, parastās, krāsu sastāvdaļas un faktūras koordinātas. Izpildītās programmas iegūtie dati kalpo par ievadi turpmākai cauruļvada daļai, rasteris veic lineāru interpolāciju ar ievadītajiem datiem trijstūra virsmai un katram pikselim izpilda atbilstošo pikseļu ēnotāju. Ļoti vienkāršs un aptuvens (bet skaidrs, es ceru) piemērs: virsotņu ēnotājs ļauj uzņemt 3D sfēras objektu un izmantot virsotņu ēnotāju, lai no tā izveidotu zaļu kubu :).

Pirms NV20 video mikroshēmas parādīšanās izstrādātājiem bija divi veidi, vai nu izmantot savas programmas un algoritmus, kas maina virsotņu parametrus, bet tad visus aprēķinus veiks CPU (programmatūras T&L), vai arī paļauties uz fiksēto video mikroshēmu algoritmi ar aparatūras pārveidošanas un apgaismojuma atbalstu (aparatūras T&L). Pats pirmais DirectX ēnojuma modelis nozīmēja lielu soli uz priekšu no fiksētajām virsmu pārveidošanas un apgaismošanas funkcijām līdz pilnībā programmējamiem algoritmiem. Kļuva iespējams, piemēram, nodilšanas algoritmu pilnībā izpildīt video mikroshēmās, un pirms tam vienīgā iespēja bija to izpilde uz universālajiem centrālajiem procesoriem. Tagad, kad iespējas ir ievērojami uzlabotas kopš iepriekš minētās NVIDIA mikroshēmas, jūs varat daudz paveikt ar virsotnēm, izmantojot virsotņu ēnotājus (iespējams, izņemot to izveidi) ...

Piemēri, kā un kur tiek izmantoti virsotņu ēnotāji:

Pixel Shader

Pikseļu ēnotāji ir programmas, ko video mikroshēma izpilda katra attēla pikseļa rasterizācijas laikā; tās veic tekstūras paraugu ņemšanu un / vai matemātiskas operācijas ar pikseļu krāsu un dziļuma vērtību (Z-buferis). Visas pikseļu ēnojuma instrukcijas tiek izpildītas pa pikseliem pēc ģeometrijas pārveidošanas un apgaismojuma darbību pabeigšanas. Pikseļu ēnotājs sava darba rezultātā rada pikseļu krāsas galīgo vērtību un Z vērtību nākamajam grafikas cauruļvada posmam, sajaucot. Vienkāršākais piemērs pikseļu ēnotājam, ko var minēt: banāla multiteksturēšana, tikai divu faktūru sajaukšana (piemēram, izkliedēta un gaismas karte) un aprēķina rezultāta uzlikšana pikselim.

Pirms parādījās video mikroshēmas ar aparatūras atbalstu pikseļu ēnotājiem, izstrādātājiem bija tikai iespējas tradicionālai daudzteksturēšanai un alfa sajaukšanai, kas ievērojami ierobežoja daudzu vizuālo efektu iespējas un neļāva paveikt daudz no tā, kas šobrīd ir pieejams. Un, ja ar ģeometriju kaut ko citu varētu izdarīt programmatiski, tad ar pikseļiem - nē. Sākotnējās DirectX versijas (līdz 7,0 ieskaitot) vienmēr veica visus aprēķinus vertikāli un piedāvāja ārkārtīgi ierobežotu funkcionalitāti pikseļu apgaismojumam (atcerieties EMBM - vides izciļņu kartēšana un DOT3) jaunākajās versijās. Pikseļu ēnotāji ļāva apgaismot jebkuru virsmu pa pikseliem, izmantojot izstrādātāju ieprogrammētus materiālus. Pikseļu ēnotāji 1.1 (DirectX izpratnē), kas parādījās NV20, varēja ne tikai veikt multitekstrēšanu, bet arī daudz ko citu, lai gan lielākajā daļā spēļu, kurās tika izmantots SM1, lielākajā daļā virsmu vienkārši tika izmantota tradicionālā multiteksturēšana, sarežģītākus pikseļu ēnotājus izpildot tikai daļā virsmas, lai izveidotu dažādus specefektus (visi zina, ka ūdens joprojām ir visizplatītākais piemērs, kā spēlēs izmantot pikseļu ēnotājus). Tagad, pēc SM3 un tos atbalstošo video mikroshēmu parādīšanās, pikseļu ēnotāju iespējas ir pieaugušas, lai pat atļautu raytracing, kaut arī ar dažiem ierobežojumiem.

Pikseļu ēnotāju izmantošanas piemēri:

Procedūras tekstūras

Procesuālās faktūras ir tekstūras, kas aprakstītas ar matemātiskām formulām. Šādas faktūras neaizņem vietu video atmiņā, tās rada pikseļu ēnotājs "uz lidojuma", katrs to elements (texel) tiek iegūts, izpildot atbilstošās ēnojuma komandas. Visizplatītākās procesuālās faktūras ir: dažādi trokšņu veidi (piemēram, fraktāļu troksnis), koks, ūdens, lava, dūmi, marmors, uguns utt., Tas ir, tie, kurus var salīdzinoši vienkāršā veidā aprakstīt matemātiski. Procedūras faktūras arī ļauj izmantot animētas tekstūras, tikai nedaudz pārveidojot matemātiskās formulas. Piemēram, šādi veidoti mākoņi izskatās diezgan pieklājīgi gan dinamikā, gan statikā.

Procesuālo faktūru priekšrocības ietver arī neierobežotu detalizācijas pakāpi katrai tekstūrai, vienkārši nav pikselēšanas, tekstūra vienmēr tiek ģenerēta tādā izmērā, kāds nepieciešams tās parādīšanai. Lielu interesi rada arī animācija, ar tās palīdzību jūs varat radīt viļņus uz ūdens, neizmantojot iepriekš aprēķinātas animētas faktūras. Vēl viens šādu faktūru pluss ir tas, ka, jo vairāk tās tiek izmantotas izstrādājumā, jo mazāk darba māksliniekiem (lai gan vairāk programmētājiem), lai izveidotu regulāras faktūras.

Diemžēl procesuālās faktūras vēl nav pareizi izmantotas spēlēs, reālās lietojumprogrammās joprojām bieži ir vieglāk ielādēt parastu tekstūru, video atmiņas apjoms pieaug ar lēcieniem, vismodernākajos paātrinātājos tie jau instalē 512 megabaitus īpaša video atmiņa, kas nepieciešama vairāk nekā kaut ko aizņemties. Turklāt viņi joprojām bieži rīkojas pretēji - lai paātrinātu matemātiku pikseļu ēnotājos, viņi izmanto uzmeklēšanas tabulas (LUT) - īpašas faktūras, kurās ir iepriekš aprēķinātas vērtības, kas iegūtas aprēķinu rezultātā. Lai neskaitītu dažus matemātikas norādījumus katram pikselim, viņi vienkārši nolasa iepriekš aprēķinātās vērtības no tekstūras. Bet jo tālāk, jo vairāk uzsvaru vajadzētu novirzīt uz matemātiskiem aprēķiniem, ņemiet tās pašas jaunās paaudzes ATI video mikroshēmas: RV530 un R580, kurām ir attiecīgi 12 un 48 pikseļu procesori katrām 4 un 16 tekstūras vienībām. Turklāt, ja mēs runājam par 3D faktūrām, jo, ja divdimensiju faktūras var viegli ievietot akseleratora vietējā atmiņā, tad 3D faktūrām tas prasa daudz vairāk.

Procesuālo faktūru piemēri:

Izciļņu kartēšana / Specular Bump Mapping

Bumpmapping ir metode, lai simulētu pārkāpumus (vai modelētu mikroreljefu, kā vēlaties) uz līdzenas virsmas bez lielām skaitļošanas izmaksām un ģeometrijas izmaiņām. Katram virsmas pikselim tiek veikts apgaismojuma aprēķins, pamatojoties uz vērtībām īpašā augstuma kartē, ko sauc par bumpmap. Parasti tā ir 8 bitu melnbaltā tekstūra, un tekstūras krāsu vērtības nav pārklātas kā parastās faktūras, bet tiek izmantotas, lai aprakstītu virsmas raupjumu. Katra teksela krāsa nosaka atbilstošā reljefa punkta augstumu, lielākas vērtības nozīmē augstāku virs sākotnējās virsmas un zemākās vērtības attiecīgi zemākas. Vai otrādi.

Punkta apgaismojuma pakāpe ir atkarīga no gaismas staru krišanas leņķa. Jo mazāks ir leņķis starp parasto un gaismas staru, jo lielāks ir virsmas punkta apgaismojums. Tas ir, ja ņemat līdzenu virsmu, tad normas katrā punktā būs vienādas, un arī apgaismojums būs vienāds. Un, ja virsma ir nelīdzena (patiesībā gandrīz visas virsmas ir realitātē), tad normas katrā punktā būs atšķirīgas. Un apgaismojums ir atšķirīgs, vienā brīdī tas būs vairāk, citā - mazāk. No šejienes izriet bumpmapping princips - lai modelētu nelīdzenumus dažādiem daudzstūra punktiem, tiek noteikti virsmas normāli, kas tiek ņemti vērā, aprēķinot pikseļu apgaismojumu. Rezultātā tiek iegūts dabiskāks virsmas attēls, grumbu kartēšana virsmām sniedz sīkāku informāciju, piemēram, triecienus uz ķieģeļiem, poras uz ādas utt., Nepalielinot modeļa ģeometrisko sarežģītību, jo aprēķini tiek veikti plkst. pikseļu līmenis. Turklāt, mainoties gaismas avota stāvoklim, šo nelīdzenumu apgaismojums mainās pareizi.

Protams, virsotņu apgaismojums ir daudz vienkāršāks skaitļošanas ziņā, taču tas izskatās pārāk nereāli, jo īpaši ar relatīvi zemu poli ģeometriju, krāsu interpolācija katram pikselim nevar reproducēt lielākas vērtības nekā aprēķinātās virsotņu vērtības. Tas ir, pikseļi trijstūra vidū nevar būt gaišāki par fragmentiem virsotnes tuvumā. Līdz ar to apgabali ar pēkšņām apgaismojuma izmaiņām, piemēram, atspīdums un gaismas avoti ļoti tuvu virsmai, fiziski netiks pareizi parādīti, un tas būs īpaši pamanāms dinamikā. Protams, problēmu var daļēji atrisināt, palielinot modeļa ģeometrisko sarežģītību, sadalot to vairākās virsotnēs un trīsstūros, taču apgaismojums pa pikseliem ir labākais risinājums.

Lai turpinātu, jums jāatgādina par apgaismojuma sastāvdaļām. Virsmas punkta krāsa tiek aprēķināta kā apkārtējās vides, izkliedēto un mirdzošo komponentu summa no visiem skatuves gaismas avotiem (ideālā gadījumā no visiem, ko daudzi bieži ignorē). Katra gaismas avota ieguldījums šīs vērtības noteikšanā ir atkarīgs no attāluma starp gaismas avotu un punktu uz virsmas.

Apgaismojuma sastāvdaļas:

Tagad tam pievienosim nelielu izlīdzināšanu:

Apgaismojuma vienotā (apkārtējā) sastāvdaļa ir aptuvens, "sākotnējais" apgaismojums katram ainas punktam, kurā visi punkti tiek izgaismoti vienādi un apgaismojums nav atkarīgs no citiem faktoriem.
Gaismas izkliedētā sastāvdaļa ir atkarīga no gaismas avota stāvokļa un no normālās virsmas. Šī apgaismojuma sastāvdaļa katrai objekta virsotnei ir atšķirīga, kas tiem piešķir apjomu. Gaisma vairs neaizpilda virsmu ar tādu pašu nokrāsu.
Apgaismojuma spoguļkomponents izpaužas kā gaismas staru atstarošana no virsmas. Tā aprēķināšanai papildus gaismas avota stāvokļa vektoram un normālam tiek izmantoti vēl divi vektori: skatiena virziena vektors un atstarošanas vektors. Specular apgaismojuma modeli pirmo reizi ierosināja Phong Bui-Tong. Šie uzliesmojumi ievērojami palielina attēla reālismu, jo retas īstas virsmas neatspoguļo gaismu, tāpēc spekulārais komponents ir ļoti svarīgs. Īpaši kustībā, jo atspulgs uzreiz parāda izmaiņas kameras vai paša objekta pozīcijā. Vēlāk pētnieki nāca klajā ar citiem veidiem, kā aprēķināt šo komponentu, sarežģītāku (Blinn, Cook-Torrance, Ward), ņemot vērā gaismas enerģijas sadalījumu, tās absorbciju ar materiāliem un izkliedi izkliedētas sastāvdaļas veidā.

Tātad, Specular Bump Mapping tiek iegūts šādā veidā:

Un redzēsim to pašu ar spēles piemēru Call of Duty 2:


Pirmais attēla fragments tiek atveidots bez izciļņiem (), otrais (augšējā labajā stūrī) ir bumpmapping bez spoguļkomponenta, trešais ir ar spēlē izmantoto normāla lieluma spekulācijas komponentu, un pēdējais , no labās puses apakšas ar maksimāli iespējamo spekulāro komponentu.

Kas attiecas uz pirmo aparatūras lietojumprogrammu, dažus saspiešanas veidus (Emboss Bump Mapping) sāka izmantot vēl video karšu laikos, kuru pamatā bija NVIDIA Riva TNT mikroshēmas, taču tā laika paņēmieni bija ārkārtīgi primitīvi un netika plaši izmantoti. Nākamais zināmais veids bija Environment Mapped Bump Mapping (EMBM), bet tikai Matrox videokartēm tajā laikā bija aparatūras atbalsts DirectX, un atkal izmantošana bija stipri ierobežota. Tad parādījās Dot3 izciļņu kartēšana, un tā laika video mikroshēmām (GeForce 256 un GeForce 2) bija nepieciešamas trīs piespēles, lai pilnībā izpildītu šādu matemātisko algoritmu, jo tās ierobežo divas vienlaikus izmantotas faktūras. Sākot ar NV20 (GeForce3), kļuva iespējams to pašu izdarīt vienā piegājienā, izmantojot pikseļu ēnotājus. Vēl vairāk. Viņi sāka izmantot efektīvākas metodes, piemēram.

Bumpmapping izmantošanas piemēri spēlēs:


Pārvietošanās kartēšana ir metode detaļu pievienošanai 3D objektiem. Atšķirībā no saspiešanas un citām pikseļu metodēm, kad tikai punkta apgaismojums ir pareizi modelēts ar augstuma kartēm, bet tā stāvoklis telpā nemainās, kas rada tikai ilūziju par virsmas sarežģītības palielināšanos, pārvietojuma kartes ļauj iegūt reāli sarežģīti 3D objekti no virsotnēm un daudzstūriem bez ierobežojumiem, kas raksturīgi pikseļu metodēm. Šī metode pārvieto trijstūru virsotnes, normalizējot tās par summu, pamatojoties uz vērtībām pārvietojuma kartēs. Izvietojuma karte parasti ir melnbalta tekstūra, un tajā esošās vērtības tiek izmantotas, lai noteiktu katra punkta augstumu uz objekta virsmas (vērtības var saglabāt kā 8 bitu vai 16 bitu skaitļus) , līdzīgi kā bumpmap. Pārvietošanās kartes bieži tiek izmantotas (šajā gadījumā tās sauc arī par augstuma kartēm), lai izveidotu reljefu ar pauguriem un ielejām. Tā kā reljefu raksturo divdimensiju nobīdes karte, vajadzības gadījumā to ir samērā viegli deformēt, jo tas prasītu tikai izmaiņas pārvietojuma kartē un virsmas veidošanu, pamatojoties uz to nākamajā kadrā.

Ainavas veidošana, izmantojot pārvietošanas kartes, ir skaidri parādīta attēlā. Sākotnēji tika izmantotas 4 virsotnes un 2 daudzstūri, kā rezultātā izrādījās pilnvērtīgs ainavas gabals.

Pārvietošanas karšu pārklāšanās lielā priekšrocība ir ne tikai spēja pievienot virsmai detaļas, bet arī gandrīz pilnīga objekta izveide. Tiek ņemts objekts ar zemu poli, sadalīts (tessellated) vairākās virsotnēs un daudzstūros. Tesselācijas radītās virsotnes pēc tam tiek pārvietotas pa normu, pamatojoties uz nobīdes kartē nolasīto vērtību. Mēs iegūstam sarežģītu 3D objektu no vienkārša, izmantojot atbilstošu pārvietojuma karti:


Tesselācijas rezultātā izveidoto trijstūru skaitam jābūt pietiekami lielam, lai aptvertu visas pārvietojuma kartē noteiktās detaļas. Dažreiz papildu trijstūri tiek izveidoti automātiski, izmantojot N-ielāpus vai citas metodes. Izvietojuma kartes vislabāk izmantot kopā ar izciļņu kartēšanu, lai radītu smalkas detaļas, kur pietiek ar atbilstošu pikseļu-pikseļu apgaismojumu.

Pārvietošanas kartēšana pirmo reizi tika atbalstīta DirectX 9.0. Šī bija pirmā šīs API versija, kas atbalstīja pārvietošanas kartēšanas paņēmienu. DX9 atbalsta divu veidu pārvietošanas kartēšanu, filtrētu un iepriekšēju paraugu. Pirmo metodi atbalstīja aizmirstā MATROX Parhelia video mikroshēma, bet otro - ATI RADEON 9700. Filtrētā metode atšķiras ar to, ka tā ļauj izmantot mip līmeņus pārvietošanas kartēm un tām piemērot trilineāro filtrēšanu. Šajā metodē pārvietojuma kartes mip līmenis tiek izvēlēts katrai virsotnei, pamatojoties uz attālumu no virsotnes līdz kamerai, tas ir, tiek automātiski izvēlēts detalizācijas līmenis. Tas nodrošina gandrīz vienmērīgu ainas sadalījumu, ja trīsstūri ir aptuveni vienāda izmēra.

Pārvietošanas kartēšanu būtībā var uzskatīt par ģeometrijas saspiešanas paņēmienu; pārvietošanas karšu izmantošana samazina atmiņas apjomu, kas nepieciešams konkrētai 3D modeļa detaļai. Apjomīgus ģeometrijas datus aizstāj ar vienkāršām 2D nobīdes faktūrām, parasti 8 bitu vai 16 bitu. Tas samazina atmiņas apjomu un joslas platumu, kas nepieciešams ģeometrijas datu piegādei GPU, kas ir daži no lielākajiem mūsdienu sistēmu ierobežojumiem. Alternatīvi, ar vienādu joslas platumu un uzglabāšanas prasībām, pārvietojuma kartēšana ļauj izveidot daudz sarežģītākus ģeometriskus 3D modeļus. Daudz mazāk sarežģītu modeļu izmantošana, kad desmitiem vai simtiem tūkstošu trijstūru vietā tiek izmantotas tūkstošu vienības, tas arī ļauj paātrināt to animāciju. Vai arī uzlabojiet to, izmantojot sarežģītākus sarežģītus algoritmus un metodes, piemēram, auduma simulāciju.

Vēl viena priekšrocība ir tā, ka pārvietošanas karšu izmantošana sarežģītas daudzstūrainas 3D acis pārvērš vairākās 2D tekstūrās, kuras ir vieglāk apstrādāt. Piemēram, organizācijai varat izmantot regulāru mip kartēšanu, lai pārklātu pārvietojuma kartes. Turklāt salīdzinoši sarežģītu trīsdimensiju acu saspiešanas algoritmu vietā varat izmantot parastās, pat JPEG līdzīgās, tekstūru saspiešanas metodes. Un 3D objektu procesuālai izveidei varat izmantot parastos 2D faktūru algoritmus.

Bet pārvietošanas kartēm ir arī daži ierobežojumi, tos nevar piemērot visās situācijās. Piemēram, gludi objekti, kas nesatur daudz smalku detaļu, būs labāk attēloti standarta acu vai citu augstāka līmeņa virsmu veidā, piemēram, Bezjē līknes. No otras puses, ļoti sarežģītus modeļus, piemēram, kokus vai augus, arī nav viegli attēlot ar pārvietošanas kartēm. Pastāv arī problēmas ar to lietošanas ērtumu, tas gandrīz vienmēr prasa specializētas inženierkomunikācijas, jo ir ļoti grūti tieši izveidot pārvietošanas kartes (ja mēs nerunājam par vienkāršiem objektiem, piemēram, ainavu). Daudzas nobīdes karšu raksturīgās problēmas un ierobežojumi ir tādi paši kā tiem, jo ​​abas metodes būtībā ir līdzīgas idejas divi dažādi attēlojumi.

Kā piemēru no reālām spēlēm es minēšu spēli, kurā tiek izmantota tekstūras paraugu ņemšana no virsotņu ēnotāja - šī funkcija ir parādījusies NVIDIA NV40 video mikroshēmās un Shader Model 3.0. Vertex teksturēšanu var pielietot vienkāršai pārvietošanas karšu pārklāšanas metodei, ko pilnībā veic GPU, bez Teselācijas (sadalot vairākos trijstūros). Šāda algoritma izmantošana ir ierobežota, tiem ir jēga tikai tad, ja kartes ir dinamiskas, tas ir, tās mainīsies procesā. Piemēram, tā ir lielu ūdens virsmu atveidošana, kas tiek veikta spēlē Pacific Fighters:


Normalmapping ir uzlabota iepriekš aprakstītās bumpmapping tehnikas versija, tās paplašinātā versija. Blinnmapping izstrādāja Blinn jau 1978. gadā, kur virsmas normas tiek mainītas ar šo reljefa kartēšanas metodi, pamatojoties uz informāciju no izciļņu kartēm. Kaut arī bumpmapping maina tikai esošo virsmas punktu normu, normalmapping pilnībā aizstāj normālos, iegūstot to vērtības no speciāli sagatavotas normālas kartes. Šīs kartes parasti ir faktūras ar iepriekš aprēķinātām normālajām vērtībām, kas attēlotas kā RGB krāsu komponenti (tomēr ir arī īpaši formāti normālām kartēm, ieskaitot kartes ar saspiešanu), atšķirībā no 8 bitu melnbaltā augstuma kartes bumpmapping.

Kopumā, tāpat kā izciļņu kartēšana, tā ir arī "lēta" metode detaļu pievienošanai salīdzinoši zemas ģeometriskās sarežģītības modeļiem, neizmantojot reālāku ģeometriju, tikai progresīvāku. Viens no interesantākajiem tehnikas pielietojumiem ir ievērojami palielināt modeļu ar zemu poli daudzumu detalizāciju, izmantojot parastās kartes, kas iegūtas, apstrādājot to pašu augstas ģeometriskās sarežģītības modeli. Parastajās kartēs ir detalizētāks virsmas apraksts nekā bumpmapping, un tās ļauj attēlot sarežģītākas formas. Idejas informācijas iegūšanai no ļoti detalizētiem objektiem izskanēja pagājušā gadsimta deviņdesmito gadu vidū, bet tad runa bija par izmantošanu. Vēlāk, 1998. gadā, tika prezentētas idejas, kā pārvietot detaļas normālu karšu veidā no modeļiem ar augstu poli skaitu uz zemu poli.

Parastās kartes nodrošina efektīvāku veidu, kā saglabāt detalizētus virsmas datus, nekā vienkārši izmantot lielu skaitu daudzstūru. To vienīgais nopietnais ierobežojums ir tas, ka tie nav īpaši piemēroti lielām detaļām, jo ​​parastā kartēšana faktiski nepievieno daudzstūrus un nemaina objekta formu, bet tikai rada tā izskatu. Šī ir tikai detaļu simulācija, kuras pamatā ir pikseļu līmeņa apgaismojuma aprēķini. Pie objekta galējiem daudzstūriem un lieliem virsmas slīpuma leņķiem tas ir ļoti pamanāms. Tāpēc vispiemērotākais veids, kā izmantot parasto kartēšanu, ir padarīt zemo poli modeli pietiekami detalizētu, lai saglabātu objekta pamatformu, un izmantot parastās kartes, lai pievienotu sīkāku informāciju.

Parastās kartes parasti tiek ģenerētas no divām modeļa versijām - zema un augsta poli. Modelis ar zemu poli sastāv no minimālas ģeometrijas, objekta pamatformām, un modelis ar augstu poli satur visu nepieciešamo maksimālai detaļai. Pēc tam, izmantojot īpašas utilītas, tās tiek salīdzinātas viena ar otru, starpība tiek aprēķināta un saglabāta tekstūrā, ko sauc par parasto karti. Veidojot to, jūs varat papildus izmantot izciļņu karti ļoti mazām detaļām, kuras nevar modelēt pat modelī ar augstu poli (ādas poras, citas nelielas ieplakas).

Parastās kartes sākotnēji tika attēlotas kā regulāras RGB faktūras, kur R, G un B krāsu sastāvdaļas (no 0 līdz 1) tiek interpretētas kā X, Y un Z koordinātas. Katrs teksts parastajā kartē ir attēlots kā virsmas punkta normāls. Parastās kartes var būt divu veidu: ar koordinātām modeļa telpā (vispārējā koordinātu sistēma) vai pieskares telpā (termins krievu valodā ir "pieskares telpa", trīsstūra vietējā koordinātu sistēma). Otro iespēju izmanto biežāk. Ja modeļa telpā tiek parādītas parastās kartes, tad tām jābūt trīs komponentiem, jo ​​var attēlot visus virzienus, un, atrodoties lokālajā koordinātu sistēmā, pieskares telpā, jūs varat iztikt ar diviem komponentiem un iegūt trešo pikseļu ēnotājs.

Mūsdienu reāllaika lietojumprogrammas joprojām ievērojami pārspēj iepriekš atveidoto animāciju attēla kvalitātes ziņā, pirmkārt, tas attiecas uz apgaismojuma kvalitāti un ainu ģeometrisko sarežģītību. Reāllaikā aprēķinātais virsotņu un trīsstūru skaits ir ierobežots. Tāpēc metodes ģeometrijas samazināšanai ir ļoti svarīgas. Pirms parastās kartēšanas tika izstrādātas vairākas šādas metodes, taču modeļi ar zemu poli, pat ar izciļņiem, ir daudz sliktāki nekā sarežģītāki modeļi. Lai gan parastajai kartēšanai ir vairāki trūkumi (acīmredzamākais - tā kā modelim joprojām ir zems poli, to var viegli redzēt pēc tā leņķa robežām), galīgā renderēšanas kvalitāte ir ievērojami uzlabojusies, atstājot zemu modeļu ģeometrisko sarežģītību. Pēdējā laikā ir skaidri redzams šīs tehnikas popularitātes pieaugums un izmantošana visos populārajos spēļu dzinējos. Tas ir saistīts ar izcilās rezultatīvās kvalitātes kombināciju un vienlaicīgu modeļu ģeometriskās sarežģītības prasību samazināšanu. Parastā kartēšanas tehnika tagad tiek izmantota gandrīz visur, visas jaunās spēles to izmanto pēc iespējas plašāk. Šeit ir tikai īss saraksts ar slavenajām datorspēlēm, kurās tiek izmantota parasta kartēšana: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Tās visas izskatās daudz labāk nekā pagātnes spēles, tostarp parasto karšu izmantošana.

Šīs tehnikas izmantošanai ir tikai vienas negatīvas sekas - faktūru apjoma palielināšanās. Galu galā normāla karte spēcīgi ietekmē objekta izskatu, un tai jābūt pietiekami lielai izšķirtspējai, tāpēc prasības video atmiņai un joslas platumam tiek dubultotas (nesaspiestu normālu karšu gadījumā). Bet tagad jau tiek ražotas videokartes ar 512 megabaitu vietējās atmiņas, tās joslas platums nepārtraukti pieaug, kompresijas metodes ir izstrādātas tieši parastajām kartēm, tāpēc šie mazie ierobežojumi patiesībā nav īpaši svarīgi. Parastās kartēšanas efekts ir daudz lielāks, ļaujot izmantot salīdzinoši zemu poli modeļus, samazinot atmiņas prasības ģeometrisko datu glabāšanai, uzlabojot veiktspēju un sniedzot ļoti pienācīgu vizuālo rezultātu.

Paralaksa kartēšana / nobīdes kartēšana

Parastajai kartēšanai, kas izstrādāta jau 1984. gadā, sekoja Relief Texture Mapping, ko 1999. gadā ieviesa Olivera un Bishop. Tā ir tekstūras kartēšanas tehnika, kuras pamatā ir informācija par dziļumu. Metode neatrada pielietojumu spēlēs, taču tās ideja veicināja parallaksa kartēšanas darba turpināšanu un tās uzlabošanu. Kaneko 2001. gadā ieviesa parallaksa kartēšanu, kas bija pirmā efektīvā metode, lai padarītu paralaksa efektu pikseļos. 2004. gadā velsieši demonstrēja paralaksa kartēšanas izmantošanu programmējamās video mikroshēmās.

Šai metodei, iespējams, ir visdažādākie nosaukumi. Es uzskaitīšu tos, kurus satiku: paralakses kartēšana, nobīdes kartēšana, virtuālā pārvietojuma kartēšana, pikseļu pārvietojuma kartēšana. Pirmais nosaukums rakstā tiek izmantots īsuma dēļ.
Paralaksa kartēšana ir vēl viena alternatīva izciļņu kartēšanai un parastajām kartēšanas metodēm, kas sniedz jums vēl lielāku ieskatu virsmas detaļās, dabiskāku 3D virsmu attēlojumu, arī nezaudējot pārāk lielu veiktspēju. Šī metode ir līdzīga gan pārvietošanas kartēšanai, gan parastajai kartēšanai vienlaikus, tā ir kaut kur pa vidu. Metode ir arī paredzēta, lai parādītu vairāk virsmas detaļu nekā sākotnējais ģeometriskais modelis. Tas ir līdzīgs parastajai kartēšanai, taču atšķirība ir tāda, ka metode izkropļo faktūras kartēšanu, mainot faktūras koordinātas tā, ka, aplūkojot virsmu no dažādiem leņķiem, tā izskatās izliekta, lai gan patiesībā virsma ir plakana un nemainās . Citiem vārdiem sakot, paralaksa kartēšana ir metode virsmas punktu maiņas efekta tuvināšanai atkarībā no skatu punkta izmaiņām.

Metode maina faktūras koordinātas (tāpēc šo tehniku ​​dažreiz sauc par nobīdes kartēšanu), lai virsma izskatītos apjomīgāka. Metodes ideja ir atgriezt tā punkta faktūras koordinātas, kur skata vektors krustojas ar virsmu. Tam nepieciešama staru izsekošana (staru izsekošana) augstuma kartei, bet, ja tai nav pārāk daudz mainīgu vērtību ("gluda" vai "gluda"), tad var atteikties no tuvināšanas. Šī metode ir piemērota virsmām ar vienmērīgi mainīgu augstumu, bez krustojumu nepareizas aprēķināšanas un lielām nobīdes vērtībām. Šāds vienkāršs algoritms atšķiras no parastās kartēšanas tikai ar trim pikseļu ēnojuma norādījumiem: diviem matemātiskiem norādījumiem un vienu papildu izgūšanu no faktūras. Pēc jaunās tekstūras koordinātas aprēķināšanas to izmanto tālāk, lai nolasītu citus tekstūras slāņus: bāzes faktūru, parasto karti utt. Šī paralaksa kartēšanas metode mūsdienu video mikroshēmās ir gandrīz tikpat efektīva kā parastā tekstūras kartēšana, un tās rezultāts ir reālistiskāks virsmas attēlojums nekā vienkārša parastā kartēšana.

Bet tradicionālās paralakses kartēšanas izmantošana ir ierobežota līdz augstuma kartēm ar nelielām atšķirībām vērtībās. "Stāvas" nelīdzenumus algoritms apstrādā nepareizi, parādās dažādi artefakti, tekstūras "peld" utt. Parallakses kartēšanas tehnikas uzlabošanai ir izstrādātas vairākas modificētas metodes. Vairāki pētnieki (Yerex, Donnelly, Tatarchuk, Policarpo) ir aprakstījuši jaunas metodes, kas uzlabo sākotnējo algoritmu. Gandrīz visas idejas ir balstītas uz staru izsekošanu pikseļu ēnotājā, lai noteiktu virsmas detaļu krustošanos. Modificētās metodes ir saņēmušas vairākus dažādus nosaukumus: paralaksa kartēšana ar oklūziju, paralaksa kartēšana ar attāluma funkcijām, paralaksas oklūzijas kartēšana. Īsuma labad mēs tos visus sauksim par paralaksa oklūzijas kartēšanu.

Parallax Occlusion Mapping metodes ietver arī staru izsekošanu, lai noteiktu augstumus un ņemtu vērā tekstilu redzamību. Patiešām, skatoties leņķī pret virsmu, tekstili bloķē viens otru, un, paturot to prātā, parallaksa efektam varat pievienot lielāku dziļumu. Iegūtais attēls kļūst reālistiskāks, un šādas uzlabotas metodes var izmantot dziļākam reljefam, tas ir lieliski piemērots, lai attēlotu ķieģeļu un akmens sienas, ietves utt. Īpaši jāatzīmē, ka galvenā atšķirība starp paralaksa kartēšanu un pārvietojuma kartēšanu ir tāda, ka aprēķini visi ir pikseļi un nav virspusēji. Tāpēc metodei ir tādi nosaukumi kā virtuālā nobīdes kartēšana un pikseļu nobīdes kartēšana. Paskaties uz attēlu, ir grūti noticēt, bet bruģa akmeņi šeit ir tikai pikseļu pikseļu efekts:

Metode ļauj efektīvi attēlot detalizētas virsmas bez miljoniem virsotņu un trīsstūru, kas būtu nepieciešami, ieviešot šo ģeometriju. Tajā pašā laikā tiek saglabātas augstas detaļas (izņemot siluetus / malas), un animācijas aprēķini ir ievērojami vienkāršoti. Šī metode ir lētāka nekā reālas ģeometrijas izmantošana, un tiek izmantots ievērojami mazāk daudzstūru, īpaši gadījumos, kad ir ļoti sīkas detaļas. Algoritmam ir daudz lietojumu, un tas ir vislabāk piemērots akmeņiem, ķieģeļiem un tamlīdzīgi.

Turklāt papildu priekšrocība ir tā, ka augstuma kartes var dinamiski mainīties (ūdens virsma ar viļņiem, ložu caurumi sienās un daudz kas cits). Metodes trūkums ir ģeometriski pareizu siluetu (objekta malu) trūkums, jo algoritms ir pikseļi pa pikseliem un nav īsta pārvietojuma kartēšana. Bet tas ietaupa veiktspēju, samazinot transformācijas slodzi, apgaismojumu un ģeometrijas animāciju. Ietaupa video atmiņu, kas nepieciešama liela apjoma ģeometrijas datu glabāšanai. Šīs metodes priekšrocības ir salīdzinoši vienkārša integrācija esošajās lietojumprogrammās un parastās utilītas izmantošana, ko izmanto parastajai kartēšanai šajā procesā.

Šī tehnika nesen tika izmantota reālās dzīves spēlēs. Līdz šim viņi iztiek ar vienkāršu paralaksu kartēšanu, pamatojoties uz statiskām augstuma kartēm, bez staru izsekošanas un krustojumu aprēķināšanas. Šeit ir daži paralaksa kartēšanas piemēri spēlēs:

Pēcapstrāde

Plašā nozīmē pēcapstrāde ir viss, kas notiek pēc galvenajiem attēlveidošanas soļiem. Citiem vārdiem sakot, pēcapstrāde ir jebkuras attēla izmaiņas pēc tā renderēšanas. Pēcapstrāde ir rīku kopums īpašu vizuālo efektu radīšanai, un to izveide tiek veikta pēc tam, kad ir pabeigts galvenais darbs pie ainas atveidošanas, tas ir, veidojot pēcapstrādes efektus, tiek izmantots gatavs rastra attēls.

Vienkāršs piemērs no fotogrāfijas: skaidrā laikā esat fotografējis skaistu ezeru ar zaļumiem. Debesis ir ļoti gaišas, un koki ir pārāk tumši. Jūs ielādējat fotoattēlu grafiskajā redaktorā un sākat mainīt spilgtumu, kontrastu un citus parametrus attēla apgabaliem vai visam attēlam. Bet jums vairs nav iespējas mainīt kameras iestatījumus, jūs veicat gatavā attēla apstrādi. Šī ir pēcapstrāde. Vai cits piemērs: fona izvēle portreta fotografēšanā un izplūšanas filtra pielietošana šajā apgabalā, lai iegūtu dziļuma lauka efektu ar lielāku dziļumu. Tas ir, mainot vai labojot rāmi grafikas redaktorā, jūs veicat pēcapstrādi. To pašu var izdarīt spēlē, reālā laikā.

Attēlu apstrādei pēc renderēšanas ir daudz dažādu iespēju. Ikviens, iespējams, ir redzējis daudz tā saukto grafisko filtru grafiskajos redaktoros. Tieši to sauc par postfiltriem: izplūšanu, malu noteikšanu, asināšanu, troksni, gludu, reljefu utt. Lietojot reāllaika 3D atveidošanai, tas tiek darīts šādi - visa aina tiek renderēta īpašā apgabalā. un pēc galvenās atveidošanas šis attēls tiek papildus apstrādāts, izmantojot pikseļu ēnotājus, un tikai pēc tam tiek parādīts ekrānā. No spēļu pēcapstrādes efektiem visbiežāk tiek izmantoti ,,. Ir daudz citu post efektu: troksnis, uzliesmojums, izkropļojumi, sēpija utt.

Šeit ir daži galvenie piemēri pēcapstrādei spēļu lietojumprogrammās:

Augsts dinamiskais diapazons (HDR)

Augsts dinamiskais diapazons (HDR), ko piemēro 3D grafikai, ir augsta dinamiskā diapazona atveidošana. HDR būtība ir aprakstīt intensitāti un krāsu ar reāliem fiziskiem daudzumiem. Parastais attēla aprakstīšanas modelis ir RGB, kad visas krāsas tiek attēlotas kā primāro krāsu summa: sarkana, zaļa un zila, ar dažādu intensitāti iespējamo veselu skaitļu vērtību veidā no 0 līdz 255 katram, kodēts ar astoņi biti vienā krāsā. Maksimālās intensitātes attiecību pret minimālo, ko var parādīt konkrēts modelis vai ierīce, sauc par dinamisko diapazonu. Tātad, RGB modeļa dinamiskais diapazons ir 256: 1 vai 100: 1 cd / m 2 (divas lieluma kārtas). Šo krāsu un intensitātes aprakstīšanas modeli parasti dēvē par zemu dinamisko diapazonu (LDR).

Iespējamās LDR vērtības visos gadījumos acīmredzami nepietiek, cilvēks var redzēt daudz lielāku diapazonu, it īpaši vājā apgaismojumā, un RGB modelis šādos gadījumos (un arī ar augstu intensitāti) ir pārāk ierobežots. Cilvēka redzes dinamiskais diapazons ir no 10 -6 līdz 10 8 cd / m 2, tas ir, 10 000 000 000 000: 1 (14 lieluma kārtas). Mēs nevaram redzēt visu diapazonu vienlaikus, bet acīm redzamais diapazons jebkurā laikā ir aptuveni 10 000: 1 (četras lieluma pakāpes). Redze pakāpeniski pielāgojas vērtībām no citas apgaismes diapazona, izmantojot tā saukto adaptāciju, ko var viegli raksturot ar situāciju, kad naktī izslēdz gaismu telpā - sākumā acis redz ļoti maz, bet laika gaitā viņi pielāgojas mainīgajiem apgaismojuma apstākļiem un redz daudz vairāk .... Tas pats notiek, mainot tumšo vidi uz gaišu.

Tātad, ar RGB apraksta modeļa dinamisko diapazonu nepietiek, lai attēlotu attēlus, kurus cilvēks spēj redzēt realitātē, šis modelis ievērojami samazina iespējamās gaismas intensitātes vērtības diapazona augšējā un apakšējā daļā. Visizplatītākais piemērs, kas minēts HDR materiālos, ir attēls ar aptumšotu telpu ar logu uz gaišas ielas saulainā dienā. Izmantojot RGB modeli, jūs varat iegūt normālu displeju par to, kas atrodas ārpus loga, vai tikai to, kas atrodas telpā. Vērtības, kas lielākas par 100 cd / m 2 LDR, parasti tiek apgrieztas, tāpēc 3D attēlojumā ir grūti pareizi parādīt spilgtus gaismas avotus, kas tieši novirzīti kamerā.

Pagaidām pašas datu attēlošanas ierīces nevar nopietni uzlabot, un ir lietderīgi atteikties no LDR aprēķinos, varat izmantot reālās intensitātes un krāsas (vai lineāri proporcionālās) fiziskās vērtības un parādīt maksimālo, ko tā var monitors. HDR attēlojuma būtība ir intensitātes un krāsu vērtību izmantošana reālos fiziskos daudzumos vai lineāri proporcionāli un augstas precizitātes (piemēram, 16 vai 32 bitu) skaitļu izmantošana, nevis veseli skaitļi, bet peldošā komata skaitļi. Tas novērš RGB modeļa ierobežojumus un ievērojami palielina attēla dinamisko diapazonu. Bet tad jebkuru HDR attēlu var parādīt jebkurā displeja nesējā (tajā pašā RGB monitorā) ar visaugstāko iespējamo kvalitāti, izmantojot īpašus algoritmus.

HDR renderēšana ļauj mainīt ekspozīciju pēc attēla atveidošanas. Tas ļauj simulēt cilvēka redzes pielāgošanās efektu (pārejot no gaišām atklātām telpām uz tumšām telpām un otrādi), ļauj nodrošināt fiziski pareizu apgaismojumu, kā arī ir vienots risinājums pēcapstrādes efektu (atspīdums, uzliesmojumi, ziedēšana) pielietošanai , kustību aizmiglojums). HDR attēlojumā labāk tiek veikti attēlu apstrādes algoritmi, krāsu korekcija, gamma korekcija, kustības izplūšana, ziedēšana un citas pēcapstrādes metodes.

Reāllaika 3D renderēšanas lietojumprogrammās (galvenokārt spēlēs) HDR renderēšanu sāka izmantot ne tik sen, jo tam ir nepieciešams aprēķins un atbalsts renderēšanas mērķim peldošā komata formātos, kas vispirms kļuva pieejami tikai video mikroshēmās ar atbalstu DirectX 9. Parastais HDR renderēšanas veids spēlēs: ainas renderēšana peldošā komata buferī, attēla pēcapstrāde paplašinātā krāsu diapazonā (mainot kontrastu un spilgtumu, krāsu līdzsvaru, atspīdumu un kustības izplūšanas efektus, objektīva uzliesmojumu un līdzīgi), piemērojot toņu kartēšanu, lai gala HDR attēlu izvadītu LDR displeja ierīcē. Dažreiz vides kartes tiek izmantotas HDR formātos, statiskām pārdomām par objektiem, HDR izmantošana dinamisko refrakciju un atstarojumu simulēšanai ir ļoti interesanta, tāpēc var izmantot arī dinamiskās kartes peldošā komata formātos. Tam varat pievienot vairāk gaismas karšu, kas iepriekš aprēķinātas un saglabātas HDR formātā. Liela daļa no iepriekšminētā ir paveikta, piemēram, filmā Half-Life 2: Lost Coast.

HDR renderēšana ir ļoti noderīga sarežģītai augstākas kvalitātes pēcapstrādei nekā parastās metodes. Tas pats zieds izskatīsies reālistiskāk, ja to aprēķinās HDR skata modelī. Piemēram, kā tas tiek darīts Crytek Far Far spēlē, tajā tiek izmantotas standarta HDR renderēšanas metodes: tiek izmantoti ziedēšanas filtri, ko nodrošina Kawase, un toņu kartēšanas operators Reinhards.

Diemžēl dažos gadījumos spēļu izstrādātāji ar nosaukumu HDR var paslēpt tikai ziedēšanas filtru, kas aprēķināts parastajā LDR diapazonā. Un, lai gan lielākā daļa spēļu, kas pašlaik tiek veiktas ar HDR renderēšanu, ir vislabākās kvalitātes ziedēšana, HDR renderēšanas priekšrocības neaprobežojas tikai ar šo pēcefektu, bet to ir vienkārši izdarīt.

Citi HDR renderēšanas piemēri reāllaika lietojumprogrammās:


Toņu kartēšana ir process, kurā HDR spilgtuma diapazons tiek pārvērsts par LDR diapazonu, ko parāda izvadierīce, piemēram, monitors vai printeris, jo HDR attēlu izvadīšanai tiem būs jāpārvērš HDR modeļa dinamiskais diapazons un gamma par atbilstošo LDR dinamiku. diapazons, visbiežāk RGB. Galu galā HDR attēlotais spilgtuma diapazons ir ļoti plašs, tas ir vairākas absolūtā dinamiskā diapazona lieluma pakāpes vienlaikus vienā ainā. Un diapazons, ko var reproducēt ar parastajām izvadierīcēm (monitoriem, televizoriem), ir tikai aptuveni divas dinamikas diapazona lieluma kārtas.

HDR pārveidošanu par LDR sauc par toņu kartēšanu, un tā ir zudusi un atdarina cilvēka redzes īpašības. Šos algoritmus parasti sauc par toņu kartēšanas paziņojumiem. Operatori visas attēla spilgtuma vērtības iedala trīs dažādos veidos: tumšs, vidējs un gaišs. Pamatojoties uz vidējo toņu spilgtuma novērtējumu, tiek koriģēts kopējais apgaismojums, ainas pikseļu spilgtuma vērtības tiek pārdalītas, lai iekļūtu izvades diapazonā, tumšie pikseļi tiek izgaismoti un spilgtie ir aptumšoti. Pēc tam spilgtākie attēla pikseļi tiek pielāgoti izvades ierīces vai izvades skata modeļa diapazonam. Nākamajā attēlā parādīta vienkāršākā HDR attēla pārvēršana LDR diapazonā, lineāra transformācija un centrā esošajam fragmentam tiek piemērots sarežģītāks toņu kartēšanas operators, kas darbojas, kā aprakstīts iepriekš:

Var redzēt, ka tikai izmantojot nelineāru toņu kartēšanu, jūs varat iegūt maksimālu attēla detaļu daudzumu, un, ja HDR pārveidojat par LDR lineāri, daudzas mazas lietas tiek vienkārši zaudētas. Nav viena pareiza toņu kartēšanas algoritma, ir vairāki operatori, kas sniedz labus rezultātus dažādās situācijās. Šeit ir labs piemērs diviem dažādiem toņu kartēšanas paziņojumiem:

Kopā ar HDR renderēšanu toņu kartēšana nesen tika izmantota spēlēs. Kļuva iespējams pēc izvēles simulēt cilvēka redzes īpašības: asuma zudumu tumšās ainās, pielāgošanos jauniem apgaismojuma apstākļiem pārejās no ļoti spilgtām zonām uz tumšām zonām un otrādi, jutību pret kontrasta izmaiņām, krāsu ... Šādi redzes spējas pielāgošanās imitācija Far Cry izskatās. Pirmajā ekrānuzņēmumā redzams attēls, ko spēlētājs redz tikai pagriežoties no tumšas telpas uz spilgti apgaismotu atklātu telpu, bet otrajā - tas pats attēls pāris sekundes pēc adaptācijas.

Zied

Blūms ir viens no kinematogrāfiskajiem pēcapstrādes efektiem, kas izgaismo spilgtākās attēla daļas. Tas ir ļoti spilgtas gaismas efekts, kas izpaužas kā spīdums ap spilgtām virsmām, pēc ziedēšanas filtra uzklāšanas šādas virsmas ne tikai iegūst papildu spilgtumu, bet gaisma no tām (halo) daļēji ietekmē blakus esošās tumšākās vietas uz spilgtām virsmām rāmī. Vienkāršākais veids, kā to parādīt, ir ar piemēru:

3D Bloom grafikā filtrs tiek veikts, izmantojot papildu pēcapstrādi - sajaucot izplūšanas filtra izplūdušo rāmi (visu kadru vai tā atsevišķās gaišās zonas, filtru parasti lieto vairākas reizes) un oriģinālo kadru. Viens no visbiežāk izmantotajiem ziedēšanas pēcfiltra algoritmiem spēlēs un citās reāllaika lietojumprogrammās:

  • Sižets tiek padarīts kadru buferī, objektu spīduma intensitāte tiek ierakstīta bufera alfa kanālā.
  • Kadru buferis apstrādei tiek kopēts īpašā tekstūrā.
  • Tekstūras izšķirtspēja tiek samazināta, piemēram, par koeficientu 4.
  • Pamatojoties uz alfa kanālā ierakstītajiem intensitātes datiem, attēlam vairākas reizes tiek pielietoti pretslāpēšanas filtri (izplūšana).
  • Iegūtais attēls tiek sajaukts ar oriģinālo kadru kadru buferī un tiek parādīts rezultāts.

Tāpat kā citus pēcapstrādes veidus, ziedēšanu vislabāk izmantot, renderējot augstā dinamiskajā diapazonā (HDR). Papildu piemēri gala attēla apstrādei ar ziedēšanas filtru no reāllaika 3D lietojumprogrammām:

Kustības izplūšana

Kustības izplūšana rodas fotogrāfijās un filmās, jo kadrā ir eksponēti kadri ekspozīcijas laikā, kamēr objektīva aizvars ir atvērts. Kadrā, kas uzņemts ar kameru (fotoattēls, filma), netiek parādīts momentuzņēmums, kas uzņemts uzreiz ar nulles ilgumu. Tehnoloģisko ierobežojumu dēļ rāmis parāda noteiktu laika periodu, šajā laikā kadrā esošie objekti var pārvietoties noteiktā attālumā, un, ja tas notiek, tad tiks parādītas visas kustīgā objekta pozīcijas objektīva atvērtā aizvara laikā. uz rāmja kā neskaidrs attēls gar kustības vektoru ... Tas notiek, ja objekts pārvietojas attiecībā pret kameru vai kamera ir attiecībā pret objektu, un izplūšanas apjoms dod mums priekšstatu par objekta kustības ātruma lielumu.

Trīsdimensiju animācijā jebkurā brīdī (kadrā) objekti atrodas noteiktās koordinātās trīsdimensiju telpā, līdzīgi kā virtuālā kamera ar bezgala ātru aizvara ātrumu. Tā rezultātā, skatoties uz ātri kustīgiem objektiem, nav izplūšanas, kas līdzīga kamerai un cilvēka acij. Tas izskatās nedabiski un nereāli. Apsveriet vienkāršu piemēru: vairākas sfēras griežas ap kādu asi. Šeit ir attēls, kā šī kustība izskatītos ar izplūšanu un bez tās:

No attēla bez izplūšanas nevar pat noteikt, vai sfēras pārvietojas vai nē, savukārt kustības izplūšana sniedz skaidru priekšstatu par objektu kustības ātrumu un virzienu. Starp citu, kustības izplūšanas trūkums ir arī iemesls, kāpēc kustība spēlēs ar ātrumu 25–30 kadri sekundē šķiet saraustīta, lai gan filmas un videoklipi izskatās lieliski ar vienādiem kadru ātruma parametriem. Lai kompensētu kustības izplūšanas trūkumu, ir vēlams vai nu liels kadru ātrums (60 kadri sekundē vai lielāks), vai arī papildu attēlu apstrādes metožu izmantošana, lai atdarinātu kustības izplūšanas efektu. To izmanto, lai uzlabotu animācijas gludumu un vienlaikus panāktu foto un filmu reālismu.

Vienkāršākais kustības izplūšanas algoritms reāllaika lietojumprogrammām ir izmantot datus no iepriekšējiem animācijas kadriem, lai padarītu pašreizējo kadru. Bet ir efektīvākas un mūsdienīgākas kustības izplūšanas metodes, kurās netiek izmantoti iepriekšējie kadri, bet kuru pamatā ir kadrā esošo objektu kustības vektori, pievienojot atveidošanas procesam tikai vēl vienu pēcapstrādes posmu. Izplūšanas efekts var būt pilnekrāna režīms (parasti tiek veikts pēcapstrādē) vai atsevišķiem, visstraujāk kustīgajiem objektiem.

Kustības izplūšanas efekta iespējamie pielietojumi spēlēs: visas sacīkšu spēles (lai radītu ļoti liela kustības ātruma efektu un izmantotu, skatoties televizoram līdzīgus atkārtojumus), sporta spēles (tie paši atkārtojumi un pašā spēlē izplūšana var notikt) jāpiemēro ļoti ātri kustīgiem objektiem, piemēram, bumbiņai vai ripai), cīņas spēlēm (ātras tuvcīņas ieroču, roku un kāju kustības), daudzām citām spēlēm (spēles dzinēja 3D ainu laikā). Šeit ir daži spēļu izplūšanas efektu piemēri no spēlēm:

Asuma dziļums (DOF)

Asuma dziļums, īsāk sakot, ir objektu izplūšana atkarībā no to stāvokļa attiecībā pret kameras fokusu. Reālajā dzīvē, fotogrāfijās un filmās, mēs ne visus objektus redzam vienādi skaidri, tas ir saistīts ar acs struktūras īpatnībām un kameru un kinokameru optikas struktūru. Foto un kino optikai ir noteikts attālums, objekti, kas atrodas tādā attālumā no kameras, ir fokusā un izskatās asi attēlā, un objekti, kas atrodas tālāk no kameras vai tuvu tai, izskatās, gluži pretēji, izplūduši, asums pakāpeniski samazinās palielinoties vai samazinoties attālumam ...

Kā jau varēja nojaust, šī ir fotogrāfija, nevis atveidojums. Datorgrafikā katrs atveidotā attēla objekts ir pilnīgi skaidrs, jo aprēķinos netiek imitētas lēcas un optika. Tāpēc, lai sasniegtu foto un filmu reālismu, ir jāizmanto īpaši algoritmi, lai kaut ko līdzīgu veiktu datorgrafikā. Šīs metodes simulē atšķirīga fokusa ietekmi uz objektiem dažādos attālumos.

Viena no izplatītākajām reāllaika renderēšanas metodēm ir sākotnējā kadra un tā izplūdušās versijas (vairākas izplūšanas filtra pārejas) sajaukšana, pamatojoties uz attēla pikseļu dziļuma datiem. Spēlēs DOF ​​efektam ir vairāki pielietojumi, piemēram, spēļu dzinēji, atkārtojumi sporta un sacīkšu spēlēs. Lauka dziļuma piemēri reālā laikā:

Detalizācijas līmenis (LOD)

Detalizācijas līmenis 3D lietojumprogrammās ir metode, kā samazināt kadra atveidošanas sarežģītību, samazināt kopējo ainu daudzstūru, faktūru un citu resursu skaitu un kopumā samazināt tā sarežģītību. Vienkāršs piemērs: galvenā varoņa modelis sastāv no 10 000 daudzstūru. Gadījumos, kad apstrādātā sižetā tas atrodas kameras tuvumā, ir svarīgi, lai tiktu izmantoti visi daudzstūri, taču ļoti lielā attālumā no kameras gala attēlā tas aizņems tikai dažus pikseļus, un nav punktu visu 10 000 daudzstūru apstrādei. Iespējams, šajā gadījumā aptuveni vienādam modeļa attēlojumam pietiks ar simtiem daudzstūru vai pat pāris daudzstūru un īpaši sagatavotu tekstūru. Attiecīgi vidējos attālumos ir lietderīgi izmantot modeli, kas sastāv no vairāk trijstūriem nekā vienkāršākais modelis un mazāks par sarežģītāko.

LOD metodi parasti izmanto, modelējot un atveidojot trīsdimensiju ainas, objektiem izmantojot vairākus sarežģītības līmeņus (ģeometrisku vai citādu) proporcionāli attālumam no tiem līdz kamerai. Šo paņēmienu spēļu izstrādātāji bieži izmanto, lai samazinātu daudzstūru skaitu ainā un uzlabotu veiktspēju. Ja tie atrodas kameras tuvumā, tiek izmantoti modeļi ar maksimāli detalizētu informāciju (trīsstūru skaits, faktūru lielums, tekstūras sarežģītība), lai iegūtu pēc iespējas augstāku attēla kvalitāti un otrādi, kad modeļi tiek izņemti no kameras , modeļi ar mazāk trijstūriem tiek izmantoti, lai palielinātu renderēšanas ātrumu. Sarežģītības maiņa, jo īpaši modeļa trijstūru skaits, var notikt automātiski, pamatojoties uz vienu maksimālās sarežģītības 3D modeli, vai varbūt, pamatojoties uz vairākiem iepriekš sagatavotiem modeļiem ar dažādu detalizācijas pakāpi. Izmantojot modeļus ar mazāk detalizētu informāciju dažādiem attālumiem, tiek samazināta aprēķinātā renderēšanas sarežģītība, gandrīz nekādi nepasliktinoties kopējā attēla detaļās.

Metode ir īpaši efektīva, ja ainas objektu skaits ir liels un tie atrodas dažādos attālumos no kameras. Piemēram, ņemiet sporta spēli, piemēram, hokeju vai futbola simulatoru. Modeļi ar zemu rakstzīmju skaitu tiek izmantoti, ja tie atrodas tālu no kameras, un, tuvinot, modeļi tiek aizstāti ar citiem ar lielu daudzstūru skaitu. Šis piemērs ir ļoti vienkāršs, un tas parāda metodes būtību, pamatojoties uz diviem modeļa detalizācijas līmeņiem, taču neviens neuztraucas izveidot vairākus detalizācijas līmeņus, lai LOD līmeņa maiņas ietekme nebūtu pārāk pamanāma, lai detaļas pamazām "aug", tuvojoties objektam.

Papildus attālumam no kameras LOD var būt svarīgi arī citi faktori - kopējais ekrānā redzamo objektu skaits (kad rāmī ir viena vai divas rakstzīmes, tad tiek izmantoti sarežģīti modeļi, un kad 10–20, tie pārslēgties uz vienkāršākiem) vai kadru skaitu sekundē (ir noteikti FPS vērtību ierobežojumi, pie kuriem mainās detalizācijas līmenis, piemēram, kad FPS ir zemāks par 30, mēs samazinām ekrānā redzamo modeļu sarežģītību, un pie 60, gluži pretēji, palielinās). Citi iespējamie faktori, kas ietekmē detalizācijas pakāpi, ir objekta kustības ātrums (maz ticams, ka jums būs laiks apsvērt raķeti kustībā, bet gliemezis - viegli), rakstura nozīme no spēles viedokļa (ņemiet vērā) tas pats futbols - jūsu kontrolētajam spēlētāja modelim varat izmantot sarežģītāku ģeometriju un faktūras, jūs to redzat vistuvāk un visbiežāk). Tas viss ir atkarīgs no konkrētā izstrādātāja vēlmēm un iespējām. Galvenais ir nepārspīlēt, biežas un pamanāmas detaļu līmeņa izmaiņas ir kaitinošas.

Atgādināšu, ka detalizācijas pakāpe ne vienmēr attiecas tikai uz ģeometriju, šo metodi var izmantot arī citu resursu ietaupīšanai: teksturējot (lai gan video mikroshēmās jau tiek izmantota mipmapping, dažreiz ir jēga mainīt tekstūras lidojuma laikā uz citiem) ar dažādām detaļām), apgaismojuma paņēmieni (tuvi objekti tiek izgaismoti, izmantojot sarežģītu algoritmu, bet attālie - izmantojot vienkāršu), teksturēšanas paņēmieni (sarežģīta paralakses kartēšana tiek izmantota tuvām virsmām, un parasta kartēšana tiek izmantota tālu) utt. .

Nav tik viegli parādīt piemēru no spēles, no vienas puses, zināmā mērā LOD tiek izmantots gandrīz katrā spēlē, no otras puses, ne vienmēr ir iespējams to skaidri parādīt, pretējā gadījumā nebūtu lielas jēgas pašā LOD.

Bet šajā piemērā joprojām ir skaidrs, ka tuvākajam automašīnas modelim ir maksimāla detalizācija, nākamās divas vai trīs automašīnas arī ir ļoti tuvu šim līmenim, un visām tālākajām ir redzami vienkāršojumi, šeit ir tikai vissvarīgākie: nav atpakaļskata spoguļu, numura zīmju, vējstikla tīrītāju u.c. papildu apgaismojuma iekārtas. Un no tālākā modeļa uz ceļa nav pat ēnas. Šis ir detalizācijas algoritma līmenis darbībā.

Globālais apgaismojums

Ir grūti simulēt ainas reālistisku apgaismojumu, katrs gaismas stars patiesībā tiek atkārtoti atspoguļots un lauzts, šo atstarojumu skaits nav ierobežots. Un 3D atveidojumā atstarojumu skaits lielā mērā ir atkarīgs no projektēšanas iespējām, jebkurš ainas aprēķins ir vienkāršots fiziskais modelis, un iegūtais attēls ir tikai tuvs reālismam.

Apgaismošanas algoritmus var iedalīt divos modeļos: tiešais vai vietējais apgaismojums un globālais apgaismojums (tiešais vai vietējais apgaismojums un globālais apgaismojums). Vietējā apgaismojuma modelī tiek izmantots tiešā apgaismojuma aprēķins, gaisma no gaismas avotiem līdz pirmajam gaismas krustojumam ar necaurspīdīgu virsmu, objektu mijiedarbība netiek ņemta vērā. Lai gan šis modelis cenšas to kompensēt, pievienojot fona vai vienmērīgu (apkārtējo) apgaismojumu, tas ir vienkāršākais tuvinājums, ļoti vienkāršots apgaismojums no visiem netiešajiem gaismas avotiem, kas nosaka objektu apgaismojuma krāsu un intensitāti, ja nav tiešie gaismas avoti.

Tā pati staru izsekošana aprēķina virsmu apgaismojumu tikai ar tiešiem gaismas avotu stariem, un jebkurai virsmai, lai tā būtu redzama, jābūt tieši apgaismotai ar gaismas avotu. Ar to nepietiek, lai sasniegtu fotoreālistiskus rezultātus, papildus tiešam apgaismojumam ir jāņem vērā sekundārais apgaismojums, ko rada stari, kas atstarojas no citām virsmām. Reālajā pasaulē gaismas stari tiek atstaroti no virsmām vairākas reizes, līdz tie ir pilnībā nodzisuši. Saules gaisma, kas iet caur logu, izgaismo visu telpu, lai gan stari nevar tieši sasniegt visas virsmas. Jo spožāks gaismas avots, jo vairāk reizes tas tiks atspoguļots. Atstarojošās virsmas krāsa ietekmē arī atstarotās gaismas krāsu, piemēram, sarkana siena radīs sarkanu plankumu uz blakus esoša balta objekta. Šeit ir skaidra atšķirība, aprēķins, neņemot vērā sekundāro apgaismojumu:

Globālā apgaismojuma modelī globālais apgaismojums, apgaismojums tiek aprēķināts, ņemot vērā objektu ietekmi uz otru, tiek ņemtas vērā gaismas staru vairākas atstarošanās un refrakcijas no objektu virsmām, kodīgums un pazemes izkliede. Šis modelis ļauj iegūt reālistiskāku ainu, taču sarežģī procesu, prasot ievērojami vairāk līdzekļu. Pastāv vairāki globālā apgaismojuma algoritmi, mēs ātri apskatīsim radiāciju (netiešā apgaismojuma aprēķins) un fotonu kartēšanu (globālais apgaismojuma aprēķins, pamatojoties uz fotonu kartēm, kas iepriekš aprēķinātas, izmantojot izsekošanu). Pastāv arī vienkāršotas metodes netieša apgaismojuma simulēšanai, piemēram, ainas kopējā spilgtuma mainīšana atkarībā no tajā esošo gaismas avotu skaita un spilgtuma, vai arī ap skatuvi novietotu lielu punktu gaismas izmantošana, lai simulētu atstaroto gaismu, bet tomēr tas ir tālu no reāla algoritma.

Radiācijas algoritms ir gaismas staru sekundāro atstarojumu aprēķināšanas process no vienas virsmas uz otru, kā arī no vides uz objektiem. Gaismas avotu stari tiek izsekoti, līdz to stiprums nokrītas zem noteiktā līmeņa vai stari sasniedz noteiktu atstarojumu skaitu. Šī ir izplatīta GI tehnika, aprēķinus parasti veic pirms renderēšanas, un aprēķina rezultātus var izmantot reāllaika renderēšanai. Radiācijas pamatidejas ir balstītas uz siltuma pārneses fiziku. Objektu virsmas ir sadalītas mazās zonās, ko sauc par plāksteriem, un tiek pieņemts, ka atstarotā gaisma vienmērīgi izkliedējas visos virzienos. Tā vietā, lai aprēķinātu katru gaismas staru kūli, tiek izmantota vidējā aprēķināšanas metode, sadalot gaismas plāksteros, pamatojoties uz to radīto enerģijas līmeni. Šī enerģija tiek proporcionāli sadalīta starp virsmas plankumiem.

Vēl viena metode globālā apgaismojuma aprēķināšanai, ko ierosināja Henriks Vanns Jensens, ir fotonu kartēšanas metode. Fotoniskās kartes ir vēl viens staru izsekots globālais apgaismojuma algoritms, ko izmanto, lai modelētu gaismas staru mijiedarbību ar ainas objektiem. Algoritms aprēķina staru sekundāro atstarošanos, gaismas laušanu caur caurspīdīgām virsmām, izkliedētus atstarojumus. Šī metode sastāv no punktu apgaismojuma aprēķināšanas uz virsmas divos piegājienos. Pirmais ir tieša gaismas staru izsekošana ar sekundāriem atstarojumiem, tas ir sākotnējs process, kas tiek veikts pirms galvenās renderēšanas. Šī metode aprēķina fotonu enerģiju, kas iet no gaismas avota uz ainas objektiem. Kad fotoni sasniedz virsmu, fotona krustošanās punkts, virziens un enerģija tiek saglabāti kešatmiņā, ko sauc par fotonu karti. Fotoniskās kartes var saglabāt diskā vēlākai lietošanai, lai tās nebūtu jāizveido katrā kadrā. Fotonu atspulgi tiek aprēķināti, līdz darbs apstājas pēc noteikta atstarojumu skaita vai kad tiek sasniegta noteikta enerģija. Otrajā renderēšanas reizē tiek aprēķināts ainas pikseļu apgaismojums ar tiešiem stariem, ņemot vērā fotonu kartēs saglabātos datus, fotona enerģija tiek pievienota tiešā apgaismojuma enerģijai.

Globālie apgaismojuma aprēķini, kuros tiek izmantots liels skaits sekundāro atstarojumu, prasa daudz ilgāku laiku nekā tiešā apgaismojuma aprēķini. Ir metodes radio pilsētas aparatūras aprēķināšanai reālā laikā, kurās tiek izmantotas jaunākās paaudzes programmējamo video mikroshēmu iespējas, taču līdz šim ainām, kurām tiek aprēķināts reālā laika globālais apgaismojums, vajadzētu būt diezgan vienkāršām un veikt daudzus vienkāršojumus algoritmos.

Bet tas, kas tiek izmantots ilgu laiku, ir statisks iepriekš aprēķināts globālais apgaismojums, kas ir pieņemams ainām, nemainot gaismas avotu stāvokli un lielus objektus, kas spēcīgi ietekmē apgaismojumu. Galu galā globālā apgaismojuma aprēķins nav atkarīgs no novērotāja stāvokļa, un, ja ainā nemainās šādu objektu stāvoklis un gaismas avotu parametri, tad iepriekš aprēķinātās apgaismojuma vērtības var izmantot. To izmanto daudzās spēlēs, saglabājot GI aprēķinu datus gaismas karšu veidā.

Ir arī pieņemami algoritmi dinamiska globālā apgaismojuma simulēšanai. Piemēram, reāllaika lietojumprogrammās ir tik vienkārša metode, kā aprēķināt ainas netiešu apgaismojumu: vienkāršota visu objektu atveidošana ar samazinātu detalizāciju (izņemot to, par kuru tiek aprēķināts apgaismojums). -izšķirtspējas kuba karte (to var izmantot arī, lai parādītu dinamiskas atstarošanās uz objekta virsmas), pēc tam filtrējot šo tekstūru (vairākas izplūšanas filtra pārejas) un izmantojot aprēķinātās faktūras datus, lai apgaismotu šo objektu kā papildinājumu tiešai apgaismojums. Gadījumos, kad dinamiskais aprēķins ir pārāk smags, var iztikt bez statiskām radiācijas kartēm. Piemērs no spēles MotoGP 2, kas skaidri parāda pat tik vienkāršas GI imitācijas labvēlīgo ietekmi:



"itemprop =" image ">

"Kas ir ēnotāji?" Tas ir ļoti izplatīts jautājums no ziņkārīgiem spēlētājiem un iesācēju spēļu izstrādātājiem. Šajā rakstā es jums pastāstīšu par šiem šausmīgajiem ēnotājiem skaidrā un saprotamā veidā.

Es uzskatu, ka datorspēles ir dzinējspēks virzībā uz fotoreālistiskiem attēliem datorgrafikā, tāpēc parunāsim par to, kas ir “ēnotāji” videospēļu kontekstā.

Pirms parādījās pirmie grafikas paātrinātāji, visu videospēļu kadru atveidošanas darbu veica sliktais centrālais procesors.

Rāmja zīmēšana patiesībā ir diezgan parasts darbs: jums jāņem "ģeometrija" - daudzstūra modeļi (pasaule, raksturs, ierocis utt.) Un jāpārveido. Kas ir Rasterize? Viss 3D modelis sastāv no mazākajiem trijstūriem, kurus rasteris pārvērš pikseļos (tas ir, "rasterizēt" nozīmē pārvērsties pikseļos). Pēc rasterizācijas ņemiet tekstūras datus, apgaismojuma parametrus, miglu utt. Un aprēķiniet katru iegūto spēles rāmja pikseļu, kas tiks parādīts spēlētājam.

Tātad, centrālais procesors (CPU - Central Processing Unit) ir pārāk gudrs puisis, lai liktu viņam veikt šādu rutīnu. Tā vietā ir loģiski piešķirt kādu aparatūras moduli, kas noslogo CPU, lai tas varētu veikt svarīgāku intelektuālu darbu.

Šāds aparatūras modulis ir grafikas paātrinātājs vai videokarte (GPU - Graphics Processing Unit). Tagad CPU sagatavo datus un ielādē kolēģim ikdienas darbu. Ņemot vērā, ka GPU tagad nav tikai viens kolēģis, tas ir minionu kodolu pūlis, tad tas tiek galā ar šāda veida darbu uzreiz.

Bet mēs vēl neesam saņēmuši atbildi uz galveno jautājumu: Kas ir ēnotāji? Pagaidi, es tikšu pie šī.

Jauka, interesanta un tuvu fotoreālisma grafikai prasīja video karšu izstrādātājiem aparatūras līmenī ieviest daudzus algoritmus. Ēnas, gaismas, spilgtumi un tā tālāk. Šī pieeja - ar algoritmu ieviešanu aparatūrā tiek saukta par "Fiksēts cauruļvads vai cauruļvads" un tur, kur nepieciešama augstas kvalitātes grafika, tā vairs nav atrodama. Viņa vietu ieņēma programmējamais cauruļvads.

Spēlētāju lūgumi “Nāc, ienes labu grafoniju! pārsteigums! ”, spēļu izstrādātājus (un attiecīgi video karšu ražotājus) virzīja uz arvien sarežģītākiem algoritmiem. Līdz šim kādā brīdī viņiem ir pārāk maz cieto vadu aparatūras algoritmu.

Tagad ir pienācis laiks grafiskajām kartēm kļūt saprātīgākām. Tika pieņemts lēmums ļaut izstrādātājiem ieprogrammēt GPU blokus patvaļīgos cauruļvados, kas ievieš dažādus algoritmus. Tas ir, spēļu izstrādātāji, grafiskie programmētāji tagad ir spējuši rakstīt programmas videokartēm.

Un tagad, beidzot, mēs esam nonākuši pie atbildes uz mūsu galveno jautājumu.

"Kas ir ēnotāji?"

Shader (angļu valodā shader - ēnojuma programma) ir programma videokartei, kas tiek izmantota trīsdimensiju grafikā, lai noteiktu objekta vai attēla galīgos parametrus, var ietvert gaismas absorbcijas un izkliedes aprakstu, tekstūras kartēšanu, atstarošanu un refrakcija, ēnojums, virsmas pārvietošana utt. daudzi citi parametri.

Kas ir ēnotāji? Piemēram, jūs varat iegūt šo efektu, tas ir ūdens ēnotājs, kas uzklāts uz sfēras.

Grafiskais cauruļvads

Programmējamā cauruļvada priekšrocība salīdzinājumā ar tā priekšgājēju ir tā, ka tagad programmētāji var patstāvīgi izveidot savus algoritmus un neizmantot ar vadu savienotu iespēju kopumu.

Sākumā videokartes bija aprīkotas ar vairākiem specializētiem procesoriem, kas atbalsta dažādus instrukciju komplektus. Ēnotāji tika sadalīti trīs veidos atkarībā no tā, kurš procesors tos izpildīs. Bet tad videokartes sāka aprīkot ar universāliem procesoriem, kas atbalsta instrukciju komplektus visiem trim ēnotāju veidiem. Ēnotāju sadalījums tipos ir saglabāts, lai aprakstītu ēnotāja mērķi.

Papildus grafiskajiem uzdevumiem ar šādām viedajām videokartēm kļuva iespējams veikt GPU vispārējus aprēķinus (kas nav saistīti ar datorgrafiku).

Pirmo reizi pilnvērtīgs ēnotāju atbalsts parādījās GeForce 3 sērijas videokartēs, bet rudimenti tika ieviesti jau GeForce256 (reģistru apvienotāju veidā).

Shader veidi

Atkarībā no cauruļvada stadijas ēnotāji ir sadalīti vairākos veidos: virsotne, fragments (pikseļi) un ģeometriski. Un jaunākajos cauruļvadu veidos ir arī tesselācijas ēnotāji. Mēs detalizēti neapspriedīsim grafikas cauruļvadu, es joprojām domāju, vai par to rakstīt atsevišķu rakstu tiem, kas nolemj apgūt ēnotājus un grafikas programmēšanu. Ja interesē, raksti komentāros, zināšu, vai ir vērts tērēt laiku.

Vertex ēnotājs

Vertex ēnotāji veido varoņu, zāles, koku animācijas, rada viļņus uz ūdens un daudzas citas lietas. Virsotņu ēnotājā programmētājam ir pieejami dati, kas saistīti ar virsotnēm, piemēram: virsotnes koordinātas telpā, tās tekstūras koordinātas, krāsa un normāls vektors.

Ģeometriskais ēnotājs

Ģeometriskie ēnotāji spēj radīt jaunu ģeometriju, un tos var izmantot, lai izveidotu daļiņas, modificētu modeļa detaļas lidojumā, izveidotu siluetus un daudz ko citu. Atšķirībā no iepriekšējās virsotnes, viņi spēj apstrādāt ne tikai vienu virsotni, bet arī veselu primitīvu. Primitīvs var būt segments (divas virsotnes) un trīsstūris (trīs virsotnes), un, ja ir informācija par blakus esošām virsotnēm (blakus esoša angļu valoda) trīsstūrveida primitīvam, var apstrādāt līdz sešām virsotnēm.

Pikseļu ēnotājs

Pikseļu ēnotāji veic tekstūras kartēšanu, apgaismojumu un dažādus faktūras efektus, piemēram, atstarošanos, refrakciju, miglu, triecienu kartēšanu utt. Pikseļu ēnotājus izmanto arī pēcefektiem.

Pikseļu ēnotājs darbojas ar bitkartes šķēlītēm un faktūrām - tas apstrādā datus, kas saistīti ar pikseļiem (piemēram, krāsu, dziļumu, faktūras koordinātas). Pikseļu ēnotājs tiek izmantots grafikas cauruļvada pēdējā posmā, lai izveidotu attēla fragmentu.

Uz ko raksta ēnotāji?

Sākotnēji ēnotājus varēja rakstīt montāžam līdzīgā valodā, bet vēlāk bija augsta līmeņa ēnotāju valodas, kas līdzīgas C valodai, piemēram, Cg, GLSL un HLSL.

Šādas valodas ir daudz vienkāršākas nekā C, jo ar viņu palīdzību atrisinātie uzdevumi ir daudz vienkāršāki. Tipa sistēma šādās valodās atspoguļo grafikas programmētāju vajadzības. Tāpēc tie programmētājam nodrošina īpašus datu veidus: matricas, paraugu ņemšanas ierīces, vektorus utt.

RenderMan

Viss, ko mēs iepriekš apspriedām, attiecas uz reāllaika grafiku. Bet ir arī reāllaika grafika. Kāda ir atšķirība - reālā laikā - reālā laikā, tas ir, šeit un tagad - dot spēlē 60 kadrus sekundē, tas ir reālā laika process. Bet sarežģīta rāmja atveidošana progresīvai animācijai uz dažām minūtēm nav reāllaika. Būtība ir laikā.

Piemēram, mēs nevaram reālā laikā iegūt tādas kvalitātes grafiku kā Pixar studijas jaunākajās animācijas filmās. Ļoti lielas apmetuma fermas aprēķina gaismas simulācijas, izmantojot pilnīgi atšķirīgus algoritmus, kas ir ļoti dārgi, bet sniedz gandrīz fotoreālistiskus attēlus.

Super reālistiska grafika smilšu caurulē

Piemēram, paskatieties uz šo mīlo karikatūru, smilšu graudiņiem, putna spalvām, viļņiem, viss izskatās neticami reāli.

* Video var aizliegt Youtube, ja tas neatveras, google pixar sandpiper - īsa multene par drosmīgu smilšu pūķi ir ļoti mīļa un pūkaina. Pieskarsies un demonstrēs, cik forša var būt datorgrafika.

Tātad šis ir RenderMan no Pixar. Tā kļuva par pirmo shader programmēšanas valodu. RenderMan API ir de facto standarts profesionālai renderēšanai un tiek izmantots visos Pixar darbos un ārpus tā.

Noderīga informācija

Tagad jūs zināt, kas ir ēnotāji, bet bez ēnotājiem spēļu izstrādē un datorgrafikā ir arī citas ļoti interesantas tēmas, kas jūs noteikti interesēs:

  • ir metode satriecošu efektu radīšanai mūsdienu videospēlēs. Pārskata raksts un video ar apmācībām par efektu izveidi programmā Unity3d
  • - Ja jūs domājat par videospēļu attīstību kā profesionālu karjeru vai hobiju, šajā rakstā ir lielisks ieteikumu kopums "ar ko sākt", "kādas grāmatas lasīt" utt.

Ja jums ir kādi jautājumi

Kā parasti, ja jums joprojām ir kādi jautājumi, uzdodiet tos komentāros, es vienmēr atbildēšu. Es būtu ļoti pateicīgs par jebkuru laipnu vārdu vai kļūdu labošanu.

Šī apmācība palīdzēs jums instalēt ēnotājus Minecraft un tādējādi uzlabot spēļu pasauli, pievienojot dinamiskas ēnas, vēja un zāles troksni, reālistisku ūdeni un daudz ko citu.

Uzreiz jāatzīmē, ka ēnotāji sistēmu noslogo diezgan smagi, un, ja jums ir vāja vai integrēta videokarte, iesakām atturēties no šī moda instalēšanas.

Uzstādīšana sastāv no diviem posmiem, vispirms jums ir jāinstalē mod uz ēnotājiem, un pēc tam tam jāpievieno papildu ēnotāji

1. SOLIS - ēnu modifikācijas instalēšana

  1. Lejupielādējiet un instalējiet Java
  2. Uzstādīt OptiFine HD
    vai ShadersMod;
  3. Mēs izpakojam iegūto arhīvu uz jebkuru vietu;
  4. Palaidiet jar failu, jo viņš ir uzstādītājs;
  5. Programma parādīs ceļu uz spēli, ja viss ir pareizi, noklikšķiniet uz Jā, Labi, Labi;
  6. Iet uz .minecraft un izveidojiet tur mapi ēnu iepakojumi;
  7. Mēs ieejam palaidējā un redzam rindā jaunu profilu ar nosaukumu "ShadersMod", ja nē, tad atlasiet to manuāli.
  8. Tālāk jums ir jālejupielādē shaderpacks

2. SOLIS - Shaderpack uzstādīšana

  1. Lejupielādējiet jūs interesējošo shaderpack (saraksts raksta beigās)
  2. Nospiediet taustiņus WIN + R.
  3. Iet uz .minecraft / shaderpacks... Ja šādas mapes nav, tad izveidojiet to.
  4. Pārvietojiet vai izvelciet ēnojuma arhīvu uz .minecraft / shaderpacks... Ceļam vajadzētu izskatīties šādi: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [. fsh un .vsh faili iekšā]
  5. Palaidiet Minecraft un dodieties Iestatījumi> Ēnotāji... Šeit jūs redzēsit pieejamo ēnotāju sarakstu. Izvēlieties vajadzīgo
  6. Ēnotāja iestatījumos iespējojiet “tweakBlockDamage”, atspējojiet “CloudShadow” un “OldLighting”

Sonic Ether neticamie ēnotāji
Sildura ēnotāji
Chocapic13 ēnotāji
sensi277 "yShaders
MrMeep_x3 "ēnotāji
Naelego Cel Shaders
RRe36 ēnotāji
DeDelnera CUDA ēnotāji
bruceatsr44 "skābes ēnotāji
Beed28 Shaders
Ziipzaap Shader Pack
robobo1221 ēnotāji
dvv16 ēnotāji
Stazza85 super ēnotāji
hoo00 "Shaders pack B
Regi24 viļņojošie augi
Mr Butteruss ShaderPack
Detaraida satriecošā grafika par nitro ēnotājiem
Edi Shader ForALLPc
CrankerMan TME ēnotāji
Kadir Nck Shader (skate702)
Verusa ēnotāji
Knewtonwako dzīves nexus ēnotāji
CYBOX shaderpack
CrapDeShoes CloudShade Alpha
AirLoocke42 ēnotājs
CaptTatsu BSL ēnotāji
Trilitona ēnotāji
ShadersMcOfficial Bloominx Shaders (Chocapic13 "Shaders)
dotModded kontinuuma ēnotāji
Qwqx71 "Mēness ēnotāji (chocapic13" ēnotājs)

Paredzēts izpildei, izmantojot videokartes procesorus (GPU). Ēnotāji tiek apkopoti vienā no specializētajām programmēšanas valodām (sk.) Un apkopoti GPU instrukcijās.

Pieteikums

Pirms ēnotāju izmantošanas tika izmantota procesuālā tekstūras ģenerēšana (piemēram, izmantota spēlē Unreal, lai radītu animētas ūdens un uguns faktūras) un multiteksturēšana (uz kuras balstījās Quake 3 spēlē izmantotā ēnotāja valoda). Šie mehānismi nenodrošināja tādu elastību kā ēnotāji.

Līdz ar pārkonfigurējamu grafikas cauruļvadu parādīšanos kļuva iespējams veikt GPU matemātiskus aprēķinus (GPGPU). Vispazīstamākie GPGPU mehānismi ir nVidia CUDA, Microsoft DirectCompute un atvērtā koda OpenCL.

Shader veidi

Vertex ēnotāji

Virsotņu ēnotājs darbojas ar datiem, kas saistīti ar daudzskaldņu virsotnēm, piemēram, ar virsotnes (punkta) koordinātām telpā, ar faktūras koordinātām, ar virsotnes krāsu, ar pieskares vektoru, ar binormālu vektoru, ar normālu vektors. Virsotņu ēnotāju var izmantot virsotņu apskatei un perspektīvas pārveidošanai, faktūras koordinātu ģenerēšanai, apgaismojuma aprēķināšanai utt.

Vertex shader parauga kods valodā:

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

Ģeometriskie ēnotāji

Ģeometriskais ēnotājs, atšķirībā no virsotnes, spēj apstrādāt ne tikai vienu virsotni, bet arī veselu primitīvu. Primitīvs var būt segments (divas virsotnes) un trīsstūris (trīs virsotnes), un, ja ir informācija par blakus esošām virsotnēm (blakus esoša angļu valoda) trīsstūrveida primitīvam, var apstrādāt līdz sešām virsotnēm. Ģeometrijas ēnotājs spēj ģenerēt primitīvus lidojumā (neizmantojot centrālo procesoru).

Ģeometrijas ēnotāji vispirms tika izmantoti Nvidia 8 sērijas grafikas kartēs.

Pikseļu (fragmentu) ēnotāji

Pikseļu ēnotājs darbojas ar bitkartes šķēlītēm un faktūrām - tas apstrādā datus, kas saistīti ar pikseļiem (piemēram, krāsu, dziļumu, faktūras koordinātas). Pikseļu ēnotājs tiek izmantots grafikas cauruļvada pēdējā posmā, lai izveidotu attēla fragmentu.

Pikseļu ēnotāja koda paraugs valodā:

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

Priekšrocības un trūkumi

Priekšrocības:

  • iespēja apkopot jebkādus algoritmus (elastība, vienkāršošana un programmas izstrādes cikla izmaksu samazināšana, palielinot atveidoto ainu sarežģītību un reālismu);
  • palielināts izpildes ātrums (salīdzinot ar tā paša algoritma izpildes ātrumu, kas izpildīts centrālajā procesorā).

Trūkumi:

  • nepieciešamība apgūt jaunu programmēšanas valodu;
  • dažādu ražotāju dažādu GPU instrukciju komplektu esamība.

Programmēšanas valodas

Ir izveidots liels skaits shader programmēšanas valodu, lai apmierinātu dažādās tirgus vajadzības (datorgrafikai ir daudz pielietojuma jomu).

Parasti valodas, kas paredzētas ēnotāju rakstīšanai, programmētājam nodrošina īpašus datu tipus (matricas, paraugu ņemšanas ierīces, vektorus utt.), Iebūvēto mainīgo un konstantu kopumu (mijiedarbībai ar 3D API standarta funkcionalitāti).

Profesionāla izciršana

Tālāk ir norādītas ēnošanas programmēšanas valodas, kas vērstas uz maksimālas renderēšanas kvalitātes sasniegšanu. Šādās valodās materiālu īpašības tiek aprakstītas, izmantojot abstrakcijas. Tas ļauj cilvēkiem, kuriem nav īpašu programmēšanas prasmju un kuri nezina aparatūras ieviešanas specifiku, rakstīt kodu. Piemēram, mākslinieki var uzrakstīt šos ēnotājus, lai nodrošinātu "pareizo izskatu" (faktūras kartēšana, gaismas izvietojums utt.).

Parasti šādu ēnotāju apstrāde ir diezgan resursietilpīga: fotoreālistisku attēlu veidošana prasa lielu skaitļošanas jaudu. Parasti lielāko daļu aprēķinu veic lielas datoru kopas vai asmeņu sistēmas.

RenderMan Shader programmēšanas valoda, kas ieviesta Pixar RenderMan programmatūrā, bija pirmā shader programmēšanas valoda. RenderMan API, ko izstrādājis Robs Kuks un aprakstīts RenderMan saskarnes specifikācijā, ir de facto profesionālās renderēšanas standarts, ko izmanto visā Pixar darbā. OSL OSL - eng. Open Shading Language ir ēnošanas programmēšanas valoda, ko izstrādājis uzņēmums Sony Pictures Imageworks un līdzinās valodai. Tas tiek izmantots patentētajā programmā "Arnold", ko izstrādājusi "Sony Pictures Imageworks" un paredzēta renderēšanai, un bezmaksas programmā Blender, kas paredzēta trīsdimensiju datorgrafikas veidošanai. Reāllaika renderēšana GLSL GLSL atvērts GL S apsēsties L valoda) ir ēnošanas programmēšanas valoda, kas aprakstīta OpenGL standartā un balstīta uz valodas versiju, kas aprakstīta ANSI C standartā. Valoda atbalsta lielāko daļu ANSI C funkciju, atbalsta datu tipus, kurus bieži izmanto, strādājot ar trīsdimensiju grafiku (vektori, matricas). Vārds "shader" GLSL attiecas uz neatkarīgi sastādītu vienību, kas rakstīta šajā valodā. Vārds "programma" attiecas uz apkopotu ēnotāju kolekciju. Cg (eng. C priekš g rafikas) ir ēnošanas programmēšanas valoda, ko izstrādājusi nVidia kopā ar Microsoft. Valoda ir līdzīga valodai un HLSL valodai, ko izstrādājusi Microsoft un iekļauta tajā DirectX 9... Valodā tiek izmantoti tipi "int", "float", "half" (peldošā komata numurs 16 biti). Valoda atbalsta funkcijas un struktūras. Valodai ir savdabīga optimizācija “iepakotu masīvu” veidā (