Ի՞նչ են շեյդերները խաղում: Ինչպե՞ս տեղադրել շեյդերներ Minecraft-ում: Ինչ պատասխանում են ստվերները:

Համաշխարհային համակարգչայնացման հետ մեկտեղ հսկայական թվով անհասկանալի տերմիններ են հայտնվել մեր աշխարհ: Նրանց բոլորի հետ գործ ունենալն այնքան էլ հեշտ չէ, որքան թվում է առաջին հայացքից: Նրանցից շատերն ունեն նմանատիպ անուններ, շատերն ունեն լայն ֆունկցիոնալություն: Ժամանակն է պարզել, թե ինչ է shader-ը, որտեղից է այն եկել, ինչի համար է այն և ինչ է տեղի ունենում:

Օպտիմիզատոր

Ամենայն հավանականությամբ, դուք Minecraft-ի մոլի խաղացող եք և այդ պատճառով եկել եք պարզելու, թե ինչ է դա: Անմիջապես պետք է նշել, որ «շեյդեր» հասկացությունը անաղմուկ առանձնացված է այս խաղից և կարող է «ապրել» նրանից առանձին։ Ճիշտ այնպես, ինչպես mods. Ուստի անհրաժեշտ չէ սերտորեն կապել այս երկու հասկացությունները։

Ընդհանրապես, շեյդերը գալիս է ծրագրավորումից, այն հայտնվել է որպես մասնագետների օգնական։ Հավանաբար, այս գործիքը օպտիմիզատոր անվանելը բարձրաձայն կլինի, բայց այն իսկապես լավացնում է պատկերը խաղերում։ Այսպիսով, երբ արդեն սկսել եք մոտավորապես հասկանալ, թե դա ինչ է, եկեք անցնենք ճշգրիտ մեկնաբանությանը:

Մեկնաբանություն

Ի՞նչ է ստվերը: որն իրականացվում է վիդեո քարտի պրոցեսորների կողմից։ Այս գործիքները մշակված են հատուկ լեզվով: Կախված նպատակից՝ այն կարող է տարբեր լինել։ Դրանից հետո շեյդերները պայմանականորեն թարգմանվում են գրաֆիկական արագացուցիչ պրոցեսորների հրահանգների:

Դիմում

Անմիջապես պետք է ասել, որ հայտը որպես ամբողջություն կանխորոշված ​​է նպատակով։ Ծրագրերը ներկառուցված են վիդեո քարտերի պրոցեսորներում, ինչը նշանակում է, որ դրանք աշխատում են առարկաների պարամետրերի և եռաչափ գրաֆիկայի պատկերների վրա: Նրանք կարող են կատարել բազմաթիվ առաջադրանքներ, այդ թվում՝ աշխատանք արտացոլման, բեկման, մթության, կտրող էֆեկտների և այլնի հետ:

Նախադրյալ

Մարդիկ երկար ժամանակ փորձում էին պարզել, թե ինչ է ստվերը։ Նույնիսկ այս ծրագրերից առաջ մշակողները ամեն ինչ անում էին ձեռքով: Որոշ օբյեկտներից պատկեր կազմելու գործընթացը ավտոմատացված չէր։ Մինչ խաղի ծնվելը, մշակողները արել են իրենց սեփական ռենդերը։ Նրանք աշխատել են ալգորիթմի հետ, կազմել տարբեր առաջադրանքների համար։ Այսպես հայտնվեցին հյուսվածքների, վիդեո էֆեկտների կիրառման հրահանգներ և այլն։

Իհարկե, որոշ գործընթացներ դեռևս ներկառուցված էին վիդեո քարտերի շահագործման մեջ: Մշակողները կարող են օգտագործել նման ալգորիթմներ: Բայց նրանք չկարողացան իրենց ալգորիթմները պարտադրել վիդեո քարտին։ Ոչ ստանդարտ հրահանգները կարող էին իրականացվել CPU-ի կողմից, որն ավելի դանդաղ էր, քան GPU-ն:

Օրինակ

Տարբերությունը հասկանալու համար արժե դիտարկել մի քանի օրինակ։ Ակնհայտ է, որ խաղի մեջ մատուցումը կարող է լինել ապարատային և ծրագրային ապահովում: Օրինակ, մենք բոլորս հիշում ենք հայտնի Quake 2-ը: Այսպիսով, խաղի ջուրը կարող է պարզապես կապույտ զտիչ լինել, երբ խոսքը գնում է ապարատային ռենդերի մասին: Բայց ծրագրային միջամտությամբ ջրի շիթ հայտնվեց։ Նույն պատմությունը co-ի հետ CS 1.6-ում: Սարքավորումների վերարտադրումը տալիս էր միայն սպիտակ լուսարձակում, մինչդեռ ծրագրային ապահովումը ավելացնում էր պիքսելացված էկրան:

Մուտք

Այսպիսով, պարզ դարձավ, որ անհրաժեշտ է լուծել նման խնդիրները։ Գրաֆիկական արագացուցիչները սկսեցին ընդլայնել ալգորիթմների թիվը, որոնք հայտնի էին մշակողների շրջանում: Պարզ դարձավ, որ հնարավոր չէ ամեն ինչ «թափել»։ Անհրաժեշտ էր մասնագետների համար բացել մուտքը դեպի վիդեո քարտ։

Նախքան խաղերը, ինչպիսիք են Minecraft-ը, մոդայիկներով և շեյդերներով, ծրագրավորողներին հնարավորություն տրվեց աշխատել GPU բլոկների հետ խողովակաշարերի մեջ, որոնք կարող էին պատասխանատու լինել տարբեր հրահանգների համար: Այսպիսով, հայտնի դարձան «shader» անվանումով հաղորդումները։ Դրանք ստեղծելու համար հատուկ մշակված ծրագրավորման լեզուներ։ Այսպիսով, վիդեո քարտերը սկսեցին բեռնվել ոչ միայն ստանդարտ «երկրաչափությամբ», այլև պրոցեսորի հրահանգներով:

Երբ նման մուտքը հնարավոր դարձավ, սկսեցին բացվել ծրագրավորման նոր հնարավորություններ: Մասնագետները կարող էին լուծել մաթեմատիկական խնդիրներ GPU-ի վրա: Նման հաշվարկները հայտնի են դարձել որպես GPGPU։ Այս գործընթացը պահանջում էր հատուկ գործիքներ: nVidia CUDA-ից, Microsoft DirectCompute-ից, ինչպես նաև OpenCL շրջանակից:

Տեսակներ

Որքան շատ մարդիկ իմացան, թե ինչ են շեյդերները, այնքան ավելի շատ տեղեկություններ էին բացահայտվում նրանց և նրանց հնարավորությունների մասին: Սկզբում արագացուցիչներն ունեին երեք պրոցեսոր։ Յուրաքանչյուրը պատասխանատու էր իր տեսակի ստվերների համար: Ժամանակի ընթացքում դրանք փոխարինվեցին ունիվերսալով: Յուրաքանչյուրն ուներ հրահանգների որոշակի հավաքածու, որոնք ունեին միանգամից երեք տեսակի ստվերներ: Չնայած ստեղծագործության միաձուլմանը, յուրաքանչյուր տեսակի նկարագրությունը պահպանվել է մինչ օրս:

Գագաթային տիպն աշխատում էր բազմաթիվ դեմքեր ունեցող ձևերի գագաթներով: Այստեղ ներգրավված են բազմաթիվ գործիքներ: Օրինակ՝ խոսքը հյուսվածքային կոորդինատների, շոշափող վեկտորների, երկնորմալների կամ նորմալների մասին է։

Երկրաչափական տիպն աշխատում էր ոչ միայն մեկ գագաթով, այլ ամբողջ պարզունակով։ Pixel one-ը նախատեսված էր ռաստերային նկարազարդումների և ընդհանրապես հյուսվածքների բեկորների մշակման համար:

Խաղերում

Եթե ​​դուք փնտրում եք ստվերներ Minecraft 1.5.2-ի համար, ապա, ամենայն հավանականությամբ, պարզապես ցանկանում եք բարելավել խաղի պատկերը: Դա հնարավոր դարձնելու համար ծրագրերն անցել են «հրդեհային, ջրի, պղնձե խողովակներով»։ Ստվերները փորձարկվել և կատարելագործվել են: Արդյունքում պարզ դարձավ, որ այս գործիքն ունի առավելություններ և թերություններ։

Իհարկե, տարբեր ալգորիթմներ կազմելու պարզությունը հսկայական գումար է: Սա և՛ ճկունություն է, և՛ նկատելի պարզեցում խաղի մշակման գործընթացում, և, հետևաբար, ինքնարժեքի նվազում։ Ստացված վիրտուալ տեսարանները դառնում են ավելի բարդ և իրատեսական: Բացի այդ, զարգացման գործընթացն ինքնին շատ անգամ ավելի արագ է դառնում:

Թերություններից հարկ է նշել միայն այն, որ դուք ստիպված կլինեք սովորել ծրագրավորման լեզուներից մեկը, ինչպես նաև հաշվի առնել, որ վիդեո քարտերի տարբեր մոդելներում առկա է ալգորիթմների այլ շարք:

Տեղադրում

Եթե ​​դուք գտել եք ստվերային փաթեթ Minecraft-ի համար, ապա պետք է հասկանաք, որ այն տեղադրելիս շատ թակարդներ կան: Չնայած այս խաղի արդեն անհետացող ժողովրդականությանը, նրա հավատարիմ երկրպագուները դեռևս մնում են: Ոչ բոլորն են սիրում գրաֆիկա, հատկապես 2017 թ. Ոմանք կարծում են, որ շեյդերների շնորհիվ նրանք կկարողանան բարելավել այն։ Տեսականորեն այս պնդումը ճիշտ է։ Բայց գործնականում դուք քիչ կփոխվեք։

Բայց եթե դեռ ուղիներ եք փնտրում Minecraft 1.7-ի համար, ապա, առաջին հերթին, զգույշ եղեք: Գործընթացն ինքնին դժվար չէ. Բացի այդ, ցանկացած ներբեռնված ֆայլի հետ մեկտեղ կա դրա տեղադրման հրահանգ։ Գլխավորը խաղի և շեյդերի տարբերակները ստուգելն է։ Հակառակ դեպքում, օպտիմիզատորը չի աշխատի:

Ինտերնետում կան բազմաթիվ վայրեր, որտեղ դուք կարող եք տեղադրել և ներբեռնել նման գործիք: Հաջորդը, դուք պետք է unzip արխիվը ցանկացած թղթապանակում: Այնտեղ դուք կգտնեք «GLSL-Shaders-Mod-1.7-Installer.jar» ֆայլը: Սկսելուց հետո ձեզ ցույց կտա խաղի ուղին, եթե այն ճիշտ է, ապա համաձայնեք բոլոր հետագա հրահանգների հետ:

Այն բանից հետո, երբ դուք պետք է տեղափոխեք «shaderpacks» թղթապանակը «.minecraft»: Այժմ, երբ գործարկեք գործարկիչը, դուք պետք է գնաք կարգավորումներ: Այստեղ, եթե տեղադրումը ճիշտ է անցել, կհայտնվի «Shaders» տողը: Ամբողջ ցանկից կարող եք ընտրել ցանկալի փաթեթը:

Եթե ​​Ձեզ անհրաժեշտ են շեյդերներ Minecraft 1.7.10-ի համար, ապա պարզապես գտեք ցանկալի տարբերակի shaderpack-ը և արեք նույնը։ Անկայուն տարբերակները կարող են հայտնաբերվել ինտերնետում: Երբեմն դուք պետք է փոխեք դրանք, նորից տեղադրեք և փնտրեք ճիշտը: Ավելի լավ է դիտել ակնարկները և ընտրել ամենահայտնիները:

Ներածություն

Եռաչափ գրաֆիկայի աշխարհը, ներառյալ խաղերը, լցված է տերմիններով: Տերմիններ, որոնք միշտ չէ, որ ունեն միակ ճիշտ սահմանումը։ Երբեմն նույն բաներն այլ կերպ են կոչվում, և հակառակը, խաղի կարգավորումներում նույն էֆեկտը կարելի է անվանել կամ «HDR», ապա «Bloom», ապա «Glow», ապա «Postprocessing»: Մշակողների մեծամասնությունը պարծենում է, թե ինչ են ներկառուցել իրենց գրաֆիկական շարժիչի մեջ, պարզ չէ, թե իրականում ինչի մասին է խոսքը:

Հոդվածը նպատակ ունի օգնելու հասկանալ, թե ինչ են նշանակում այս բառերից մի քանիսը, որոնք առավել հաճախ օգտագործվում են նման դեպքերում: Այս հոդվածի շրջանակներում մենք չենք խոսի 3D գրաֆիկայի բոլոր տերմինների մասին, այլ միայն նրանց մասին, որոնք վերջերս ավելի տարածված են դարձել որպես խաղային գրաֆիկական շարժիչներում օգտագործվող տարբերակիչ հատկանիշներ և տեխնոլոգիաներ և որպես ժամանակակից խաղերի գրաֆիկական պարամետրերի անվանումներ: Սկսելու համար խստորեն խորհուրդ եմ տալիս ծանոթանալ:

Եթե ​​այս հոդվածում և Ալեքսանդրի հոդվածներում ինչ-որ բան ձեզ համար պարզ չէ, ապա իմաստ ունի սկսել ամենավաղից՝ սկսած։ Այս հոդվածներն արդեն որոշակիորեն հնացած են, իհարկե, բայց հիմնական, ամենասկզբնական և կարևոր տվյալները կան։ Կխոսենք ավելի շատ «բարձր մակարդակի» տերմինների մասին։ Դուք պետք է ունենաք իրական ժամանակի 3D գրաֆիկայի և գրաֆիկական խողովակաշարի նախագծման հիմնական հասկացությունները: Մյուս կողմից, մի ակնկալեք մաթեմատիկական բանաձևեր, ակադեմիական ճշգրտություն և կոդերի օրինակներ. այս հոդվածը դրա համար չէ: Պայմանները

Հոդվածում նկարագրված տերմինների ցանկը.

ստվերային

Շեյդերը լայն իմաստով առարկայի մակերեսը տեսողականորեն որոշելու ծրագիր է։ Սա կարող է լինել լուսավորության, հյուսվածքների, հետմշակման և այլնի նկարագրություն: Շեյդերները առաջացել են Cook-ի (Cook's shade trees) և Perlin-ի (Perlin-ի պիքսելային հոսքի լեզու) աշխատանքից: Այժմ ամենահայտնի շեյդերները RenderMan Shading Language-ն են: Ծրագրավորվող շեյդերներն առաջին անգամ ներդրվել են Pixar-ի RenderMan-ում, սահմանվել են ստվերների մի քանի տեսակներ: այնտեղ՝ լույսի աղբյուրի շեյդերներ, մակերեսային շեյդերներ, տեղաշարժման շեյդերներ, ծավալի շեյդերներ, պատկերազերծիչներ: Այս շեյդերները ամենից հաճախ ծրագրային ապահովման մեջ գործարկվում են հիմնական պրոցեսորների կողմից և չունեն ամբողջական ապարատային ներդրում: Ավելին, շատ հետազոտողներ նկարագրել են RenderMan-ի նման լեզուներ: բայց դրանք արդեն նախագծված էին ապարատային արագացման համար. PixelFlow համակարգը (Olano և Lastra), Quake Shader Language (օգտագործվում է id Software-ի կողմից Quake III խաղի գրաֆիկական շարժիչում, որը նկարագրում էր բազմապատիկ փոխանցումը) և այլն: Peercy et al. մշակեցին Ավանդական ապարատային ճարտարապետությունների վրա օղակներով և պայմաններով ծրագրեր գործարկելու տեխնիկա՝ օգտագործելով բազմաթիվ մատուցման անցումներ: RenderMan-ի շեյդերները բաժանվեցին մի քանիսի Միայն այն անցումները, որոնք համակցվել են framebuffer-ում: Ավելի ուշ հայտնվեցին լեզուներ, որոնք մենք տեսնում ենք արագացված ապարատներ DirectX-ում և OpenGL-ում: Ահա թե ինչպես են շեյդերները հարմարեցվել իրական ժամանակի գրաֆիկական հավելվածների համար:

Վաղ վիդեո չիպերը ծրագրավորվող չէին և կատարում էին միայն նախապես ծրագրավորված գործողություններ (ֆիքսված ֆունկցիա), օրինակ՝ լուսավորության ալգորիթմը կոշտ ամրագրված էր սարքաշարում, և ոչինչ հնարավոր չէր փոխել: Այնուհետև վիդեո չիպերի ընկերությունները աստիճանաբար ներմուծեցին ծրագրավորելիության տարրեր իրենց չիպերի մեջ, սկզբում դա շատ թույլ հնարավորություններ էր (NV10, որը հայտնի է որպես NVIDIA GeForce 256, արդեն ընդունակ էր որոշ պարզունակ ծրագրերի), որոնք ծրագրային աջակցություն չստացան Microsoft DirectX API-ում, բայց ժամանակի ընթացքում հնարավորություններն անընդհատ ընդլայնվում են: Հաջորդ քայլը վերաբերում էր և՛ NV20-ին (GeForce 3), և՛ NV2A-ին (տեսաչիպը, որն օգտագործվում է Microsoft Xbox խաղային վահանակում), որը դարձավ առաջին չիպսերը, որոնք ապահովված էին DirectX API shaders-ների համար: Shader Model 1.0/1.1 տարբերակը, որը հայտնվեց DirectX 8-ում, շատ սահմանափակ էր, յուրաքանչյուր շեյդեր (հատկապես պիքսելները) կարող էր լինել համեմատաբար փոքր երկարությամբ և միավորել շատ սահմանափակ հրամանների շարք: Ավելի ուշ Shader Model 1-ը (կարճ SM1) բարելավվեց Pixel Shaders 1.4 տարբերակով (ATI R200), որն ավելի շատ ճկունություն էր առաջարկում, բայց նաև չափազանց սահմանափակ էր: Այն ժամանակվա շեյդերները գրված էին, այսպես կոչված, assembly shader լեզվով, որը մոտ է ունիվերսալ պրոցեսորների համար նախատեսված assembler-ին։ Դրա ցածր մակարդակը դժվարացնում է կոդը և ծրագրավորումը հասկանալը, հատկապես, երբ ծրագրային կոդը մեծ է, քանի որ այն հեռու է ժամանակակից ծրագրավորման լեզուների նրբագեղությունից և կառուցվածքից։

Shader Model 2.0 (SM2), որը հայտնվեց DirectX 9-ում (որին աջակցում էր ATI R300 վիդեո չիպը, որը դարձավ առաջին GPU-ն, որն աջակցեց shader մոդելի 2.0 տարբերակին), մեծապես ընդլայնեց իրական ժամանակի շեյդերների հնարավորությունները՝ առաջարկելով ավելի երկար և ավելին: բարդ շեյդերներ և հրամանների նկատելիորեն ընդլայնված շարք: Ավելացվեց պիքսելային շեյդերներում լողացող կետի հաշվարկների հնարավորությունը, ինչը նույնպես լուրջ բարելավում էր: DirectX 9-ը, SM2-ի հնարավորությունների տեսքով, ներկայացրեց նաև բարձր մակարդակի շեյդեր լեզու (HLSL), որը շատ նման է C լեզվին։ Եվ արդյունավետ կոմպիլյատոր, որը HLSL ծրագրերը թարգմանում է սարքաշարի կողմից «հասկանալի» ցածր մակարդակի կոդի: Ավելին, հասանելի են մի քանի պրոֆիլներ, որոնք նախատեսված են տարբեր ապարատային ճարտարապետության համար: Այժմ ծրագրավորողը կարող է գրել մեկ HLSL shader կոդ և այն կազմել DirectX-ի միջոցով՝ օգտվողի կողմից տեղադրված վիդեո չիպի համար օպտիմալ ծրագրի մեջ: Դրանից հետո դուրս եկան NVIDIA, NV30 և NV40 չիպեր, որոնք ևս մեկ քայլով բարելավեցին ապարատային շեյդերների հնարավորությունները՝ ավելացնելով էլ ավելի երկար շեյդերներ, գագաթային և պիքսելային շեյդերներում դինամիկ անցումների հնարավորություն, գագաթային շեյդերներից հյուսվածքներ ստանալու հնարավորություն։ Այդ ժամանակից ի վեր որակական փոփոխություններ չեն եղել, դրանք սպասվում են 2006 թվականի վերջին DirectX 10-ում ...

Ընդհանուր առմամբ, շեյդերները շատ նոր հնարավորություններ են ավելացրել գրաֆիկական խողովակաշարին՝ վերափոխելու և լուսավորելու գագաթները և անհատականացնելու պիքսելներն այնպես, ինչպես ցանկանում են յուրաքանչյուր կոնկրետ հավելվածի մշակողները: Եվ այնուամենայնիվ, ապարատային շեյդերների հնարավորությունները դեռ ամբողջությամբ չեն բացահայտվել հավելվածներում, և յուրաքանչյուր նոր սերնդի ապարատում դրանց հնարավորությունների աճով մենք շուտով կտեսնենք նույն RenderMan շեյդերների մակարդակը, որը ժամանակին անհասանելի էր թվում խաղային վիդեո արագացուցիչների համար։ . Մինչ այժմ, իրական ժամանակի շեյդերների մոդելներում, որոնք ներկայումս աջակցվում են ապարատային վիդեո արագացուցիչների կողմից, սահմանվում են միայն երկու տեսակի շեյդերներ՝ և (DirectX 9 API-ի սահմանման մեջ): Ապագայում DirectX 10-ը խոստանում է ավելացնել:

Vertex Shader (Vertex Shader)

Vertex shaders-ը վիդեո չիպերով իրականացվող ծրագրեր են, որոնք կատարում են մաթեմատիկական գործողություններ գագաթներով (գագաթ, խաղերում դրանք կազմում են 3D առարկաներ), այլ կերպ ասած՝ հնարավորություն են տալիս ծրագրավորվող ալգորիթմներ իրականացնել գագաթի պարամետրերը փոխելու և դրանք լուսավորելու համար (T&L - Transform & Լուսավորություն): Յուրաքանչյուր գագաթ սահմանվում է մի քանի փոփոխականներով, օրինակ՝ գագաթի դիրքը 3D տարածության մեջ սահմանվում է կոորդինատներով՝ x, y և z: Գագաթները կարող են նկարագրվել նաև գունային բնութագրերով, հյուսվածքային կոորդինատներով և այլն: Vertex shaders, կախված ալգորիթմներից, փոխում են այս տվյալները իրենց աշխատանքի ընթացքում, օրինակ՝ հաշվարկելով և գրելով նոր կոորդինատներ և/կամ գույն։ Այսինքն, գագաթային ստվերային մուտքագրումը տվյալ պահին մշակման փուլում գտնվող երկրաչափության մեկ գագաթի մասին է: Սովորաբար դրանք տարածության կոորդինատներ են, նորմալ, գունային բաղադրիչներ և հյուսվածքային կոորդինատներ: Կատարված ծրագրի արդյունքում ստացված տվյալները ծառայում են որպես խողովակաշարի հաջորդ մասի մուտքագրում, ռաստերիզատորը կատարում է մուտքային տվյալների գծային ինտերպոլացիա եռանկյունու մակերեսի համար և յուրաքանչյուր պիքսելի համար կատարում է համապատասխան պիքսելային ստվեր: Շատ պարզ և կոպիտ (բայց, հուսով եմ, պատկերավոր) օրինակ՝ vertex shader-ը թույլ է տալիս վերցնել 3D գնդային օբյեկտ և օգտագործել vertex shader՝ այն վերածել կանաչ խորանարդի :):

Մինչ NV20 վիդեո չիպի հայտնվելը, մշակողները երկու ճանապարհ ունեին՝ կամ օգտագործել իրենց սեփական ծրագրերն ու ալգորիթմները, որոնք փոխում են գագաթի պարամետրերը, բայց այնուհետև բոլոր հաշվարկները պետք է կատարվեին պրոցեսորի կողմից (ծրագրային T&L), կամ հիմնվեին տեսանյութի ֆիքսված ալգորիթմների վրա։ չիպսեր՝ ապարատային փոխակերպման և լուսավորության աջակցությամբ (ապարատային T&L): DirectX shader-ի առաջին մոդելը մեծ քայլ էր դեպի վերափոխման և գագաթային լուսավորության ֆիքսված գործառույթներից մինչև լիովին ծրագրավորվող ալգորիթմներ: Հնարավոր է դարձել, օրինակ, սափրագլուխների ալգորիթմն ամբողջությամբ կատարել վիդեո չիպերի վրա, իսկ մինչ այդ միակ հնարավորությունը դրանց կատարումն էր ունիվերսալ կենտրոնական պրոցեսորների վրա։ Այժմ, նշված NVIDIA չիպի ժամանակներից ի վեր զգալիորեն բարելավված հնարավորություններով, դուք արդեն կարող եք շատ բան անել գագաթներով՝ օգտագործելով vertex shaders (բացառությամբ դրանք ստեղծելու, հավանաբար) ...

Օրինակներ, թե ինչպես և որտեղ են կիրառվում գագաթային ստվերները.

Pixel Shader

Պիկսելային շեյդերները ծրագրեր են, որոնք իրականացվում են վիդեո չիպի կողմից պատկերի յուրաքանչյուր պիքսելի համար ռաստերիզացման ժամանակ, նրանք կատարում են հյուսվածքների նմուշառում և/կամ մաթեմատիկական գործողություններ պիքսելների գույնի և խորության արժեքի (Z-բուֆեր) վրա: Փիքսելային շեյդերների բոլոր հրահանգները կատարվում են պիքսել առ պիքսել երկրաչափության վերափոխման և լուսավորման գործողությունների ավարտից հետո: Պիկսելային ստվերն իր աշխատանքի արդյունքում արտադրում է պիքսելների վերջնական գունային արժեքը և Z արժեքը գրաֆիկական խողովակաշարի հաջորդ փուլի՝ միաձուլման համար: Պիկսելային շեյդերի ամենապարզ օրինակը, որը կարելի է տալ, սովորական մուլտիտեքստուրավորումն է, պարզապես երկու հյուսվածքներ խառնելով (օրինակ՝ ցրված և լուսային քարտեզ) և հաշվարկի արդյունքը կիրառելով պիքսելի վրա:

Մինչև պիքսելային շեյդերների համար ապարատային աջակցությամբ վիդեո չիպերի հայտնվելը, մշակողները ունեին միայն սովորական բազմաշերտ և ալֆա միաձուլման հնարավորությունները, ինչը զգալիորեն սահմանափակում էր բազմաթիվ տեսողական էֆեկտների հնարավորությունները և թույլ չէր տալիս անել այն, ինչ այժմ հասանելի է: Եվ եթե երկրաչափությամբ ծրագրային առումով այլ բան կարելի էր անել, ապա պիքսելներով՝ ոչ: DirectX-ի վաղ տարբերակները (մինչև 7.0-ը ներառյալ) միշտ կատարում էին բոլոր հաշվարկները մեկ գագաթին և առաջարկում էին պիքսելային լուսավորության շատ սահմանափակ գործառույթներ (հիշեք EMBM - միջավայրի բախման քարտեզագրում և DOT3) վերջին տարբերակներում: Պիքսելային շեյդերները հնարավորություն տվեցին պիքսել առ պիքսել լուսավորել ցանկացած մակերես՝ օգտագործելով մշակողների կողմից ծրագրավորված նյութերը: 1.1 պիքսելային շեյդերները, որոնք հայտնվեցին NV20-ում (DirectX-ի իմաստով) կարող էին ոչ միայն մուլտիտեքստուրինգ անել, այլև շատ ավելին, թեև SM1 օգտագործող խաղերի մեծ մասը պարզապես օգտագործում էր ավանդական մուլտիտեքստուրավորում մակերևույթների մեծ մասի վրա՝ կատարելով ավելի բարդ պիքսելային շեյդերներ միայն մի մասի վրա: մակերեսներ, տարբեր հատուկ էֆեկտներ ստեղծելու համար (բոլորը գիտեն, որ ջուրը դեռևս խաղերում պիքսելային շեյդերների օգտագործման ամենատարածված օրինակն է): Այժմ, SM3-ի և դրանց աջակցող վիդեո չիպերի հայտնվելուց հետո, պիքսելային շեյդերների հնարավորություններն աճել են այն աստիճանի, որ նույնիսկ ճառագայթների հետագծումը հնարավոր է իրականացնել նրանց օգնությամբ, թեև առայժմ որոշ սահմանափակումներով:

Պիկսելային ստվերներ օգտագործելու օրինակներ.

Ընթացակարգային հյուսվածքներ (Procedural Textures)

Ընթացակարգային հյուսվածքները հյուսվածքներ են, որոնք նկարագրվում են մաթեմատիկական բանաձևերով: Նման տեքստուրները վիդեո հիշողության մեջ տեղ չեն գրավում, դրանք ստեղծվում են պիքսելային շեյդերի կողմից «թռիչքի վրա», դրանց յուրաքանչյուր տարր (տեքսել) ստացվում է համապատասխան շեյդերի հրամանների կատարման արդյունքում։ Ամենատարածված ընթացակարգային հյուսվածքներն են՝ տարբեր տեսակի աղմուկներ (օրինակ՝ ֆրակտալ աղմուկ), փայտ, ջուր, լավա, ծուխ, մարմար, կրակ և այլն, այսինքն՝ նրանք, որոնք կարելի է մաթեմատիկորեն համեմատաբար պարզ նկարագրել։ Ընթացակարգային հյուսվածքները նաև թույլ են տալիս անիմացիոն հյուսվածքներ՝ մաթեմատիկական բանաձևերի ընդամենը մի փոքր փոփոխությամբ: Օրինակ, այս ձևով ստեղծված ամպերը բավականին պարկեշտ տեսք ունեն և՛ դինամիկայի, և՛ ստատիկ առումով:

Ընթացակարգային հյուսվածքների առավելությունները ներառում են նաև մանրամասների անսահմանափակ մակարդակ յուրաքանչյուր հյուսվածքի համար, պարզապես պիքսելացում չի լինի, հյուսվածքը, ինչպես որ եղել է, միշտ ստեղծվում է դրա ցուցադրման համար անհրաժեշտ չափով: Մեծ հետաքրքրություն է ներկայացնում անիմացիոնը, որի օգնությամբ դուք կարող եք ջրի վրա ալիքներ անել՝ առանց նախապես հաշվարկված անիմացիոն հյուսվածքների օգտագործման։ Նման հյուսվածքների ևս մեկ առավելությունն այն է, որ որքան շատ են դրանք օգտագործվում արտադրանքի մեջ, այնքան քիչ են աշխատում նկարիչների համար (թեև ավելի շատ ծրագրավորողների համար) սովորական հյուսվածքներ ստեղծելու համար:

Ցավոք, պրոցեդուրային հյուսվածքները դեռ պատշաճ կերպով չեն օգտագործվել խաղերում, իրական ծրագրերում դեռ հաճախ ավելի հեշտ է բեռնել սովորական հյուսվածք, վիդեո հիշողության ծավալներն աճում են թռիչքներով և սահմաններով, ամենաժամանակակից արագացուցիչներն արդեն ունեն 512 մեգաբայթ հատուկ վիդեո հիշողություն, որը ձեզ ավելի շատ է պետք, քան ինչ-որ բան զբաղեցնելու համար: Ավելին, նրանք դեռ ավելի հաճախ հակառակն են անում՝ պիքսելների ստվերներում մաթեմատիկան արագացնելու համար օգտագործվում են որոնման աղյուսակներ (LUTs)՝ հաշվարկների արդյունքում ստացված նախապես հաշվարկված արժեքներ պարունակող հատուկ հյուսվածքներ: Յուրաքանչյուր պիքսելի համար մի քանի մաթեմատիկական հրամաններ չհաշվելու համար նրանք պարզապես կարդում են նախապես հաշվարկված արժեքները հյուսվածքից: Բայց որքան հեռու է, այնքան շեշտը պետք է ուղղվի հենց մաթեմատիկական հաշվարկների վրա, վերցրեք նույն նոր սերնդի ATI վիդեո չիպսերը՝ RV530 և R580, որոնք ունեն 12 և 48 պիքսել պրոցեսորներ՝ համապատասխանաբար յուրաքանչյուր 4 և 16 հյուսվածքային միավորի համար: Հատկապես, երբ խոսքը վերաբերում է 3D հյուսվածքներին, քանի որ եթե 2D հյուսվածքները կարող են առանց որևէ խնդրի տեղադրվել արագացուցիչի տեղական հիշողության մեջ, ապա 3D հյուսվածքները շատ ավելի մեծ հիշողություն են պահանջում:

Ընթացակարգային հյուսվածքների օրինակներ.

Bump Mapping/Specular Bump Mapping

Bumpmapping-ը հարթ մակերևույթի վրա բախումների (կամ միկրոռելիեֆի, եթե նախընտրում եք) մոդելավորման տեխնիկա է՝ առանց մեծ հաշվողական ջանքերի և երկրաչափական փոփոխությունների: Մակերեւույթի յուրաքանչյուր պիքսելի համար կատարվում է լուսավորության հաշվարկ՝ հատուկ բարձրության քարտեզի արժեքների հիման վրա, որը կոչվում է bumpmap: Սա սովորաբար 8-բիթանոց սև և սպիտակ հյուսվածք է, և հյուսվածքի գույնի արժեքները քարտեզագրված չեն սովորական հյուսվածքների նման, այլ օգտագործվում են մակերեսի կոշտությունը նկարագրելու համար: Յուրաքանչյուր տեքսելի գույնը որոշում է տեղանքի համապատասխան կետի բարձրությունը, ավելի մեծ արժեքները նշանակում են ավելի մեծ բարձրություն սկզբնական մակերևույթից և ավելի փոքր արժեքներ, համապատասխանաբար, ավելի քիչ: Կամ հակառակը։

Կետի լուսավորության աստիճանը կախված է լույսի ճառագայթների անկման անկյունից։ Որքան փոքր է անկյունը նորմալ և լույսի ճառագայթների միջև, այնքան մեծ է մակերեսի կետի լուսավորությունը: Այսինքն, եթե վերցնենք հարթ մակերես, ապա յուրաքանչյուր կետում նորմալները կլինեն նույնը, և լուսավորությունը նույնպես կլինի նույնը: Եվ եթե մակերեսը անհարթ է (իրականում գրեթե բոլոր մակերեսները իրականում), ապա յուրաքանչյուր կետի նորմերը տարբեր կլինեն: Իսկ լուսավորությունն այլ է՝ մի կետում ավելի շատ կլինի, մյուսում՝ ավելի քիչ։ Այստեղից բխում է bumpmapping-ի սկզբունքը. բազմանկյունի տարբեր կետերի համար անկանոնություններ մոդելավորելու համար սահմանվում են մակերեսի նորմալներ, որոնք հաշվի են առնվում մեկ պիքսելային լուսավորությունը հաշվարկելիս: Արդյունքում ստացվում է մակերևույթի ավելի բնական պատկեր, bumpmapping-ը մակերեսին տալիս է ավելի մեծ մանրամասներ, ինչպիսիք են աղյուսի վրա բախումները, մաշկի ծակոտիները և այլն, առանց մոդելի երկրաչափական բարդությունը մեծացնելու, քանի որ հաշվարկները կատարվում են: դուրս գալ պիքսելային մակարդակում: Ավելին, երբ լույսի աղբյուրի դիրքը փոխվում է, այդ անկանոնությունների լուսավորությունը ճիշտ է փոխվում։

Իհարկե, գագաթային լուսավորությունը հաշվարկային առումով շատ ավելի պարզ է, բայց այն չափազանց անիրատեսական է թվում, հատկապես համեմատաբար ցածր բազմաբնույթ երկրաչափության դեպքում, յուրաքանչյուր պիքսելի համար գունային ինտերպոլացիան չի կարող վերարտադրել ավելի մեծ արժեքներ, քան գագաթների համար հաշվարկված արժեքները: Այսինքն, եռանկյունու մեջտեղի պիքսելները չեն կարող ավելի պայծառ լինել, քան վերևի մոտ գտնվող բեկորները: Հետևաբար, լուսավորության կտրուկ փոփոխություն ունեցող տարածքները, ինչպիսիք են փայլը և մակերեսին շատ մոտ գտնվող լույսերը, ֆիզիկապես ճիշտ չեն ցուցադրվի, և դա հատկապես նկատելի կլինի դինամիկայի մեջ: Իհարկե, խնդիրը կարելի է մասամբ լուծել՝ մեծացնելով մոդելի երկրաչափական բարդությունը, այն բաժանելով ավելի շատ գագաթների և եռանկյունների, բայց պիքսել առ պիքսել լուսավորությունը լավագույն տարբերակը կլինի։

Շարունակելու համար անհրաժեշտ է հիշել լուսավորության բաղադրիչները։ Մակերեւութային կետի գույնը հաշվարկվում է որպես տեսարանի բոլոր լույսերից շրջապատող, ցրված և սպեկուլյար բաղադրիչների գումարը (իդեալական է բոլորից, հաճախ շատերը անտեսվում են): Յուրաքանչյուր լույսի աղբյուրի այս արժեքի ներդրումը կախված է լույսի աղբյուրի և մակերեսի վրա գտնվող կետի միջև եղած հեռավորությունից:

Լուսավորման բաղադրիչներ.

Եվ հիմա եկեք ավելացնենք bumpmapping-ը սրան.

Միատեսակ (շրջակա) լուսավորության բաղադրիչ՝ մոտավորություն, տեսարանի յուրաքանչյուր կետի «սկզբնական» լուսավորություն, որտեղ բոլոր կետերը լուսավորված են հավասարապես, և լուսավորությունը կախված չէ այլ գործոններից։
Լուսավորության ցրված բաղադրիչը կախված է լույսի աղբյուրի դիրքից և մակերեսի նորմալությունից: Լուսավորության այս բաղադրիչը տարբեր է օբյեկտի յուրաքանչյուր գագաթի համար, ինչը նրանց ծավալ է տալիս: Լույսն այլևս չի լցնում մակերեսը նույն երանգով։
Լուսավորության շողալ (սպեկուլյար) բաղադրիչը դրսևորվում է մակերևույթից լույսի ճառագայթների արտացոլման փայլով։ Այն հաշվարկելու համար, բացի լույսի աղբյուրի դիրքի վեկտորից և նորմալից, օգտագործվում են ևս երկու վեկտորներ՝ հայացքի ուղղության վեկտորը և արտացոլման վեկտորը։ Լուսավորության տեսողական մոդելն առաջին անգամ առաջարկվել է Phong-ի կողմից (Phong Bui-Tong): Այս շեշտադրումները մեծապես բարձրացնում են պատկերի ռեալիզմը, քանի որ հազվագյուտ իրական մակերեսները չեն արտացոլում լույսը, ուստի տեսողական բաղադրիչը շատ կարևոր է: Հատկապես շարժման մեջ, քանի որ փայլը անմիջապես ցույց է տալիս տեսախցիկի դիրքի կամ բուն առարկայի փոփոխությունը։ Հետագայում հետազոտողները եկան այս բաղադրիչը հաշվարկելու այլ եղանակներ, ավելի բարդ (Blinn, Cook-Torrance, Ward), հաշվի առնելով լույսի էներգիայի բաշխումը, նյութերի կողմից դրա կլանումը և ցրումը ցրված բաղադրիչի տեսքով:

Այսպիսով, Specular Bump Mapping-ը ստացվում է հետևյալ կերպ.

Եվ նույնը տեսնենք խաղի օրինակով՝ Call of Duty 2:


Նկարի առաջին դրվագը ներկայացնում է ընդհանրապես առանց bumpmapping () , երկրորդը (վերևից աջ)՝ bumpmapping առանց սպեկուլյար բաղադրիչի, երրորդը՝ նորմալ չափսի սպեկուլյար բաղադրիչով, որն օգտագործվում է խաղում, և վերջինը՝ աջ-ներքևում, սպեկուլյար բաղադրիչի առավելագույն հնարավոր արժեքով է:

Ինչ վերաբերում է առաջին ապարատային հավելվածին, ապա bump mapping-ի որոշ տեսակներ (Emboss Bump Mapping) սկսեցին օգտագործվել դեռևս NVIDIA Riva TNT չիպերի վրա հիմնված վիդեո քարտերի ժամանակներում, բայց այն ժամանակվա տեխնիկան չափազանց պարզունակ էր և լայնորեն չէր օգտագործվում: Հաջորդ հայտնի տեսակը Environment Mapped Bump Mapping (EMBM) էր, բայց միայն Matrox վիդեո քարտերն ունեին այն ապարատային աջակցություն DirectX-ում, և կրկին դրա օգտագործումը շատ սահմանափակ էր: Այնուհետև եկավ Dot3 Bump Mapping-ը և այն ժամանակվա վիդեո չիպերը (GeForce 256 և GeForce 2) պահանջում էին երեք անցում նման մաթեմատիկական ալգորիթմն ամբողջությամբ իրականացնելու համար, քանի որ դրանք սահմանափակվում են միաժամանակ օգտագործվող երկու հյուսվածքներով: Սկսած NV20-ից (GeForce3)՝ հնարավոր դարձավ նույնն անել մեկ անցումով՝ օգտագործելով պիքսելային շեյդերներ։ Ավելին, ավելին: Նրանք սկսեցին ավելի արդյունավետ տեխնիկա կիրառել, ինչպես, օրինակ.

Խաղերում bumpmapping-ի օգտագործման օրինակներ.


Տեղաշարժի քարտեզագրումը 3D օբյեկտներին մանրամասներ ավելացնելու մեթոդ է: Ի տարբերություն bumpmapping-ի և մեկ պիքսելային այլ մեթոդների, երբ միայն կետի լուսավորությունը ճիշտ է մոդելավորվում բարձրության քարտեզներով, բայց նրա դիրքը տարածության մեջ չի փոխվում, ինչը միայն մակերևույթի բարդության մեծացման պատրանք է տալիս, տեղաշարժի քարտեզները թույլ են տալիս ստանալ իրական բարդույթ: Եռաչափ առարկաներ գագաթներից և բազմանկյուններից, առանց սահմանափակումների, որոնք բնորոշ են պիքսել առ պիքսել մեթոդներին: Այս մեթոդը փոխում է եռանկյունների գագաթների դիրքը՝ դրանք տեղափոխելով նորմալի երկայնքով տեղաշարժման քարտեզների արժեքների հիման վրա։ Տեղաշարժման քարտեզը սովորաբար սև և սպիտակ հյուսվածք է, և դրա արժեքները օգտագործվում են օբյեկտի մակերևույթի յուրաքանչյուր կետի բարձրությունը որոշելու համար (արժեքները կարող են պահպանվել որպես 8 կամ 16 բիթ թվեր), նման է bumpmap-ին: Հաճախ տեղաշարժի քարտեզներն օգտագործվում են (այս դեպքում դրանք կոչվում են նաև բարձրության քարտեզներ)՝ բլուրներով և հովիտներով գետնի մակերես ստեղծելու համար։ Քանի որ տեղանքը նկարագրված է 2D տեղաշարժի քարտեզով, անհրաժեշտության դեպքում համեմատաբար հեշտ է այն դեֆորմացնել, քանի որ այն պահանջում է միայն փոփոխել տեղաշարժի քարտեզը և դրանից մակերեսը ներկայացնել հաջորդ կադրում:

Տեսողականորեն, լանդշաֆտի ստեղծումը, օգտագործելով տեղաշարժման քարտեզների ծածկույթը, ներկայացված է նկարում: Նախնականները 4 գագաթ և 2 բազմանկյուն էին, վերջում ստացանք լանդշաֆտի ամբողջական կտոր։

Տեղաշարժման քարտեզների ծածկման մեծ առավելությունը ոչ միայն մակերեսին մանրամասներ ավելացնելու ունակությունն է, այլ օբյեկտի գրեթե ամբողջական ստեղծումը: Վերցվում է ցածր բազմաբնույթ օբյեկտ, որը բաժանվում է (կտրվում) ավելի մեծ թվով գագաթների և բազմանկյունների: Այնուհետև գագաթները, որոնք առաջանում են թեսելացիայից, նորմալ-տեղահանվում են տեղաշարժի քարտեզում կարդացված արժեքի հիման վրա: Արդյունքում մենք ստանում ենք բարդ 3D օբյեկտ պարզից՝ օգտագործելով համապատասխան տեղաշարժի քարտեզը.


Եռանկյունների թիվը, որոնք ստեղծվել են թեսելացման միջոցով, պետք է բավականաչափ մեծ լինի տեղաշարժման քարտեզի կողմից տրված բոլոր մանրամասների համար: Երբեմն լրացուցիչ եռանկյուններ ինքնաբերաբար ստեղծվում են N-կարկատանների կամ այլ մեթոդների միջոցով: Տեղաշարժման քարտեզները լավագույնս օգտագործվում են bumpmapping-ի հետ համատեղ՝ ստեղծելու նուրբ մանրամասներ, որտեղ համապատասխան պիքսել առ պիքսել լուսավորությունը բավարար է:

Տեղաշարժի քարտեզագրումն առաջին անգամ աջակցություն ստացավ DirectX 9.0-ում: Սա այս API-ի առաջին տարբերակն էր, որն աջակցում էր Displacement Mapping տեխնիկան: DX9-ն աջակցում է տեղաշարժման քարտեզի երկու տեսակի ծածկույթների՝ ֆիլտրացված և նախնական նմուշառված: Առաջին մեթոդին աջակցում էր արդեն մոռացված MATROX Parhelia վիդեո չիպը, իսկ երկրորդը` ATI RADEON 9700: Զտված մեթոդը տարբերվում է նրանով, որ թույլ է տալիս օգտագործել mip մակարդակները տեղաշարժման քարտեզների համար և կիրառել եռագիծ ֆիլտրում դրանց համար: Այս մեթոդով տեղաշարժման քարտեզի միպի մակարդակը ընտրվում է յուրաքանչյուր գագաթի համար՝ ելնելով գագաթից մինչև տեսախցիկ հեռավորությունից, այսինքն՝ ավտոմատ կերպով ընտրվում է մանրամասների մակարդակը: Այս կերպ ձեռք է բերվում տեսարանի գրեթե միատեսակ պառակտում, երբ եռանկյունները մոտավորապես նույն չափի են։

Տեղաշարժման քարտեզների վերադրումը, ըստ էության, կարելի է դիտարկել որպես երկրաչափությունը սեղմելու մեթոդ, տեղաշարժման քարտեզների օգտագործումը նվազեցնում է 3D մոդելի որոշակի քանակությամբ մանրամասների համար պահանջվող հիշողության քանակը: Ծանր երկրաչափական տվյալները փոխարինվում են պարզ 2D տեղաշարժման հյուսվածքներով, սովորաբար 8-բիթանոց կամ 16-բիթանոց: Սա նվազեցնում է հիշողության և թողունակության պահանջները, որոնք անհրաժեշտ են երկրաչափական տվյալներ վիդեո չիպին հասցնելու համար, և այս սահմանափակումները հիմնականներից են այսօրվա համակարգերի համար: Կամ, թողունակության և հիշողության հավասար պահանջների համար, տեղաշարժման քարտեզների ծածկումը թույլ է տալիս շատ ավելի բարդ երկրաչափական 3D մոդելներ: Շատ ավելի քիչ բարդության մոդելների օգտագործումը, երբ տասնյակ կամ հարյուր հազարավոր եռանկյունների փոխարեն օգտագործվում են հազարավոր միավորներ, հնարավոր է դարձնում նաև արագացնել դրանց անիմացիան: Կամ բարելավեք այն՝ կիրառելով ավելի բարդ ալգորիթմներ և տեխնիկա, օրինակ՝ կտորի մոդելավորում:

Մեկ այլ առավելությունն այն է, որ տեղաշարժման քարտեզների օգտագործումը բարդ 3D բազմանկյուն ցանցերը վերածում է բազմաթիվ 2D հյուսվածքների, որոնք ավելի հեշտ է շահարկել: Օրինակ, կազմակերպության համար դուք կարող եք օգտագործել սովորական mipmapping՝ տեղաշարժման քարտեզները ծածկելու համար: Բացի այդ, 3D ցանցերը սեղմելու համեմատաբար բարդ ալգորիթմների փոխարեն կարող եք օգտագործել հյուսվածքների սեղմման սովորական մեթոդները, նույնիսկ JPEG-ի նման: Իսկ 3D օբյեկտների ընթացակարգային ստեղծման համար դուք կարող եք օգտագործել սովորական ալգորիթմները երկչափ հյուսվածքների համար:

Բայց տեղաշարժի քարտեզները նույնպես ունեն որոշակի սահմանափակումներ, դրանք չեն կարող կիրառվել բոլոր իրավիճակներում: Օրինակ, հարթ առարկաները, որոնք չեն պարունակում շատ նուրբ մանրամասներ, ավելի լավ կներկայացվեն որպես ստանդարտ բազմանկյուն ցանցեր կամ այլ ավելի բարձր մակարդակի մակերեսներ, ինչպիսիք են Bezier կորերը: Մյուս կողմից, շատ բարդ մոդելները, ինչպիսիք են ծառերը կամ բույսերը, նույնպես հեշտությամբ չեն ներկայացվում տեղաշարժի քարտեզներով: Կան նաև օգտագործելիության խնդիրներ, այն գրեթե միշտ պահանջում է մասնագիտացված կոմունալ ծառայություններ, քանի որ ուղղակիորեն տեղաշարժման քարտեզներ ստեղծելը շատ դժվար է (եթե խոսքը տեղանքի նման պարզ օբյեկտների մասին չէ): Տեղաշարժման քարտեզների խնդիրներից և սահմանափակումներից շատերը նույնն են, ինչ , քանի որ երկու մեթոդները, ըստ էության, նույն գաղափարի երկու տարբեր ներկայացումներ են:

Որպես իրական խաղերի օրինակ՝ ես կտամ մի խաղ, որն օգտագործում է տեքստուրայի ստացում գագաթնակետային շեյդերից, մի ֆունկցիա, որը հայտնվել է NVIDIA NV40 վիդեո չիպերում և shader մոդել 3.0-ում: Vertex texturing-ը կարող է օգտագործվել տեղաշարժման քարտեզների վրա դնելու պարզ մեթոդի համար, որն ամբողջությամբ կատարվում է վիդեո չիպի միջոցով, առանց թեսելացման (բաժանվելով ավելի շատ եռանկյունների): Նման ալգորիթմի օգտագործումը սահմանափակ է, դրանք իմաստ ունեն միայն այն դեպքում, եթե քարտեզները դինամիկ են, այսինքն՝ ընթացքում կփոխվեն։ Օրինակ, սա ջրային մեծ մակերեսների նկարազարդումն է, ինչն արեցին Pacific Fighters-ը.


Normalmapping-ը ավելի վաղ նկարագրված bumpmapping տեխնիկայի բարելավված տարբերակն է, դրա ընդլայնված տարբերակը: Bumpmapping-ը մշակվել է Բլինի կողմից դեռևս 1978 թվականին, տեղանքի քարտեզագրման այս մեթոդի մակերևութային նորմերը փոփոխվել են՝ հիմնվելով բախումների քարտեզների տվյալների վրա: Այն դեպքում, երբ bumpmapping-ը փոփոխում է միայն առկա նորմալը մակերևութային կետերի համար, նորմալ քարտեզագրումն ամբողջությամբ փոխարինում է նորմալներին՝ դրանց արժեքները բերելով հատուկ պատրաստված նորմալ քարտեզից: Այս քարտեզները սովորաբար հյուսվածքներ են, որոնցում պահվում են նախապես հաշվարկված նորմալ արժեքներ, որոնք ներկայացված են որպես RGB գունավոր բաղադրիչներ (սակայն, կան հատուկ ձևաչափեր նորմալ քարտեզների համար, ներառյալ սեղմվածները), ի տարբերություն 8-բիթանոց սև և սպիտակ բարձրության քարտեզների: bumpmapping.

Ընդհանուր առմամբ, ինչպես bumpmapping-ը, սա նաև «էժան» մեթոդ է համեմատաբար ցածր երկրաչափական բարդության մոդելներին մանրամասներ ավելացնելու համար, առանց ավելի իրական երկրաչափություն օգտագործելու, միայն ավելի կատարելագործված: Տեխնիկայի ամենահետաքրքիր կիրառություններից մեկը ցածր բազմաբնույթ մոդելների դետալների էապես մեծացումն է՝ օգտագործելով սովորական քարտեզները, որոնք ստացվել են բարձր երկրաչափական բարդության նույն մոդելի մշակման արդյունքում: Սովորական քարտեզները պարունակում են մակերեսի ավելի մանրամասն նկարագրություն, քան bumpmapping-ը և թույլ են տալիս ավելի բարդ ձևեր ներկայացնել: Անցյալ դարի 90-ականների կեսերին հնչել են բարձր մանրամասն օբյեկտներից տեղեկատվություն ստանալու գաղափարներ, սակայն այն ժամանակ խոսքը վերաբերում էր . Ավելի ուշ՝ 1998 թվականին, գաղափարներ ներկայացվեցին քարտեզի նորմալ մանրամասները բարձր պոլի մոդելներից դեպի ցածր պոլի մոդելներ փոխանցելու համար:

Սովորական քարտեզները մակերևույթի մանրամասն տվյալներ պահելու ավելի արդյունավետ միջոց են տալիս, քան պարզապես մեծ թվով բազմանկյուններ օգտագործելը: Միակ հիմնական սահմանափակումն այն է, որ դրանք լավ չեն համապատասխանում մեծ մանրամասներին, քանի որ սովորական քարտեզագրումը իրականում չի ավելացնում բազմանկյուններ կամ չի փոխում օբյեկտի ձևը, այն միայն տալիս է դրա տեսքը: Սա պարզապես մանրամասների մոդելավորում է՝ հիմնված պիքսելային մակարդակի լուսավորության հաշվարկի վրա։ Օբյեկտի ծայրահեղ բազմանկյունների և մակերեսի թեքության մեծ անկյունների վրա դա շատ պարզ տեսանելի է: Հետևաբար, նորմալ քարտեզագրման կիրառման առավել խելամիտ միջոցը ցածր պոլի մոդելը բավականաչափ մանրամասնելն է, որպեսզի պահպանի օբյեկտի հիմնական ձևը և օգտագործել սովորական քարտեզներ՝ ավելի նուրբ մանրամասներ ավելացնելու համար:

Սովորական քարտեզները սովորաբար ստեղծվում են մոդելի երկու տարբերակից՝ ցածր և բարձր պոլի: Ցածր բազմաբնույթ մոդելը բաղկացած է նվազագույն երկրաչափությունից, օբյեկտի հիմնական ձևերից, իսկ բարձր բազմաբնույթ մոդելը պարունակում է այն ամենը, ինչ անհրաժեշտ է առավելագույն մանրամասների համար: Այնուհետև հատուկ կոմունալ ծառայությունների օգնությամբ դրանք համեմատվում են միմյանց հետ, տարբերությունը հաշվարկվում և պահվում է նորմալ քարտեզ կոչվող հյուսվածքի մեջ։ Այն ստեղծելիս կարող եք լրացուցիչ օգտագործել բախման քարտեզ շատ փոքր մանրամասների համար, որոնք հնարավոր չէ մոդելավորել նույնիսկ բարձր պոլիմոդելում (մաշկի ծակոտիներ, այլ փոքր իջվածքներ):

Սովորական քարտեզներն ի սկզբանե ներկայացված էին որպես կանոնավոր RGB հյուսվածքներ, որտեղ R, G և B գույնի բաղադրիչները (0-ից 1) մեկնաբանվում են որպես X, Y և Z կոորդինատներ: Սովորական քարտեզում յուրաքանչյուր տեքսել ներկայացված է որպես մակերևույթի նորմալ կետ: . Նորմալ քարտեզները կարող են լինել երկու տեսակի՝ մոդելային տարածության կոորդինատներով (ընդհանուր կոորդինատային համակարգ) կամ շոշափող տարածություն (ռուսերենում տերմինը «շոշափող տարածություն» է՝ եռանկյունու տեղային կոորդինատային համակարգ): Երկրորդ տարբերակը ավելի հաճախ օգտագործվում է. Երբ սովորական քարտեզները ներկայացված են մոդելային տարածության մեջ, դրանք պետք է ունենան երեք բաղադրիչ, քանի որ բոլոր ուղղությունները կարող են ներկայացվել, իսկ երբ շոշափող տարածության մեջ են, կարող ես անցնել երկու բաղադրիչով, իսկ երրորդը ստանալ պիքսելների ստվերում:

Ժամանակակից իրական ժամանակի հավելվածները դեռ շատ հետ են մնում նախապես արված անիմացիայից՝ պատկերի որակի առումով, դա առաջին հերթին վերաբերում է լուսավորության որակին և տեսարանների երկրաչափական բարդությանը: Իրական ժամանակում հաշվարկված գագաթների և եռանկյունների թիվը սահմանափակ է: Հետևաբար, երկրաչափության քանակությունը նվազեցնելու մեթոդները շատ կարևոր են: Մինչ սովորական քարտեզագրումը, մշակվել էին մի քանի նման մեթոդներ, բայց ցածր բազմաբնույթ մոդելները, նույնիսկ բախման քարտեզագրման դեպքում, պարզվում է, որ նկատելիորեն ավելի վատն են, քան ավելի բարդ մոդելները: Չնայած նորմալ քարտեզագրումն ունի մի քանի թերություններ (ամենաակնհայտն այն է, որ քանի որ մոդելը մնում է ցածր բազմաբնույթ, դա հեշտությամբ երևում է նրա անկյունային եզրագծերից), վերջնական մատուցման որակը նկատելիորեն բարելավվում է՝ թողնելով մոդելների երկրաչափական բարդությունը: Վերջերս այս տեխնիկայի ժողովրդականության աճը և դրա օգտագործումը բոլոր հայտնի խաղային շարժիչներում ակնհայտորեն տեսանելի է: Սրա պատճառը ստացված գերազանց որակի և մոդելների երկրաչափական բարդության պահանջների միաժամանակյա կրճատումն է: Նորմալ քարտեզագրման տեխնիկան այժմ օգտագործվում է գրեթե ամենուր, բոլոր նոր խաղերն այն օգտագործում են հնարավորինս լայնորեն: Ահա սովորական քարտեզագրման օգտագործմամբ հայտնի ԱՀ խաղերի ընդամենը կարճ ցուցակը. Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4: Դրանք բոլորն էլ շատ ավելի լավ տեսք ունեն, քան անցյալի խաղերը, ինչպես նաև շնորհիվ: քարտեզների սովորական օգտագործման համար:

Այս տեխնիկայի օգտագործման միայն մեկ բացասական հետևանք կա՝ հյուսվածքների ծավալի ավելացում։ Ի վերջո, նորմալ քարտեզը մեծապես ազդում է օբյեկտի տեսքի վրա, և այն պետք է լինի բավականաչափ մեծ լուծաչափով, ուստի վիդեո հիշողության և դրա թողունակության պահանջները կրկնապատկվում են (չսեղմված նորմալ քարտեզների դեպքում): Բայց հիմա արդեն արտադրվում են 512 ՄԲ տեղական հիշողությամբ վիդեո քարտեր, դրա թողունակությունը անընդհատ աճում է, սեղմման մեթոդները մշակվել են հատուկ նորմալ քարտեզների համար, ուստի այս փոքր սահմանափակումներն իրականում այնքան էլ կարևոր չեն: Էֆեկտը, որը տալիս է սովորական քարտեզագրումը, շատ ավելի մեծ է, ինչը թույլ է տալիս օգտագործել համեմատաբար ցածր բազմաբնույթ մոդելներ, նվազեցնելով երկրաչափական տվյալների պահպանման հիշողության պահանջները, բարելավելով կատարումը և տալով շատ պատշաճ տեսողական արդյունք:

Parallax քարտեզագրում/օֆսեթ քարտեզագրում

Normalmapping-ին, որը մշակվել է դեռևս 1984 թվականին, հաջորդել է Relief Texture Mapping-ը, որը ներկայացվել է Օլիվերայի և Բիշոփի կողմից 1999 թվականին: Սա հյուսվածքների քարտեզագրման մեթոդ է, որը հիմնված է խորության տեղեկատվության վրա: Մեթոդը կիրառություն չգտավ խաղերում, սակայն դրա գաղափարը նպաստեց պարալաքսային քարտեզագրման աշխատանքների շարունակությանը և կատարելագործմանը։ Կանեկոն 2001 թվականին ներկայացրեց պարալաքսային քարտեզագրումը, որն առաջին արդյունավետ մեթոդն էր մեկ պիքսելում պարալաքսի էֆեկտը ցուցադրելու համար: 2004 թվականին Ուելսը ցուցադրեց պարալաքսային քարտեզագրման օգտագործումը ծրագրավորվող վիդեո չիպերի վրա։

Այս մեթոդը, հավանաբար, ունի ամենատարբեր անունները: Ես կթվարկեմ նրանց, ում հանդիպել եմ՝ Parallax Mapping, Offset Mapping, Virtual Displacement Mapping, Per-Pixel Displacement Mapping: Հոդվածում հակիրճ լինելու համար օգտագործված է առաջին անունը։
Parallax քարտեզագրումը ևս մեկ այլընտրանք է bumpmapping-ի և normalmapping տեխնիկայի համար, որը տալիս է ավելի շատ մակերևույթի մանրամասներ, 3D մակերևույթների ավելի նատուրալիստական ​​ցուցադրում, ինչպես նաև առանց կատարողականության չափազանց մեծ կորստի: Այս տեխնիկան միևնույն ժամանակ նման է տեղաշարժի քարտեզագրմանը և սովորական քարտեզագրմանը, դա մի բան է: Մեթոդը նաև նախատեսված է մակերեսի ավելի շատ մանրամասներ ցուցադրելու համար, քան սկզբնական երկրաչափական մոդելում: Այն նման է սովորական քարտեզագրմանը, բայց տարբերությունն այն է, որ մեթոդը խեղաթյուրում է հյուսվածքների քարտեզագրումը` փոխելով հյուսվածքների կոորդինատները այնպես, որ երբ մակերեսին տարբեր անկյուններից նայում ես, այն ուռուցիկ տեսք ունի, չնայած իրականում մակերեսը հարթ է և չի փոխվում: . Այլ կերպ ասած, Parallax Mapping-ը մակերևույթի կետերի տեղաշարժի ազդեցության մոտավոր գնահատման տեխնիկա է՝ կախված տեսակետի փոփոխությունից:

Տեխնիկան փոխում է հյուսվածքային կոորդինատները (այդ պատճառով տեխնիկան երբեմն կոչվում է օֆսեթ քարտեզագրում), որպեսզի մակերեսը ավելի ծավալուն տեսք ունենա: Մեթոդի գաղափարն է վերադարձնել այն կետի հյուսվածքային կոորդինատները, որտեղ տեսադաշտի վեկտորը հատում է մակերեսը: Սա պահանջում է ճառագայթների հետագծում բարձրության քարտեզի համար, բայց եթե այն չունի շատ փոփոխվող արժեքներ («սահուն» կամ «հարթ»), ապա կարող եք մոտավորությամբ հաղթահարել: Այս մեթոդը լավ է սահուն փոփոխվող բարձրություններ ունեցող մակերեսների համար, առանց խաչմերուկների հաշվարկման և մեծ օֆսեթ արժեքների: Նման պարզ ալգորիթմը տարբերվում է սովորական քարտեզագրումից միայն երեք պիքսելային ստվերային ցուցումներով՝ երկու մաթեմատիկական հրահանգներ և մեկ հավելյալ հյուսվածքի բեռնում: Հյուսվածքի նոր կոորդինատը հաշվարկելուց հետո այն հետագայում օգտագործվում է այլ հյուսվածքային շերտեր կարդալու համար՝ բազային հյուսվածք, նորմալ քարտեզ և այլն: Ժամանակակից վիդեո չիպերի վրա պարալաքսային քարտեզագրման այս մեթոդը գրեթե նույնքան արդյունավետ է, որքան սովորական հյուսվածքների քարտեզագրումը, և դրա արդյունքն ավելի իրատեսական մակերևույթի ցուցադրություն է՝ համեմատած պարզ սովորական քարտեզագրման հետ:

Բայց սովորական պարալաքսային քարտեզագրման օգտագործումը սահմանափակվում է արժեքների փոքր տարբերությամբ բարձրության քարտեզներով: Ալգորիթմի կողմից սխալ են մշակվում «կտրուկ» բախումները, հայտնվում են տարբեր արտեֆակտներ, հյուսվածքների «լողում» և այլն: Մշակվել են մի քանի փոփոխված մեթոդներ՝ բարելավելու պարալաքսային քարտեզագրման տեխնիկան: Մի քանի հետազոտողներ (Yerex, Donnelly, Tatarchuk, Policarpo) նկարագրել են նոր մեթոդներ, որոնք բարելավում են սկզբնական ալգորիթմը։ Գրեթե բոլոր գաղափարները հիմնված են պիքսելների ստվերում ճառագայթների հետագծման վրա՝ մակերևույթի մանրամասների հատումը միմյանց հետ որոշելու համար: Փոփոխված մեթոդները ստացել են մի քանի տարբեր անվանումներ՝ Parallax Mapping with Occlusion, Parallax Mapping with Distance Functio ns, Parallax Occlusion Mapping: Հակիրճության համար մենք բոլորին կանվանենք Parallax Occlusion Mapping:

Parallax Occlusion Mapping մեթոդները ներառում են նաև ճառագայթների հետագծում՝ բարձրությունները որոշելու և տեքսելների տեսանելիությունը հաշվի առնելու համար: Ի վերջո, երբ դիտվում է մակերեսի անկյան տակ, տեքսելները արգելափակում են միմյանց, և, հաշվի առնելով դա, դուք կարող եք ավելի խորություն ավելացնել պարալաքսի էֆեկտին: Ստացված պատկերն ավելի իրատեսական է դառնում, և նման բարելավված մեթոդները կարող են օգտագործվել ավելի խորը տեղանքի համար, այն հիանալի է աղյուսից և քարից պատերը, մայթը և այլն պատկերելու համար: Հատկապես պետք է նշել, որ Parallax Mapping-ի և Displacement Mapping-ի հիմնական տարբերությունն այն է, որ բոլոր հաշվարկները են մեկ պիքսել, եւ ոչ գերիշխող. Այդ իսկ պատճառով մեթոդն ունի անուններ, ինչպիսիք են Վիրտուալ տեղաշարժի քարտեզագրումը և մեկ պիքսելային տեղաշարժի քարտեզագրումը: Նայեք նկարին, դժվար է հավատալ, բայց մայթի քարերն այստեղ ընդամենը պիքսել առ պիքսել էֆեկտ են.

Մեթոդը թույլ է տալիս արդյունավետ կերպով ցուցադրել մանրամասն մակերեսները՝ առանց միլիոնավոր գագաթների և եռանկյունների, որոնք կպահանջվեն, եթե երկրաչափությունը դա իրականացնի: Միաժամանակ պահպանվում են բարձր դետալներ (բացառությամբ ուրվանկարների/դեմքերի) և անիմացիոն հաշվարկները մեծապես պարզեցված են։ Այս տեխնիկան ավելի էժան է, քան իրական երկրաչափության օգտագործումը և օգտագործում է զգալիորեն ավելի քիչ բազմանկյուններ, հատկապես շատ նուրբ մանրամասներով դեպքերում: Ալգորիթմի համար շատ կիրառություններ կան, և այն լավագույնս հարմար է քարերի, աղյուսների և նմանատիպերի համար:

Բացի այդ, հավելյալ առավելությունն այն է, որ բարձրության քարտեզները կարող են դինամիկ կերպով փոխվել (ջրի մակերեսը ալիքներով, պատերին փամփուշտների անցքեր և այլն): Մեթոդի թերությունները երկրաչափորեն ճիշտ ուրվանկարների (օբյեկտների եզրերի) բացակայությունն են, քանի որ ալգորիթմը պիքսել առ պիքսել է և իրական տեղաշարժի քարտեզագրում չէ: Բայց դա խնայում է կատարումը փոխակերպման, լուսավորության և երկրաչափական անիմացիայի վրա բեռը նվազեցնելու տեսքով: Պահպանում է վիդեո հիշողությունը, որն անհրաժեշտ է մեծ քանակությամբ երկրաչափական տվյալներ պահելու համար: Տեխնոլոգիան ունի նաև համեմատաբար պարզ ինտեգրում գոյություն ունեցող հավելվածներում և օգտագործում ծանոթ կոմունալ ծառայություններ, որոնք օգտագործվում են գործընթացում սովորական քարտեզագրման համար:

Տեխնիկան արդեն կիրառվել է վերջին ժամանակների իրական խաղերում։ Առայժմ նրանց հաջողվում է պարզ պարալաքսային քարտեզագրում՝ հիմնված ստատիկ բարձրության քարտեզների վրա՝ առանց ճառագայթների հետագծման և խաչմերուկների հաշվարկի: Ահա խաղերում parallax քարտեզագրման օգտագործման օրինակներ.

Հետմշակում

Լայն իմաստով հետմշակումը այն ամենն է, ինչ տեղի է ունենում իմիջ կառուցելու հիմնական գործողություններից հետո։ Այլ կերպ ասած, հետմշակումը պատկերի ցանկացած փոփոխություն է այն ցուցադրվելուց հետո: Հետմշակումը հատուկ վիզուալ էֆեկտներ ստեղծելու գործիքների մի շարք է, և դրանք ստեղծվում են տեսարանի ցուցադրման հիմնական աշխատանքն ավարտելուց հետո, այսինքն՝ հետմշակման էֆեկտներ ստեղծելիս օգտագործվում է պատրաստի բիտ քարտեզ։

Պարզ օրինակ լուսանկարչությունից՝ դուք պարզ եղանակին լուսանկարել եք կանաչապատ մի գեղեցիկ լիճ: Երկինքը շատ պայծառ է, իսկ ծառերը՝ չափազանց մութ։ Դուք բեռնում եք լուսանկարը գրաֆիկական խմբագրիչում և սկսում եք փոխել պայծառությունը, հակադրությունը և այլ պարամետրեր պատկերի տարածքների կամ ամբողջ նկարի համար: Բայց դուք այլեւս հնարավորություն չունեք փոխելու տեսախցիկի կարգավորումները, դուք կատարում եք պատրաստի պատկերի մշակումը։ Սա հետմշակում է: Կամ մեկ այլ օրինակ՝ դիմանկարային լուսանկարում ֆոնի մեկուսացում և այդ հատվածում մշուշման ֆիլտրի կիրառում ավելի խորությամբ դաշտի էֆեկտի համար: Այսինքն, երբ դուք փոխում կամ ուղղում եք շրջանակը գրաֆիկական խմբագրիչում, դուք կատարում եք հետմշակում: Նույնը կարելի է անել խաղի մեջ՝ իրական ժամանակում։

Շատ տարբեր հնարավորություններ կան պատկերը մշակելուց հետո այն մշակելու համար: Բոլորը հավանաբար տեսել են գրաֆիկական խմբագրիչներում այսպես կոչված գրաֆիկական զտիչներ: Սա հենց այն է, ինչ կոչվում է հետզտիչներ. պղտորում, եզրերի հայտնաբերում, սրում, աղմուկ, հարթեցում, դաջվածություն և այլն: Ինչպես կիրառվում է իրական ժամանակի 3D-արտադրման դեպքում, սա արվում է հետևյալ կերպ. ամբողջ տեսարանը ցուցադրվում է հատուկ տարածքում. render target, և հիմնական արտապատկերումից հետո այս պատկերը հետագայում մշակվում է պիքսելային շեյդերների միջոցով և միայն դրանից հետո ցուցադրվում էկրանին: Խաղերում հետմշակման էֆեկտներից առավել հաճախ օգտագործվում են , , . Կան բազմաթիվ այլ հետ-էֆեկտներ՝ աղմուկ, բռնկում, աղավաղում, սեպիա և այլն:

Ահա խաղային հավելվածներում հետմշակման մի քանի վառ օրինակ.

Բարձր դինամիկ միջակայք (HDR)

Բարձր դինամիկ տիրույթը (HDR), ինչպես կիրառվում է 3D գրաֆիկայի համար, ցուցադրվում է լայն դինամիկ տիրույթում: HDR-ի էությունը ինտենսիվության և գույնի նկարագրությունն է իրական ֆիզիկական մեծություններով: Պատկերի նկարագրության սովորական մոդելը RGB-ն է, որտեղ բոլոր գույները ներկայացված են որպես հիմնական գույների հանրագումար՝ կարմիր, կանաչ և կապույտ, տարբեր ինտենսիվությամբ, որպես հնարավոր ամբողջ արժեք՝ յուրաքանչյուրի համար 0-ից մինչև 255, կոդավորված յուրաքանչյուր գույնի համար ութ բիթով: Առավելագույն ինտենսիվության և որոշակի մոդելի կամ սարքի ցուցադրման համար հասանելի նվազագույնի հարաբերակցությունը կոչվում է դինամիկ միջակայք: Այսպիսով, RGB մոդելի դինամիկ միջակայքը կազմում է 256:1 կամ 100:1 cd/m 2 (մագնիտուդի երկու կարգ): Գույնի և ինտենսիվության նկարագրության այս մոդելը սովորաբար կոչվում է ցածր դինամիկ միջակայք (LDR):

Բոլոր դեպքերի համար LDR-ի հնարավոր արժեքները ակնհայտորեն բավարար չեն, մարդը կարող է տեսնել շատ ավելի մեծ տիրույթ, հատկապես ցածր լույսի ինտենսիվության դեպքում, և RGB մոդելը չափազանց սահմանափակ է նման դեպքերում (և բարձր ինտենսիվության դեպքում): Մարդու տեսողության դինամիկ տիրույթը կազմում է 10 -6-ից մինչև 10 8 cd/m 2, այսինքն՝ 100000000000000:1 (14 կարգի մագնիտուդ)։ Միևնույն ժամանակ, մենք չենք կարող տեսնել ամբողջ տիրույթը, բայց ցանկացած պահի աչքի համար տեսանելի միջակայքը մոտավորապես հավասար է 10000:1 (չորս կարգի մեծության): Տեսողությունը աստիճանաբար հարմարվում է լույսի տիրույթի մեկ այլ մասի արժեքներին՝ այսպես կոչված հարմարվողականության օգնությամբ, որը կարելի է հեշտությամբ նկարագրել որպես գիշերային ժամերին սենյակի լույսերն անջատելու իրավիճակ. սկզբում աչքերը շատ են տեսնում։ քիչ է, բայց ժամանակի ընթացքում նրանք հարմարվում են փոփոխված լուսավորության պայմաններին և շատ ավելին են տեսնում: Նույնը տեղի է ունենում մութ միջավայրը նորից լույսի փոխելու ժամանակ:

Այսպիսով, RGB նկարագրության մոդելի դինամիկ տիրույթը բավարար չէ պատկերներ ներկայացնելու համար, որոնք մարդը կարող է տեսնել իրականում, այս մոդելը զգալիորեն նվազեցնում է լույսի ինտենսիվության հնարավոր արժեքները տիրույթի վերին և ստորին մասերում: HDR նյութում տրված ամենատարածված օրինակը մութ սենյակի պատկերն է, որի պատուհանը դեպի լուսավոր փողոց է արևոտ օրը: RGB մոդելի միջոցով դուք կարող եք ստանալ կա՛մ նորմալ ցուցադրում այն, ինչ կա պատուհանից դուրս, կա՛մ միայն այն, ինչ կա սենյակի ներսում: 100 cd/m 2-ից ավելի արժեքները սովորաբար կրճատվում են LDR-ում, ինչի պատճառով 3D պատկերների համար դժվար է ճիշտ մատուցել պայծառ լույսի աղբյուրները անմիջապես տեսախցիկի մոտ:

Առայժմ տվյալների ցուցադրման սարքերն իրենք չեն կարող լրջորեն բարելավվել, բայց իմաստ ունի հրաժարվել LDR-ից հաշվարկներում, կարող եք օգտագործել ինտենսիվության և գույնի իրական ֆիզիկական արժեքներ (կամ գծային համաչափ) և ցուցադրել առավելագույնը, որ դա կարող է մոնիտորի վրա: HDR-ի ներկայացման էությունը ինտենսիվության և գունային արժեքների օգտագործումն է իրական ֆիզիկական քանակներով կամ գծային համամասնությամբ, և բարձր ճշգրտությամբ (օրինակ՝ 16 կամ 32 բիթ) օգտագործել ոչ թե ամբողջ թվեր, այլ լողացող կետով թվեր: Սա կվերացնի RGB մոդելի սահմանափակումները, և պատկերի դինամիկ տիրույթը զգալիորեն կաճի: Բայց այնուհետև ցանկացած HDR պատկեր կարող է ցուցադրվել ցանկացած ցուցադրման միջավայրում (նույն RGB մոնիտորը), որի համար հնարավոր է ամենաբարձր որակը՝ օգտագործելով հատուկ ալգորիթմներ:

HDR արտապատկերումը մեզ թույլ է տալիս փոխել բացահայտումը պատկերը ցուցադրելուց հետո: Այն թույլ է տալիս մոդելավորել մարդու տեսողության հարմարվողականության էֆեկտը (պայծառ բաց տարածություններից դեպի մութ սենյակներ և հակառակը), թույլ է տալիս կատարել ֆիզիկապես ճիշտ լուսավորություն, ինչպես նաև միասնական լուծում է հետմշակման էֆեկտների կիրառման համար (շողշողում, բռնկում): , ծաղկում, շարժման մշուշում): Պատկերի մշակման ալգորիթմները, գույնի ուղղումը, գամմա ուղղումը, շարժման մշուշումը, ծաղկումը և հետմշակման այլ մեթոդներ ավելի լավ են կատարվում HDR-ի ներկայացման մեջ:

Իրական ժամանակի 3D-արտադրման հավելվածները (հիմնականում խաղերը) սկսել են օգտագործել HDR արտապատկերումը ոչ այնքան վաղուց, քանի որ այն պահանջում է հաշվարկներ և տրամադրել թիրախային աջակցություն լողացող կետի ձևաչափերով, որոնք առաջին անգամ հասանելի են դարձել միայն DirectX 9 աջակցությամբ վիդեո չիպերի վրա: Խաղերում HDR արտապատկերման սովորական ուղին. տեսարանի վերածում լողացող կետի բուֆերի, պատկերի հետմշակում ընդլայնված գունային տիրույթում (փոփոխվող կոնտրաստը և պայծառությունը, գունային հավասարակշռությունը, փայլի և շարժման մշուշման էֆեկտները, ոսպնյակի բռնկումը և այլն), օգտագործելով տոնային քարտեզագրում՝ LDR ցուցադրման սարքի վրա վերջնական HDR պատկերը ցուցադրելու համար: Երբեմն շրջակա միջավայրի քարտեզները օգտագործվում են HDR ձևաչափերով՝ օբյեկտների վրա ստատիկ արտացոլումների համար, HDR-ի օգտագործումը դինամիկ բեկումների և արտացոլումների մոդելավորման համար շատ հետաքրքիր է, դրա համար կարող են օգտագործվել նաև լողացող կետի ձևաչափերով դինամիկ քարտեզներ: Դրան կարող եք ավելացնել ավելի շատ լուսային քարտեզներ (թեթև քարտեզներ), որոնք նախապես հաշվարկված և պահպանված են HDR ձևաչափով: Վերոհիշյալի մեծ մասն արված է, օրինակ, Half-Life 2: Lost Coast-ում:

HDR մատուցումը շատ օգտակար է բարդ, ավելի որակյալ հետմշակման համար, քան սովորական մեթոդները: Նույն ծաղկումը ավելի իրատեսական տեսք կունենա, երբ հաշվարկվի HDR ներկայացման մոդելում: Օրինակ, ինչպես արվում է Crytek-ի Far Cry խաղում, այն օգտագործում է ստանդարտ HDR մատուցման տեխնիկա՝ ծաղկման զտիչներ, որոնք ներդրվել են Kawase-ի և տոնային քարտեզագրման օպերատոր Ռայնհարդի կողմից:

Ցավոք, որոշ դեպքերում, խաղերի մշակողները կարող են թաքցնել HDR անվան տակ պարզապես ծաղկման զտիչ, որը հաշվարկված է սովորական LDR միջակայքում: Եվ չնայած այն ամենի մեծ մասը, ինչ արվում է այժմ HDR ցուցադրմամբ խաղերում, ավելի որակյալ ծաղկում է, HDR ցուցադրման առավելությունները չեն սահմանափակվում այս մեկ հետ-էֆեկտով, այն պարզապես ամենահեշտն է անել:

Իրական ժամանակի հավելվածներում HDR մատուցման օգտագործման այլ օրինակներ.


Տոնային քարտեզագրումը HDR լուսավորության տիրույթը փոխակերպելու գործընթաց է LDR տիրույթի, որը ցուցադրվում է ելքային սարքի կողմից, ինչպիսին է մոնիտորը կամ տպիչը, քանի որ դրանց վրա HDR պատկերներ արտածելը կպահանջի HDR մոդելի դինամիկ տիրույթն ու տիրույթը փոխարկել համապատասխան LDR դինամիկին: միջակայքը, առավել հաճախ՝ RGB մոդելը: Ի վերջո, HDR-ում ներկայացված պայծառության տիրույթը շատ լայն է, դա բացարձակ դինամիկ տիրույթի մեծության մի քանի կարգ է միաժամանակ, մեկ տեսարանում: Իսկ այն տիրույթը, որը կարելի է վերարտադրել ծանոթ ելքային սարքերում (մոնիտորներ, հեռուստացույցներ) կազմում է ընդամենը երկու կարգի մեծության դինամիկ տիրույթ:

HDR-ից LDR-ի փոխակերպումը կոչվում է տոնային քարտեզագրում, այն կորուստով է և ընդօրինակում է մարդու տեսողության հատկությունները: Նման ալգորիթմները սովորաբար կոչվում են տոնային քարտեզագրման օպերատորներ: Օպերատորները պատկերի պայծառության բոլոր արժեքները բաժանում են երեք տարբեր տեսակի՝ մուգ, միջին և պայծառ: Ելնելով միջին տոնայնության գնահատված լուսավորությունից՝ ընդհանուր լուսավորությունը շտկվում է, տեսարանի պիքսելների լուսավորության արժեքները վերաբաշխվում են ելքային տիրույթում տեղավորվելու համար, մուգ պիքսելները լուսավորվում են, իսկ պայծառ պիքսելները՝ մգացվում: Այնուհետև պատկերի ամենապայծառ պիքսելները չափվում են ելքային սարքի կամ ելքային տեսքի մոդելի տիրույթին: Հետևյալ նկարը ցույց է տալիս HDR պատկերի ամենապարզ փոխարկումը LDR միջակայքին, գծային փոխակերպումը և ավելի բարդ տոնային քարտեզագրման օպերատորը կիրառվում է կենտրոնում գտնվող հատվածի վրա, որն աշխատում է վերը նկարագրվածի պես.

Երևում է, որ միայն ոչ գծային տոնային քարտեզագրման միջոցով կարելի է ստանալ նկարի առավելագույն մանրամասները, իսկ եթե HDR-ին գծային կերպով բերում եք LDR, ապա շատ մանրուքներ պարզապես կորչում են։ Չկա մեկ ճիշտ տոնային քարտեզագրման ալգորիթմ, կան մի քանի օպերատորներ, որոնք լավ արդյունքներ են տալիս տարբեր իրավիճակներում: Ահա երկու տարբեր տոնային քարտեզագրման օպերատորների տեսողական օրինակ.

HDR արտապատկերման հետ մեկտեղ, վերջերս հնչյունների քարտեզագրումն օգտագործվել է խաղերում: Հնարավոր է եղել կամայականորեն ընդօրինակել մարդու տեսողության հատկությունները. մութ տեսարաններում սրության կորուստ, լուսավորության նոր պայմաններին հարմարեցում շատ լուսավոր տարածքներից մութ վայրեր տեղափոխվելիս և հակառակը, հակադրության, գույնի փոփոխությունների նկատմամբ զգայունություն... Ահա թե ինչպես։ Տեսիլքի հարմարվելու ունակության իմիտացիան Far Cry-ում նման է. Առաջին սքրինշոթը ցույց է տալիս այն պատկերը, որը խաղացողը տեսնում է, երբ նա նոր է վերածվել մութ սենյակից վառ լուսավորված բաց տարածության, իսկ երկրորդը ցույց է տալիս նույն պատկերը մի քանի վայրկյան հետո՝ հարմարեցումից հետո։

Ծաղկել

Bloom-ը կինեմատոգրաֆիկ հետմշակման էֆեկտներից մեկն է, որն էլ ավելի պայծառ է դարձնում պատկերի ամենապայծառ մասերը: Սա շատ պայծառ լույսի էֆեկտն է, որը դրսևորվում է որպես պայծառ մակերևույթների շուրջ փայլ, ծաղկման ֆիլտրը կիրառելուց հետո նման մակերեսները ոչ միայն լրացուցիչ պայծառություն են ստանում, այլև դրանցից լույսը (հալո) մասամբ ազդում է նաև պայծառ մակերևույթներին հարող ավելի մուգ տարածքների վրա: շրջանակում։ Սա ցույց տալու ամենահեշտ ձևը օրինակով է.

3D Bloom գրաֆիկայում ֆիլտրը պատրաստվում է լրացուցիչ հետմշակման միջոցով՝ խառնելով շրջանակը, որը քսված է պղտորման ֆիլտրով (ամբողջ շրջանակը կամ դրա առանձին լուսավոր տարածքները, ֆիլտրը սովորաբար կիրառվում է մի քանի անգամ) և բնօրինակ շրջանակը: Խաղերում և իրական ժամանակի այլ հավելվածներում ամենատարածվածներից մեկը ծաղկման հետզտիչ ալգորիթմն է.

  • Տեսարանը վերարտադրվում է framebuffer-ի մեջ, առարկաների փայլի (փայլի) ինտենսիվությունը գրանցվում է բուֆերի ալֆա ալիքում։
  • Framebuffer-ը պատճենվում է հատուկ հյուսվածքի՝ մշակման համար:
  • Հյուսվածքի լուծաչափը կրճատվում է, օրինակ, 4 գործակցով:
  • Նկարի վրա մի քանի անգամ կիրառվում են հարթեցնող զտիչներ (լղոզում)՝ հիմնվելով ալֆա ալիքում գրանցված ինտենսիվության տվյալների վրա:
  • Ստացված պատկերը խառնվում է բուն շրջանակի հետ framebuffer-ում և արդյունքը ցուցադրվում է էկրանին:

Հետմշակման այլ տեսակների պես, ծաղկումը լավագույնս օգտագործվում է բարձր դինամիկ տիրույթում (HDR) նկարելիս: Վերջնական ծաղկման պատկերը իրական ժամանակի 3D հավելվածներից զտիչով մշակելու լրացուցիչ օրինակներ.

շարժման պղտորում

Շարժման պղտորումը տեղի է ունենում լուսանկարչության և նկարահանման ժամանակ՝ կադրի լուսարձակման ժամանակաշրջանում կադրում առարկաների շարժման պատճառով, մինչդեռ ոսպնյակի կափարիչը բաց է: Տեսախցիկի նկարահանած կադրը (լուսանկար, ֆիլմ) չի ցուցադրում ակնթարթորեն արված լուսանկարը՝ զրոյական տևողությամբ։ Տեխնոլոգիական սահմանափակումների պատճառով կադրը ցույց է տալիս որոշակի ժամանակահատված, որի ընթացքում կադրում գտնվող առարկաները կարող են շարժվել որոշակի հեռավորության վրա, և եթե դա տեղի ունենա, ապա ոսպնյակի կափարիչի բացման ընթացքում շարժվող օբյեկտի բոլոր դիրքերը կլինեն: կադրի վրա ներկայացված է որպես մշուշոտ պատկեր շարժման վեկտորի երկայնքով: Դա տեղի է ունենում, եթե օբյեկտը շարժվում է տեսախցիկի համեմատ, կամ տեսախցիկը օբյեկտի համեմատ, և մշուշման չափը մեզ պատկերացում է տալիս, թե որքան արագ է շարժվում առարկան:

Եռաչափ անիմացիայի մեջ, ժամանակի յուրաքանչյուր կոնկրետ պահի (կադրում), առարկաները գտնվում են որոշակի կոորդինատներում 3D տարածության մեջ՝ նման անսահման արագ կափարիչի արագությամբ վիրտուալ տեսախցիկի: Արդյունքում, արագ շարժվող առարկաներին նայելիս տեսախցիկի և մարդու աչքի նման մշուշոտություն չկա: Այն անբնական և անիրատեսական է թվում: Դիտարկենք մի պարզ օրինակ՝ մի քանի գնդիկներ պտտվում են որոշակի առանցքի շուրջ: Ահա մի պատկեր, թե ինչ տեսք կունենա այս շարժումը լղոզման դեպքում և առանց դրա.

Դու նույնիսկ առանց մշուշման պատկերից չես կարող ասել՝ գնդերը շարժվում են, թե ոչ, մինչդեռ շարժման մշուշումը հստակ պատկերացում է տալիս առարկաների շարժման արագության և ուղղության մասին։ Ի դեպ, շարժման մշուշման բացակայությունն է նաև պատճառը, որ խաղերում 25-30 կադր/վայրկյան արագությամբ շարժումը ցնցող է թվում, թեև նույն կադրերի արագությամբ ֆիլմերն ու տեսանյութերը հիանալի տեսք ունեն: Շարժման պղտորման բացակայությունը փոխհատուցելու համար ցանկալի է կա՛մ բարձր կադրերի արագություն (60 կադր/վրկ կամ ավելի բարձր), կա՛մ պատկերի մշակման լրացուցիչ տեխնիկայի օգտագործումը՝ շարժման մշուշման էֆեկտը ընդօրինակելու համար: Սա օգտագործվում է ինչպես անիմացիայի հարթությունը բարելավելու, այնպես էլ լուսանկարչական և կինոռեալիզմի էֆեկտի համար միաժամանակ:

Իրական ժամանակի հավելվածների համար շարժման պղտորման ամենապարզ ալգորիթմը տվյալների ընթացիկ շրջանակի օգտագործումն է՝ անիմացիայի նախորդ կադրերից ցուցադրելու համար: Բայց կան ավելի արդյունավետ և ժամանակակից motion blur մեթոդներ, որոնք չեն օգտագործում նախորդ կադրերը, այլ հիմնված են կադրում գտնվող օբյեկտների շարժման վեկտորների վրա՝ նաև ավելացնելով ևս մեկ հետմշակման քայլ վերարտադրության գործընթացին: Պղտորման էֆեկտը կարող է լինել կամ ամբողջ էկրանով (սովորաբար կատարվում է հետմշակման ժամանակ), կամ առանձին, ամենաարագ շարժվող օբյեկտների համար:

Շարժման մշուշման էֆեկտի հնարավոր կիրառությունները խաղերում. բոլոր մրցարշավային խաղերը (շարժման շատ բարձր արագության էֆեկտ ստեղծելու և հեռուստացույցի նման կրկնություններ դիտելիս օգտագործելու համար), սպորտային խաղեր (նույն կրկնությունները, բայց բուն խաղում կարող է մշուշվել: կիրառվել շատ արագ շարժվող առարկաների վրա, ինչպիսիք են գնդակը կամ ցատկը, մարտական ​​խաղերը (մռնչոց զենքերի, ձեռքերի և ոտքերի արագ շարժումները), շատ այլ խաղերի վրա (խաղի մեջ 3D նկարահանումների ընթացքում շարժիչի վրա): Ահա խաղերից motion blur հետ-էֆեկտի կիրառման մի քանի օրինակներ.

Դաշտի խորություն (DOF)

Դաշտի խորությունը (դաշտի խորությունը), մի խոսքով, օբյեկտների լղոզումն է՝ կախված նրանց դիրքից՝ տեսախցիկի կիզակետի նկատմամբ: Իրական կյանքում, լուսանկարներում և ֆիլմերում, մենք բոլոր առարկաները հավասարապես հստակ չենք տեսնում, դա պայմանավորված է աչքի կառուցվածքի յուրահատկությամբ և ֆոտո և կինոխցիկների օպտիկայի նախագծմամբ: Ֆոտո և կինոօպտիկան ունեն որոշակի հեռավորություն, տեսախցիկից նման հեռավորության վրա գտնվող առարկաները գտնվում են ուշադրության կենտրոնում և նկարում կտրուկ տեսք ունեն, մինչդեռ տեսախցիկից ավելի հեռու կամ նրան ավելի մոտ գտնվող առարկաները, ընդհակառակը, մշուշոտ են թվում, սրությունը նվազում է: աստիճանաբար՝ մեծանալով կամ նվազեցնելով հեռավորությունը:

Ինչպես կռահեցիք, սա լուսանկար է, ոչ թե մատուցում: Համակարգչային գրաֆիկայում, մյուս կողմից, արտապատկերված պատկերի յուրաքանչյուր օբյեկտ միանգամայն պարզ է, քանի որ ոսպնյակներն ու օպտիկան նմանակված չեն հաշվարկներում: Հետևաբար, ֆոտո և ֆիլմերի ռեալիզմի հասնելու համար պետք է կիրառել հատուկ ալգորիթմներ՝ համակարգչային գրաֆիկայի համար նման բան ստեղծելու համար: Այս տեխնիկան նմանակում է տարբեր հեռավորությունների վրա գտնվող օբյեկտների վրա տարբեր կենտրոնացման ազդեցությունը:

Իրական ժամանակում արտապատկերման տարածված տեխնիկան բնօրինակ կադրի և դրա մշուշոտ տարբերակի (մղոտման ֆիլտրի մի քանի անցումներ) միաձուլումն է` հիմնված պատկերի պիքսելների խորության տվյալների վրա: Խաղերում կան DOF էֆեկտի մի քանի կիրառումներ, ինչպիսիք են խաղի տեսահոլովակները խաղի շարժիչում, կրկնությունները սպորտում և մրցարշավային խաղերում: Իրական ժամանակում դաշտի խորության օրինակներ.

Մանրամասների մակարդակ (LOD)

Մանրամասների մակարդակը (մանրամասների մակարդակը) 3D հավելվածներում շրջանակի ցուցադրման բարդությունը նվազեցնելու, տեսարանում պոլիգոնների, հյուսվածքների և այլ ռեսուրսների ընդհանուր թիվը նվազեցնելու, դրա բարդության ընդհանուր կրճատման մեթոդ է: Պարզ օրինակ. գլխավոր հերոսի մոդելը բաղկացած է 10000 բազմանկյուններից: Այն դեպքերում, երբ այն գտնվում է տեսախցիկին մոտ մշակված տեսարանում, կարևոր է, որ օգտագործվեն բոլոր պոլիգոնները, բայց վերջնական պատկերում տեսախցիկից շատ մեծ հեռավորության վրա այն կզբաղեցնի ընդամենը մի քանի պիքսել, և չկա: կետ՝ մշակելով բոլոր 10000 բազմանկյունները: Թերևս, այս դեպքում հարյուրավոր պոլիգոնները բավական կլինեն, կամ նույնիսկ մի քանի կտոր և հատուկ պատրաստված հյուսվածք մոդելի մոտավորապես նույն ցուցադրման համար: Համապատասխանաբար, միջին հեռավորությունների վրա իմաստ ունի օգտագործել մոդել, որը բաղկացած է մի շարք եռանկյուններից ավելի մեծ, քան ամենապարզ մոդելը, և պակաս, քան ամենաբարդը:

LOD մեթոդը սովորաբար օգտագործվում է 3D տեսարանների մոդելավորման և արտապատկերման ժամանակ՝ օգտագործելով օբյեկտների բարդության մի քանի մակարդակ (երկրաչափական կամ այլ)՝ տեսախցիկից նրանց հեռավորությանը համամասնորեն: Մեթոդը հաճախ օգտագործվում է խաղերի մշակողների կողմից՝ տեսարանում պոլիգոնների քանակը նվազեցնելու և կատարումը բարելավելու համար: Երբ տեսախցիկին մոտ են, առավելագույն մանրամասներով մոդելները (եռանկյունների քանակ, հյուսվածքի չափ, տեքստուրայի բարդություն) օգտագործվում են հնարավորինս բարձր պատկերի որակի համար և հակառակը, երբ մոդելները տեսախցիկից ավելի հեռու են, ավելի քիչ եռանկյուններ ունեցող մոդելները օգտագործվում են մեծացնելու համար: մատուցման արագություն. Բարդության փոփոխությունը, մասնավորապես՝ մոդելի եռանկյունների թիվը, կարող է տեղի ունենալ ավտոմատ կերպով՝ հիմնվելով առավելագույն բարդության մեկ 3D մոդելի վրա, կամ գուցե հիմնվելով մի քանի նախապես պատրաստված մոդելների վրա՝ տարբեր մակարդակի դետալներով: Տարբեր հեռավորությունների համար ավելի քիչ մանրամասներով մոդելներ օգտագործելով, հաշվարկված արտապատկերման բարդությունը կրճատվում է, պատկերի ընդհանուր մանրամասների գրեթե ոչ մի դեգրադացիա:

Մեթոդը հատկապես արդյունավետ է, եթե տեսարանի օբյեկտների թիվը մեծ է, և դրանք գտնվում են տեսախցիկից տարբեր հեռավորությունների վրա։ Օրինակ՝ վերցնենք սպորտային խաղ, օրինակ՝ հոկեյի կամ ֆուտբոլի սիմուլյատոր: Ցածր բազմաբնույթ նիշերի մոդելները օգտագործվում են, երբ դրանք հեռու են տեսախցիկից, իսկ երբ մոտենում են, մոդելները փոխարինվում են ուրիշներով՝ մեծ թվով բազմանկյուններով։ Այս օրինակը շատ պարզ է և ցույց է տալիս մեթոդի էությունը՝ հիմնված մոդելի դետալների երկու մակարդակի վրա, բայց ոչ ոք չի խանգարում ստեղծել մի քանի մակարդակ դետալներ, որպեսզի LOD մակարդակը փոխելու էֆեկտը շատ նկատելի չլինի, որպեսզի մանրամասները աստիճանաբար «աճում» են օբյեկտի մոտենալուն զուգահեռ:

Բացի տեսախցիկից հեռավորությունից, LOD-ի համար կարող են կարևոր լինել նաև այլ գործոններ՝ էկրանի վրա գտնվող առարկաների ընդհանուր թիվը (երբ կադրում կա մեկ կամ երկու նիշ, ապա օգտագործվում են բարդ մոդելներ, իսկ երբ 10-20 է, դրանք անցնել ավելի պարզներին) կամ վայրկյանում կադրերի քանակը (սահմանված են FPS արժեքների սահմանները, որոնցում փոխվում է մանրամասների մակարդակը, օրինակ՝ 30-ից ցածր FPS-ի դեպքում մենք նվազեցնում ենք էկրանի մոդելների բարդությունը, իսկ 60-ում։ , ընդհակառակը, ավելացնում ենք)։ Մանրամասների մակարդակի վրա ազդող այլ հնարավոր գործոններն են օբյեկտի շարժման արագությունը (դժվար թե ժամանակ ունենաք շարժման մեջ գտնվող հրթիռ տեսնել, բայց հեշտությամբ կարող եք տեսնել խխունջ), կերպարի կարևորությունը խաղի տեսանկյունից ( վերցրեք նույն ֆուտբոլը. ձեր վերահսկած խաղացողի մոդելի համար կարող եք օգտագործել ավելի բարդ երկրաչափություն և հյուսվածքներ, դուք տեսնում եք այն ամենամոտ և ամենից հաճախ): Ամեն ինչ կախված է կոնկրետ մշակողի ցանկություններից և հնարավորություններից: Հիմնական բանը չափը չանելն է, դետալների մակարդակի հաճախակի ու նկատելի փոփոխությունները նյարդայնացնում են։

Հիշեցնեմ, որ մանրամասնության մակարդակը պարտադիր չէ, որ վերաբերի միայն երկրաչափությանը, մեթոդը կարող է օգտագործվել նաև այլ ռեսուրսներ խնայելու համար. տարբեր մանրամասներով), լուսավորության տեխնիկա (նման առարկաները լուսավորվում են բարդ ալգորիթմի համաձայն, իսկ հեռավոր օբյեկտները լուսավորվում են ըստ պարզի), տեքստուրավորման տեխնիկա (բարդ պարալաքսային քարտեզագրում օգտագործվում է մոտ մակերևույթների վրա, իսկ սովորական քարտեզագրում՝ հեռավոր մակերեսների վրա։ ), և այլն:

Խաղից օրինակ ցույց տալն այնքան էլ հեշտ չէ, մի կողմից LOD-ը որոշ չափով օգտագործվում է գրեթե ամեն խաղում, մյուս կողմից՝ դա միշտ չէ, որ հնարավոր է հստակ ցույց տալ, այլապես քիչ բան կլիներ. հենց LOD-ում:

Բայց այս օրինակում դեռ պարզ է, որ մոտակա մեքենայի մոդելն ունի առավելագույն մանրամասնություն, հաջորդ երկու կամ երեք մեքենաները նույնպես շատ մոտ են այս մակարդակին, և բոլոր հեռավորները տեսանելի պարզեցումներ ունեն, ահա ամենակարևորները. չկան հետևի հայելիներ, պետհամարանիշեր, դիմապակու մաքրիչներ և լրացուցիչ լուսավորություն։ Իսկ ամենահեռավոր մոդելից ճանապարհին ստվեր անգամ չկա։ Սա գործողության դետալների ալգորիթմի մակարդակն է:

գլոբալ լուսավորություն

Տեսարանի իրատեսական լուսավորությունը դժվար է նմանակել, իրականում լույսի յուրաքանչյուր ճառագայթ արտացոլվում և բեկվում է բազմիցս, այդ արտացոլումների քանակը սահմանափակ չէ: Իսկ 3D արտապատկերման մեջ արտացոլումների քանակը մեծապես կախված է հաշվարկային հնարավորություններից, տեսարանի ցանկացած հաշվարկ պարզեցված ֆիզիկական մոդել է, և ստացված պատկերը մոտ է միայն ռեալիզմին:

Լուսավորման ալգորիթմները կարելի է բաժանել երկու մոդելի՝ ուղղակի կամ տեղային լուսավորություն և գլոբալ լուսավորություն (ուղիղ կամ տեղային լուսավորություն և գլոբալ լուսավորություն): Տեղական լուսավորության մոդելը օգտագործում է ուղղակի լուսավորության հաշվարկը, լույսը լույսի աղբյուրներից մինչև լույսի առաջին հատումը անթափանց մակերեսով, առարկաների փոխազդեցությունը միմյանց հետ հաշվի չի առնվում: Թեև այս մոդելը փորձում է փոխհատուցել դա՝ ավելացնելով ֆոնային կամ շրջակա միջավայրի լուսավորություն, սա ամենապարզ մոտարկումն է՝ բոլոր անուղղակի լույսի աղբյուրներից խիստ պարզեցված լուսավորություն, որը սահմանում է օբյեկտների լուսավորության գույնը և ինտենսիվությունը ուղիղ լույսի աղբյուրների բացակայության դեպքում:

Նույն ճառագայթների հետագծումը հաշվարկում է մակերևույթների լուսավորությունը միայն լույսի աղբյուրների ուղիղ ճառագայթներով, և ցանկացած մակերես, որպեսզի տեսանելի լինի, պետք է ուղղակիորեն լուսավորվի լույսի աղբյուրով: Սա բավարար չէ ֆոտոռեալիստական ​​արդյունքների հասնելու համար, բացի ուղղակի լուսավորությունից, պետք է հաշվի առնել նաև երկրորդային լուսավորությունը այլ մակերեսներից արտացոլված ճառագայթներով: Իրական աշխարհում լույսի ճառագայթները մի քանի անգամ ցատկում են մակերևույթներից, մինչև դրանք ամբողջությամբ մարեն: Պատուհանով անցնող արևի լույսը լուսավորում է ամբողջ սենյակը, թեև ճառագայթները չեն կարող ուղղակիորեն հասնել բոլոր մակերեսներին: Որքան պայծառ է լույսի աղբյուրը, այնքան շատ անգամ այն ​​կցատկի: Անդրադարձող մակերեսի գույնը նույնպես ազդում է արտացոլված լույսի գույնի վրա, օրինակ՝ կարմիր պատը կառաջացնի կարմիր բիծ հարակից սպիտակ օբյեկտի վրա: Ահա հստակ տարբերություն, հաշվարկ՝ առանց երկրորդական լուսավորությունը հաշվի առնելու և այն հաշվի առնելու.

Համաշխարհային լուսավորության մոդելում գլոբալ լուսավորությունը հաշվարկվում է` հաշվի առնելով առարկաների ազդեցությունը միմյանց վրա, հաշվի են առնվում օբյեկտների մակերևույթներից լույսի ճառագայթների բազմակի անդրադարձումները և բեկումները, կաուստիկան և ստորգետնյա ցրումը: Այս մոդելը թույլ է տալիս ստանալ ավելի իրատեսական պատկեր, սակայն բարդացնում է գործընթացը՝ պահանջելով զգալիորեն ավելի շատ ռեսուրսներ։ Գոյություն ունեն գլոբալ լուսավորության մի քանի ալգորիթմներ, մենք հակիրճ կանդրադառնանք ռադիոակտիվությանը (անուղղակի լուսավորության հաշվարկ) և ֆոտոնների քարտեզագրմանը (գլոբալ լուսավորության հաշվարկը՝ հիմնված ֆոտոնային քարտեզների վրա՝ նախապես հաշվարկված հետագծման միջոցով): Գոյություն ունեն նաև անուղղակի լուսավորության մոդելավորման պարզեցված մեթոդներ, ինչպես օրինակ՝ փոխել տեսարանի ընդհանուր պայծառությունը՝ կախված դրա լույսերի քանակից և պայծառությունից, կամ օգտագործել տեսարանի շուրջ տեղադրված մեծ թվով կետային լույսեր՝ արտացոլված լույսը մոդելավորելու համար, բայց այնուամենայնիվ սա. հեռու է իրական ալգորիթմից Գ.Ի.

Ռադիոզության ալգորիթմը լույսի ճառագայթների երկրորդական անդրադարձումների հաշվարկման գործընթացն է մի մակերեսից մյուսը, ինչպես նաև շրջակա միջավայրից դեպի առարկաներ։ Լույսի աղբյուրների ճառագայթները հետագծվում են այնքան ժամանակ, մինչև դրանց ուժգնությունը իջնի որոշակի մակարդակից կամ ճառագայթները հասնեն արտացոլումների որոշակի քանակի: Սա սովորական GI տեխնիկա է, հաշվարկները սովորաբար կատարվում են նախքան արտապատկերումը, և հաշվարկի արդյունքները կարող են օգտագործվել իրական ժամանակում ցուցադրման համար: Ռադիոզության հիմնական գաղափարները հիմնված են ջերմության փոխանցման ֆիզիկայի վրա։ Օբյեկտների մակերեսները բաժանված են փոքր տարածքների, որոնք կոչվում են բծեր, և ենթադրվում է, որ անդրադարձված լույսը հավասարապես ցրվում է բոլոր ուղղություններով։ Լույսերի յուրաքանչյուր ճառագայթը հաշվարկելու փոխարեն օգտագործվում է միջինացման տեխնիկա՝ լույսերը բաժանելով մասերի՝ հիմնվելով նրանց վառած էներգիայի մակարդակի վրա: Այս էներգիան համամասնորեն բաշխվում է մակերևույթների հատվածների միջև։

Հենրիկ Վան Յենսենի կողմից առաջարկված գլոբալ լուսավորությունը հաշվարկելու մեկ այլ մեթոդ ֆոտոնների քարտեզագրման մեթոդն է: Ֆոտոնային քարտեզների օգտագործումը ճառագայթների հետագծման վրա հիմնված մեկ այլ գլոբալ լուսավորության ալգորիթմ է, որն օգտագործվում է լուսային ճառագայթների փոխազդեցությունը տեսարանի օբյեկտների հետ մոդելավորելու համար: Ալգորիթմը հաշվարկում է ճառագայթների երկրորդական անդրադարձումները, լույսի բեկումը թափանցիկ մակերեսների միջով, ցրված անդրադարձումները։ Այս մեթոդը բաղկացած է մակերեսի կետերի լուսավորության հաշվարկից երկու անցումներով: Առաջինը կատարում է լույսի ուղիղ ճառագայթային հետագծում երկրորդական անդրադարձումներով, սա նախնական պրոցես է, որը կատարվում է հիմնական արտապատկերումից առաջ։ Այս մեթոդը հաշվարկում է ֆոտոնների էներգիան, որոնք ճանապարհորդում են լույսի աղբյուրից դեպի տեսարանի առարկաները: Երբ ֆոտոնները հասնում են մակերեսին, ֆոտոնի հատման կետը, ուղղությունը և էներգիան պահվում են քեշում, որը կոչվում է ֆոտոն քարտեզ: Ֆոտոնային քարտեզները կարող են պահվել սկավառակի վրա՝ հետագայում օգտագործելու համար՝ առանց դրանք վերահաշվարկելու յուրաքանչյուր շրջանակ: Ֆոտոնների անդրադարձումները հաշվարկվում են այնքան ժամանակ, մինչև աշխատանքը դադարի որոշակի թվով արտացոլումներից հետո կամ երբ հասնում է որոշակի էներգիայի: Երկրորդ ռենդերային անցումում հաշվարկվում է տեսարանի պիքսելների լուսավորությունը ուղիղ ճառագայթներով՝ հաշվի առնելով ֆոտոնների քարտեզներում պահվող տվյալները, ուղղակի լուսավորության էներգիային ավելացվում է ֆոտոնային էներգիա։

Գլոբալ լուսավորության հաշվարկները, որոնք օգտագործում են մեծ թվով երկրորդական արտացոլումներ, շատ ավելի երկար են տևում, քան ուղղակի լուսավորության հաշվարկները: Կան ռադիոքաղաքի իրական ժամանակի ապարատային հաշվարկի տեխնիկա, որոնք օգտագործում են վերջին սերնդի ծրագրավորվող վիդեո չիպերի հնարավորությունները, սակայն առայժմ տեսարանները, որոնց համար իրական ժամանակում հաշվարկվում է գլոբալ լուսավորությունը, պետք է լինեն բավականին պարզ, և շատ պարզեցումներ կան: պատրաստված ալգորիթմներում:

Բայց այն, ինչ երկար ժամանակ օգտագործվել է, ստատիկ նախապես հաշվարկված գլոբալ լուսավորությունն է, որը ընդունելի է տեսարանների համար՝ առանց լույսի աղբյուրների և մեծ օբյեկտների դիրքը փոխելու, որոնք մեծապես ազդում են լուսավորության վրա: Ի վերջո, գլոբալ լուսավորության հաշվարկը կախված չէ դիտորդի դիրքից, և եթե տեսարանի նման օբյեկտների դիրքը և լույսի աղբյուրների պարամետրերը տեսարանում չեն փոխվում, ապա կարող են օգտագործվել նախապես հաշվարկված լուսավորության արժեքները: Սա օգտագործվում է շատ խաղերում՝ պահպանելով GI-ի հաշվարկման տվյալները լուսային քարտեզների (lightmaps) տեսքով:

Կան նաև ընդունելի ալգորիթմներ դինամիկայի մեջ գլոբալ լուսավորության մոդելավորման համար: Օրինակ, կա այս պարզ մեթոդը իրական ժամանակում կիրառելու համար՝ տեսարանում օբյեկտի անուղղակի լուսավորությունը հաշվարկելու համար. ցածր լուծաչափով խորանարդ քարտեզ (այն կարող է օգտագործվել նաև օբյեկտի մակերեսի վրա դինամիկ արտացոլումներ ցուցադրելու համար), այնուհետև զտել այդ հյուսվածքը (լղոզման ֆիլտրի մի քանի անցումներ) և լուսավորել այդ օբյեկտը հաշվարկված հյուսվածքից ստացված տվյալներով՝ որպես ուղղակի լուսավորության լրացում: Այն դեպքերում, երբ դինամիկ հաշվարկը չափազանց ծանր է, ռադիոակտիվության ստատիկ քարտեզները կարող են չօգտագործվել: Օրինակ MotoGP 2 խաղից, որը հստակ ցույց է տալիս GI-ի նույնիսկ նման պարզ իմիտացիայի օգտակար ազդեցությունը.



«itemprop="image">

«Ի՞նչ են շեյդերները»: հետաքրքրասեր խաղացողների և սկսնակ խաղեր մշակողների շատ տարածված հարց է: Այս հոդվածում ես ձեզ հասկանալի և հստակ կպատմեմ այս սարսափելի շեյդերների մասին:

Համակարգչային խաղերը համակարգչային գրաֆիկայի մեջ ֆոտոռեալիստական ​​պատկերների առաջընթացի շարժիչն եմ համարում, ուստի եկեք խոսենք այն մասին, թե ինչ են «շեյդերները» տեսախաղերի համատեքստում։

Նախքան առաջին գրաֆիկական արագացուցիչները, տեսախաղերի շրջանակների մատուցման ամբողջ աշխատանքը կատարվում էր աղքատ պրոցեսորի կողմից։

Շրջանակ նկարելը իրականում բավականին ծանր աշխատանք է՝ պետք է վերցնել «երկրաչափությունը»՝ բազմանկյուն մոդելները (աշխարհ, կերպար, զենք և այլն) և պատկերացնել այն: Ի՞նչ է rasterize-ը: Ամբողջ 3d մոդելը բաղկացած է ամենափոքր եռանկյուններից, որոնք ռաստերիզատորը վերածում է պիքսելների (այսինքն՝ «rasterize» նշանակում է վերածվել պիքսելների): Ռաստերացումից հետո վերցրեք հյուսվածքի տվյալները, լուսավորության պարամետրերը, մառախուղը և այլն և հաշվարկեք խաղի շրջանակի յուրաքանչյուր ստացված պիքսելը, որը կցուցադրվի խաղացողին:

Այսպիսով, կենտրոնական պրոցեսորային միավորը (CPU - Central Processing Unit) չափազանց խելացի տղա է նրան ստիպելու նման առօրյա վարել: Փոխարենը տրամաբանական է առանձնացնել ինչ-որ ապարատային մոդուլ, որը կբեռնաթափի պրոցեսորը, որպեսզի այն կարողանա ավելի կարևոր ինտելեկտուալ աշխատանք կատարել։

Նման ապարատային մոդուլը դարձել է գրաֆիկական արագացուցիչ կամ վիդեո քարտ (GPU - Graphics Processing Unit): Այժմ պրոցեսորը պատրաստում է տվյալները և բեռնում գործընկերոջը սովորական աշխատանքով: Հաշվի առնելով, որ GPU-ն այժմ միայն մեկ կոլեգա չէ, այն minions-cores-ի ամբոխ է, նա միանգամից գլուխ է հանում նման աշխատանքից։

Բայց մենք դեռ չենք ստացել հիմնական հարցի պատասխանը՝ ի՞նչ են շեյդերները։ Սպասիր, ես հասնում եմ սրան:

Լավ, հետաքրքիր և ֆոտոռեալիզմին մոտ գրաֆիկան վիդեո քարտ մշակողներից պահանջում էր շատ ալգորիթմներ իրականացնել ապարատային մակարդակում: Ստվերներ, լույսեր, շեշտադրումներ և այլն: Այս մոտեցումը. ապարատային ալգորիթմների ներդրման դեպքում կոչվում է «Ֆիքսված խողովակաշար կամ խողովակաշար», և որտեղ պահանջվում է բարձրորակ գրաֆիկա, այն այլևս չի գտնվում: Նրա տեղը զբաղեցրել է Ծրագրավորվող խողովակաշարը։

Խաղացողների խնդրանքները «Արի, բեր լավ գրաֆոնիում: Անակնկալ», մղեց խաղերի մշակողներին (համապատասխանաբար վիդեո քարտ արտադրողներին) գնալով ավելի բարդ ալգորիթմների: Մինչ այժմ, ինչ-որ պահի, լարային ապարատային ալգորիթմները նրանց համար շատ քիչ էին դարձել:

Ժամանակն է, որ գրաֆիկական քարտերը դառնան ավելի խելացի: Որոշումը կայացվել է թույլ տալ ծրագրավորողներին ծրագրավորել GPU բլոկները կամայական խողովակաշարերի մեջ, որոնք իրականացնում են տարբեր ալգորիթմներ: Այսինքն՝ խաղեր մշակողները, գրաֆիկական ծրագրավորողները այժմ կարողացել են ծրագրեր գրել վիդեո քարտերի համար։

Եվ հիմա, վերջապես, հասանք մեր հիմնական հարցի պատասխանին.

«Ի՞նչ են շեյդերները»:

Shader (անգլերեն Shader - ստվերային ծրագիր) ծրագիր է վիդեո քարտի համար, որն օգտագործվում է եռաչափ գրաֆիկայում՝ որոշելու օբյեկտի կամ պատկերի վերջնական պարամետրերը, կարող է ներառել լույսի կլանման և ցրման նկարագրություն, հյուսվածքների քարտեզագրում, արտացոլում։ և բեկում, ստվերում, մակերեսի տեղաշարժ և շատ այլ տարբերակներ:

Որոնք են շեյդերները: Օրինակ, ահա էֆեկտը, որը դուք կարող եք ստանալ, դա ջրի ստվերն է, որը կիրառվում է ոլորտի վրա:

Գրաֆիկական խողովակաշար

Ծրագրավորվող խողովակաշարի առավելությունն իր նախորդի նկատմամբ այն է, որ այժմ ծրագրավորողները կարող են ինքնուրույն ստեղծել իրենց ալգորիթմները, այլ ոչ թե օգտագործել լարային ընտրանքների փաթեթ:

Սկզբում վիդեո քարտերը համալրված էին մի քանի մասնագիտացված պրոցեսորներով, որոնք աջակցում էին հրահանգների տարբեր խմբերին: Շեյդերները բաժանվեցին երեք տեսակի՝ կախված նրանից, թե որ պրոցեսորն է դրանք գործարկելու։ Բայց հետո վիդեո քարտերը սկսեցին համալրվել ունիվերսալ պրոցեսորներով, որոնք աջակցում են բոլոր երեք տեսակի շեյդերների հրահանգների հավաքածուներին: Շեյդերների բաժանումը տեսակների պահպանվել է՝ նկարագրելու համար շեյդերի նպատակը:

Նման խելացի գրաֆիկական քարտերով գրաֆիկական առաջադրանքներից բացի, հնարավոր դարձավ ընդհանուր նշանակության (ոչ համակարգչային գրաֆիկայի) հաշվարկներ կատարել GPU-ի վրա։

Առաջին անգամ շեյդերների ամբողջական աջակցությունը հայտնվեց GeForce 3 սերիայի վիդեո քարտերում, բայց սկզբնական տարրերը ներդրվեցին GeForce256-ում (Registration Combiners-ի տեսքով):

Շեյդերների տեսակները

Կախված խողովակաշարի փուլից՝ ստվերները բաժանվում են մի քանի տեսակի՝ գագաթային, բեկորային (պիքսել) և երկրաչափական։ Իսկ վերջին տիպի խողովակաշարերում կան նաև թեսելյացիոն շեյդերներ: Գրաֆիկական խողովակաշարը մանրամասն չենք քննարկելու, ես դեռ մտածում եմ այս մասին առանձին հոդված գրելու մասին, նրանց համար, ովքեր որոշում են ուսումնասիրել շեյդերները և գրաֆիկական ծրագրավորումը։ Գրեք մեկնաբանություններում, եթե հետաքրքրված եք, ես կիմանամ՝ արժե՞ ժամանակ վատնել։

Vertex shader

Vertex shaders-ը ստեղծում է կերպարների, խոտերի, ծառերի անիմացիաներ, ջրի վրա ալիքներ ստեղծում և շատ այլ բաներ: Vertex shader-ում ծրագրավորողին հասանելի են գագաթների հետ կապված տվյալները, օրինակ՝ գագաթի կոորդինատները տարածության մեջ, նրա հյուսվածքային կոորդինատները, գույնը և նորմալ վեկտորը:

Երկրաչափական ստվեր

Geometry shaders-ն ի վիճակի է ստեղծել նոր երկրաչափություն և կարող է օգտագործվել մասնիկներ ստեղծելու, մոդելի մանրամասները փոփոխելու, ուրվանկարներ ստեղծելու և այլնի համար: Ի տարբերություն նախորդ գագաթի, նրանք կարողանում են մշակել ոչ միայն մեկ գագաթը, այլ ամբողջ պարզունակը։ Պարզունակը կարող է լինել հատված (երկու գագաթ) և եռանկյուն (երեք գագաթ), իսկ եթե տեղեկություն կա հարակից գագաթների մասին (անգլերեն հարևանություն), ապա եռանկյուն պարզունակի համար կարելի է մշակել մինչև վեց գագաթ։

Pixel shader

Pixel shaders-ը կատարում է հյուսվածքների քարտեզագրում, լուսավորություն և տարբեր հյուսվածքային էֆեկտներ, ինչպիսիք են արտացոլումը, բեկումը, մառախուղը, բախման քարտեզը և այլն:

Պիկսելային շեյդերը աշխատում է bitmap բեկորների և հյուսվածքների հետ. այն մշակում է պիքսելների հետ կապված տվյալները (օրինակ՝ գույն, խորություն, հյուսվածքային կոորդինատներ): Պիկսելային ստվերն օգտագործվում է գրաֆիկական խողովակաշարի վերջին փուլում՝ պատկերի հատվածը ձևավորելու համար:

Ինչի վրա են գրում շեյդերները:

Սկզբում շեյդերները կարող էին գրվել ասեմբլերի նման լեզվով, սակայն ավելի ուշ հայտնվեցին C-ին նման բարձր մակարդակի շեյդեր լեզուներ, ինչպիսիք են Cg, GLSL և HLSL:

Նման լեզուները շատ ավելի պարզ են, քան C-ն, քանի որ դրանց օգնությամբ լուծված խնդիրները շատ ավելի պարզ են։ Նման լեզուների տիպային համակարգը արտացոլում է գրաֆիկական ծրագրավորողների կարիքները: Ուստի նրանք ծրագրավորողին տրամադրում են տվյալների հատուկ տեսակներ՝ մատրիցներ, նմուշառիչներ, վեկտորներ և այլն։

RenderMan

Այն ամենը, ինչ մենք քննարկեցինք վերևում, վերաբերում է իրական ժամանակի գրաֆիկներին: Բայց կան ոչ իրական ժամանակի գրաֆիկա: Ո՞րն է տարբերությունը - realtime - real time, այսինքն, այստեղ և հիմա - խաղի մեջ վայրկյանում 60 կադր տալը, սա իրական ժամանակի գործընթաց է: Բայց մի քանի րոպե առաջադեմ անիմացիայի համար բարդ կադր պատրաստելը իրական ժամանակում չէ: Հարցը ժամանակն է:

Օրինակ, այնպիսի որակի գրաֆիկա, ինչպիսին Pixar-ի վերջին անիմացիոն ֆիլմերն են, այժմ հնարավոր չէ իրական ժամանակում ստանալ: Շատ մեծ ռենդեր ֆերմերները հաշվարկում են լույսի սիմուլյացիաները՝ օգտագործելով բոլորովին այլ ալգորիթմներ, որոնք շատ թանկ են, բայց տալիս են գրեթե ֆոտոռեալիստական ​​պատկերներ:

Սուպեր իրատեսական գրաֆիկա Sand Piper-ում

Օրինակ, նայեք այս գեղեցիկ մուլտֆիլմին, ավազահատիկներին, թռչունների փետուրներին, ալիքներին, ամեն ինչ աներևակայելի իրական է թվում:

*Տեսանյութը կարող է արգելվել Youtube-ում, եթե այն չբացվի, google pixar sandpiper - համարձակ ավազակագործի մասին կարճ մուլտֆիլմը շատ սրամիտ է ու փափկամազ։ Հպում և ցույց է տալիս, թե որքան հիանալի կարող է լինել համակարգչային գրաֆիկան:

Այսպիսով, սա RenderMan-ն է Pixar-ից: Այն դարձավ առաջին shader ծրագրավորման լեզուն։ RenderMan API-ն դե ֆակտո ստանդարտ է պրոֆեսիոնալ մատուցման համար, որն օգտագործվում է Pixar-ի բոլոր ստուդիաների կողմից և դրանից դուրս:

Օգտակար տեղեկատվություն

Այժմ դուք գիտեք, թե ինչ են շեյդերները, բայց բացի շեյդերներից, կան խաղերի մշակման և համակարգչային գրաֆիկայի այլ շատ հետաքրքիր թեմաներ, որոնք անպայման կհետաքրքրեն ձեզ.

  • , ժամանակակից տեսախաղերում ցնցող էֆեկտներ ստեղծելու տեխնիկա է։ Համառոտ հոդված և տեսանյութ Unity3d-ում էֆեկտներ ստեղծելու դասերով
  • - Եթե դուք մտածում եք տեսախաղեր զարգացնելու մասին՝ որպես պրոֆեսիոնալ կարիերա կամ որպես հոբբի, այս հոդվածը պարունակում է առաջարկությունների մեծ փաթեթ, թե որտեղից սկսել, ինչ գրքեր կարդալ և այլն:

Եթե ​​կան հարցեր

Ինչպես միշտ, եթե ունեք հարցեր, տվեք դրանք մեկնաբանություններում, ես միշտ կպատասխանեմ: Ցանկացած բարի խոսքի կամ սխալների ուղղման համար շատ շնորհակալ կլինեմ։

Այս ձեռնարկը կօգնի ձեզ տեղադրել ստվերներ Minecraft-ում և դրանով իսկ բարելավել խաղի աշխարհը՝ ավելացնելով դինամիկ ստվերներ, քամու և խոտի աղմուկ, իրատեսական ջուր և շատ ավելին:

Անմիջապես պետք է նշել, որ շեյդերները բավականին ծանրաբեռնում են համակարգը, և եթե ունեք թույլ վիդեո քարտ կամ նույնիսկ ինտեգրված, խորհուրդ ենք տալիս ձեռնպահ մնալ այս ռեժիմը տեղադրելուց:

Տեղադրումը բաղկացած է երկու փուլից, նախ անհրաժեշտ է տեղադրել shader mod-ը, այնուհետև դրա վրա լրացուցիչ shaderpacks

ՔԱՅԼ # 1 - Shader mod-ի տեղադրում

  1. Ներբեռնեք և տեղադրեք Java-ն
  2. Տեղադրեք OptiFine HD
    կամ ShaderMod;
  3. Փաթեթավորեք ստացված արխիվը ցանկացած վայրում.
  4. Մենք գործարկում ենք jar ֆայլը, քանի որ նա տեղադրող է;
  5. Ծրագիրը ձեզ ցույց կտա խաղի ճանապարհը, եթե ամեն ինչ ճիշտ է, սեղմեք Yes, Ok, Ok;
  6. Գնալ .minecraftև այնտեղ թղթապանակ ստեղծեք shaderpacks;
  7. Մենք մտնում ենք գործարկիչ և տողում տեսնում ենք նոր պրոֆիլ «ShadersMod» անունով, եթե ոչ, ապա ընտրեք այն ձեռքով:
  8. Հաջորդը դուք պետք է ներբեռնեք shaderpacks

ՔԱՅԼ # 2 - Տեղադրեք shaderpack

  1. Ներբեռնեք ձեզ հետաքրքրող shaderpack-ը (ցուցակը հոդվածի վերջում)
  2. Սեղմեք ստեղները Win + R
  3. Գնալ .minecraft/shaderpacks. Եթե ​​նման թղթապանակ չկա, ապա ստեղծեք այն։
  4. Տեղափոխեք կամ հանեք ստվերային արխիվը .minecraft/shaderpacks. Ճանապարհը պետք է այսպիսին լինի. .minecraft/shaderpacks/SHADER_FOLDER_NAME/shaders/[.fsh և .vsh ֆայլեր ներսում]
  5. Գործարկեք Minecraft-ը և գնացեք Կարգավորումներ > Շեյդերներ. Այստեղ դուք կտեսնեք հասանելի շեյդերների ցանկը: Ընտրեք այն, ինչ ցանկանում եք
  6. Shader-ի կարգավորումներում միացրեք «tweakBlockDamage»-ը, անջատեք «CloudShadow»-ը և «OldLighting»-ը:

Sonic Ether's Unbelievable Shaders
Sildur's shaders
Chocapic13-ի Shaders
sensi277-ի yShaders
MrMeep_x3-ի Shaders
Naelego-ի Cel Shaders
RRe36-ի Shaders
DeDelner's CUDA Shaders
bruceatsr44-ի Acid Shaders
Beed28-ի Shaders
Ziipzaap-ի Shader Pack
robobo1221-ի Shaders
dvv16-ի Shaders
Stazza85 սուպեր Shaders
hoo00's Shaders փաթեթ B
Regi24's Waving Plants
MrButternuss ShaderPack
DethRaid-ի հիանալի գրաֆիկա Nitro Shaders-ի վրա
Edi's Shader ForALLPc-ը
CrankerMan's TME Shaders
Kadir Nck Shader (skate702-ի համար)
Werrus-ի Shaders
Knewtonwako-ի Life Nexus Shaders
CYBOX ստվերային փաթեթ
CrapDeShoes CloudShade Alpha
AirLoocke42 Shader
CaptTatsu-ի BSL Shaders-ը
Տրիլիտոնի շեյդերները
ShadersMcOfficial's Bloominx Shaders (Chocapic13" Shaders)
dotModded-ի Continuum Shaders
Qwqx71"s Lunar Shaders (chocapic13"s shader)

Նախատեսված է վիդեո քարտերի պրոցեսորների (GPU) միջոցով կատարման համար: Շեյդերները կազմվում են մասնագիտացված ծրագրավորման լեզուներից մեկում (տես) և կազմվում են GPU-ի հրահանգների մեջ:

Դիմում

Նախքան շեյդերների օգտագործումը, ընթացակարգային հյուսվածքների ստեղծումը (օրինակ՝ Unreal-ում օգտագործվում էր ջրի և կրակի անիմացիոն հյուսվածքներ ստեղծելու համար) և բազմահյուսվածքը (Qake 3-ում օգտագործված ստվերային լեզուն դրա վրա էր հիմնված): Այս մեխանիզմները չեն ապահովում նույն ճկունությունը, ինչ ստվերները:

Վերակազմավորվող գրաֆիկական խողովակաշարերի հայտնվելով հնարավոր դարձավ մաթեմատիկական հաշվարկներ կատարել GPU-ի վրա (GPGPU): Ամենահայտնի GPGPU շարժիչներն են nVidia CUDA, Microsoft DirectCompute և բաց կոդով OpenCL:

Շեյդերների տեսակները

Vertex shaders

Գագաթային ստվերն աշխատում է տվյալների վրա, որոնք կապված են պոլիեդրների գագաթների հետ, օրինակ՝ տարածության մեջ գագաթի (կետի) կոորդինատներով, հյուսվածքային կոորդինատներով, գագաթի գույնով, շոշափող վեկտորով, երկնորմալ վեկտորով, նորմալով։ վեկտոր. Vertex shader-ը կարող է օգտագործվել գագաթների դիտման և հեռանկարային վերափոխման, հյուսվածքային կոորդինատների ստեղծման, լուսավորությունը հաշվարկելու համար և այլն:

Կոդի օրինակ գագաթային ստվերի համար հետևյալում.

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

Երկրաչափական ստվերներ

Երկրաչափական շեյդերը, ի տարբերություն գագաթային շեյդերի, ի վիճակի է մշակել ոչ միայն մեկ գագաթը, այլև ողջ պարզունակը: Պարզունակը կարող է լինել հատված (երկու գագաթ) և եռանկյուն (երեք գագաթ), իսկ եթե տեղեկություն կա հարակից գագաթների մասին (անգլերեն հարևանություն), ապա եռանկյուն պարզունակի համար կարելի է մշակել մինչև վեց գագաթ։ The Geometry Shader-ը կարող է պրիմիտիվներ առաջացնել թռիչքի ժամանակ (առանց պրոցեսորի օգտագործման):

Geometry shaders-ն առաջին անգամ օգտագործվել է Nvidia-ի 8-րդ սերիայի գրաֆիկական քարտերի վրա:

Փիքսել (բեկորային) շեյդերներ

Պիկսելային շեյդերը աշխատում է bitmap բեկորների և հյուսվածքների հետ. այն մշակում է պիքսելների հետ կապված տվյալները (օրինակ՝ գույն, խորություն, հյուսվածքային կոորդինատներ): Պիկսելային ստվերն օգտագործվում է գրաֆիկական խողովակաշարի վերջին փուլում՝ պատկերի հատվածը ձևավորելու համար:

Պիկսելային ստվերի օրինակելի կոդը հետևյալում.

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

Առավելություններն ու թերությունները

Առավելությունները:

  • ցանկացած ալգորիթմ կազմելու հնարավորություն (ճկունություն, պարզեցում և ծրագրի մշակման ցիկլի արժեքի նվազեցում, նկարված տեսարանների բարդության և իրատեսականության բարձրացում);
  • կատարման արագության բարձրացում (համեմատած կենտրոնական պրոցեսորի վրա կատարված նույն ալգորիթմի կատարման արագության հետ):

Թերություններ:

  • ծրագրավորման նոր լեզու սովորելու անհրաժեշտությունը;
  • տարբեր արտադրողների GPU-ների համար տարբեր հրահանգների հավաքածուների առկայությունը:

Ծրագրավորման լեզուներ

Շուկայի տարբեր կարիքները բավարարելու համար (համակարգչային գրաֆիկան ունի բազմաթիվ հավելվածներ), ստեղծվել են մեծ թվով շեյդեր ծրագրավորման լեզուներ։

Սովորաբար, շեյդեր գրելու լեզուները ծրագրավորողին տրամադրում են տվյալների հատուկ տեսակներ (մատրիցաներ, նմուշառիչներ, վեկտորներ և այլն), ներկառուցված փոփոխականների և հաստատունների մի շարք (ստանդարտ 3D API ֆունկցիոնալության հետ փոխազդելու համար):

Պրոֆեսիոնալ մատուցում

Ստորև բերված են shader ծրագրավորման լեզուներ, որոնք ուղղված են առավելագույն մատուցման որակի հասնելուն: Նման լեզուներում նյութերի հատկությունները նկարագրվում են աբստրակցիաների միջոցով։ Սա թույլ է տալիս մարդկանց, ովքեր չունեն հատուկ ծրագրավորման հմտություններ և չգիտեն ապարատային ներդրման առանձնահատկությունները, գրել կոդ: Օրինակ՝ նկարիչները կարող են գրել նման ստվերներ՝ «ճիշտ տեսք» ապահովելու համար (հյուսվածքի քարտեզագրում, լույսի տեղադրում և այլն)։

Սովորաբար նման ստվերների մշակումը բավականին ռեսուրսներ է պահանջում. ֆոտոռեալիստական ​​պատկերներ ստեղծելը պահանջում է մեծ հաշվողական ուժ: Սովորաբար, հաշվարկների հիմնական մասը կատարվում է խոշոր համակարգչային կլաստերների կամ blade համակարգերի միջոցով:

RenderMan Շեյդեր ծրագրավորման լեզուն, որը ներդրվել է Pixar-ի RenderMan ծրագրաշարում, առաջին շեյդեր ծրագրավորման լեզուն էր: RenderMan API-ն, որը մշակվել է Rob Cook-ի կողմից և նկարագրված է RenderMan ինտերֆեյսի ճշգրտման մեջ, դե ֆակտո ստանդարտ է պրոֆեսիոնալ մատուցման համար, որն օգտագործվում է Pixar-ի աշխատանքում: OSL OSL Open Shading Language-ը շեյդեր ծրագրավորման լեզու է, որը մշակվել է Sony Pictures Imageworksև հիշեցնող լեզու: Այն օգտագործվում է սեփական Arnold ծրագրում, որը մշակվել է Sony Pictures Imageworks-ի կողմից՝ մատուցման համար, և անվճար Blender ծրագրում՝ համակարգչային եռաչափ գրաֆիկա ստեղծելու համար։ GLSL GLSL իրական ժամանակում մատուցում բաց ԳԼ Սունենալով Լանկյուն) Shader ծրագրավորման լեզու է, որը նկարագրված է OpenGL ստանդարտում և հիմնված է ANSI C ստանդարտում նկարագրված լեզվի տարբերակի վրա։ Լեզուն աջակցում է ANSI C-ի առանձնահատկությունների մեծամասնությանը, աջակցում է տվյալների տեսակներին, որոնք հաճախ օգտագործվում են եռաչափ գրաֆիկայի հետ աշխատելիս (վեկտորներ, մատրիցներ): «Shader» բառը GLSL-ում վերաբերում է այդ լեզվով գրված ինքնուրույն կազմված միավորին: «Ծրագիր» բառը վերաբերում է կազմված շեյդերների միությանը, որոնք կապված են իրար: cg (անգլերեն) Գհամար էռաֆիկները) Shader ծրագրավորման լեզու է, որը մշակվել է nVidia-ի կողմից՝ Microsoft-ի հետ համագործակցությամբ: Լեզուն նման է HLSL լեզվին և լեզվին, որը մշակվել է Microsoft-ի կողմից և ներառված է DirectX 9. Լեզուն օգտագործում է «int», «float», «half» տեսակները (16 բիթ չափի լողացող կետի թիվը): Լեզուն աջակցում է գործառույթներին և կառուցվածքներին: Լեզուն ունի յուրահատուկ օպտիմալացումներ «փաթեթավորված զանգվածների» տեսքով (