Minecraft-da shaderlarni qanday o'rnatish mumkin? Shaderlar nima va minecraft-da shaderlarni qanday o'rnatish kerak Shaderlar kerak

Kirish

3D grafika olami, shu jumladan o'yinlar, atamalar bilan to'ldirilgan. Har doim ham yagona to'g'ri ta'rifga ega bo'lmagan atamalar. Ba'zan bir xil narsalar boshqacha nomlanadi va aksincha, xuddi shu effektni o'yin sozlamalarida "HDR", "Bloom", "Glow", keyin "Postprocessing" deb atash mumkin. Ko'pchilik, ishlab chiquvchilarning o'zlarining grafik dvigateliga nima o'rnatganligi bilan maqtanishidan kelib chiqib, ular aslida nimani anglatishini bilmay qolishadi.

Maqola bunday holatlarda tez-tez ishlatiladigan ushbu so'zlarning ba'zilari nimani anglatishini tushunishga yordam berish uchun mo'ljallangan. Ushbu maqola doirasida biz 3D grafikaning barcha atamalari haqida emas, balki faqat so'nggi yillarda o'yin grafik dvigatellarida ishlatiladigan o'ziga xos xususiyatlar va texnologiyalar va zamonaviy o'yinlarning grafik sozlamalari nomlari sifatida keng tarqalgan bo'lganlar haqida gapiramiz. . Boshlash uchun siz bilan tanishishingizni tavsiya qilaman.

Agar ushbu maqolada va Iskandarning maqolalarida biror narsa sizga tushunarli bo'lmasa, unda eng ertasidan boshlash mantiqan to'g'ri keladi, p. Albatta, bu maqolalar biroz eskirgan, ammo asosiy, eng boshlang'ich va muhim ma'lumotlar mavjud. Siz bilan ko'proq "yuqori darajadagi" atamalar haqida gaplashamiz. 3D real vaqtda grafika va grafik quvur liniyasi haqida asosiy tushunchaga ega bo'lishingiz kerak. Boshqa tomondan, matematik formulalar, akademik aniqlik va kodli misollarni kutmang - bu maqola umuman bu haqda emas. Shartlar

Maqolada tavsiflangan atamalar ro'yxati:

Shader

Keng ma'noda shader - bu ob'ektning sirtini vizual ravishda aniqlash uchun dastur. Bu yoritish, teksturalash, keyingi ishlov berish va hokazolarning tavsifi bo'lishi mumkin. Shaderlar Kukning soyali daraxtlari va Perlinning piksel oqimi tilidan paydo boʻlgan. RenderMan Shading tili hozirda eng mashhur hisoblanadi. Dasturlashtiriladigan shaderlar birinchi marta Pixar’ning RenderMan dasturida taqdim etilgan boʻlib, u bir necha turdagi shaderlarni belgilaydi: yorugʻlik manbasi shaderlari, sirt shaderlari, joy oʻzgartirish shaderlari, ovoz balandligi shaderlari, Bu shaderlar ko'pincha universal protsessorlar tomonidan dasturiy ta'minotda bajariladi va to'liq apparat ta'minotiga ega emas. Keyinchalik ko'plab tadqiqotchilar RenderMan-ga o'xshash tillarni tasvirlab berishdi, ammo ular allaqachon apparat tezlashtirish uchun mo'ljallangan: PixelFlow tizimi (Olano va Lastra). ), Quake Shader Language (Quake III oʻyinining grafik dvigatelida id Software tomonidan qoʻllaniladi, u koʻp oʻtishli renderlashni tasvirlaydi) va boshqalar. Peercy va uning hamkasblari bir nechta dasturlardan foydalangan holda anʼanaviy apparat arxitekturalarida tsikllar va shartlar bilan dasturlarni bajarish texnikasini ishlab chiqdilar. RenderMan shaderlari bir nechta qismlarga bo'lingan Framebuferda birlashtirilgan o'tishlar soni. Keyinchalik DirectX va OpenGL da tezlashtirilgan apparatni ko'rgan tillar paydo bo'ldi. Shaderlar real vaqtda grafik ilovalar uchun shunday moslashtirilgan.

Dastlabki video chiplari dasturlashtirilmagan va faqat oldindan dasturlashtirilgan harakatlarni (qat'iy funksiya) bajargan, masalan, yoritish algoritmi apparatda qattiq o'rnatilgan va hech narsani o'zgartirib bo'lmaydi. Keyinchalik, video chip ishlab chiqaruvchilari asta-sekin o'z chiplariga dasturlash elementlarini kiritdilar, dastlab ular juda zaif qobiliyatlar edi (NVIDIA GeForce 256 nomi bilan tanilgan NV10 allaqachon ba'zi bir ibtidoiy dasturlarga qodir edi), ular Microsoft DirectX API-da dasturiy ta'minotni qo'llab-quvvatlamadilar, ammo vaqt o'tishi bilan imkoniyatlar doimiy ravishda kengayib bormoqda. Keyingi qadam NV20 (GeForce 3) va NV2A (Microsoft Xbox o'yin konsolida ishlatiladigan video chip) uchun edi, bu DirectX API shaderlari uchun apparat ta'minotiga ega birinchi chiplarga aylandi. DirectX 8-da paydo bo'lgan Shader Model 1.0 / 1.1 versiyasi juda cheklangan edi, har bir shader (ayniqsa, piksellar uchun) uzunligi nisbatan qisqa bo'lishi va juda cheklangan ko'rsatmalar to'plamini birlashtirishi mumkin edi. Keyinchalik, Shader Model 1 (qisqacha SM1) Pixel Shaders 1.4 (ATI R200) ​​bilan takomillashtirildi, u ko'proq moslashuvchanlikni taklif qildi, lekin ayni paytda juda cheklangan imkoniyatlarga ega edi. O'sha davrdagi sheyderlar umumiy maqsadli protsessorlar uchun assembly tiliga yaqin bo'lgan assembly sheyder deb ataladigan tilda yozilgan. Uning past darajasi kod va dasturlashni tushunishda ma'lum qiyinchiliklarni keltirib chiqaradi, ayniqsa dastur kodi katta bo'lsa, chunki u zamonaviy dasturlash tillarining nafisligi va tuzilganligidan uzoqdir.

DirectX 9 da paydo bo'lgan Shader Model 2.0 (SM2) versiyasi (u shader modeli 2.0-ni qo'llab-quvvatlaydigan birinchi GPU bo'lgan ATI R300 video chipi tomonidan qo'llab-quvvatlangan) real vaqt rejimidagi shaderlarning imkoniyatlarini sezilarli darajada kengaytirdi va uzoqroq vaqtni taklif qildi. va yanada murakkab shaderlar va sezilarli darajada kengaytirilgan ko'rsatmalar to'plami. Piksel shaderlarida suzuvchi nuqtani hisoblash qobiliyati qo'shildi, bu ham katta yaxshilanish edi. DirectX 9, SM2 imkoniyatlari oldida, shuningdek, C tiliga juda o'xshash yuqori darajadagi shader tilini (HLSL) taqdim etdi. Va HLSL dasturlarini past darajadagi, apparat uchun qulay kodga aylantiruvchi samarali kompilyator. Bundan tashqari, turli xil apparat arxitekturalari uchun bir nechta profillar mavjud. Endi ishlab chiquvchi bitta HLSL shader kodini yozishi va uni DirectX yordamida foydalanuvchi tomonidan o'rnatilgan video chip uchun optimal dasturga kompilyatsiya qilishi mumkin. Shundan so'ng, NVIDIA, NV30 va NV40 chiplari chiqarildi, ular apparat shaderlarining imkoniyatlarini bir qadam oldinga oshirdi, yanada uzunroq shaderlarni qo'shdi, vertex va piksel shaderlarida dinamik o'tish imkoniyati, vertex shaderlaridan teksturalarni olish qobiliyati va boshqalar. yo'q edi, ular 2006 yil oxiriga kelib DirectX 10 da kutilmoqda ...

Umuman olganda, shaderlar har bir maxsus dasturni ishlab chiquvchilar xohlaganidek, cho'qqilarni o'zgartirish va yoritish va piksellarni alohida qayta ishlash uchun grafik quvur liniyasiga ko'plab yangi imkoniyatlar qo'shdilar. Va shunga qaramay, apparat shaderlarining imkoniyatlari ilovalarda hali to'liq ochib berilmagan va ularning imkoniyatlari har bir yangi avlod uskunasida ortib borishi bilan biz tez orada o'yin video tezlatgichlari uchun imkonsiz bo'lib tuyulgan o'sha RenderMan shaderlarining darajasini ko'ramiz. Hozirgacha apparatli video tezlatgichlar tomonidan qo'llab-quvvatlanadigan real vaqt rejimidagi shader modellarida faqat ikkita turdagi shaderlar aniqlangan: va (DirectX 9 API ta'rifida). DirectX 10 kelajakda ularga qo'shilishni va'da qilmoqda.

Vertex Shader

Vertex shaderlari - bu cho'qqilar bilan matematik operatsiyalarni bajaradigan video chiplar tomonidan bajariladigan dasturlar (cho'qqi, ular o'yinlarda 3D ob'ektlarni tashkil qiladi), boshqacha qilib aytganda, ular cho'qqilar parametrlarini va ularning yoritilishini o'zgartirish uchun dasturlashtiriladigan algoritmlarni bajarish qobiliyatini ta'minlaydi (T&L -). O'zgartirish va yoritish) ... Har bir cho'qqi bir nechta o'zgaruvchilar bilan aniqlanadi, masalan, uch o'lchovli fazodagi cho'qqining o'rni koordinatalar bilan aniqlanadi: x, y va z. Cho'qqilarni rang xarakteristikalari, tekstura koordinatalari va boshqalar bilan ham tasvirlash mumkin. Vertex shaderlari, algoritmlarga qarab, ushbu ma'lumotlarni o'z ishlari davomida o'zgartiradilar, masalan, yangi koordinatalar va / yoki rangni hisoblash va yozish. Ya'ni, vertex shaderining kirish ma'lumotlari hozirda qayta ishlanayotgan geometrik modelning bir cho'qqisi haqidagi ma'lumotlardir. Odatda bu fazoviy koordinatalar, normal, rangli komponentlar va tekstura koordinatalari. Bajarilgan dasturning natijaviy ma'lumotlari quvur liniyasining keyingi qismi uchun kirish bo'lib xizmat qiladi, rasterizator uchburchak yuzasi uchun kirish ma'lumotlarining chiziqli interpolyatsiyasini amalga oshiradi va har bir piksel uchun mos keladigan piksel shaderini bajaradi. Juda oddiy va qo'pol (lekin tushunarli, umid qilamanki) misol: vertex shader 3D shar ob'ektini olish va undan yashil kub yasash uchun cho'qqi shaderidan foydalanish imkonini beradi :).

NV20 video chipi paydo bo'lishidan oldin, ishlab chiquvchilarning ikkita yo'li bor edi: yoki cho'qqilar parametrlarini o'zgartiradigan o'z dasturlari va algoritmlaridan foydalanish, lekin keyin barcha hisob-kitoblar CPU (dasturiy ta'minot T&L) tomonidan amalga oshiriladi yoki sobit bo'lganlarga tayanadi. apparat transformatsiyasi va yoritishni qo'llab-quvvatlash bilan video chiplardagi algoritmlar (apparat T&L). Birinchi DirectX shader modeli cho'qqilarni o'zgartirish va yoritish uchun sobit funktsiyalardan to'liq dasturlashtiriladigan algoritmlarga qadar oldinga katta qadam tashladi. Masalan, terini kesish algoritmini butunlay videochiplarda bajarish mumkin bo'ldi va bundan oldin yagona imkoniyat ularni universal markaziy protsessorlarda bajarish edi. Endi, yuqorida aytib o'tilgan NVIDIA chipidan keyin ancha yaxshilangan imkoniyatlar bilan siz vertex shaderlari yordamida cho'qqilar bilan ko'p narsalarni qilishingiz mumkin (ularni yaratishdan tashqari, ehtimol) ...

Verteks shaderlari qanday va qayerda qo'llanilishiga misollar:

Pixel Shader

Piksel shaderlari tasvirdagi har bir piksel uchun rasterlash jarayonida video chip tomonidan bajariladigan dasturlar bo'lib, ular piksellarning rangi va chuqurligi qiymati (Z-bufer) ustida teksturani tanlash va/yoki matematik amallarni bajaradi. Barcha piksel shader ko'rsatmalari geometriyani o'zgartirish va yoritish operatsiyalari tugallangandan so'ng piksel piksel bajariladi. O'z ishi natijasida piksel shaderi piksel rangining yakuniy qiymatini va grafik quvur liniyasining keyingi bosqichi uchun Z-qiymatini, aralashtirishni ishlab chiqaradi. Piksel shaderining eng oddiy misolini keltirish mumkin: oddiy multitekstura, shunchaki ikkita teksturani aralashtirish (masalan, diffuz va yorug'lik xaritasi) va hisoblash natijasini pikselga yuklash.

Piksel shaderlari uchun apparat qo'llab-quvvatlovchi video chiplari paydo bo'lishidan oldin, ishlab chiquvchilar faqat an'anaviy multitekstura va alfa-aralashtirish imkoniyatlariga ega edilar, bu ko'plab vizual effektlar imkoniyatlarini sezilarli darajada cheklab qo'ydi va hozir mavjud bo'lganlarning ko'pini bajarishga imkon bermadi. Va agar geometriya bilan dasturli ravishda boshqa biror narsa qilish mumkin bo'lsa, piksellar bilan - yo'q. DirectX ning dastlabki versiyalari (7.0 gacha) har doim barcha hisob-kitoblarni vertikal ravishda bajargan va so'nggi versiyalarda piksel boshiga yoritish uchun juda cheklangan funksiyalarni taklif qilgan (EMBM - atrof-muhit bump xaritasini va DOT3 ni eslang). Piksel shaderlari ishlab chiquvchi tomonidan dasturlashtirilgan materiallardan foydalangan holda har qanday yuzani pikselma-bosqich yoritish imkonini berdi. NV20-da paydo bo'lgan piksel shaderlari 1.1 (DirectX ma'nosida) nafaqat multiteksturani, balki yana ko'p narsalarni ham amalga oshirishi mumkin edi, garchi SM1-dan foydalanadigan o'yinlarning aksariyati oddiygina ko'p sirtlarda an'anaviy multiteksturadan foydalangan, yanada murakkab piksel shaderlarini faqat yuzalarning bir qismida amalga oshirgan. turli xil maxsus effektlarni yaratish uchun (hamma biladiki, suv hali ham o'yinlarda piksel shaderlaridan foydalanishning eng keng tarqalgan namunasidir). Endi, SM3 va ularni qo'llab-quvvatlaydigan video chiplar paydo bo'lgandan so'ng, piksel shleyderlarining imkoniyatlari ba'zi cheklovlar bilan bo'lsa-da, hatto raytracingga ruxsat berish uchun o'sdi.

Piksel shaderlaridan foydalanishga misollar:

Protsessual teksturalar

Protsessual teksturalar matematik formulalar bilan tasvirlangan teksturalardir. Bunday teksturalar videoxotirada joy egallamaydi, ular piksel sheyderi tomonidan "parvozda" yaratiladi, ularning har bir elementi (teksel) mos keladigan shader buyruqlarini bajarish natijasida olinadi. Eng keng tarqalgan protsessual teksturalar: turli xil shovqin turlari (masalan, fraktal shovqin), yog'och, suv, lava, tutun, marmar, olov va boshqalar, ya'ni matematik jihatdan nisbatan sodda tarzda tasvirlanishi mumkin bo'lganlar. Protsessual teksturalar, shuningdek, matematik formulalarni ozgina o'zgartirish bilan jonlantirilgan teksturalardan foydalanishga imkon beradi. Masalan, shu tarzda yaratilgan bulutlar dinamikada ham, statikada ham juda yaxshi ko'rinadi.

Protsessual teksturalarning afzalliklari, shuningdek, har bir tekstura uchun cheksiz darajadagi tafsilotlarni o'z ichiga oladi, oddiygina piksellanish bo'lmaydi, tekstura har doim uni ko'rsatish uchun zarur bo'lgan o'lchamga muvofiq hosil bo'ladi. Animatsiya ham katta qiziqish uyg'otadi, uning yordami bilan oldindan hisoblangan animatsion teksturalardan foydalanmasdan, suvda to'lqinlar yaratishingiz mumkin. Bunday teksturalarning yana bir ortiqcha tomoni shundaki, ular mahsulotda qanchalik ko'p ishlatilsa, rassomlar uchun (dasturchilar uchun ko'proq bo'lsa ham) muntazam teksturalarni yaratish uchun shunchalik kamroq ish.

Afsuski, protsessual teksturalar hali o'yinlarda to'g'ri qo'llanilmagan, haqiqiy ilovalarda oddiy teksturani yuklash hali ham oson, video xotira hajmi keskin o'sib bormoqda, eng zamonaviy tezlatgichlarda ular allaqachon 512 megabayt ajratilgan videoni o'rnatgan. xotira, bu narsa qarz olishdan ko'ra ko'proq kerak. Bundan tashqari, ular ko'pincha buning aksini qiladilar - piksel shaderlarida matematikani tezlashtirish uchun qidirish jadvallari (LUT) - hisob-kitoblar natijasida olingan oldindan hisoblangan qiymatlarni o'z ichiga olgan maxsus teksturalardan foydalaniladi. Har bir piksel uchun bir nechta matematik ko'rsatmalarni hisoblamaslik uchun ular shunchaki teksturadan oldindan hisoblangan qiymatlarni o'qiydilar. Ammo qanchalik ko'p e'tibor matematik hisob-kitoblarga qaratilishi kerak bo'lsa, bir xil yangi avlod ATI video chiplarini oling: RV530 va R580, har 4 va 16 tekstura birligi uchun mos ravishda 12 va 48 pikselli protsessorlarga ega. Bundan tashqari, agar biz 3D teksturalar haqida gapiradigan bo'lsak, chunki agar ikki o'lchovli teksturalar tezlatgichning lokal xotirasiga hech qanday muammosiz joylashtirilsa, 3D teksturalar undan ko'proq narsani talab qiladi.

Protsessual teksturalarga misollar:

Bump xaritalash / Spektula bump xaritalash

Bumpmapping - bu katta hisoblash xarajatlari va geometriya o'zgarishlarisiz tekis yuzada nosimmetrikliklar (yoki mikrorelefni modellashtirish) taqlid qilish usuli. Sirtdagi har bir piksel uchun yorug'likni hisoblash bumpmap deb ataladigan maxsus balandlik xaritasidagi qiymatlar asosida amalga oshiriladi. Bu odatda 8 bitli qora va oq tekstura bo'lib, tekstura rangi qiymatlari oddiy teksturalar kabi ustiga qo'yilmaydi, lekin sirtning pürüzlülüğünü tasvirlash uchun ishlatiladi. Har bir teksselning rangi mos keladigan relyef nuqtasi balandligini belgilaydi, yuqori qiymatlar asl yuzadan yuqoriroq balandlikni va pastroq qiymatlar mos ravishda pastroq degan ma'noni anglatadi. Yoki aksincha.

Nuqtaning yorug'lik darajasi yorug'lik nurlarining tushish burchagiga bog'liq. Oddiy va yorug'lik nurlari orasidagi burchak qanchalik kichik bo'lsa, sirtdagi nuqtaning yoritilishi shunchalik katta bo'ladi. Ya'ni, agar siz tekis sirtni olsangiz, unda har bir nuqtada normalar bir xil bo'ladi va yorug'lik ham bir xil bo'ladi. Va agar sirt notekis bo'lsa (aslida deyarli barcha sirtlar haqiqatda), unda har bir nuqtada normalar boshqacha bo'ladi. Va yorug'lik boshqacha, bir nuqtada u ko'proq, boshqasida - kamroq bo'ladi. Demak, bumpmapping printsipi - ko'pburchakning turli nuqtalari uchun tartibsizliklarni taqlid qilish uchun piksel boshiga yoritishni hisoblashda hisobga olinadigan sirt normalari o'rnatiladi. Natijada, sirtning yanada tabiiy tasviri olinadi, bumpmapping modelning geometrik murakkabligini oshirmasdan, g'ishtlardagi nosimmetrikliklar, teridagi teshiklar va boshqalar kabi sirtlarga batafsilroq ma'lumot beradi, chunki hisob-kitoblar quyidagi vaqtda amalga oshiriladi. piksel darajasi. Bundan tashqari, yorug'lik manbasining pozitsiyasi o'zgarganda, bu nosimmetrikliklar yoritilishi to'g'ri o'zgaradi.

Albatta, cho'qqilarni yoritish hisoblash jihatidan ancha sodda, ammo u juda noreal ko'rinadi, ayniqsa nisbatan past poli geometriyada, har bir piksel uchun rang interpolatsiyasi cho'qqilar uchun hisoblangan qiymatlardan kattaroq qiymatlarni takrorlay olmaydi. Ya'ni, uchburchakning o'rtasida joylashgan piksellar cho'qqi yaqinidagi bo'laklardan yorqinroq bo'lishi mumkin emas. Binobarin, yorug'likning keskin o'zgarishi bo'lgan joylar, masalan, sirtga juda yaqin bo'lgan porlash va yorug'lik manbalari jismoniy jihatdan noto'g'ri ko'rsatiladi va bu ayniqsa dinamikada sezilarli bo'ladi. Albatta, muammoni qisman modelning geometrik murakkabligini oshirish, uni ko'proq cho'qqilar va uchburchaklarga bo'lish orqali hal qilish mumkin, ammo piksel pikselli yoritish eng yaxshi variantdir.

Davom etish uchun siz yorug'likning tarkibiy qismlarini esga olishingiz kerak. Sirt nuqtasining rangi sahnadagi barcha yorug'lik manbalaridan (ideal holda, ko'pchilik tomonidan e'tibordan chetda qoladigan) atrof-muhit, tarqoq va aylanuvchi komponentlarning yig'indisi sifatida hisoblanadi. Har bir yorug'lik manbasidan ushbu qiymatga hissa qo'shish yorug'lik manbai va sirtdagi nuqta orasidagi masofaga bog'liq.

Yoritish komponentlari:

Keling, bunga ba'zi zarba xaritalarini qo'shamiz:

Yoritishning bir xil (atrof-muhit) komponenti bu sahnaning har bir nuqtasi uchun taxminiy, "dastlabki" yoritish bo'lib, unda barcha nuqtalar teng ravishda yoritiladi va yorug'lik boshqa omillarga bog'liq emas.
Yorug'likning diffuz komponenti yorug'lik manbasining holatiga va normal sirtga bog'liq. Ushbu yoritish komponenti ob'ektning har bir cho'qqisi uchun farq qiladi, bu ularga hajm beradi. Nur endi sirtni bir xil soya bilan to'ldirmaydi.
Yoritishning aynali komponenti sirtdan yorug'lik nurlarining aks etishi sifatida namoyon bo'ladi. Uni hisoblash uchun yorug'lik manbai va normal joylashuv vektoriga qo'shimcha ravishda yana ikkita vektor qo'llaniladi: qarash yo'nalishi vektori va aks ettirish vektori. Specular yoritish modeli birinchi marta Phong Bui-Tong tomonidan taklif qilingan. Bu chaqnashlar tasvirning realizmini sezilarli darajada oshiradi, chunki noyob haqiqiy yuzalar yorug'likni aks ettirmaydi, shuning uchun aynali komponent juda muhimdir. Ayniqsa, harakatda, chunki porlash darhol kameraning yoki ob'ektning o'zini o'zgartirishni ko'rsatadi. Keyinchalik, tadqiqotchilar yorug'lik energiyasining taqsimlanishi, uning materiallar tomonidan so'rilishi va tarqoq komponent shaklida tarqalishini hisobga olgan holda, yanada murakkabroq (Blinn, Kuk-Torrance, Ward) ushbu komponentni hisoblashning boshqa usullarini o'ylab topdilar.

Shunday qilib, Specular Bump Mapping shu tarzda olinadi:

Keling, xuddi shu narsani Call of Duty 2 o'yini misolida ko'rib chiqaylik:


Rasmning birinchi fragmenti umuman bumpmappingsiz () tasvirlangan, ikkinchisi (yuqori o'ngda) aynasiz komponentsiz, uchinchisi o'yinda ishlatiladigan oddiy kattalikdagi aynali komponent bilan va oxirgisi , o'ngdan pastdan, maksimal mumkin bo'lgan aynali komponent bilan.

Birinchi apparat ilovasiga kelsak, bumpmappingning ba'zi turlari (Emboss Bump Mapping) NVIDIA Riva TNT chiplariga asoslangan video kartalar davrida qo'llanila boshlandi, ammo o'sha davrning texnikasi juda ibtidoiy edi va keng qo'llanilmadi. Keyingi ma'lum bo'lgan turi Environment Mapped Bump Mapping (EMBM) edi, lekin o'sha paytda faqat Matrox video kartalari DirectX-da apparat yordamiga ega edi va yana foydalanish juda cheklangan edi. Keyin Dot3 Bump Mapping paydo bo'ldi va o'sha davrdagi video chiplari (GeForce 256 va GeForce 2) bunday matematik algoritmni to'liq bajarish uchun uchta o'tishni talab qildi, chunki ular bir vaqtning o'zida ishlatiladigan ikkita tekstura bilan cheklangan. NV20 (GeForce3) dan boshlab, piksel shaderlari yordamida bir o'tishda xuddi shu narsani qilish mumkin bo'ldi. Yana ko'proq. kabi samaraliroq usullardan foydalana boshladilar.

O'yinlarda bumpmappingdan foydalanishga misollar:


Deplasman xaritalash - bu 3D ob'ektlarga tafsilotlarni qo'shish usuli. Bumpmapping va boshqa piksel boshiga usullardan farqli o'laroq, balandlik xaritalari bilan faqat nuqtaning yoritilishi to'g'ri modellashtirilgan bo'lsa, lekin uning kosmosdagi holati o'zgarmasa, bu faqat sirt murakkabligi oshgani haqidagi tasavvurni beradi, joy almashish xaritalari sizga olish imkonini beradi. Cheklovsiz cho'qqilar va ko'pburchaklardan haqiqiy murakkab 3D ob'ektlar. piksel boshiga usullarga xosdir. Ushbu usul uchburchaklarning uchlarini joy almashish xaritalaridagi qiymatlar asosida ularni normallashtirish orqali o'zgartiradi. O'zgartirish xaritasi odatda qora va oq tekstura bo'lib, undagi qiymatlar ob'ekt yuzasidagi har bir nuqtaning balandligini aniqlash uchun ishlatiladi (qiymatlar 8 bitli yoki 16 bitli raqamlar sifatida saqlanishi mumkin) , bumpmapga o'xshaydi. Adirlar va vodiylar bilan relef yaratish uchun ko'pincha joy almashish xaritalari qo'llaniladi (bu holda ular balandlik xaritalari deb ham ataladi). Er relyefi ikki oʻlchovli siljish xaritasi bilan tasvirlanganligi sababli, agar kerak boʻlsa, uni deformatsiya qilish nisbatan oson, chunki buning uchun faqat siljish xaritasini oʻzgartirish va uning asosida keyingi kadrda sirtni koʻrsatish kerak boʻladi.

Suratda joy almashish xaritalari qoplamasidan foydalangan holda landshaft yaratish aniq ko'rsatilgan. Dastlab, 4 ta burchak va 2 ta ko'pburchak ishlatilgan, natijada landshaftning to'liq huquqli qismi paydo bo'ldi.

Deplasman xaritalarini qoplashning katta afzalligi nafaqat sirtga tafsilotlarni qo'shish qobiliyati, balki ob'ektni deyarli to'liq yaratishdir. Koʻproq choʻqqi va koʻpburchaklarga boʻlingan (mozali) past koʻpli obyekt olinadi. Keyin mozaika natijasida hosil bo'lgan cho'qqilar siljish xaritasida o'qilgan qiymatga asoslanib, normal bo'ylab siljiydi. Tegishli joy almashish xaritasidan foydalanib, biz oddiy ob'ektdan murakkab 3D ob'ektga erishamiz:


Tessellation tomonidan yaratilgan uchburchaklar soni siljish xaritasi bilan belgilangan barcha tafsilotlarni olish uchun etarlicha katta bo'lishi kerak. Ba'zan qo'shimcha uchburchaklar N-yamoqlar yoki boshqa usullar yordamida avtomatik ravishda yaratiladi. Tegishli pikselli yorug'lik etarli bo'lgan joylarda nozik tafsilotlarni yaratish uchun siljish xaritalari bo'rtma xaritalash bilan birgalikda qo'llaniladi.

Deplasman xaritasi birinchi marta DirectX 9.0 da qo'llab-quvvatlandi. Bu joy almashish xaritalash texnikasini qo'llab-quvvatlaydigan ushbu APIning birinchi versiyasi edi. DX9 ikki turdagi joy almashish xaritasini qo'llab-quvvatlaydi, filtrlangan va oldindan namunali. Birinchi usul unutilgan MATROX Parhelia video chipi, ikkinchisi esa ATI RADEON 9700 tomonidan qo'llab-quvvatlandi. Filtrlangan usul joy almashish xaritalari uchun mip-darajalardan foydalanish va ular uchun uch chiziqli filtrlashni qo'llash imkonini berishi bilan ajralib turadi. Bu usulda har bir cho'qqi uchun cho'qqidan kameragacha bo'lgan masofaga qarab siljish xaritasining mip darajasi tanlanadi, ya'ni detallar darajasi avtomatik ravishda tanlanadi. Bu uchburchaklar taxminan bir xil o'lchamda bo'lganda, sahnaning deyarli teng bo'linishiga erishadi.

Siqilish xaritasini asosan geometriyani siqish usuli sifatida ko'rib chiqish mumkin; joy almashish xaritalaridan foydalanish 3D modeldagi ma'lum darajadagi tafsilotlar uchun zarur bo'lgan xotira miqdorini kamaytiradi. Katta hajmli geometriya ma'lumotlari oddiy 2D joy almashish teksturalari bilan almashtiriladi, odatda 8-bit yoki 16-bit. Bu geometriya ma'lumotlarini video chipga etkazish uchun zarur bo'lgan xotira miqdori va tarmoqli kengligini kamaytiradi va bu cheklovlar bugungi kun tizimlaridagi asosiy cheklovlardan biridir. Shu bilan bir qatorda, teng tarmoqli kengligi va saqlash talablari bilan, joy almashish xaritasi ancha murakkab geometrik 3D modellarni yaratishga imkon beradi. O'nlab yoki yuz minglab uchburchaklar o'rniga minglab birliklar ishlatilsa, unchalik murakkab bo'lmagan modellardan foydalanish ularning animatsiyasini tezlashtirishga imkon beradi. Yoki mato simulyatsiyasi kabi murakkabroq murakkab algoritm va usullarni qo'llash orqali uni yaxshilang.

Yana bir afzallik shundaki, joy almashish xaritalaridan foydalanish murakkab ko'pburchakli 3D to'rlarni bir nechta 2D teksturalarga aylantiradi, ularni manipulyatsiya qilish osonroq. Masalan, tashkilot uchun siz joy o'zgartirish xaritalarini joylashtirish uchun muntazam mip-mappingdan foydalanishingiz mumkin. Bundan tashqari, uch o'lchamli to'rlarni siqish uchun nisbatan murakkab algoritmlar o'rniga siz to'qimalarni siqishning odatiy usullaridan, hatto JPEG-ga o'xshash usullardan ham foydalanishingiz mumkin. Va 3D ob'ektlarini protsessual yaratish uchun siz 2D teksturalar uchun odatiy algoritmlardan foydalanishingiz mumkin.

Ammo joy almashish xaritalari ham ba'zi cheklovlarga ega, ularni barcha holatlarda qo'llash mumkin emas. Misol uchun, juda ko'p nozik tafsilotlarga ega bo'lmagan silliq ob'ektlar standart to'rlar yoki Bezier egri chiziqlari kabi boshqa yuqori darajadagi sirtlar sifatida yaxshiroq ifodalanadi. Boshqa tomondan, daraxtlar yoki o'simliklar kabi juda murakkab modellarni almashtirish xaritalari bilan ifodalash ham oson emas. Ulardan foydalanish qulayligi bilan bog'liq muammolar ham mavjud, bu deyarli har doim ixtisoslashtirilgan kommunal xizmatlarni talab qiladi, chunki to'g'ridan-to'g'ri siljish xaritalarini yaratish juda qiyin (agar biz oddiy ob'ektlar, masalan, landshaft haqida gapirmasak). Ko'chish xaritalarining ko'pgina o'ziga xos muammolari va cheklovlari ularniki bilan bir xil, chunki bu ikki usul o'xshash g'oyaning ikki xil ifodasidir.

Haqiqiy o'yinlardan misol sifatida men NVIDIA NV40 video chiplari va Shader Model 3.0 da paydo bo'lgan vertex shaderdan tekstura namunalaridan foydalanadigan o'yinni keltiraman. Vertex teksturasi to'liq GPU tomonidan amalga oshiriladigan siljish xaritalarini qoplashning oddiy usuliga, mozaikasiz (ko'proq uchburchaklarga bo'linish) qo'llanilishi mumkin. Bunday algoritmdan foydalanish cheklangan, ular xaritalar dinamik bo'lsagina ma'noga ega bo'ladi, ya'ni ular jarayonda o'zgaradi. Masalan, bu Pacific Fighters o'yinida amalga oshiriladigan katta suv yuzalarining tasviri:


Normalmapping - bu yuqorida tavsiflangan bumpmapping texnikasining takomillashtirilgan versiyasi, uning kengaytirilgan versiyasi. Bumpmapping 1978 yilda Blinn tomonidan ishlab chiqilgan bo'lib, u erda sirt normalari bu er xaritasi usuli bilan bo'rtma xaritalardagi ma'lumotlarga asoslangan holda o'zgartiriladi. Bumpmapping faqat sirt nuqtalari uchun mavjud normani o'zgartirsa, normal xaritalash maxsus tayyorlangan oddiy xaritadan ularning qiymatlarini olish orqali normalarni to'liq almashtiradi. Ushbu xaritalar odatda RGB rangli komponentlar sifatida taqdim etilgan oldindan hisoblangan normal qiymatlarga ega bo'lgan teksturalardir (ammo oddiy xaritalar uchun maxsus formatlar, shu jumladan siqilganlar ham mavjud), 8-bitli qora-qora va-dan farqli o'laroq. bumpmappingdagi oq balandlik xaritalari.

Umuman olganda, bumpmapping singari, u ham nisbatan past geometrik murakkablikdagi modellarga aniqroq geometriyadan foydalanmasdan, shunchaki ilg'orroq tafsilotlarni qo'shishning "arzon" usuli hisoblanadi. Texnikaning eng qiziqarli qo'llanilishidan biri yuqori geometrik murakkablikdagi bir xil modelni qayta ishlash natijasida olingan oddiy xaritalar yordamida past poli modellarning tafsilotlarini sezilarli darajada oshirishdir. Oddiy xaritalar bumpmappingga qaraganda sirtning batafsil tavsifini beradi va sizga murakkabroq shakllarni ko'rsatishga imkon beradi. Juda batafsil ob'ektlardan ma'lumot olish g'oyalari o'tgan asrning 90-yillari o'rtalarida aytilgan, ammo keyin u foydalanish haqida edi. Keyinchalik, 1998 yilda oddiy xaritalar ko'rinishidagi tafsilotlarni yuqori poli modellardan past poliga o'tkazish g'oyalari taqdim etildi.

Oddiy xaritalar ko'p sonli ko'pburchaklarni ishlatishdan ko'ra batafsil sirt ma'lumotlarini saqlashning samarali usulini ta'minlaydi. Ularning yagona jiddiy cheklovi shundaki, ular katta detallar uchun juda mos emas, chunki oddiy xaritalash aslida ko'pburchaklarni qo'shmaydi yoki ob'ekt shaklini o'zgartirmaydi, u faqat uning ko'rinishini yaratadi. Bu piksel darajasidagi yoritish hisob-kitoblariga asoslangan tafsilotlarning simulyatsiyasi. Ob'ektning haddan tashqari ko'pburchaklarida va sirtning katta burchakli burchaklarida bu juda sezilarli. Shuning uchun, oddiy xaritalashni qo'llashning eng oqilona usuli - bu ob'ektning asosiy shaklini saqlab qolish uchun past poli modelni etarlicha batafsil qilish va nozik tafsilotlarni qo'shish uchun oddiy xaritalardan foydalanish.

Oddiy xaritalar odatda modelning ikkita versiyasidan, past va yuqori polidan yaratiladi. Past poli modeli minimal geometriyadan, ob'ektning asosiy shakllaridan iborat va yuqori poli modeli maksimal tafsilotlar uchun kerak bo'lgan hamma narsani o'z ichiga oladi. Keyin, maxsus yordam dasturlari yordamida ular bir-biri bilan taqqoslanadi, farq hisoblab chiqiladi va oddiy xarita deb ataladigan teksturada saqlanadi. Uni yaratishda siz qo'shimcha ravishda yuqori poli modelda (terining teshiklari, boshqa kichik depressiyalar) modellashtirilishi mumkin bo'lmagan juda kichik detallar uchun zarba xaritasidan foydalanishingiz mumkin.

Oddiy xaritalar dastlab oddiy RGB teksturalari sifatida tasvirlangan, bunda R, G va B rang komponentlari (0 dan 1 gacha) X, Y va Z koordinatalari sifatida talqin etiladi. Oddiy xaritadagi har bir teksel sirt nuqtasining normali sifatida ifodalanadi. Oddiy xaritalar ikki xil bo'lishi mumkin: koordinatalar model fazosida (umumiy koordinatalar tizimi) yoki tangens fazoda (ruscha atama "tangens fazo", uchburchakning mahalliy koordinata tizimi). Ikkinchi variant tez-tez ishlatiladi. Oddiy xaritalar model fazosida taqdim etilganda, ular uchta komponentga ega bo'lishi kerak, chunki barcha yo'nalishlar ifodalanishi mumkin va mahalliy koordinatalar tizimida, tangens fazoda ikkita komponent bilan ishlashingiz mumkin, uchinchisini esa piksel shaderida olishingiz mumkin. .

Haqiqiy vaqt rejimidagi zamonaviy ilovalar hali ham tasvir sifati bo'yicha oldindan tayyorlangan animatsiyadan ancha ustundir, bu birinchi navbatda yorug'lik sifati va sahnalarning geometrik murakkabligi bilan bog'liq. Haqiqiy vaqtda hisoblangan cho'qqilar va uchburchaklar soni cheklangan. Shuning uchun geometriya miqdorini kamaytirish usullari juda muhimdir. Oddiy xaritalashdan oldin bir nechta bunday usullar ishlab chiqilgan, ammo past poli modellar hatto bumpmapping bilan ham murakkabroq modellarga qaraganda ancha yomonroqdir. Oddiy xaritalashning bir nechta kamchiliklari bo'lsa-da (eng aniq - model past-poli bo'lib qolishi sababli, bu uning burchak chegaralaridan osongina ko'rinadi), yakuniy ko'rsatish sifati sezilarli darajada yaxshilanadi va modellarning geometrik murakkabligi past bo'ladi. So'nggi paytlarda ushbu texnikaning ommabopligi va uning barcha mashhur o'yin dvigatellarida qo'llanilishi aniq ko'rindi. Bu ajoyib natija sifati va bir vaqtning o'zida modellarning geometrik murakkabligi uchun talablarning kamayishi kombinatsiyasi bilan bog'liq. Oddiy xaritalash texnikasi endi deyarli hamma joyda qo'llaniladi, barcha yangi o'yinlar uni imkon qadar keng qo'llaydi. Oddiy xaritalashdan foydalanadigan mashhur kompyuter o'yinlarining qisqacha ro'yxati: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Ularning barchasi o'tmishdagi o'yinlardan ancha yaxshi ko'rinadi, jumladan, normal xaritalardan foydalanish.

Ushbu texnikadan foydalanishning faqat bitta salbiy oqibati bor - to'qimalarning hajmini oshirish. Axir, oddiy xarita ob'ektning qanday ko'rinishiga kuchli ta'sir qiladi va u etarlicha katta piksellar soniga ega bo'lishi kerak, shuning uchun video xotira va uning o'tkazish qobiliyatiga bo'lgan talablar ikki barobar ortadi (siqilmagan oddiy xaritalarda). Ammo hozirda 512 megabayt mahalliy xotiraga ega video kartalar allaqachon ishlab chiqarilmoqda, uning tarmoqli kengligi doimiy ravishda o'sib bormoqda, oddiy xaritalar uchun maxsus siqish usullari ishlab chiqilgan, shuning uchun bu kichik cheklovlar juda muhim emas, aslida. Oddiy xaritalashning ta'siri ancha katta bo'lib, nisbatan past poli modellardan foydalanishga imkon beradi, geometrik ma'lumotlarni saqlash uchun xotira talablarini kamaytiradi, ish faoliyatini yaxshilaydi va juda munosib vizual natija beradi.

Parallaks xaritalash / Ofset xaritalash

1984-yilda ishlab chiqilgan oddiy xaritalash, 1999-yilda Olivera va Bishop tomonidan kiritilgan Relief teksturali xaritalashdan keyin. Bu chuqurlik haqidagi ma'lumotlarga asoslangan to'qimalarni xaritalash texnikasi. Usul o'yinlarda qo'llanilmadi, ammo uning g'oyasi parallaks xaritalash bo'yicha ishlarni davom ettirishga va uni takomillashtirishga yordam berdi. Kaneko 2001 yilda parallaks effektini piksel bo'yicha ko'rsatishning birinchi samarali usuli bo'lgan paralaks xaritalashni taqdim etdi. 2004 yilda Welsh dasturlashtiriladigan video chiplarida parallaks xaritalashdan foydalanishni namoyish etdi.

Bu usul, ehtimol, eng turli nomlarga ega. Men uchrashganlarimni sanab o'taman: Parallaks xaritasi, Ofset xaritasi, Virtual joy almashish xaritasi, Piksel boshiga joy almashish xaritasi. Birinchi sarlavha maqolada qisqalik uchun ishlatilgan.
Parallaks xaritalash - bu aniq xaritalash va oddiy xaritalash usullariga yana bir muqobil bo'lib, bu sizga sirt tafsilotlari haqida ko'proq ma'lumot beradi, 3D yuzalarning yanada tabiiy ko'rinishini, shuningdek, ortiqcha ishlash jazosisiz beradi. Ushbu uslub bir vaqtning o'zida siljish xaritasiga ham, oddiy xaritalashga ham o'xshaydi, u o'rtada. Usul, shuningdek, asl geometrik modelga qaraganda ko'proq sirt tafsilotlarini ko'rsatish uchun mo'ljallangan. Bu oddiy xaritalashga o'xshaydi, lekin farq shundaki, usul tekstura koordinatalarini o'zgartirish orqali tekstura xaritasini buzadi, shuning uchun sirtga turli burchaklardan qaraganingizda, u qavariq ko'rinadi, garchi haqiqatda sirt tekis va o'zgarmaydi. . Boshqacha qilib aytadigan bo'lsak, Parallax Mapping - bu nuqtai nazarning o'zgarishiga qarab, sirt nuqtalarining o'zgarishi ta'sirini yaqinlashish usuli.

Texnika tekstura koordinatalarini o'zgartiradi (shuning uchun texnika ba'zan ofset xaritalash deb ataladi), shunda sirt yanada hajmli ko'rinadi. Usulning g'oyasi ko'rish vektori sirtni kesishgan nuqtaning tekstura koordinatalarini qaytarishdir. Bu balandlik xaritasi uchun nurlarni kuzatishni (nurlarni kuzatish) talab qiladi, lekin agar u juda ko'p o'zgaruvchan qiymatlarga ega bo'lmasa ("silliq" yoki "silliq"), u holda yaqinlashuvdan voz kechish mumkin. Bu usul tekis o'zgaruvchan balandliklarga ega bo'lgan sirtlar uchun yaxshi, kesishmalarni noto'g'ri hisoblamasdan va katta ofset qiymatlarisiz. Bunday oddiy algoritm oddiy xaritalashdan faqat uchta pikselli shader ko'rsatmalari bilan farq qiladi: ikkita matematik ko'rsatma va teksturadan bitta qo'shimcha olish. Yangi tekstura koordinatasi hisoblab chiqilgandan so'ng, u boshqa tekstura qatlamlarini o'qish uchun ishlatiladi: asosiy tekstura, oddiy xarita va boshqalar. Zamonaviy video chiplarda parallaks xaritalashning ushbu usuli an'anaviy teksturali xaritalash kabi deyarli samarali va uning natijasi oddiy oddiy xaritalashdan ko'ra ko'proq real yuza ekranidir.

Ammo an'anaviy parallaks xaritalashdan foydalanish faqat qiymatlar farqiga ega bo'lmagan balandlik xaritalari bilan cheklangan. "Tik" nosimmetrikliklar algoritm tomonidan noto'g'ri qayta ishlanadi, turli artefaktlar paydo bo'ladi, teksturalar "suzuvchi" va hokazo. Parallaks xaritalash texnikasini yaxshilash uchun bir nechta o'zgartirilgan usullar ishlab chiqilgan. Bir nechta tadqiqotchilar (Yerex, Donnelly, Tatarchuk, Policarpo) boshlang'ich algoritmni yaxshilaydigan yangi usullarni tasvirlab berishdi. Deyarli barcha g'oyalar sirt detallarining bir-biri bilan kesishishini aniqlash uchun piksel shaderidagi nurlarni kuzatishga asoslangan. O'zgartirilgan texnikalar bir nechta turli nomlarga ega bo'ldi: okklyuzion bilan parallaks xaritalash, masofa funksiyalari bilan parallaks xaritalash, parallaks okklyuzion xaritalash. Qisqasi, biz ularning barchasini Parallaks okklyuzion xaritasi deb ataymiz.

Parallaks okklyuzion xaritalash usullari balandliklarni aniqlash va matnning ko'rinishini hisobga olish uchun nurlarni kuzatishni ham o'z ichiga oladi. Haqiqatan ham, sirtga burchak ostida qaralganda, teksler bir-birini to'sib qo'yadi va buni yodda tutgan holda, siz parallaks effektiga ko'proq chuqurlik kiritishingiz mumkin. Olingan tasvir yanada real bo'ladi va bunday takomillashtirilgan usullardan chuqurroq relyef uchun foydalanish mumkin, u g'isht va tosh devorlarni, yo'laklarni va hokazolarni tasvirlash uchun ajoyibdir. Ayniqsa, Parallaks xaritalash va joy almashish xaritasi o'rtasidagi asosiy farq shundaki, hisob-kitoblar amalga oshiriladi. hammasi piksel boshiga va yuzaki emas. Shuning uchun usul virtual joy almashish xaritasi va piksel boshiga joy almashish xaritasi kabi nomlarga ega. Rasmga qarang, bunga ishonish qiyin, lekin bu yerdagi yulka toshlari shunchaki piksel-piksel effekti:

Usul sizga ushbu geometriyani amalga oshirishda talab qilinadigan millionlab burchaklar va uchburchaklarsiz batafsil sirtlarni samarali ko'rsatishga imkon beradi. Shu bilan birga, yuqori tafsilotlar saqlanib qoladi (siluet / qirralardan tashqari) va animatsiya hisob-kitoblari juda soddalashtirilgan. Ushbu uslub haqiqiy geometriyadan foydalanishdan ko'ra arzonroq va ayniqsa, juda kichik detallar bo'lgan hollarda sezilarli darajada kamroq ko'pburchaklar qo'llaniladi. Algoritm uchun ko'plab ilovalar mavjud va u toshlar, g'ishtlar va shunga o'xshash narsalar uchun eng mos keladi.

Bundan tashqari, qo'shimcha afzallik shundaki, balandlik xaritalari dinamik ravishda o'zgarishi mumkin (to'lqinli suv yuzasi, devorlardagi o'q teshiklari va boshqalar). Ushbu usulning kamchiligi geometrik jihatdan to'g'ri siluetlarning (ob'ektning qirralari) yo'qligi, chunki algoritm piksel-piksel bo'lib, haqiqiy joy almashish xaritasi emas. Ammo u geometriyani o'zgartirish, yoritish va animatsiyaga yukni kamaytirish shaklida ishlashni tejaydi. Katta hajmdagi geometriya ma'lumotlarini saqlash uchun zarur bo'lgan video xotirani saqlaydi. Texnologiya, shuningdek, mavjud ilovalarga nisbatan oddiy integratsiya va jarayonda oddiy xaritalash uchun ishlatiladigan tanish yordamchi dasturlardan foydalanishdan ham foyda oladi.

Texnika yaqinda real hayot o'yinlarida allaqachon qo'llanilgan. Hozircha ular statik balandlik xaritalariga asoslangan oddiy parallaks xaritalash orqali, nurni kuzatish va kesishmalarni hisoblamasdan turib olishadi. O'yinlarda parallaks xaritalashdan qanday foydalanish mumkinligiga ba'zi misollar:

Keyingi ishlov berish

Keng ma'noda, post-processing - bu tasvirlashning asosiy bosqichlaridan keyin sodir bo'ladigan hamma narsa. Boshqacha qilib aytadigan bo'lsak, post-processing - bu tasvirni ko'rsatgandan keyin uni o'zgartirish. Post-processing - bu maxsus vizual effektlarni yaratish uchun asboblar to'plami bo'lib, ularni yaratish sahnani ko'rsatish bo'yicha asosiy ish tugagandan so'ng amalga oshiriladi, ya'ni ishlov berishdan keyingi effektlarni yaratishda tayyor rastr tasviridan foydalaniladi.

Fotosuratdan oddiy misol: siz ochiq havoda yashil rangga ega go'zal ko'lni suratga oldingiz. Osmon juda yorqin va daraxtlar juda qorong'i. Siz fotosuratni grafik muharrirga yuklaysiz va tasvirning joylari yoki butun rasm uchun yorqinlik, kontrast va boshqa parametrlarni o'zgartirishni boshlaysiz. Ammo endi sizda kamera sozlamalarini o'zgartirish imkoniyati yo'q, siz tayyor tasvirni qayta ishlashni amalga oshirasiz. Bu post-processing. Yoki boshqa misol: portret suratga olishda fonni tanlash va chuqurroq maydon effekti uchun bu hududga loyqalik filtrini qo'llash. Ya'ni, siz grafik muharrirda ramkani o'zgartirganingizda yoki to'g'rilaganingizda, siz post-processing qilasiz. Xuddi shu narsani o'yinda, real vaqtda qilish mumkin.

Renderdan keyin tasvirni qayta ishlash uchun turli xil imkoniyatlar mavjud. Har bir inson, ehtimol, grafik muharrirlarda grafik filtrlar deb ataladigan juda ko'p narsalarni ko'rgan. Aynan shunday postfiltrlar deyiladi: loyqalik, qirralarni aniqlash, o'tkirlash, shovqin, silliq, bo'rttirma va hokazo. Real vaqt rejimida 3D renderlashda qo'llanilganda, bu quyidagicha amalga oshiriladi - butun sahna maxsus maydonga, renderga aylantiriladi. maqsadli va asosiy renderdan so'ng bu tasvir piksel shaderlari yordamida qo'shimcha ravishda qayta ishlanadi va shundan keyingina ekranda ko'rsatiladi. O'yinlarda qayta ishlashdan keyingi effektlardan eng ko'p ishlatiladiganlari,,. Boshqa ko'plab post-effektlar mavjud: shovqin, chayqalish, buzilish, sepiya va boshqalar.

O'yin ilovalarida post-processingning bir nechta asosiy misollari:

Yuqori dinamik diapazon (HDR)

3D grafiklarga qo'llaniladigan yuqori dinamik diapazon (HDR) yuqori dinamik diapazonni ko'rsatishdir. HDR ning mohiyati intensivlik va rangni haqiqiy jismoniy miqdorlar bilan tasvirlashdan iborat. Tasvirni tavsiflashning odatiy modeli RGB bo'lib, barcha ranglar asosiy ranglarning yig'indisi sifatida taqdim etilganda: qizil, yashil va ko'k, har biri uchun 0 dan 255 gacha bo'lgan mumkin bo'lgan butun son qiymatlari ko'rinishida har xil intensivlik bilan kodlangan. har bir rang uchun sakkiz bit. Muayyan model yoki qurilma tomonidan ko'rsatilishi mumkin bo'lgan maksimal intensivlikning minimalga nisbati dinamik diapazon deb ataladi. Shunday qilib, RGB modelining dinamik diapazoni 256: 1 yoki 100: 1 cd / m 2 (ikki kattalik tartibi). Rang va intensivlikni tavsiflash uchun ushbu model odatda Past dinamik diapazon (LDR) deb nomlanadi.

Barcha holatlar uchun mumkin bo'lgan LDR qiymatlari aniq etarli emas, odam juda katta diapazonni ko'ra oladi, ayniqsa past yorug'lik intensivligida va RGB modeli bunday hollarda (va yuqori intensivlikda) juda cheklangan. Inson ko'rishning dinamik diapazoni 10 -6 dan 10 8 cd / m 2 gacha, ya'ni 10 000 000 000 000: 1 (14 ta kattalik buyrug'i). Biz bir vaqtning o'zida butun diapazonni ko'ra olmaymiz, lekin har qanday vaqtda ko'zga ko'rinadigan diapazon taxminan 10 000: 1 (to'rtta kattalik darajasi). Ko'rish yorug'lik diapazonining boshqa qismidagi qiymatlarga asta-sekin moslashish deb ataladigan narsadan foydalangan holda moslashadi, uni kechasi xonadagi yorug'likni o'chirish holati bilan osongina tasvirlash mumkin - dastlab ko'zlar juda kam ko'radi, lekin vaqt o'tishi bilan ular o'zgargan yorug'lik sharoitlariga moslashadi va yana ko'p narsalarni ko'radi. ... Qorong'i muhitni yorug'likka o'zgartirganda ham xuddi shunday bo'ladi.

Shunday qilib, RGB tavsif modelining dinamik diapazoni odam haqiqatda ko'rishi mumkin bo'lgan tasvirlarni taqdim etish uchun etarli emas, bu model diapazonning yuqori va pastki qismlarida yorug'lik intensivligining mumkin bo'lgan qiymatlarini sezilarli darajada kamaytiradi. HDR tasvirlarida keltirilgan eng keng tarqalgan misol - quyoshli kunda yorug' ko'chaga derazasi bo'lgan qorong'i xonaning tasviri. RGB modeli yordamida siz derazadan tashqaridagi yoki faqat xona ichidagi narsalarni oddiy ko'rsatishingiz mumkin. LDRda 100 cd/m 2 dan yuqori qiymatlar odatda kesiladi, shuning uchun 3D renderlashda yorqin yorug'lik manbalarini to'g'ridan-to'g'ri kameraga ko'rsatish qiyin.

Hozircha ma'lumotlarni ko'rsatadigan qurilmalarning o'zini jiddiy takomillashtirish mumkin emas va hisob-kitoblarda LDR-dan voz kechish mantiqan to'g'ri keladi, siz intensivlik va rangning haqiqiy jismoniy qiymatlaridan (yoki chiziqli proportsional) foydalanishingiz mumkin va u yoqadigan maksimalni ko'rsatishingiz mumkin. monitor. HDR tasvirining mohiyati intensivlik va rang qiymatlarini haqiqiy jismoniy miqdorlarda yoki chiziqli proportsional ravishda ishlatish va butun sonlarni emas, balki yuqori aniqlikdagi suzuvchi nuqtali raqamlarni ishlatishdir (masalan, 16 yoki 32 bit). Bu RGB modelidagi cheklovlarni olib tashlaydi va tasvirning dinamik diapazonini keskin oshiradi. Ammo keyin har qanday HDR tasvirni har qanday displey muhitida (xuddi shu RGB monitor) maxsus algoritmlar yordamida mumkin bo'lgan eng yuqori sifat bilan ko'rsatish mumkin.

HDR renderlash biz tasvirni ko'rsatganimizdan so'ng ekspozitsiyani o'zgartirishga imkon beradi. Bu insonning ko'rish qobiliyatini moslashtirish effektini (yorqin ochiq joylardan qorong'i xonalarga va aksincha) taqlid qilish imkonini beradi, jismoniy jihatdan to'g'ri yoritishni ta'minlaydi, shuningdek, qayta ishlashdan keyingi effektlarni qo'llash uchun yagona yechimdir (porlash, chaqnash, yonish, gullash, harakatning xiralashishi). Tasvirni qayta ishlash algoritmlari, ranglarni to'g'rilash, gamma tuzatish, harakatni xiralashtirish, gullash va boshqa qayta ishlash usullari HDR tasvirida yaxshiroq bajariladi.

Haqiqiy vaqtda 3D renderlash ilovalarida (asosan o'yinlar) HDR renderlash yaqinda qo'llanila boshlandi, chunki u suzuvchi nuqta formatlarida ko'rsatish maqsadini hisoblash va qo'llab-quvvatlashni talab qiladi, bu birinchi navbatda faqat video chiplarida mavjud bo'lgan. DirectX 9. O'yinlardagi odatiy HDR renderlash yo'li: sahnani suzuvchi nuqtali buferga ko'rsatish, kengaytirilgan rang diapazonida tasvirni qayta ishlash (kontrast va yorqinlikni o'zgartirish, rang balansi, porlash va harakatni xiralashtirish effektlari, linzalarning porlashi va kabi), yakuniy HDR tasvirini LDR displey qurilmasiga chiqarish uchun ohang xaritasini qo'llash. Ba'zan atrof-muhit xaritalari HDR formatlarida qo'llaniladi, ob'ektlarda statik aks ettirish uchun HDR dan dinamik sinish va ko'zgularni taqlid qilishda foydalanish juda qiziq, buning uchun suzuvchi nuqta formatidagi dinamik xaritalardan ham foydalanish mumkin. Bunga siz oldindan hisoblangan va HDR formatida saqlangan ko'proq yorug'lik xaritalarini qo'shishingiz mumkin. Yuqoridagilarning aksariyati, masalan, Half-Life 2: Lost Coast filmida amalga oshirilgan.

HDR renderlash an'anaviy usullarga qaraganda yuqori sifatli murakkab keyingi ishlov berish uchun juda foydali. Xuddi shu gullash HDR ko'rinishi modelida hisoblanganda yanada real ko'rinadi. Masalan, Crytek's Far Cry o'yinida bo'lgani kabi, u standart HDR renderlash usullaridan foydalanadi: Kawase va ohangni xaritalash operatori Reinhard tomonidan taqdim etilgan gullash filtrlarini qo'llash.

Afsuski, ba'zi hollarda, o'yin ishlab chiquvchilari HDR nomi ostida oddiy LDR diapazonida hisoblangan gullash filtrini yashirishlari mumkin. Va hozirda HDR renderli o‘yinlarda amalga oshirilayotgan ishlarning aksariyati sifatli gullash bo‘lsa-da, HDR renderlashning afzalliklari ushbu post-effekt bilan cheklanib qolmaydi, buni qilish eng osoni.

Real vaqtda ilovalarda HDR renderlashning boshqa misollari:


Ohanglarni xaritalash - bu HDR yorug'lik diapazonini monitor yoki printer kabi chiqish qurilmasi tomonidan ko'rsatiladigan LDR diapazoniga aylantirish jarayoni, chunki ularga HDR tasvirlarni chiqarish HDR modelining dinamik diapazoni va gamutini mos keladigan LDR dinamikasiga aylantirishni talab qiladi. diapazon, ko'pincha RGB. Axir, HDR-da taqdim etilgan yorqinlik diapazoni juda keng, bu bir vaqtning o'zida, bir sahnada mutlaq dinamik diapazonning bir necha darajalari. An'anaviy chiqish qurilmalarida (monitorlar, televizorlar) ko'paytirilishi mumkin bo'lgan diapazon dinamik diapazonning atigi ikki tartibini tashkil qiladi.

HDR-ni LDRga aylantirish ohangni xaritalash deb ataladi va u yo'qotadi va inson ko'rish xususiyatlarini taqlid qiladi. Ushbu algoritmlar odatda ohangni xaritalash bayonotlari deb ataladi. Operatorlar tasvir yorqinligining barcha qiymatlarini uch xil turga ajratadilar: quyuq, o'rta va yorqin. O'rta ohanglarning yorqinligini baholashga asoslanib, umumiy yoritish tuzatiladi, chiqish diapazoniga kirish uchun sahna piksellarining yorqinlik qiymatlari qayta taqsimlanadi, quyuq piksellar ochiladi va yorqinlari qorayadi. Keyinchalik, tasvirdagi eng yorqin piksellar chiqish qurilmasi yoki chiqish ko'rinishi modeli diapazoniga o'lchov qilinadi. Quyidagi rasmda HDR tasvirini LDR diapazoniga eng oddiy konvertatsiya qilish, chiziqli o'zgartirish va markazdagi fragmentga yanada murakkab ohangni xaritalash operatori qo'llaniladi, bu yuqorida tavsiflanganidek ishlaydi:

Ko'rinib turibdiki, faqat chiziqli bo'lmagan ohangni xaritalashdan foydalangan holda siz tasvirdagi maksimal tafsilotlarni olishingiz mumkin va agar siz HDR-ni LDR-ga chiziqli ravishda aylantirsangiz, ko'p mayda narsalar shunchaki yo'qoladi. Yagona to'g'ri ohangni xaritalash algoritmi yo'q, turli vaziyatlarda yaxshi natijalar beradigan bir nechta operatorlar mavjud. Mana ikki xil ohangni xaritalash bayonotlarining yaxshi namunasi:

HDR renderlash bilan birgalikda yaqinda o'yinlarda ohangni xaritalash qo'llanila boshlandi. Insonning ko'rish xususiyatlarini ixtiyoriy ravishda simulyatsiya qilish mumkin bo'ldi: qorong'u sahnalarda aniqlikni yo'qotish, juda yorqin joylardan qorong'i joylarga o'tish paytida yangi yorug'lik sharoitlariga moslashish va aksincha, kontrast, rang o'zgarishiga sezgirlik ... ko'rish qobiliyatiga taqlid qilish Far Cry-da moslashishga o'xshaydi. Birinchi skrinshotda o‘yinchi qorong‘i xonadan yorug‘ yoritilgan ochiq joyga aylanganda ko‘rgan tasvirni, ikkinchisida esa moslashgandan keyin bir necha soniya o‘tgach, xuddi shu tasvirni ko‘rsatadi.

Gullash

Bloom - tasvirning eng yorqin qismlarini yorituvchi kinodan keyingi ishlov berish effektlaridan biri. Bu yorqin yuzalar atrofida porlash ko'rinishida namoyon bo'ladigan juda yorqin yorug'likning ta'siri, gullash filtrini qo'llaganingizdan so'ng, bunday sirtlar shunchaki qo'shimcha yorqinlikni olmaydilar, ulardan yorug'lik (halo) qisman qo'shni qorong'i joylarga ta'sir qiladi. ramkadagi yorqin sirtlarga. Buni misol bilan ko'rsatishning eng oson yo'li:

3D Bloom grafikasida filtr qo'shimcha keyingi ishlov berish yordamida amalga oshiriladi - loyqalik filtri tomonidan xiralashgan ramka (butun ramka yoki uning alohida yorqin joylari, filtr odatda bir necha marta qo'llaniladi) va original ramka. O'yinlarda va boshqa real vaqtda ilovalarda eng ko'p ishlatiladigan gullashdan keyingi filtrlash algoritmlaridan biri:

  • Sahna ramka buferiga o'tkaziladi, ob'ektlarning porlash intensivligi buferning alfa-kanaliga yoziladi.
  • Framebufer qayta ishlash uchun maxsus teksturaga ko'chiriladi.
  • To'qimalarning o'lchamlari, masalan, 4 marta kamayadi.
  • Antialiasing filtrlari (loyqalik) alfa kanalida qayd etilgan intensivlik ma'lumotlariga asoslanib, tasvirga bir necha marta qo'llaniladi.
  • Olingan tasvir ramkabuferidagi asl kadr bilan aralashtiriladi va natija ekranda ko'rsatiladi.

Boshqa post-qayta ishlash turlari singari, bloom yuqori dinamik diapazonda (HDR) renderlashda eng yaxshi qo'llaniladi. Yakuniy tasvirni real vaqtda 3D ilovalaridan gullash filtri orqali qayta ishlashning qo'shimcha misollari:

Harakat xiralashishi

Harakatning xiralashishi fotosuratlar va plyonkalarda ramkaning ekspozitsiya vaqtida, ob'ektiv qopqog'i ochiq bo'lganda, ramkadagi ob'ektlarning harakati tufayli yuzaga keladi. Kamera (fotosurat, film) tomonidan olingan kadr nol davomiylik bilan bir zumda olingan suratni ko'rsatmaydi. Texnologik cheklovlar tufayli ramka ma'lum bir vaqtni ko'rsatadi, bu vaqt ichida ramkadagi ob'ektlar ma'lum masofani bosib o'tishi mumkin va agar bu sodir bo'lsa, ob'ektivning ochiq yopilishi paytida harakatlanuvchi ob'ektning barcha pozitsiyalari bo'ladi. ramkada harakat vektori bo'ylab loyqa tasvir sifatida taqdim etilgan ... Bu, agar ob'ekt kameraga nisbatan harakatlansa yoki kamera ob'ektga nisbatan bo'lsa va loyqalik miqdori bizga ob'ekt tezligining kattaligi haqida fikr beradigan bo'lsa sodir bo'ladi.

Uch o'lchovli animatsiyada istalgan vaqtda (ramka) ob'ektlar cheksiz tez tortishish tezligiga ega virtual kameraga o'xshash uch o'lchovli fazoda ma'lum koordinatalarda joylashgan. Natijada, tez harakatlanuvchi ob'ektlarga qarashda kamera va inson ko'zi tomonidan olinganiga o'xshash xiralik yo'q. Bu g'ayritabiiy va haqiqiy bo'lmagan ko'rinadi. Oddiy misolni ko'rib chiqing: bir nechta sharlar qandaydir o'q atrofida aylanadi. Bu harakat xiralashgan va xiraliksiz qanday ko‘rinishini tasviri:

Loyqaliksiz tasvirdan sharlar harakatlanyaptimi yoki yo'qmi, hatto aniqlab bo'lmaydi, harakatni xiralashtirish esa ob'ektlarning harakat tezligi va yo'nalishi haqida aniq tasavvur beradi. Aytgancha, sekundiga 25-30 kadr tezlikda o'yinlarda harakatlanish zerikarli ko'rinishining sababi ham harakatning xiralashishining yo'qligi, garchi filmlar va videolar bir xil kadr tezligi parametrlarida ajoyib ko'rinadi. Harakatni xiralashtirishning etishmasligini qoplash uchun yuqori kadr tezligi (sekundiga 60 kvadrat yoki undan yuqori) yoki harakatni xiralashtirish effektini taqlid qilish uchun tasvirni qayta ishlashning qo'shimcha usullaridan foydalanish maqsadga muvofiqdir. Bu animatsiyaning silliqligini yaxshilash va bir vaqtning o'zida fotografik va kino realizmining ta'siri uchun ishlatiladi.

Haqiqiy vaqtda ilovalar uchun harakatni xiralashtirishning eng oddiy algoritmi joriy kadrni ko'rsatish uchun oldingi animatsiya kadrlari ma'lumotlaridan foydalanishdir. Bundan tashqari, harakatni xiralashtirishning yanada samarali va zamonaviy usullari mavjud bo'lib, ular oldingi kadrlardan foydalanmaydi, lekin kadrdagi ob'ektlarning harakat vektorlariga asoslanadi, shuningdek, renderlash jarayoniga yana bir keyingi ishlov berish bosqichini qo'shadi. Loyqalik effekti toʻliq ekranda (odatda post-qayta ishlashda) yoki alohida, eng tez harakatlanuvchi obyektlar uchun boʻlishi mumkin.

O'yinlarda harakatni xiralashtirish effektining mumkin bo'lgan qo'llanilishi: barcha poyga o'yinlari (juda yuqori harakat tezligi effektini yaratish va televizorga o'xshash takroriy tomoshalarni ko'rishda foydalanish uchun), sport o'yinlari (xuddi shu takrorlashlar va o'yinning o'zida loyqalanish mumkin. to'p yoki shayba kabi juda tez harakatlanuvchi ob'ektlarga, jangovar o'yinlarga (o'yin qurollari, qo'llar va oyoqlarning tezkor harakatlari), boshqa ko'plab o'yinlarga (dvigateldagi o'yin ichidagi 3D kesmalari paytida) qo'llanilishi mumkin. Quyida oʻyinlardagi harakatni xiralashtirish post effektlariga misollar keltirilgan:

Maydon chuqurligi (DOF)

Maydon chuqurligi, qisqacha aytganda, ob'ektlarning kamera fokusiga nisbatan joylashishiga qarab xiralashishi. Haqiqiy hayotda, fotosuratlarda va filmlarda biz hamma narsalarni bir xil darajada aniq ko'ra olmaymiz, bu ko'z tuzilishining o'ziga xosligi va kameralar va kino kameralarining optikasi tuzilishi bilan bog'liq. Foto va kinematografik optika ma'lum masofaga ega, kameradan shunday masofada joylashgan ob'ektlar fokusda bo'lib, rasmda aniq ko'rinadi va kameradan uzoqroq yoki unga yaqin bo'lgan narsalar, aksincha, loyqa ko'rinadi, aniqlik asta-sekin kamayadi. masofani oshirish yoki kamaytirish bilan ...

Siz taxmin qilganingizdek, bu render emas, fotosurat. Kompyuter grafikasida ko'rsatilgan tasvirning har bir ob'ekti juda aniq, chunki hisob-kitoblarda linzalar va optika taqlid qilinmaydi. Shuning uchun, foto va kino realizmiga erishish uchun kompyuter grafikasi uchun shunga o'xshash narsalarni qilish uchun maxsus algoritmlardan foydalanish kerak. Ushbu texnikalar turli masofalardagi ob'ektlarga boshqa fokusning ta'sirini simulyatsiya qiladi.

Haqiqiy vaqt rejimida ko'rsatishning keng tarqalgan usullaridan biri tasvirdagi piksellar uchun chuqurlik ma'lumotlariga asoslanib, asl ramka va uning loyqa versiyasini (loyqalik filtrining bir nechta o'tishlari) aralashtirishdir. O'yinlarda DOF effektidan bir nechta foydalanish mumkin, masalan, bu o'yin dvigatelidagi o'yin videolari, sport va poyga o'yinlarida takrorlash. Haqiqiy vaqtda maydon chuqurligiga misollar:

Tafsilot darajasi (LOD)

3D-ilovalardagi tafsilotlar darajasi - bu kadrni ko'rsatishning murakkabligini kamaytirish, sahnadagi ko'pburchaklar, teksturalar va boshqa resurslarning umumiy sonini kamaytirish va umuman uning murakkabligini kamaytirish usuli. Oddiy misol: asosiy belgilar modeli 10 000 ko'pburchakdan iborat. Qayta ishlangan sahnada kameraga yaqin joylashgan hollarda, barcha ko'pburchaklar qo'llanilishi muhim, ammo oxirgi tasvirda kameradan juda katta masofada u faqat bir necha pikselni egallaydi va yo'q. barcha 10 000 ko'pburchaklarni qayta ishlash nuqtasi. Ehtimol, bu holda, modelning taxminan bir xil ko'rinishi uchun yuzlab ko'pburchaklar yoki hatto bir nechta ko'pburchaklar va maxsus tayyorlangan tekstura etarli bo'ladi. Shunga ko'ra, o'rta masofalarda, eng oddiy modeldan ko'ra ko'proq uchburchakdan va eng murakkabidan kamroq bo'lgan modeldan foydalanish mantiqan to'g'ri keladi.

LOD usuli odatda 3D-sahnalarni modellashtirish va renderlashda, ob'ektlar uchun ulardan kameragacha bo'lgan masofaga mutanosib ravishda bir necha darajadagi murakkablik (geometrik yoki boshqa) yordamida qo'llaniladi. Ushbu texnika ko'pincha o'yin ishlab chiquvchilari tomonidan sahnadagi ko'pburchaklar sonini kamaytirish va ish faoliyatini yaxshilash uchun ishlatiladi. Kameraga yaqin joylashganda, maksimal tafsilotlarga ega modellar (uchburchaklar soni, teksturaning o'lchami, teksturaning murakkabligi) mumkin bo'lgan eng yuqori tasvir sifati uchun va aksincha, modellar kameradan chiqarilganda, modellar ishlatiladi. ko'rsatish tezligini oshirish uchun kamroq uchburchaklar ishlatiladi. Murakkablikni, xususan, modeldagi uchburchaklar sonini o'zgartirish, maksimal murakkablikning bitta 3D modeli asosida avtomatik ravishda yoki turli darajadagi tafsilotlarga ega bo'lgan bir nechta oldindan tayyorlangan modellar asosida amalga oshirilishi mumkin. Turli masofalar uchun kamroq tafsilotga ega modellarni qo'llash orqali tasvirning umumiy tafsiloti deyarli buzilmagan holda tasvirlashning taxminiy murakkabligi kamayadi.

Usul, ayniqsa, sahnadagi ob'ektlar soni ko'p bo'lsa va ular kameradan turli masofalarda joylashgan bo'lsa samarali bo'ladi. Misol uchun, xokkey yoki futbol simulyatori kabi sport o'yinini oling. Kam poli xarakterli modellar kameradan uzoqda bo'lganda qo'llaniladi va kattalashtirilganda modellar ko'p sonli ko'pburchakli boshqalar bilan almashtiriladi. Bu misol juda oddiy va u ikki darajadagi model tafsilotlariga asoslangan usulning mohiyatini ko'rsatadi, lekin hech kim LOD darajasini o'zgartirishning ta'siri juda sezilarli bo'lmasligi uchun bir necha darajadagi tafsilotlarni yaratish bilan bezovta qilmaydi, shuning uchun tafsilotlar asta-sekin. ob'ekt yaqinlashganda "o'sadi".

Kameradan masofadan tashqari, LOD uchun boshqa omillar ham muhim bo'lishi mumkin - ekrandagi ob'ektlarning umumiy soni (kadrda bir yoki ikkita belgi bo'lsa, murakkab modellar ishlatiladi va 10-20 bo'lsa, ular oddiyroqlarga o'tish) yoki soniyadagi kadrlar soni (FPS qiymatlari chegaralari o'rnatiladi, bunda tafsilotlar darajasi o'zgaradi, masalan, FPS 30 dan past bo'lganda biz ekrandagi modellarning murakkabligini kamaytiramiz, va 60 da, aksincha, ortadi). Tafsilotlar darajasiga ta'sir qiluvchi boshqa mumkin bo'lgan omillar - bu ob'ektning harakat tezligi (sizda raketani harakatda ko'rishga vaqtingiz bo'lmaydi, lekin siz salyangozni osongina ko'rishingiz mumkin), o'yin nuqtai nazaridan xarakterning ahamiyati ( xuddi shu futbolni oling - siz boshqaradigan o'yinchining modeli uchun siz murakkabroq geometriya va to'qimalardan foydalanishingiz mumkin, siz uni eng yaqin va tez-tez ko'rasiz). Bularning barchasi ma'lum bir ishlab chiquvchining istaklari va imkoniyatlariga bog'liq. Asosiysi, uni haddan tashqari oshirmaslik, tafsilotlar darajasidagi tez-tez va sezilarli o'zgarishlar bezovta qiladi.

Shuni eslatib o'tamanki, tafsilotlar darajasi faqat geometriya bilan bog'liq emas, usul boshqa resurslarni tejash uchun ham ishlatilishi mumkin: teksturalashda (video chiplar allaqachon mipmappingdan foydalansa ham, ba'zida teksturani tezda boshqalarga o'zgartirish mantiqiy bo'ladi) turli detallar bilan), yoritish texnikasi (yaqin ob'ektlar murakkab algoritm yordamida yoritiladi va uzoq ob'ektlar - oddiy yordamida), teksturalash texnikasi (yaqin sirtlarda murakkab paralaks xaritalash, uzoqlarda esa oddiy xaritalash qo'llaniladi) va boshqalar. .

O'yindan misol ko'rsatish unchalik oson emas, bir tomondan, deyarli har bir o'yinda LOD ma'lum darajada qo'llaniladi, boshqa tomondan, buni aniq ko'rsatish har doim ham mumkin emas, aks holda juda oz narsa bo'lar edi. LODning o'zida.

Ammo bu misolda, eng yaqin avtomobil modeli maksimal tafsilotlarga ega ekanligi aniq, keyingi ikki yoki uchta mashina ham bu darajaga juda yaqin va barcha uzoqda ko'rinadigan soddalashtirishlar mavjud, bu erda eng muhimlari: bor. orqa ko'zgu, davlat raqamlari, oyna tozalagichlar va boshqalar qo'shimcha yoritish moslamalari yo'q. Va eng uzoq modeldan yo'lda hatto soya ham yo'q. Bu harakatdagi tafsilot algoritmining darajasi.

Global yoritish

Sahnaning haqiqiy yoritilishini taqlid qilish qiyin, haqiqatdagi har bir yorug'lik nuri qayta-qayta aks ettiriladi va sinadi, bu ko'zgularning soni cheklanmagan. Va 3D renderlashda aks ettirish soni dizayn imkoniyatlariga kuchli bog'liq, har qanday sahnani hisoblash soddalashtirilgan jismoniy modeldir va natijada olingan tasvir faqat realizmga yaqin.

Yoritish algoritmlarini ikkita modelga bo'lish mumkin: to'g'ridan-to'g'ri yoki mahalliy yoritish va global yoritish (to'g'ridan-to'g'ri yoki mahalliy yoritish va global yoritish). Mahalliy yoritish modeli to'g'ridan-to'g'ri yoritishni hisoblashdan foydalanadi, yorug'lik manbalaridan yorug'likning shaffof bo'lmagan sirt bilan birinchi kesishishiga qadar, ob'ektlarning bir-biri bilan o'zaro ta'siri hisobga olinmaydi. Garchi bunday model fon yoki bir xil (atrof-muhit) yoritishni qo'shish orqali buning o'rnini qoplashga harakat qilsa ham, bu eng oddiy taxminiy, yorug'lik manbalarining barcha bilvosita nurlaridan yuqori darajada soddalashtirilgan yorug'lik bo'lib, u yo'q bo'lganda ob'ektlarning yoritilishining rangi va intensivligini belgilaydi. to'g'ridan-to'g'ri yorug'lik manbalari.

Xuddi shu nurni kuzatish sirtlarning yoritilishini faqat yorug'lik manbalaridan to'g'ridan-to'g'ri nurlar bilan hisoblab chiqadi va har qanday sirt ko'rinadigan bo'lishi uchun yorug'lik manbai tomonidan to'g'ridan-to'g'ri yoritilishi kerak. Bu fotorealistik natijalarga erishish uchun etarli emas, to'g'ridan-to'g'ri yoritishdan tashqari, boshqa sirtlardan aks ettirilgan nurlar bilan ikkilamchi yoritishni hisobga olish kerak. Haqiqiy dunyoda yorug'lik nurlari to'liq o'chmaguncha yuzalardan bir necha marta aks etadi. Derazadan o'tadigan quyosh nuri butun xonani yoritadi, garchi nurlar to'g'ridan-to'g'ri barcha sirtlarga kira olmasa. Yorug'lik manbai qanchalik yorqinroq bo'lsa, u shunchalik ko'p aks etadi. Ko'zgu sirtining rangi aks ettirilgan yorug'likning rangiga ham ta'sir qiladi, masalan, qizil devor qo'shni oq ob'ektda qizil nuqta paydo bo'lishiga olib keladi. Bu erda aniq farq, ikkilamchi yorug'liksiz va hisobga olingan holda hisoblash:

Global yoritish modelida global yoritish, yoritish ob'ektlarning bir-biriga ta'sirini hisobga olgan holda hisoblab chiqiladi, yorug'lik nurlarining ob'ektlar sirtidan ko'p marta aks etishi va sinishi, gidroksidi va er osti tarqalishi hisobga olinadi. Ushbu model sizga yanada real tasvirni olish imkonini beradi, lekin jarayonni murakkablashtiradi, sezilarli darajada ko'proq resurslarni talab qiladi. Bir nechta global yoritish algoritmlari mavjud, biz radiosity (bilvosita yoritishni hisoblash) va foton xaritalash (tracing yordamida oldindan hisoblangan foton xaritalari asosida global yoritishni hisoblash) ni tez ko'rib chiqamiz. Bundan tashqari, bilvosita yoritishni simulyatsiya qilishning soddalashtirilgan usullari mavjud, masalan, yorug'lik manbalarining soni va yorqinligiga qarab sahnaning umumiy yorqinligini o'zgartirish yoki aks ettirilgan yorug'likni taqlid qilish uchun sahna atrofida joylashtirilgan ko'p sonli nuqta chiroqlaridan foydalanish, lekin baribir. Bu haqiqiy algoritmdan uzoqdir.GI.

Radiozlik algoritmi yorug'lik nurlarining bir sirtdan ikkinchisiga, shuningdek, atrof-muhitdan ob'ektlarga ikkilamchi aks etishini hisoblash jarayonidir. Yorug'lik manbalaridan nurlar ularning kuchi ma'lum darajadan pastga tushgunga qadar yoki nurlar ma'lum miqdordagi ko'zgularga yetguncha kuzatiladi. Bu umumiy GI texnikasi bo'lib, hisob-kitoblar odatda ko'rsatishdan oldin amalga oshiriladi va hisoblash natijalari real vaqt rejimida ko'rsatish uchun ishlatilishi mumkin. Radiozlikning asosiy g'oyalari issiqlik uzatish fizikasiga asoslanadi. Ob'ektlarning sirtlari yamoq deb ataladigan kichik joylarga bo'linadi va aks ettirilgan yorug'lik barcha yo'nalishlarda teng ravishda tarqaladi deb taxmin qilinadi. Chiroqlar uchun har bir nurni hisoblash o'rniga, ular ishlab chiqaradigan energiya darajasiga qarab chiroqlarni yamoqlarga bo'linadigan o'rtacha texnika qo'llaniladi. Bu energiya sirt yamoqlari orasida mutanosib ravishda taqsimlanadi.

Henrik Van Jensen tomonidan taklif qilingan global yoritishni hisoblashning yana bir usuli bu foton xaritalash usulidir. Fotonik xaritalash - bu yorug'lik nurlarining sahnadagi ob'ektlar bilan o'zaro ta'sirini taqlid qilish uchun ishlatiladigan yana bir nurli kuzatuvli global yoritish algoritmidir. Algoritm nurlarning ikkilamchi akslarini, shaffof yuzalar orqali yorug'likning sinishi, tarqoq ko'zgularni hisoblab chiqadi. Bu usul ikki o'tishda sirtdagi nuqtalarning yoritilishini hisoblashdan iborat. Birinchisi, yorug'lik nurlarini ikkilamchi aks ettirish bilan to'g'ridan-to'g'ri kuzatish, bu asosiy ko'rsatishdan oldin amalga oshiriladigan dastlabki jarayon. Ushbu usul yorug'lik manbasidan sahnadagi ob'ektlarga o'tadigan fotonlarning energiyasini hisoblab chiqadi. Fotonlar sirtga etib kelganida, fotonning kesishish nuqtasi, yo'nalishi va energiyasi foton xaritasi deb ataladigan keshda saqlanadi. Fotonik xaritalar keyinchalik foydalanish uchun diskda saqlanishi mumkin, shuning uchun ularni har bir kadrda tasvirlash shart emas. Fotonlarning aks etishi ma'lum miqdordagi ko'zgulardan keyin ish to'xtaguncha yoki ma'lum energiyaga erishilgunga qadar hisoblanadi. Ikkinchi render o'tishda sahna piksellarining to'g'ridan-to'g'ri nurlar bilan yoritilishi foton xaritalarida saqlangan ma'lumotlarni hisobga olgan holda hisoblab chiqiladi, foton energiyasi to'g'ridan-to'g'ri yorug'lik energiyasiga qo'shiladi.

Ko'p sonli ikkilamchi ko'zgularni ishlatadigan global yoritish hisoblari to'g'ridan-to'g'ri yoritish hisoblariga qaraganda ancha uzoq davom etadi. Real vaqt rejimida radioshaharni apparatli hisoblash texnikasi mavjud bo'lib, ular dasturlashtiriladigan video chiplarning so'nggi avlodlarining imkoniyatlaridan foydalanadi, ammo hozircha real vaqt rejimida global yoritishni hisoblab chiqadigan sahnalar juda oddiy bo'lishi kerak va ko'plab soddalashtirishlar mavjud. algoritmlarda tuzilgan.

Ammo uzoq vaqt davomida ishlatilgan narsa - bu yorug'lik manbalari va yorug'likka kuchli ta'sir ko'rsatadigan katta ob'ektlarning o'rnini o'zgartirmasdan sahnalar uchun maqbul bo'lgan statik oldindan hisoblangan global yoritish. Axir, global yoritishni hisoblash kuzatuvchining pozitsiyasiga bog'liq emas va agar bunday ob'ektlarning sahnadagi holati va yorug'lik manbalarining parametrlari sahnada o'zgarmasa, u holda oldindan hisoblangan yoritish qiymatlari. foydalanish mumkin. Bu GI hisoblash ma'lumotlarini yorug'lik xaritalari shaklida saqlash uchun ko'plab o'yinlarda qo'llaniladi.

Dinamik global yoritishni simulyatsiya qilish uchun maqbul algoritmlar ham mavjud. Masalan, sahnadagi ob'ektning bilvosita yoritilishini hisoblash uchun real vaqt rejimida foydalanish uchun shunday oddiy usul mavjud: barcha ob'ektlarni qisqartirilgan detallarga (yorug'lik hisoblanganidan tashqari) soddalashtirilgan ko'rsatish. past aniqlikdagi kub xaritasi (u ob'ekt yuzasida dinamik aks ettirish uchun ham ishlatilishi mumkin), so'ngra ushbu teksturani filtrlash (loyqalik filtrining bir necha o'tishi) va hisoblangan tekstura ma'lumotlarini ushbu ob'ektni yoritish uchun qo'llash to'g'ridan-to'g'ri yoritishni to'ldiradi. Dinamik hisoblash juda og'ir bo'lgan hollarda, siz statik radioaktivlik xaritalari bilan shug'ullanishingiz mumkin. MotoGP 2 o'yinidan misol, hatto GI ni oddiy taqlid qilishning ham foydali ta'sirini aniq ko'rsatib beradi:



Ushbu o'quv qo'llanma Minecraft-da shaderlarni o'rnatishga yordam beradi va shu bilan dinamik soyalar, shamol va o't shovqini, real suv va boshqa ko'p narsalarni qo'shish orqali o'yin dunyosini yaxshilaydi.

Darhol shuni ta'kidlash kerakki, shaderlar tizimni juda ko'p yuklaydi va agar sizda zaif yoki o'rnatilgan video kartangiz bo'lsa, ushbu modni o'rnatishdan bosh tortishingizni tavsiya qilamiz.

O'rnatish ikki bosqichdan iborat bo'lib, avval siz shaderlarga modni, so'ngra unga qo'shimcha shader paketlarini o'rnatishingiz kerak.

QADAM №1 - Shaderlar uchun modni o'rnatish

  1. Java-ni yuklab oling va o'rnating
  2. O'rnatish OptiFine HD
    yoki Shadersmod;
  3. Olingan arxivni istalgan joyga ochamiz;
  4. Jar faylini ishga tushiring, chunki u o'rnatuvchi;
  5. Dastur sizga o'yin yo'lini ko'rsatadi, agar hamma narsa to'g'ri bo'lsa, Ha, Ok, Ok tugmasini bosing;
  6. ga boring .minecraft va u erda papka yarating shader paketlari;
  7. Biz ishga tushirgichga kiramiz va qatorda "ShadersMod" nomli yangi profilni ko'ramiz, agar bo'lmasa, uni qo'lda tanlang.
  8. Keyinchalik, shader paketlarini yuklab olishingiz kerak

QADAM № 2 - Shaderpackni o'rnatish

  1. Sizni qiziqtirgan shaderpackni yuklab oling (maqola oxiridagi ro'yxat)
  2. Tugmalarni bosing WIN + R
  3. ga boring .minecraft / shader paketlari... Agar bunday papka bo'lmasa, uni yarating.
  4. Sheyder arxivini koʻchiring yoki chiqarib oling .minecraft / shader paketlari... Yo'l quyidagicha ko'rinishi kerak: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [. fsh va .vsh fayllari ichida]
  5. Minecraft-ni boshlang va boring Sozlamalar> Shaderlar... Bu yerda siz mavjud shaderlar ro'yxatini ko'rasiz. Keraklini tanlang
  6. Shader sozlamalarida "tweakBlockDamage" ni yoqing, "CloudShadow" va "OldLighting" ni o'chiring.

Sonic Eterning aql bovar qilmaydigan shaderlari
Sildurning shaderlari
Chocapic13 ning Shaderlari
sensi277 "s yShaders
MrMeep_x3 "s Shaders
Naelegoning Cel Shaders
RRe36 "s Shaderlar
DeDelnerning CUDA shaderlari
bruceatsr44 "kislota shaderlari
Beed28 ning Shaderlari
Ziipzaapning Shader to'plami
robobo1221 "s Shaders
dvv16 "s Shaders
Stazza85 super shaderlar
hoo00 "s Shaders to'plami B
Regi24 ning to'lqinli o'simliklari
MrButternuss ShaderPack
DethRaid-ning Nitro Shader-dagi ajoyib grafikalari
Edi "s Shader ForALLPc" s
CrankerMan ning TME Shaderlari
Kadir Nck Shader (skate702 uchun)
Werrusning Shaderlari
Knevtonvakoning Life Nexus Shaderlari
CYBOX shader paketi
CrapDeShoes CloudShade Alpha
AirLoocke42 Shader
CaptTatsu ning BSL Shaderlari
Trilitonning shaderlari
ShadersMcOfficial "Bluminx Shaders" (Chocapic13" Shaders)
dotModded ning Continuum Shaderlari
Qwqx71 "s Lunar Shaders (chocapic13" s shader)

- Igor (Administrator)

Ushbu maqola doirasida men sizga oddiy so'zlar bilan shaderlar nima ekanligini va ular nima uchun kerakligini aytib beraman.

Kompyuter grafikasi sifatiga talablar kundan kunga ortib bormoqda. Ilgari 2D grafikalar millionlab odamlarning tasavvurini hayratda qoldirish uchun etarli va etarli deb hisoblangan. Hozirgi vaqtda vizualizatsiyaga ko'proq e'tibor berilmoqda.

Biroq, hozirgi 3D grafikalarni shakllantirish jarayonida ko'pchilik video kartalar (GPU) uchun o'rnatilgan filtrlar va gadjetlar etarli emasligi muammosiga duch keldi. Misol uchun, ko'pincha o'z effektlariga ehtiyoj bor edi. Shuning uchun, ko'p narsalarni qo'lda qilish va kompyuterning asosiy protsessorida (CPU) hisob-kitoblarni amalga oshirish kerak edi, bu shubhasiz ishlashga ta'sir qildi (vidyuha, ular aytganidek, "bo'sh" bo'sh turganiga qaramay).

Shunday qilib, vaqt o'tishi bilan GPU quvvatini muayyan ehtiyojlar uchun ishlatishga imkon beruvchi shaderlar kabi turli xil texnologiyalar paydo bo'ldi.

Shaderlar nima va ular nima uchun kerak?

Shader- markaziy protsessorning kuchini keraksiz ravishda sarf qilmasdan video karta protsessorlarida ishlashi mumkin bo'lgan kompyuter dasturi (kod). Bundan tashqari, ushbu shaderlardan quvurlarni qurish mumkin (ularning ketma-ket ishlatilishi). Ya'ni, bir xil shader turli xil grafik ob'ektlarga qo'llanilishi mumkin, bu animatsiya yaratish jarayonini sezilarli darajada osonlashtiradi.

Dastlab, video kartalar uchta turni anglatardi - vertex (alohida cho'qqilarning effektlari uchun; masalan, to'lqinlar effektini yaratish, o'tlarni chizish va boshqalar), geometrik (kichik ibtidoiylar uchun; masalan, siluetlarni yaratish uchun) va piksel ( tasvirning ma'lum bir qismidagi filtrlar uchun, masalan, tuman). Va shunga ko'ra, platada uch turdagi ixtisoslashtirilgan protsessorlar mavjud edi. Keyinchalik, bu bo'linma tark etildi va barcha video karta protsessorlari universal bo'lib qoldi (ular uchta turni ham qo'llab-quvvatlaydi).

Umumiy protsessor yukini kamaytirish o'z shaderlaringizni yaratishning butun nuqtasi emas. Ko'pgina o'yinlar va videolar bir xil xususiyatlardan foydalanishini tushunish kerak. Misol uchun, agar siz OpenGL yoki DirectX kabi tayyor kutubxonalardan foydalanishingiz mumkin bo'lsa, nima uchun, masalan, suv uchun effektlarni o'nlab shunga o'xshash animatsiya dasturlarida noldan yozishingiz kerak? Ikkinchisi allaqachon amalga oshirilgan ko'plab shaderlarni o'z ichiga oladi va o'zingizni yozish uchun qulayroq usulni ta'minlaydi (GPU uchun past darajadagi ko'rsatmalar yozish shart emas).

Ya'ni, agar ilgari eng oddiy animatsiya yoki o'yinni yaratish uchun muhim bilimga ega bo'lish kerak bo'lsa, bugungi haqiqatda bu ko'pchilik uchun mumkin bo'lgan vazifadir.

Shader yondashuvidan qanday foydalanish kerak?

Shaderlar bilan ba'zi chalkashliklar mavjud, chunki turli kutubxonalar uchun turli xil dasturlash tillari standartlari mavjud (GLSL - OpenGL, HLSL - DirectX va boshqalar) va bu video karta ishlab chiqaruvchilarining o'zlari turli xil imkoniyatlarni qo'llab-quvvatlashlari mumkinligini hisobga olmaydi. Biroq, ulardan foydalanishning ortiqcha tomonini DirectX 9 va DirectX 10 o'rtasidagi displey farqining misoli bilan yuqoridagi rasmga qarab osongina baholash mumkin.

Shunday qilib, agar siz taniqli kutubxonaning shaderlaridan foydalansangiz, sifat o'z-o'zidan oshishi uchun keyingi versiyaning chiqarilishi kifoya qiladi. Albatta, bu erda moslik, paydo bo'lgan ixtisoslashtirilgan buyruqlarni qo'llab-quvvatlash va boshqalar kabi nuanslar mavjud, ammo baribir.

Grafikadan tashqari, shader yondashuvi oddiy foydalanuvchilar uchun quyidagi usullarda foydalidir:

1. Kompyuterning tezligi va unumdorligi oshadi (axir markaziy protsessor GPU o'rniga grafiklarni hisoblash kerak emas).

Qiziq o'yinchilar va yangi boshlanuvchilar uchun juda keng tarqalgan savol.

Shader (inglizcha shader - shading dasturi) - bu ob'ekt yoki tasvirning yakuniy xususiyatlarini tushunish uchun 3D grafikada qo'llaniladigan video karta uchun dastur bo'lib, yorug'likning yutilishi va tarqalishi, tekstura xaritasi, displey va sinishi taqdimotini o'z ichiga olishi mumkin. , soyalash, sirt siljishi va boshqalar ko'p sonli boshqa xususiyatlar.

Shaderlar kichik, ta'bir joiz bo'lsa, "video karta uchun skriptlar". Bunday turli xil maxsus effektlar va effektlarni mujassamlash uchun yetarlicha ruxsat bering.

Vaqti-vaqti bilan piksellangan (tasvirlar bilan ishlash - ya'ni to'liq ekran yoki teksturalar bilan) va vertex (3D ob'ektlar bilan ishlash). Masalan, piksel shaderlaridan foydalanish, masalan, 3D teksturalar (zarba), parallaks teksturalari, quyosh nurlari (quyosh shaftlari) a la Crisis, diapazonni xiralashtirish, oddiy harakatni xiralashtirish, animatsiyali teksturalar (suv, lava, ... ), HDR, anti -taxallash, soyalar (ShadowMaps ish jarayoni asosida) va boshqalar. Vertex shaderlari o't, qahramonlar, daraxtlar animatsiyasini yaratadi, suvda to'lqinlar hosil qiladi (masalan, katta) va hokazo.Effekt qanchalik qiyinroq (yuqori sifatli, zamonaviyroq) bo'lsa, shader kodida shunchalik ko'p buyruqlar kerak bo'ladi. Ammo turli versiyalardagi shaderlar (1.1 - 5.0) turli xil buyruqlar sonini qo'llab-quvvatlaydi: versiya qanchalik baland bo'lsa, shuncha ko'p buyruqlardan foydalanishingiz mumkin. Shu sababli, eng past shaderlarda ba'zi texnologik jarayonlarni amalga oshirish haqiqiy emas. Masalan, shu sababli, eng yangi Dead Space 2 shaderlarning 3-versiyasini (ham piksel, ham vertex) so'raydi - chunki u shunday yoritish modeliga ega, uni faqat shaderlarning 3 va undan yuqori versiyalarida amalga oshirish mumkin.

Shader imkoniyatlari

Quvurning bosqichiga qarab, shaderlar ma'lum miqdordagi turlarga bo'linadi: vertex, fragment (piksel) va geometrik. Xo'sh, yangi turdagi quvur liniyalarida hali ham mozaik shaderlari mavjud. Biz grafik quvur liniyasini batafsil muhokama qilmaymiz, men hali ham shaderlar va grafik dasturlashni o'rganishga qaror qilganlar uchun bu haqda alohida maqola yozmaslik kerak deb o'ylayman. Qiziq bo'lsa komentariyada yozing, menda ma'lumot bo'ladi, vaqtni behuda o'tkazishga arziydi.

Vertex shader:
Vertex shaderlari qahramonlar, o'tlar, daraxtlarning animatsiyalarini yaratadi, suvda to'lqinlar yaratadi va boshqa deyarli barcha narsalar. Vertex shaderda dasturchi cho'qqilarga tegishli ma'lumotlarga kirish huquqiga ega, masalan: fazodagi cho'qqining koordinatalari, uning tekstura koordinatalari, rangi va normal vektori.

Geometrik shader:
Geometrik shaderlar eng soʻnggi geometriyani yaratishga tayyor va ulardan zarrachalar yaratish, model detallarini tezda sozlash, siluetlarni shakllantirish va boshqalar uchun ishlatilishi mumkin. Oldingi cho'qqidan farqli o'laroq, biz faqat bitta cho'qqini emas, balki butun ibtidoiyni ham qayta ishlashga tayyormiz. Primitiv segment (2 cho'qqi) va uchburchak (3 cho'qqi) bo'lishi mumkin va agar uchburchak ibtidoiy uchun qo'shni cho'qqilar (inglizcha qo'shnilik) haqida ma'lumot mavjud bo'lsa, 6 tagacha ishlov berilishi mumkin.

Pixel Shader:
Piksel shaderlari teksturani xaritalash, yoritish va aks ettirish, sinish, tuman, Bump xaritalash va boshqalar kabi turli tekstura effektlarini amalga oshiradi. Piksel shaderlari ham xuddi shunday post effektlari uchun ishlatiladi. Piksel shaderi bitmap momentlari va teksturalari bilan ishlaydi - u piksellar bilan bog'liq ma'lumotlarni qayta ishlaydi (masalan, rang, chuqurlik, tekstura koordinatalari). Piksel shaderi tasvirning bir qismini hosil qilish uchun grafik quvur liniyasining oxirgi bosqichida ishlatiladi.

Xulosa: shader - bu rasmga turli effektlar, xuddi siz telefoningizda suratingizni turli ohanglar yoki naqshlarda qayta ishlaganingiz kabi.

"itemprop =" rasm ">

"Shaderlar nima?" Qiziquvchan o'yinchilar va yangi o'yin ishlab chiquvchilar tomonidan juda keng tarqalgan savol. Ushbu maqolada men sizga bu dahshatli shaderlar haqida aniq va tushunarli tarzda aytib beraman.

Men kompyuter o'yinlarini kompyuter grafikasidagi fotorealistik tasvirlar tomon taraqqiyotning dvigateli deb bilaman, shuning uchun video o'yinlar kontekstida "shaderlar" nima ekanligi haqida gapiraylik.

Birinchi grafik tezlatgichlar paydo bo'lishidan oldin, video o'yinning ramkalarini ko'rsatish bo'yicha barcha ishlar zaif markaziy protsessor tomonidan bajarilgan.

Ramka chizish - bu juda oddiy ish: siz "geometriya" - ko'pburchak modellarni (dunyo, xarakter, qurol va boshqalar) olishingiz va uni rasterlashingiz kerak. Rasterizatsiya nima? Butun 3D modeli eng kichik uchburchaklardan iborat bo'lib, rasterizator ularni pikselga aylantiradi (ya'ni "rasterlash" pikselga aylantirishni anglatadi). Rasterlashdan so'ng, tekstura ma'lumotlarini, yorug'lik parametrlarini, tumanni va hokazolarni oling va o'yinchiga ko'rsatiladigan o'yin ramkasining har bir natijaviy pikselini hisoblang.

Shunday qilib, markaziy protsessor (CPU - Central Processing Unit) juda aqlli yigit bo'lib, uni bunday tartibni bajarishga majbur qiladi. Buning o'rniga, muhimroq intellektual ishlarni bajarishi uchun protsessorni yuklaydigan qandaydir apparat modulini ajratish mantiqan to'g'ri.

Bunday apparat moduli grafik tezlatkich yoki video karta (GPU - Graphics Processing Unit) hisoblanadi. Endi protsessor ma'lumotlarni tayyorlaydi va hamkasbini muntazam ish bilan yuklaydi. GPU endi faqat bitta hamkasbi emasligini hisobga olsak, u ko'plab minion yadrolari, keyin u bir vaqtning o'zida bunday ish bilan shug'ullanadi.

Ammo biz hali ham asosiy savolga javob olmadik: shaderlar nima? Kutib turing, men bunga erishyapman.

Chiroyli, qiziqarli va fotorealizmga yaqin grafika video kartalarni ishlab chiquvchilardan apparat darajasida ko'plab algoritmlarni amalga oshirishni talab qildi. Soyalar, yorug'lik, yorug'lik va boshqalar. Ushbu yondashuv - algoritmlarni apparatda amalga oshirish bilan "Ruxsat etilgan quvur liniyasi yoki quvur liniyasi" deb nomlanadi va yuqori sifatli grafika talab qilinadigan joylarda u endi topilmaydi. Uning o'rnini Dasturlashtiriladigan quvur liniyasi egalladi.

O'yinchilarning iltimoslari “Kelinglar, yaxshi grafoniy olib kelinglar! ajablanib! ”, o'yin ishlab chiqaruvchilarni (va mos ravishda video karta ishlab chiqaruvchilarni) tobora murakkab algoritmlarga undadi. Hozircha, bir nuqtada, ular uchun qattiq simli apparat algoritmlari etarli emas.

Endi grafik kartalar yanada aqlli bo'lish vaqti. Qaror ishlab chiquvchilarga GPU bloklarini turli xil algoritmlarni amalga oshiradigan ixtiyoriy quvurlarga dasturlash imkonini berish uchun qabul qilindi. Ya'ni, o'yin ishlab chiquvchilar, grafik dasturchilar endi video kartalar uchun dasturlar yozishga muvaffaq bo'lishdi.

Va nihoyat, biz asosiy savolimizga javobga keldik.

"Shaderlar nima?"

Shader (inglizcha shader - shading dasturi) - bu uch o'lchamli grafikada ob'ekt yoki tasvirning yakuniy parametrlarini aniqlash uchun ishlatiladigan video karta uchun dastur bo'lib, u yorug'likning yutilishi va tarqalishi tavsifini, teksturani xaritalashni, aks ettirishni va o'z ichiga olishi mumkin. sinishi, soya, sirt siljishi va boshqalar ko'plab boshqa parametrlar.

Shaderlar nima? Misol uchun, siz ushbu effektni olishingiz mumkin, bu sharga qo'llaniladigan suv shaderidir.

Grafik quvur liniyasi

Dasturlashtiriladigan quvur liniyasining avvalgisidan afzalligi shundaki, endi dasturchilar o'zlarining algoritmlarini mustaqil ravishda yaratishlari mumkin va qattiq simli variantlar to'plamidan foydalanmaydilar.

Dastlab, video kartalar turli xil ko'rsatmalar to'plamini qo'llab-quvvatlaydigan bir nechta maxsus protsessorlar bilan jihozlangan. Shaderlar qaysi protsessor ularni bajarishiga qarab uch turga bo'lingan. Ammo keyin video kartalar har uch turdagi shaderlar uchun ko'rsatmalar to'plamini qo'llab-quvvatlaydigan universal protsessorlar bilan jihozlana boshladi. Shaderning maqsadini tavsiflash uchun shaderlarning turlarga bo'linishi saqlanib qolgan.

Bunday aqlli video kartalar bilan grafik vazifalarga qo'shimcha ravishda, GPUda umumiy maqsadli hisob-kitoblarni (kompyuter grafikasi bilan bog'liq bo'lmagan) amalga oshirish mumkin bo'ldi.

Birinchi marta shaderlarni to'liq qo'llab-quvvatlash GeForce 3 seriyali video kartalarida paydo bo'ldi, ammo boshlanishi GeForce256 da (Register Combiners shaklida) amalga oshirildi.

Shader turlari

Quvurning bosqichiga qarab, shaderlar bir nechta turlarga bo'linadi: vertex, fragment (piksel) va geometrik. Va quvur liniyalarining so'nggi turlarida, shuningdek, tessellation shaderlar ham mavjud. Biz grafik quvur liniyasini batafsil muhokama qilmaymiz, men hali ham shaderlar va grafik dasturlashni o'rganishga qaror qilganlar uchun bu haqda alohida maqola yozishni o'ylayapman. Agar qiziqsangiz, izohlarda yozing, vaqtni behuda sarflashga arziydimi yoki yo'qligini bilib olaman.

Vertex shader

Vertex shaderlari qahramonlar, o'tlar, daraxtlarning animatsiyalarini yaratadi, suvda to'lqinlar yaratadi va boshqa ko'p narsalar. Vertex shaderda dasturchi cho'qqilarga tegishli ma'lumotlarga kirish huquqiga ega, masalan: fazodagi cho'qqining koordinatalari, uning tekstura koordinatalari, rangi va normal vektori.

Geometrik shader

Geometrik shaderlar yangi geometriyani yaratishga qodir va ulardan zarrachalarni yaratish, model detallarini tezda o'zgartirish, siluetlarni yaratish va boshqalar uchun ishlatilishi mumkin. Oldingi cho'qqidan farqli o'laroq, ular faqat bitta cho'qqini emas, balki butun ibtidoiyni ham qayta ishlashga qodir. Primitiv segment (ikki cho'qqi) va uchburchak (uch cho'qqi) bo'lishi mumkin va agar uchburchak ibtidoiy uchun qo'shni cho'qqilar (inglizcha qo'shnilik) haqida ma'lumot mavjud bo'lsa, oltitagacha cho'qqilarni qayta ishlash mumkin.

Piksel shader

Piksel shaderlari teksturani xaritalash, yoritish va aks ettirish, sinish, tuman, Bump xaritalash va boshqalar kabi turli tekstura effektlarini amalga oshiradi. Piksel shaderlari post effektlar uchun ham ishlatiladi.

Piksel shaderi bitmap bo'laklari va teksturalari bilan ishlaydi - u piksellar bilan bog'liq ma'lumotlarni qayta ishlaydi (masalan, rang, chuqurlik, tekstura koordinatalari). Piksel shaderi grafik truboprovodning oxirgi bosqichida tasvirning bir qismini hosil qilish uchun ishlatiladi.

Shaderlar nima yozadi?

Dastlab, shaderlarni assemblerga o'xshash tilda yozish mumkin edi, ammo keyinchalik Cg, GLSL va HLSL kabi C tiliga o'xshash yuqori darajadagi shader tillari paydo bo'ldi.

Bunday tillar C ga qaraganda ancha sodda, chunki ular yordamida hal qilinadigan vazifalar ancha sodda. Bunday tillardagi turdagi tizim grafik dasturchilarning ehtiyojlarini aks ettiradi. Shuning uchun ular dasturchiga maxsus ma'lumotlar turlarini beradi: matritsalar, namuna oluvchilar, vektorlar va boshqalar.

RenderMan

Biz yuqorida muhokama qilgan hamma narsa real vaqt grafiklari bilan bog'liq. Ammo real vaqtda bo'lmagan grafikalar mavjud. Farqi nimada - real vaqt - real vaqt, ya'ni bu erda va hozir - o'yinda soniyasiga 60 kvadrat berish, bu real vaqtda jarayon. Ammo zamonaviy animatsiya uchun murakkab ramkani bir necha daqiqaga ko'rsatish real vaqtda emas. Mohiyat o'z vaqtida.

Misol uchun, biz real vaqtda Pixar studiyasining so'nggi animatsion filmlaridagi kabi sifatli grafikalarni ololmaymiz. Juda katta render fermalari yorug'lik simulyatsiyalarini butunlay boshqa algoritmlar yordamida hisoblab chiqadi, juda qimmat, lekin deyarli fotoreal tasvirlarni beradi.

Sand piper-da super real grafikalar

Misol uchun, bu yoqimli multfilmga qarang, qum donalari, qush patlari, to'lqinlar, hamma narsa ajoyib darajada haqiqiy ko'rinadi.

* Youtube-dan videolarni taqiqlash mumkin, agar ular ochilmasa, google pixar sandpiper - jasur qumloq haqidagi qisqa multfilm juda yoqimli va bekamu ko'st. Kompyuter grafikasi qanchalik ajoyib bo'lishi mumkinligini teginish va namoyish etadi.

Demak, bu Pixardan RenderMan. Bu birinchi shader dasturlash tiliga aylandi. RenderMan API professional renderlash uchun de-fakto standart bo‘lib, Pixarning barcha ishlarida va undan tashqarida qo‘llaniladi.

Foydali ma'lumotlar

Endi siz shaderlar nima ekanligini bilasiz, ammo shaderlardan tashqari, o'yinni ishlab chiqish va kompyuter grafikasida sizni qiziqtiradigan boshqa juda qiziqarli mavzular ham mavjud:

  • zamonaviy video o'yinlarda ajoyib effektlarni yaratish texnikasi. Unity3d-da effektlarni yaratish bo'yicha qo'llanmalar bilan umumiy maqola va video
  • - Agar siz video o'yinlarni professional martaba yoki sevimli mashg'ulot sifatida rivojlantirish haqida o'ylayotgan bo'lsangiz, ushbu maqolada "qayerdan boshlash kerak", "qanday kitoblarni o'qish kerak" va hokazo tavsiyalar mavjud.

Savollaringiz bo'lsa

Odatdagidek, agar sizda hali ham savollaringiz bo'lsa, ularni sharhlarda so'rang, men har doim javob beraman. Har qanday yaxshi so'z yoki xatolarni tuzatish uchun men juda minnatdorman.

Sizga maqola yoqdimi? Do'stlar bilan baham ko'rish uchun: