რა არის შადერები თამაშში? როგორ დავაყენოთ შადერები Minecraft– ზე? რასაც შადერები პასუხობენ.

გლობალური კომპიუტერიზაციით, უამრავი გაუგებარი ტერმინი შემოვიდა ჩვენს სამყაროში. ყველა მათგანთან გამკლავება არც ისე ადვილია, როგორც ერთი შეხედვით ჩანს. ბევრი მათგანი მსგავსია სახელებით, ბევრს აქვს ფართო ფუნქციონირება. დროა გავარკვიოთ რა არის შადერი, საიდან გაჩნდა, რისთვის არის და რა არის.

ოპტიმიზატორი

სავარაუდოდ, თქვენ ხართ Minecraft– ის მგზნებარე მოთამაშე და ამიტომაც მოხვედით იმის გასარკვევად, თუ რა არის ეს. დაუყოვნებლივ უნდა აღინიშნოს, რომ "shader" კონცეფცია ადვილად გამოყოფილია ამ თამაშისგან და შეუძლია "იცხოვროს" მისგან ცალკე. ისევე როგორც მოდერი. აქედან გამომდინარე, არ ღირს ამ ორი კონცეფციის მჭიდროდ დაკავშირება.

ზოგადად, shader მოდის პროგრამირებიდან, გამოჩნდა სპეციალისტების ასისტენტად. ალბათ ხმამაღალი იქნება ამ ინსტრუმენტის ოპტიმიზატორის დასახელება, მაგრამ ის ნამდვილად აუმჯობესებს სურათს თამაშებში. ასე რომ, როდესაც თქვენ უკვე დაიწყეთ უხეშად გააზრება რა არის, მოდით გადავიდეთ ზუსტ ინტერპრეტაციაზე.

ინტერპრეტაცია

რა არის shader? რომელსაც ასრულებენ ვიდეო კარტების პროცესორები. ეს ინსტრუმენტები შემუშავებულია სპეციალურ ენაზე. მიზნიდან გამომდინარე, ის შეიძლება განსხვავებული იყოს. ამის შემდეგ, შადერები პირობითად ითარგმნება გრაფიკული ამაჩქარებლის პროცესორების ინსტრუქციებში.

განაცხადი

დაუყოვნებლივ უნდა ითქვას, რომ განაცხადი მთლიანად განსაზღვრულია მიზნის მიხედვით. პროგრამები ჩართულია ვიდეო ბარათის პროცესორებში, რაც იმას ნიშნავს, რომ ისინი მუშაობენ ობიექტების პარამეტრებზე და სამგანზომილებიანი გრაფიკის სურათებზე. მათ შეუძლიათ შეასრულონ სხვადასხვა ამოცანები, მათ შორის მუშაობა ასახვაზე, რეფრაქციაზე, დაბნელებაზე, ამრევ ეფექტებზე და ა.

შენობა

ხალხი დიდი ხანია ცდილობს გაარკვიოს რა არის შადერი. ამ პროგრამებამდეც კი, დეველოპერებმა ყველაფერი ხელით გააკეთეს. ზოგიერთი ობიექტისგან გამოსახულების ფორმირების პროცესი არ იყო ავტომატიზირებული. თამაშის დაბადებამდე დეველოპერებმა თავად გააკეთეს რენდერი. ისინი მუშაობდნენ ალგორითმით, ქმნიდნენ მას სხვადასხვა ამოცანებისთვის. ასე რომ, იყო ინსტრუქციები ტექსტურების, ვიდეო ეფექტების და ა.

რა თქმა უნდა, ზოგიერთი პროცესი კვლავ ჩაშენებული იყო ვიდეო ბარათების მუშაობაში. ასეთი ალგორითმები შეიძლება გამოყენებულ იქნას დეველოპერების მიერ. მაგრამ მათ ვერ მოახერხეს თავიანთი ალგორითმების დაკისრება ვიდეო ბარათზე. არასტანდარტული ინსტრუქციები შეიძლება შესრულდეს პროცესორის მიერ, რომელიც უფრო ნელი იყო ვიდრე GPU.

მაგალითი

განსხვავების გასაგებად, ღირს რამდენიმე მაგალითის ნახვა. ცხადია, თამაშში რენდერი შეიძლება იყოს აპარატურა და პროგრამული უზრუნველყოფა. მაგალითად, ჩვენ ყველას გვახსოვს ცნობილი Quake 2. ასე რომ, წყალი თამაშში შეიძლება იყოს მხოლოდ ლურჯი ფილტრი, როდესაც საქმე ეხება აპარატურას. მაგრამ პროგრამული ჩარევით, წყლის გაჟონვა გამოჩნდა. იგივე ამბავია CS 1.6 – თან დაკავშირებით. აპარატურის რენდერი მხოლოდ თეთრ ელვარებას აძლევდა, ხოლო პროგრამული უზრუნველყოფის დამუშავებას დაემატა პიქსელირებული ეკრანი.

წვდომა

ასე რომ, ცხადი გახდა, რომ აუცილებელი იყო ასეთი პრობლემების მოგვარება. გრაფიკულმა ამაჩქარებლებმა დაიწყეს ალგორითმების რაოდენობის გაფართოება, რომლებიც პოპულარული იყო დეველოპერებს შორის. ცხადი გახდა, რომ შეუძლებელი იყო ყველაფრის "ჩაყრა". საჭირო იყო ვიდეოკარტის სპეციალისტებზე წვდომის გახსნა.

სანამ იყო თამაშები, როგორიცაა "Minecraft" მოდერითა და შადერებით, დეველოპერებს მიეცათ შესაძლებლობა იმუშაონ GPU ბლოკებთან მილსადენებში, რომლებიც შეიძლება იყოს პასუხისმგებელი სხვადასხვა ინსტრუქციებზე. ასე გახდა ცნობილი პროგრამები სახელწოდებით "shader". მათი შესაქმნელად სპეციალურად შემუშავდა პროგრამირების ენები. ამრიგად, ვიდეო ბარათების დატვირთვა დაიწყო არა მხოლოდ სტანდარტული "გეომეტრიით", არამედ პროცესორის ინსტრუქციებითაც.

როდესაც ასეთი წვდომა შესაძლებელი გახდა, დაიწყო პროგრამირების ახალი შესაძლებლობების გახსნა. სპეციალისტებს შეეძლოთ მათემატიკური პრობლემების გადაჭრა GPU– ზე. ეს გამოთვლები ცნობილი გახდა როგორც GPGPU. ეს პროცესი საჭიროებდა სპეციალურ ინსტრუმენტებს. NVidia CUDA– დან, Microsoft DirectCompute– დან და OpenCL ჩარჩოდან.

ტიპები

რაც უფრო მეტმა ადამიანმა გაიგო რა არის შადერები, მით მეტი ინფორმაცია გამოჩნდა მათ შესახებ და მათი შესაძლებლობები. თავდაპირველად, ამაჩქარებლებს ჰქონდათ სამი პროცესორი. ყველა იყო პასუხისმგებელი საკუთარ ტიპზე. დროთა განმავლობაში, ისინი შეიცვალა უნივერსალურით. თითოეულ მათგანს ჰქონდა მითითებების გარკვეული ნაკრები, რომელსაც ერთდროულად სამი სახის შადირი ჰქონდა. ნაწარმოების გაერთიანების მიუხედავად, თითოეული სახის აღწერა დღემდე შემორჩა.

ვერტექსის ტიპი მუშაობდა ფორმების წვეროებთან, რომლებსაც აქვთ მრავალი სახე. ბევრი ინსტრუმენტია ჩართული. მაგალითად, ჩვენ ვსაუბრობთ ტექსტურის კოორდინატებზე, ტანგენსის, ბინორმალური ან ნორმალური ვექტორების შესახებ.

გეომეტრიული ტიპი მუშაობდა არა მხოლოდ ერთ წვეროზე, არამედ მთელ პრიმიტიულზე. Pixel შეიქმნა ბიტმაპური ილუსტრაციებისა და ზოგადად ტექსტურების ფრაგმენტების დასამუშავებლად.

თამაშებში

თუ თქვენ ეძებთ ჩრდილებს Minecraft 1.5.2– სთვის, მაშინ, სავარაუდოდ, უბრალოდ გსურთ სურათის გაუმჯობესება თამაშში. ამის შესაძლებლობის მისაღწევად პროგრამებმა გაიარა "ცეცხლი, წყალი და სპილენძის მილები". შადერები შემოწმდა და დაიხვეწა. შედეგად, ცხადი გახდა, რომ ამ ინსტრუმენტს აქვს თავისი დადებითი და უარყოფითი მხარეები.

რა თქმა უნდა, სხვადასხვა ალგორითმების შედგენის სიმარტივე უზარმაზარი პლიუსია. ეს არის როგორც მოქნილობა, ასევე შესამჩნევი გამარტივება თამაშის განვითარების პროცესში და, შესაბამისად, ღირებულების შემცირება. შედეგად მიღებული ვირტუალური სცენები უფრო რთული და რეალისტური ხდება. ასევე, თავად განვითარების პროცესი ბევრჯერ უფრო სწრაფი ხდება.

ნაკლოვანებებიდან აღსანიშნავია მხოლოდ ის, რომ თქვენ მოგიწევთ ერთ – ერთი პროგრამირების ენის სწავლა და ასევე გაითვალისწინეთ, რომ ალგორითმების სხვადასხვა ნაკრები განლაგებულია ვიდეო ბარათების სხვადასხვა მოდელზე.

ინსტალაცია

თუ თქვენ იპოვნეთ shader პაკეტი Minecraft– ისთვის, უნდა გესმოდეთ, რომ მის ინსტალაციაში ბევრი პრობლემაა. ამ თამაშის უკვე მკრთალი პოპულარობის მიუხედავად, მისი ერთგული გულშემატკივრები მაინც რჩებიან. ყველას არ მოსწონს გრაფიკა, განსაკუთრებით 2017 წელს. ზოგი ფიქრობს, რომ შადერების წყალობით ისინი შეძლებენ მის გაუმჯობესებას. თეორიულად, ეს განცხადება სწორია. მაგრამ პრაქტიკაში თქვენ დიდად არ შეცვლით.

მაგრამ თუ თქვენ ჯერ კიდევ ეძებთ გზებს "Minecraft 1.7" - ზე, მაშინ, უპირველეს ყოვლისა, ფრთხილად იყავით. თავად პროცესი არ არის რთული. გარდა ამისა, ნებისმიერ გადმოწერილ ფაილთან ერთად არის ინსტრუქცია მისი ინსტალაციისთვის. მთავარია შეამოწმოთ თამაშის ვერსიები და shader. წინააღმდეგ შემთხვევაში, ოპტიმიზატორი ვერ მოხერხდება.

ინტერნეტში ბევრი ადგილია, სადაც შეგიძლიათ დააინსტალიროთ და გადმოწეროთ ასეთი ინსტრუმენტი. შემდეგი, თქვენ უნდა გახსნათ არქივი ნებისმიერ საქაღალდეში. იქ ნახავთ ფაილს "GLSL-Shaders-Mod-1.7-Installer.jar". დაწყების შემდეგ თქვენ გაჩვენებთ თამაშისკენ მიმავალ გზას, თუ ის სწორია, მაშინ დაეთანხმებით ყველა შემდგომ მითითებას.

შემდეგ თქვენ უნდა გადაიტანოთ "shaderpacks" საქაღალდე ".minecraft" - ში. ახლა, როდესაც დაიწყებთ გამშვებ მოწყობილობას, თქვენ უნდა გადახვიდეთ პარამეტრებზე. აქ, თუ ინსტალაცია იყო სწორი, გამოჩნდება ხაზი "Shaders". თქვენ შეგიძლიათ აირჩიოთ თქვენთვის სასურველი პაკეტი მთელი სიიდან.

თუ თქვენ გჭირდებათ შადერები Minecraft 1.7.10– ისთვის, მაშინ უბრალოდ მოძებნეთ საჭირო ვერსიის shaderpack და იგივე გააკეთეთ. არასტაბილური ვერსიები შეგიძლიათ იხილოთ ინტერნეტში. ზოგჯერ თქვენ უნდა შეცვალოთ, დააინსტალიროთ და მოძებნოთ შესაფერისი. უმჯობესია გადახედოთ მიმოხილვებს და აირჩიოთ ყველაზე პოპულარული.

შესავალი

3D გრაფიკული სამყარო, მათ შორის თამაშები, სავსეა პირობებით. ტერმინები, რომლებსაც ყოველთვის არ აქვთ ერთადერთი სწორი განმარტება. ზოგჯერ ერთიდაიგივე ნივთებს სხვაგვარად უწოდებენ და პირიქით, იგივე ეფექტს შეიძლება ვუწოდოთ "HDR", შემდეგ "Bloom", შემდეგ "Glow", შემდეგ "Postprocessing" თამაშის პარამეტრებში. ადამიანების უმეტესობა, დეველოპერების ტრაბახით, იმით, რაც მათ ჩაშენებული აქვთ თავიანთ გრაფიკულ ძრავაში, დაბნეულია რას ნიშნავს სინამდვილეში.

სტატია მიზნად ისახავს დაგეხმაროთ იმის გაგებაში, თუ რას ნიშნავს ზოგიერთი ეს სიტყვა, რომელიც ყველაზე ხშირად გამოიყენება ასეთ შემთხვევებში. ამ სტატიის ფარგლებში ჩვენ არ ვისაუბრებთ 3D გრაფიკის ყველა ტერმინზე, არამედ მხოლოდ მათზე, რაც ბოლო წლებში უფრო ფართოდ გავრცელდა, როგორც გამორჩეული თვისებები და ტექნოლოგიები, რომლებიც გამოიყენება თამაშის გრაფიკულ ძრავებში და როგორც სახელები თანამედროვე თამაშების გრაფიკული პარამეტრებისთვის. რა დასაწყისისთვის, მე გირჩევთ, რომ კარგად გაეცნოთ.

თუ ამ სტატიაში და ალექსანდრეს სტატიებში თქვენთვის რაღაც გაუგებარია, მაშინ აზრი აქვს დავიწყოთ ყველაზე ადრეულიდან, გვ. ეს სტატიები უკვე გარკვეულწილად მოძველებულია, რა თქმა უნდა, მაგრამ ძირითადი, ყველაზე საწყისი და მნიშვნელოვანი მონაცემები არსებობს. ჩვენ ვისაუბრებთ თქვენთან უფრო "მაღალი დონის" პირობებზე. თქვენ უნდა გქონდეთ ძირითადი გაგება 3D რეალურ დროში გრაფიკისა და გრაფიკული მილსადენის სტრუქტურის შესახებ. მეორეს მხრივ, ნუ ელოდებით მათემატიკურ ფორმულებს, აკადემიურ სიზუსტეს და კოდის მაგალითებს - ეს საერთოდ არ არის ეს სტატია. Ვადები

სტატიაში აღწერილი ტერმინების ჩამონათვალი:

შადერი

შადერი ფართო გაგებით არის პროგრამა ობიექტის ზედაპირის ვიზუალურად განსაზღვრისათვის. ეს შეიძლება იყოს განათების, ტექსტურის, შემდგომი დამუშავების და ა. Shaders გაიზარდა კუკის ჩრდილის ხეებიდან და პერლინის პიქსელის ნაკადის ენიდან. RenderMan Shading Language არის ყველაზე ცნობილი. პროგრამირებადი შადერები პირველად დაინერგა Pixar– ის RenderMan– ში, რომელიც განსაზღვრავს რამდენიმე ტიპის შადერს: სინათლის წყაროს შადერები, ზედაპირის შადერები, გადაადგილების შადერები, მოცულობის შადერები , imager shaders. ეს შადერები ყველაზე ხშირად პროგრამულ უზრუნველყოფაშია დამუშავებული უნივერსალური პროცესორების მიერ და არ გააჩნიათ სრული აპარატურა. მოგვიანებით, ბევრმა მკვლევარმა აღწერა RenderMan- ის მსგავსი ენები, მაგრამ ისინი უკვე შექმნილია აპარატურის დაჩქარებისათვის: PixelFlow სისტემა (ოლანო და Lastra), Quake Shader Language (გამოიყენება id Software– ის თამაშის Quake III– ის გრაფიკულ ძრავში, რომელშიც აღწერილია მრავალმხრივი გადაცემა) და ა.შ. Peercy და მისმა კოლეგებმა შეიმუშავეს ტექნიკა ტრადიციული აპარატურის არქიტექტურის მარყუჟებითა და პირობებით. რენდემენ შადერები რამოდენიმეში გაიჭრა პასების რაოდენობა, რომლებიც გაერთიანდა ჩარჩო ბუფერში. მოგვიანებით იყო ენები, რომლებსაც ჩვენ ვხედავთ ტექნიკის დაჩქარებაში DirectX და OpenGL. ასე ადაპტირდნენ შადერები რეალურ დროში გრაფიკული პროგრამებისთვის.

ადრეული ვიდეო ჩიპები არ იყო პროგრამირებადი და ასრულებდა მხოლოდ წინასწარ დაპროგრამებულ მოქმედებებს (ფიქსირებული ფუნქცია), მაგალითად, განათების ალგორითმი მყარად იყო დაფიქსირებული ტექნიკაში და ვერაფერი შეიცვლება. შემდეგ, ვიდეო ჩიპების მწარმოებლებმა თანდათან დანერგეს პროგრამირების ელემენტები მათ ჩიპებში, თავდაპირველად ეს იყო ძალიან სუსტი შესაძლებლობები (NV10, რომელიც ცნობილია როგორც NVIDIA GeForce 256, უკვე შეძლო რამდენიმე პრიმიტიული პროგრამის განხორციელება), რომელსაც არ მიუღია პროგრამული უზრუნველყოფა Microsoft DirectX API– ში, მაგრამ დროთა განმავლობაში, შესაძლებლობები მუდმივად ფართოვდება. შემდეგი ნაბიჯი იყო როგორც NV20 (GeForce 3), ასევე NV2A (ვიდეო ჩიპი, რომელიც გამოიყენება Microsoft Xbox სათამაშო კონსოლში), რომელიც გახდა პირველი ჩიპი ტექნიკური მხარდაჭერით DirectX API შადერებისთვის. Shader Model 1.0 / 1.1 ვერსია, რომელიც გამოჩნდა DirectX 8 -ში, იყო ძალიან შეზღუდული, თითოეული shader (განსაკუთრებით პიქსელი) შეიძლება იყოს შედარებით მოკლე და აერთიანებდეს ძალიან შეზღუდულ მითითებებს. მოგვიანებით, Shader Model 1 (მოკლედ SM1) გაუმჯობესდა Pixel Shaders 1.4 (ATI R200), რაც მეტ მოქნილობას გვთავაზობდა, მაგრამ ასევე ჰქონდა ძალიან შეზღუდული შესაძლებლობები. იმდროინდელი შადერები დაიწერა ეგრეთ წოდებული ასამბლეის შადერის ენაზე, რომელიც ახლოსაა ასამბლეის ენასთან ზოგადი დანიშნულების პროცესორებისთვის. მისი დაბალი დონე იწვევს გარკვეულ სირთულეებს კოდისა და პროგრამირების გასაგებად, განსაკუთრებით მაშინ, როდესაც პროგრამის კოდი დიდია, რადგან ის შორს არის თანამედროვე პროგრამირების ენების ელეგანტურობიდან და სტრუქტურირებულობიდან.

Shader Model 2.0 (SM2) ვერსია, რომელიც გამოჩნდა DirectX 9-ში (რომელსაც მხარს უჭერდა ATI R300 ვიდეო ჩიპი, რომელიც გახდა პირველი GPU shader მოდელის 2.0 ვერსიის მხარდაჭერით), მნიშვნელოვნად გააფართოვა რეალურ დროში შადერების შესაძლებლობები, გთავაზობთ უფრო ხანგრძლივ და რთულ შადერებს და მნიშვნელოვნად გაფართოებულ ინსტრუქციებს. დაემატა პიქსელ შადერებში მცურავი წერტილების გამოთვლების უნარი, რაც ასევე მნიშვნელოვანი გაუმჯობესება იყო. DirectX 9-მა, SM2 შესაძლებლობების ფონზე, ასევე შემოიღო მაღალი დონის shader ენა (HLSL), რომელიც ძალიან ჰგავს C ენას. და ეფექტური შემდგენელი, რომელიც თარგმნის HLSL პროგრამებს დაბალ დონეზე, ტექნიკისადმი მეგობრულ კოდში. უფრო მეტიც, არსებობს რამდენიმე პროფილი სხვადასხვა ტექნიკის არქიტექტურისთვის. ახლა, დეველოპერს შეუძლია დაწეროს ერთი HLSL shader კოდი და შეადგინოს იგი DirectX– ის გამოყენებით მომხმარებლის მიერ დაყენებული ვიდეო ჩიპის ოპტიმალურ პროგრამაში. ამის შემდეგ გამოვიდა NVIDIA, NV30 და NV40 ჩიპები, რამაც გააუმჯობესა აპარატურის შადერების შესაძლებლობები კიდევ ერთი საფეხურით, დაამატა კიდევ უფრო გრძელი შადერები, დინამიური გადასვლის შესაძლებლობა ვერტექსსა და პიქსელ შადერში, ტექსტების მოპოვების უნარი ვერტექს შადერებიდან და ა.შ. ... არ იყო, ისინი მოსალოდნელია 2006 წლის ბოლოსთვის DirectX 10 – ში ...

ზოგადად, შადერებმა დაამატეს ბევრი ახალი შესაძლებლობები გრაფიკულ მილსადენს, რომ მოხდეს მწვერვალების გარდაქმნა და განათება და პიქსელების ინდივიდუალურად დამუშავება ისე, როგორც ამას თითოეული კონკრეტული პროგრამის შემქმნელი სურს. და მაინც, აპარატურის შადერების შესაძლებლობები ჯერ ბოლომდე არ არის გამოვლენილი პროგრამებში და რაც უფრო იზრდება მათი შესაძლებლობები ტექნიკის ყოველ ახალ თაობაში, ჩვენ მალე ვნახავთ იმ RenderMan შადერების დონეს, რომელიც ოდესღაც მიუღწეველი ჩანდა ვიდეო თამაშების ამაჩქარებლებისთვის. ჯერჯერობით, რეალურ დროში შადერის მოდელებში, რომელსაც მხარს უჭერს აპარატურის ვიდეო ამაჩქარებლები, განისაზღვრება მხოლოდ ორი ტიპის შადიერი: და (DirectX 9 API განმარტებით). მომავალში, DirectX 10 გვპირდება, რომ მათ უფრო და უფრო დაამატებს.

Vertex Shader

Vertex shaders არის პროგრამები, რომლებიც შესრულებულია ვიდეო ჩიპებით, რომლებიც ასრულებენ მათემატიკურ ოპერაციებს წვეროებით (მწვერვალი, ისინი თამაშობენ 3D ობიექტებს თამაშებში), სხვა სიტყვებით რომ ვთქვათ, ისინი უზრუნველყოფენ პროგრამირებადი ალგორითმების შესრულებას წვეროებისა და მათი განათების პარამეტრების შესაცვლელად (T&L - გარდაქმნა და განათება) ... თითოეული წვერო განისაზღვრება რამოდენიმე ცვლადით, მაგალითად, წვერის პოზიცია 3D სივრცეში განისაზღვრება კოორდინატებით: x, y და z. ვერტიკები ასევე შეიძლება აღწერილი იყოს ფერის მახასიათებლებით, ტექსტურის კოორდინატებით და მსგავსი. Vertex shaders, ალგორითმების მიხედვით, ცვლის ამ მონაცემებს მუშაობის პროცესში, მაგალითად, გამოთვლის და წერს ახალ კოორდინატებს და / ან ფერს. ანუ, ვერტექს შედერის შეყვანის მონაცემები არის მონაცემები გეომეტრიული მოდელის ერთი წვეროს შესახებ, რომელიც ამჟამად დამუშავებულია. როგორც წესი, ეს არის სივრცითი კოორდინატები, ნორმალური, ფერის კომპონენტები და ტექსტურის კოორდინატები. შესრულებული პროგრამის მონაცემები ემსახურება მილსადენის შემდგომი ნაწილის შეყვანას, რასტერიზატორი ახდენს შეყვანის მონაცემების წრფივი ინტერპოლაციას სამკუთხედის ზედაპირზე და თითოეული პიქსელისთვის ასრულებს შესაბამის პიქსელ შადერს. ძალიან მარტივი და უხეში (მაგრამ აშკარაა, ვიმედოვნებ) მაგალითი: ვერტექს shader გაძლევთ საშუალებას მიიღოთ 3D სფეროს ობიექტი და გამოიყენოთ vertex shader, რათა გააკეთოთ მწვანე კუბი მისგან :).

NV20 ვიდეო ჩიპის მოსვლამდე დეველოპერებს ჰქონდათ ორი გზა, ან გამოეყენებინათ საკუთარი პროგრამები და ალგორითმები, რომლებიც ცვლიან წვეროების პარამეტრებს, მაგრამ შემდეგ ყველა გამოთვლა განხორციელდებოდა პროცესორის მიერ (პროგრამული უზრუნველყოფა T&L), ან დაეყრდნო ფიქსირებულს ალგორითმები ვიდეო ჩიპებში, ტექნიკის ტრანსფორმაციისა და განათების მხარდაჭერით (აპარატურის T&L). პირველი DirectX shader მოდელი ნიშნავდა დიდ წინსვლას ფიქსირებული ფუნქციებიდან მწვერვალების გარდაქმნისა და განათებისათვის სრულად დაპროგრამებადი ალგორითმებისთვის. მაგალითად, შესაძლებელი გახდა სკინგის ალგორითმის მთლიანად ვიდეო ჩიპებზე შესრულება, მანამდე კი ერთადერთი შესაძლებლობა იყო მათი შესრულება უნივერსალურ ცენტრალურ პროცესორებზე. ახლა, როდესაც შესაძლებლობები მნიშვნელოვნად გაუმჯობესდა NVIDIA ჩიპის დროიდან, თქვენ შეგიძლიათ ბევრი გააკეთოთ წვეროებით ვერტექს შადერების გამოყენებით (ალბათ მათი შექმნის გარდა) ...

მაგალითები, თუ როგორ და სად გამოიყენება vertex shaders:

პიქსელ შედერი

პიქსელის შადერები არის პროგრამები, რომლებიც შესრულებულია ვიდეო ჩიპით რასტერიზაციის დროს გამოსახულების თითოეული პიქსელისთვის, ისინი ასრულებენ ტექსტურის შერჩევას და / ან მათემატიკურ ოპერაციებს პიქსელების ფერისა და სიღრმის მნიშვნელობაზე (Z-buffer). პიქსელის დამცავი ყველა ინსტრუქცია შესრულებულია პიქსელი პიქსელით გეომეტრიული გარდაქმნისა და განათების ოპერაციების დასრულების შემდეგ. მისი მუშაობის შედეგად, პიქსელის გამანათებელი აწარმოებს პიქსელის ფერის საბოლოო მნიშვნელობას და Z- მნიშვნელობას გრაფიკული მილსადენის შემდეგი ეტაპისთვის, შერწყმისას. პიქსელის შედერის უმარტივესი მაგალითი, რომლის მოყვანა შეიძლება: ბანალური მრავალტექსტირება, უბრალოდ ორი ტექსტურის შერევა (მაგალითად, დიფუზური და მსუბუქი რუქა) და პიქსელზე გაანგარიშების შედეგის დაკისრება.

ვიდეო ჩიპების გამოჩენამდე პიქსელ შადერების ტექნიკური მხარდაჭერით, დეველოპერებს ჰქონდათ მხოლოდ ჩვეულებრივი მულტიტექსტურირებისა და ალფა შერწყმის შესაძლებლობა, რამაც მნიშვნელოვნად შეზღუდა შესაძლებლობები მრავალი ვიზუალური ეფექტისთვის და არ დაუშვა ბევრი რამის გაკეთებისა. და თუ გეომეტრიით შეიძლება სხვა რამის გაკეთება პროგრამულად, მაშინ პიქსელებით - არა. DirectX– ის ადრეული ვერსიები (7.0 – მდე ჩათვლით) ყოველთვის ასრულებდა ყველა გამოთვლას ვერტიკალურად და გვთავაზობდა უკიდურესად შეზღუდულ ფუნქციონირებას პიქსელის განათებისთვის (დაიმახსოვრეთ EMBM - გარემოს შეჯახების რუქა და DOT3) უახლეს ვერსიებში. პიქსელ შადერებმა შესაძლებელი გახადა ნებისმიერი ზედაპირის პიქსელ-პიქსელის განათება დეველოპერის მიერ დაპროგრამებული მასალების გამოყენებით. პიქსელის შადერები 1.1 (DirectX გაგებით), რომელიც გამოჩნდა NV20– ში, არა მხოლოდ მრავალსართულიანი, არამედ ბევრად მეტიც შეეძლო, თუმცა SM1– ის თამაშების უმეტესობამ უბრალოდ გამოიყენა ტრადიციული მულტიტექსტირება უმეტეს ზედაპირებზე, უფრო რთული პიქსელის შადერების შესრულება მხოლოდ ნაწილში ზედაპირები, სხვადასხვა სახის სპეციალური ეფექტების შესაქმნელად (ყველამ იცის, რომ წყალი მაინც თამაშებში პიქსელ შადერების გამოყენების ყველაზე გავრცელებული მაგალითია). ახლა, მას შემდეგ, რაც გამოჩნდა SM3 და ვიდეო ჩიპები, რომლებიც მათ მხარს უჭერენ, პიქსელ შადერების შესაძლებლობები გაიზარდა და მათი დახმარებითაც კი შესაძლებელი გახდა რეიტინგის გაკეთება, თუმცა გარკვეული შეზღუდვებით.

პიქსელის ჩრდილების გამოყენების მაგალითები:

პროცედურული ტექსტურები

პროცედურული ტექსტურები არის ტექსტურები, რომლებიც აღწერილია მათემატიკური ფორმულებით. ასეთი ტექსტურები არ იკავებენ ადგილს ვიდეო მეხსიერებაში, ისინი იქმნება პიქსელის შემმუშავებლის მიერ "ფრიალებს", მათი თითოეული ელემენტი (ტექსელი) მიიღება შესაბამისი შადერის ბრძანებების შესრულების შედეგად. ყველაზე გავრცელებული პროცედურული ტექსტურებია: სხვადასხვა სახის ხმაური (მაგალითად, ფრაქტალური ხმაური), ხე, წყალი, ლავა, კვამლი, მარმარილო, ცეცხლი და ა.შ. პროცედურული ტექსტურები ასევე გაძლევთ საშუალებას გამოიყენოთ ანიმაციური ტექსტურები მათემატიკური ფორმულების უმნიშვნელო მოდიფიკაციით. მაგალითად, ამ გზით შექმნილი ღრუბლები საკმაოდ ღირსეულად გამოიყურება როგორც დინამიკაში, ასევე სტატიკაში.

პროცედურული ტექსტურების უპირატესობა ასევე მოიცავს დეტალების შეუზღუდავ დონეს თითოეული ტექსტურისათვის, უბრალოდ არ იქნება პიქსელირება, ტექსტურა ყოველთვის გენერირდება იმ ზომისთვის, რომელიც საჭიროა მისი ჩვენებისათვის. ანიმაციური ასევე დიდ ინტერესს იწვევს, მისი დახმარებით შეგიძლიათ ტალღების გაკეთება წყალზე, წინასწარ გათვლილი ანიმაციური ტექსტურების გამოყენების გარეშე. ასეთი ტექსტურების კიდევ ერთი პლიუსი ის არის, რომ რაც უფრო მეტს იყენებენ ისინი პროდუქტში, მით ნაკლებია მუშაობა მხატვრებისათვის (თუმცა უფრო მეტად პროგრამისტებისთვის) რეგულარული ტექსტურის შესაქმნელად.

სამწუხაროდ, პროცედურული ტექსტურები ჯერ კიდევ არ არის სათანადოდ გამოყენებული თამაშებში, რეალურ პროგრამებში ჯერ კიდევ უფრო ადვილია რეგულარული ტექსტურის ჩატვირთვა, ვიდეო მეხსიერების მოცულობა იზრდება ნახტომითა და საზღვრებით, ყველაზე თანამედროვე ამაჩქარებლებში ისინი უკვე აყენებენ 512 მეგაბაიტს გამოყოფილი ვიდეო მეხსიერება, რომელიც უფრო მეტად არის საჭირო, ვიდრე რაღაცის სესხება. უფრო მეტიც, ისინი მაინც ხშირად აკეთებენ პირიქით - პიქსელ შადერებში მათემატიკის დასაჩქარებლად იყენებენ საძიებო ცხრილებს (LUT) - სპეციალურ ტექსტურებს, რომლებიც შეიცავს გამოთვლების შედეგად მიღებულ წინასწარ გამოთვლილ მნიშვნელობებს. იმისათვის, რომ არ დაითვალონ რამდენიმე მათემატიკური ინსტრუქცია თითოეული პიქსელისთვის, ისინი უბრალოდ კითხულობენ წინასწარ გამოთვლილ მნიშვნელობებს ტექსტურიდან. რაც უფრო მეტია აქცენტი მათემატიკურ გამოთვლებზე უნდა გადავიტანოთ, იგივე ახალი თაობის ATI ვიდეო ჩიპები ავიღოთ: RV530 და R580, რომლებსაც აქვთ 12 და 48 პიქსელიანი პროცესორები შესაბამისად 4 და 16 ტექსტურის ერთეულზე. უფრო მეტიც, თუ ჩვენ ვსაუბრობთ 3D ტექსტურებზე, რადგან თუ ორგანზომილებიანი ტექსტურები უპრობლემოდ შეიძლება მოთავსდეს ამაჩქარებლის ადგილობრივ მეხსიერებაში, მაშინ 3D ტექსტურები მას ბევრად მეტს მოითხოვს.

პროცედურული ტექსტურის მაგალითები:

Bump რუკების / Specular Bump Mapping

Bumpmapping არის ტექნიკა დარღვევების სიმულაციისთვის (ან მიკრორელივის მოდელირება, რომელი გირჩევნიათ) ბრტყელ ზედაპირზე დიდი გამოთვლითი ხარჯებისა და გეომეტრიის ცვლილებების გარეშე. ზედაპირზე არსებული თითოეული პიქსელისთვის, განათების გაანგარიშება ხორციელდება სპეციალური სიმაღლის რუქების მნიშვნელობების საფუძველზე, სახელწოდებით bumpmap. ეს ჩვეულებრივ არის 8-ბიტიანი შავი და თეთრი ტექსტურა და ტექსტურის ფერის მნიშვნელობები არ არის გადახურული ჩვეულებრივი ტექსტურების მსგავსად, მაგრამ გამოიყენება ზედაპირის უხეშობის აღსაწერად. თითოეული ტექსელის ფერი განსაზღვრავს შესაბამისი რელიეფის წერტილის სიმაღლეს, უმაღლესი მნიშვნელობები ნიშნავს უფრო მაღალ სიმაღლეს თავდაპირველი ზედაპირის ზემოთ და ქვედა მნიშვნელობები, შესაბამისად, უფრო დაბალს. Ან პირიქით.

წერტილის განათების ხარისხი დამოკიდებულია სინათლის სხივების სიხშირის კუთხეზე. რაც უფრო მცირეა კუთხე ნორმალურ და სინათლის სხივს შორის, მით უფრო დიდია წერტილის განათება ზედაპირზე. ანუ, თუ თქვენ აიღებთ ბრტყელ ზედაპირს, მაშინ ნორმალურები თითოეულ წერტილში იქნება იგივე და განათებაც იგივე იქნება. და თუ ზედაპირი არათანაბარია (სინამდვილეში, თითქმის ყველა ზედაპირი სინამდვილეში), მაშინ ნორმალურები თითოეულ წერტილში განსხვავებული იქნება. და განათება განსხვავებულია, ერთ მომენტში ეს იქნება მეტი, მეორეზე - ნაკლები. აქედან გამომდინარეობს დაბომბვის პრინციპი - პოლიგონის სხვადასხვა წერტილების დარღვევების მოდელირების მიზნით, ზედაპირული ნორმალურებია მითითებული, რაც გათვალისწინებულია პიქსელის განათების გაანგარიშებისას. შედეგად, ზედაპირის უფრო ბუნებრივი სურათი მიიღება, მუწუკები ზედაპირებს უფრო მეტ დეტალებს აძლევს, როგორიცაა მუწუკები აგურებზე, კანზე ფორები და ა.შ., მოდელის გეომეტრიული სირთულის გაზრდის გარეშე, ვინაიდან გამოთვლები ხორციელდება პიქსელის დონე. უფრო მეტიც, როდესაც სინათლის წყაროს პოზიცია იცვლება, ამ დარღვევების განათება სწორად იცვლება.

რასაკვირველია, წვერო განათება გაცილებით მარტივია გამოთვლითი თვალსაზრისით, მაგრამ ის ძალიან არარეალისტურად გამოიყურება, განსაკუთრებით შედარებით დაბალი პოლი გეომეტრიით, თითოეული პიქსელისთვის ფერის ინტერპოლაცია ვერ აღადგენს წვეროების გამოთვლილ მნიშვნელობებზე დიდ მნიშვნელობებს. ანუ, სამკუთხედის შუაგულში არსებული პიქსელები არ შეიძლება იყოს უფრო ნათელი, ვიდრე ფრაგმენტები მწვერვალის მახლობლად. შესაბამისად, განათების მკვეთრი ცვლილებების მქონე უბნები, როგორიცაა სიკაშკაშე და სინათლის წყაროები ზედაპირთან ძალიან ახლოს, ფიზიკურად არ გამოჩნდება სწორად და ეს განსაკუთრებით შესამჩნევი იქნება დინამიკაში. რასაკვირველია, პრობლემის ნაწილობრივ გადაჭრა შესაძლებელია მოდელის გეომეტრიული სირთულის გაზრდით, უფრო წვეროებად და სამკუთხედებად დაყოფით, მაგრამ პიქსელ-პიქსელით განათება საუკეთესო ვარიანტია.

გასაგრძელებლად, თქვენ უნდა შეახსენოთ განათების კომპონენტების შესახებ. ზედაპირის წერტილის ფერი გამოითვლება, როგორც გარემომცველი, დიფუზური და სპეკულარული კომპონენტების ჯამი სცენის ყველა სინათლის წყაროდან (იდეალურია ყველასაგან, ხშირად უგულებელყოფილია ბევრს). თითოეული სინათლის წყაროდან ამ მნიშვნელობის წვლილი დამოკიდებულია მანძილზე სინათლის წყაროს შორის და ზედაპირზე მდებარე წერტილს შორის.

განათების კომპონენტები:

ახლა მოდით დავამატოთ რამდენიმე უხეში რუქა ამას:

განათების ერთიანი (ამბიციური) კომპონენტი არის მიახლოება, "საწყისი" განათება სცენის თითოეული წერტილისთვის, რომლის დროსაც ყველა წერტილი თანაბრად არის განათებული და განათება არ არის დამოკიდებული სხვა ფაქტორებზე.
სინათლის დიფუზური კომპონენტი დამოკიდებულია სინათლის წყაროს პოზიციაზე და ზედაპირზე ნორმალურზე. ეს განათების კომპონენტი განსხვავებულია ობიექტის თითოეული წვეროსათვის, რაც აძლევს მათ მოცულობას. სინათლე აღარ ავსებს ზედაპირს იმავე ჩრდილით.
განათების სპეკულარული კომპონენტი ვლინდება ზედაპირის სინათლის სხივების ასახვაში. მისი გაანგარიშებისთვის, სინათლის წყაროს პოზიციის ვექტორისა და ნორმის გარდა, გამოიყენება კიდევ ორი ​​ვექტორი: მზერის მიმართულების ვექტორი და ასახვის ვექტორი. სპეკულარული განათების მოდელი პირველად შემოგვთავაზა ფონგ ბუი-ტონგმა. ეს სხივები მნიშვნელოვნად ზრდის სურათის რეალიზმს, რადგან იშვიათი რეალური ზედაპირები არ ასახავს სინათლეს, ამიტომ სპეკულარული კომპონენტი ძალიან მნიშვნელოვანია. განსაკუთრებით მოძრაობაში, რადგან სიკაშკაშე მაშინვე აჩვენებს კამერის ან თავად ობიექტის პოზიციის ცვლილებას. მოგვიანებით, მკვლევარებმა მოიძიეს სხვა გზა ამ კომპონენტის გამოსათვლელად, უფრო რთული (ბლინი, კუკ-ტორანსი, უორდი), სინათლის ენერგიის განაწილების, მასალების მიერ მისი შთანთქმის და დიფუზური კომპონენტის სახით გაფანტვის გათვალისწინებით.

ამრიგად, Specular Bump Mapping მიიღება ამ გზით:

მოდით, იგივე ვნახოთ თამაშის მაგალითზე, Call of Duty 2:


სურათის პირველი ფრაგმენტი ნაჩვენებია ყოველგვარი დარტყმის გარეშე (), მეორე (ზედა-მარჯვნივ) არის ბუმბამპი სპეკულარული კომპონენტის გარეშე, მესამე არის ნორმალური სიდიდის სპეკულარული კომპონენტით, რომელიც გამოიყენება თამაშში და ბოლო , მარჯვნივ-ქვემოდან, მაქსიმალური შესაძლო სპეკულარული კომპონენტით.

რაც შეეხება პირველ აპარატურულ პროგრამას, ზოგიერთი სახის მუწუკების (Emboss Bump Mapping) გამოყენება დაიწყო VVIDIA Riva TNT ჩიპებზე დაფუძნებული ვიდეო ბარათების დღეებში, მაგრამ იმდროინდელი ტექნიკა იყო უკიდურესად პრიმიტიული და ფართოდ გავრცელებული. შემდეგი ცნობილი ტიპი იყო Environment Mapped Bump Mapping (EMBM), მაგრამ მხოლოდ Matrox ვიდეო ბარათებს ჰქონდათ ტექნიკური მხარდაჭერა DirectX– ში იმ დროს და კვლავ გამოყენება მკაცრად შეზღუდული იყო. შემდეგ გამოჩნდა Dot3 Bump Mapping და იმდროინდელი ვიდეო ჩიპები (GeForce 256 და GeForce 2) საჭიროებდა სამ პასს ასეთი მათემატიკური ალგორითმის სრულად შესასრულებლად, ვინაიდან ისინი შემოიფარგლება ერთდროულად გამოყენებული ორი ტექსტურით. NV20– დან (GeForce3) დაწყებული, შესაძლებელი გახდა ერთი და იგივეს გაკეთება ერთი უღელტეხილზე პიქსელი შადერების გამოყენებით. უფრო მეტიც. მათ დაიწყეს უფრო ეფექტური ტექნიკის გამოყენება, როგორიცაა.

თამაშებში მუწუკების გამოყენების მაგალითები:


გადაადგილების რუქა არის 3D ობიექტებზე დეტალების დამატების მეთოდი. ბუმბამპინგისა და პიქსელის სხვა მეთოდებისგან განსხვავებით, როდესაც სიმაღლის რუქებით მხოლოდ წერტილის განათება სწორად არის მოდელირებული, მაგრამ მისი პოზიცია სივრცეში არ იცვლება, რაც მხოლოდ ზედაპირული სირთულის გაზრდის ილუზიას იძლევა, გადაადგილების რუქები საშუალებას გაძლევთ მიიღოთ რეალური რთული 3D ობიექტები წვეროებიდან და პოლიგონებიდან, შეზღუდვების გარეშე. თანდაყოლილია პიქსელის მეთოდებში. ეს მეთოდი ცვლის სამკუთხედების წვეროებს მათი ნორმალიზებით გადაადგილების რუქების მნიშვნელობებზე დაყრდნობით. გადაადგილების რუკა ჩვეულებრივ არის შავ-თეთრი ტექსტურა და მასში არსებული მნიშვნელობები გამოიყენება ობიექტის ზედაპირზე თითოეული წერტილის სიმაღლის დასადგენად (მნიშვნელობები შეიძლება ინახებოდეს 8-ბიტიანი ან 16-ბიტიანი რიცხვებით) , მსგავსი bumpmap. გადაადგილების რუქები ხშირად გამოიყენება (ამ შემთხვევაში მათ ასევე უწოდებენ სიმაღლის რუქებს) გორაკებითა და ხეობებით რელიეფის შესაქმნელად. ვინაიდან რელიეფი აღწერილია ორგანზომილებიანი გადაადგილების რუქით, საჭიროების შემთხვევაში მისი დეფორმირება შედარებით ადვილია, რადგან ის მოითხოვს მხოლოდ გადაადგილების რუქის შეცვლას და მის საფუძველზე ზედაპირის გაფორმებას მომდევნო ჩარჩოში.

ლანდშაფტის შექმნა გადაადგილების რუქების გამოყენებით ნათლად არის ნაჩვენები სურათზე. თავდაპირველად, 4 წვერო და 2 მრავალკუთხედი იყო გამოყენებული, შედეგად ლანდშაფტის სრულფასოვანი ნაჭერი აღმოჩნდა.

გადაადგილების რუქების გადაფარვის დიდი უპირატესობა არ არის მხოლოდ ზედაპირზე დეტალების დამატების შესაძლებლობა, არამედ ობიექტის თითქმის სრული შექმნა. დაბალი პოლი ობიექტი აღებულია, იყოფა (დალაგებულია) უფრო წვეროებად და მრავალკუთხედებად. წვეროების მიერ წარმოქმნილი წვეროები შემდეგ გადაადგილდებიან ნორმის გასწვრივ გადაადგილების რუქაზე წაკითხული მნიშვნელობის საფუძველზე. ჩვენ ვამთავრებთ მარტივი 3D– ის რთულ ობიექტს შესაბამისი გადაადგილების რუქის გამოყენებით:


სამკუთხედების რიცხვი, რომლებიც შექმნილია შეჯვარებით, უნდა იყოს საკმარისად დიდი იმისათვის, რომ დაიჭიროს გადაადგილების რუქით განსაზღვრული ყველა დეტალი. ზოგჯერ დამატებითი სამკუთხედები იქმნება ავტომატურად N- პატჩების ან სხვა მეთოდების გამოყენებით. გადაადგილების რუქები საუკეთესოდ გამოიყენება მუწუკების შედგენასთან ერთად, რათა შეიქმნას წვრილმანი დეტალები, სადაც საკმარისია პიქსელ-პიქსელით შესაბამისი განათება.

გადაადგილების რუქა პირველად იქნა მხარდაჭერილი DirectX 9.0 -ში. ეს იყო API– ს პირველი ვერსია, რომელიც მხარს უჭერდა გადაადგილების რუქის ტექნიკას. DX9 მხარს უჭერს გადაადგილების რუქის ორ ტიპს, გაფილტრული და წინასწარ აღებული. პირველ მეთოდს მხარს უჭერდა დავიწყებული MATROX Parhelia ვიდეო ჩიპი, ხოლო მეორე - ATI RADEON 9700. გაფილტრული მეთოდი განსხვავდება იმით, რომ ის იძლევა საშუალებას გადაადგილების რუქებისათვის გამოიყენოს mip- დონეები და გამოიყენოს სამმაგი ფილტრაცია მათთვის. ამ მეთოდით, გადაადგილების რუქის mip დონე არჩეულია თითოეული მწვერვალისთვის, რომელიც დაფუძნებულია წვეროდან კამერაზე დაშორებაზე, ანუ დეტალების დონე ავტომატურად არის შერჩეული. ეს აღწევს სცენის თითქმის თანაბარ გაყოფას, როდესაც სამკუთხედები დაახლოებით იგივე ზომისაა.

გადაადგილების რუქა არსებითად შეიძლება ჩაითვალოს როგორც გეომეტრიული შეკუმშვის ტექნიკა; გადაადგილების რუქების გამოყენება ამცირებს მეხსიერების რაოდენობას, რომელიც საჭიროა კონკრეტული 3D მოდელის დეტალებისთვის. ნაყარი გეომეტრიის მონაცემები იცვლება მარტივი 2D გადაადგილების ტექსტურით, ჩვეულებრივ 8 ბიტიანი ან 16 ბიტიანი. ეს ამცირებს მეხსიერების და გამტარუნარიანობის მოთხოვნებს, რომლებიც საჭიროა გეომეტრიული მონაცემების ვიდეო ჩიპში გადასატანად და ეს შეზღუდვები დღევანდელ სისტემებს შორის ერთ -ერთია. გარდა ამისა, თანაბარი გამტარუნარიანობისა და შენახვის მოთხოვნების გათვალისწინებით, გადაადგილების რუქა იძლევა ბევრად უფრო რთულ გეომეტრიულ 3D მოდელებს. გაცილებით ნაკლები სირთულის მოდელების გამოყენება, როდესაც ათეულობით ან ასობით ათასი სამკუთხედის ნაცვლად გამოიყენება ათასობით ერთეული, ის ასევე შესაძლებელს ხდის მათი ანიმაციის დაჩქარებას. ან გააუმჯობესეთ იგი უფრო რთული ალგორითმების და ტექნიკის გამოყენებით, როგორიცაა ქსოვილის სიმულაცია.

კიდევ ერთი უპირატესობა ის არის, რომ გადაადგილების რუქების გამოყენება რთულ მრავალკუთხა 3D ბადეს აქცევს მრავალგანზომილებიან ტექსტურას, რომლის დამუშავებაც უფრო ადვილია. მაგალითად, ორგანიზაციისთვის, თქვენ შეგიძლიათ გამოიყენოთ რეგულარული mip-mapping გადაადგილების რუქების გადასატანად. ასევე, სამგანზომილებიანი ბადის შეკუმშვის შედარებით რთული ალგორითმების ნაცვლად, შეგიძლიათ გამოიყენოთ ტექსტურების შეკუმშვის ჩვეულებრივი მეთოდები, თუნდაც JPEG– ის მსგავსი. და 3D ობიექტების პროცედურული შექმნისთვის შეგიძლიათ გამოიყენოთ ჩვეულებრივი ალგორითმები 2D ტექსტურებისთვის.

მაგრამ გადაადგილების რუქებს ასევე აქვთ გარკვეული შეზღუდვები, მათი გამოყენება არ შეიძლება ყველა სიტუაციაში. მაგალითად, გლუვი საგნები, რომლებიც არ შეიცავს ბევრ წვრილ დეტალს, უკეთესად იქნება წარმოდგენილი სტანდარტული ბადეების ან სხვა უმაღლესი დონის ზედაპირების სახით, როგორიცაა ბეზიეს მოსახვევები. მეორეს მხრივ, ძალიან რთული მოდელები, როგორიცაა ხეები ან მცენარეები, ასევე არ არის ადვილი გამოსახული გადაადგილების რუქებით. ასევე არსებობს პრობლემები მათი გამოყენების მოხერხებულობასთან, ეს თითქმის ყოველთვის მოითხოვს სპეციალიზირებულ პროგრამებს, რადგან ძალიან ძნელია გადაადგილების რუქების შექმნა (თუ ჩვენ არ ვსაუბრობთ უბრალო ობიექტებზე, როგორიცაა ლანდშაფტი). გადაადგილების რუქების მრავალი თანდაყოლილი პრობლემა და შეზღუდვა იგივეა, რაც ორი, რადგან ორი მეთოდი არსებითად მსგავსი იდეის ორი განსხვავებული წარმოდგენაა.

როგორც მაგალითი რეალური თამაშებიდან, მე მოვიყვან თამაშს, რომელიც იყენებს ტექსტურის შერჩევას ვერტექს shader– დან, ფუნქცია, რომელიც გამოჩნდა NVIDIA NV40 ვიდეო ჩიპებში და Shader Model 3.0. Vertex texturing შეიძლება გამოყენებულ იქნას გადაადგილების რუქის მარტივ მეთოდზე, რომელიც მთლიანად ხორციელდება GPU– ს მიერ, tessellation– ის გარეშე (გაყოფა უფრო სამკუთხედებად). ასეთი ალგორითმის გამოყენება შეზღუდულია, მათ აქვთ აზრი მხოლოდ იმ შემთხვევაში, თუ რუქები დინამიურია, ანუ ისინი შეიცვლება პროცესში. მაგალითად, ეს არის წყლის დიდი ზედაპირების გაწევა, რაც კეთდება თამაშში Pacific Fighters:


Normalmapping არის ადრე აღწერილი bumpmapping ტექნიკის გაუმჯობესებული ვერსია, მისი გაფართოებული ვერსია. Bumpmapping შემუშავდა ბლინის მიერ ჯერ კიდევ 1978 წელს, სადაც ზედაპირული ნორმალიზმები იცვლება ამ რელიეფის რუქის მეთოდით, რომელიც ემყარება მუწუკების რუქების ინფორმაციას. მიუხედავად იმისა, რომ დარტყმა მხოლოდ ზედაპირულ წერტილებზე ცვლის არსებულ ნორმალურ მაჩვენებელს, ნორმალური რუქა სრულად ცვლის ნორმალურებს მათი მნიშვნელობების მოპოვებით სპეციალურად მომზადებული ნორმალური რუქიდან. ეს რუქები, როგორც წესი, არის ტექსტურები, მათში წინასწარ გამოთვლილი ნორმალური მნიშვნელობებით, წარმოდგენილია როგორც RGB ფერის კომპონენტები (თუმცა, ასევე არსებობს სპეციალური ფორმატები ნორმალური რუქებისთვის, მათ შორის შეკუმშვისთვის), განსხვავებით 8-ბიტიანი შავი და თეთრი სიმაღლისგან რუკები მუწუკებში.

ზოგადად, მუწუკების რუქების მსგავსად, ეს არის ასევე "იაფი" მეთოდი შედარებით დაბალი გეომეტრიული სირთულის მოდელებზე დეტალების დასამატებლად, უფრო რეალური გეომეტრიის გამოყენების გარეშე, მხოლოდ უფრო მოწინავე. ტექნიკის ერთ-ერთი ყველაზე საინტერესო გამოყენება არის დაბალი პოლი მოდელების დეტალების მნიშვნელოვნად გაზრდა ნორმალური რუქების გამოყენებით, რომლებიც მიიღება მაღალი გეომეტრიული სირთულის იგივე მოდელის დამუშავებით. ჩვეულებრივი რუქები შეიცავს ზედაპირის უფრო დეტალურ აღწერას, ვიდრე მუწუკების დაფარვა და საშუალებას გაძლევთ წარმოადგინოთ უფრო რთული ფორმები. უაღრესად დეტალური ობიექტებიდან ინფორმაციის მოპოვების იდეები გაჟღერდა გასული საუკუნის 90-იანი წლების შუა ხანებში, მაგრამ შემდეგ ეს იყო გამოყენებისთვის. მოგვიანებით, 1998 წელს, წარმოდგენილ იქნა იდეები ნორმალური რუქების სახით დეტალების გადასატანად მაღალი პოლი მოდელებიდან დაბალ პოლი მოდელებზე.

ნორმალური რუქები უფრო ეფექტურ საშუალებას იძლევა ზედაპირული მონაცემების შესანახად, ვიდრე უბრალოდ მრავალკუთხედის დიდი რაოდენობის გამოყენება. მათი ერთადერთი სერიოზული შეზღუდვა ის არის, რომ ისინი არ არიან კარგად მორგებული დიდ დეტალებზე, რადგან ნორმალური რუქა რეალურად არ მატებს პოლიგონებს და არ ცვლის ობიექტის ფორმას, ის მხოლოდ ქმნის მის გარეგნობას. ეს არის მხოლოდ დეტალების სიმულაცია, რომელიც დაფუძნებულია პიქსელის დონის განათების გათვლებზე. ობიექტის უკიდურეს პოლიგონებზე და ზედაპირის დახრის დიდი კუთხეები, ეს ძალიან შესამჩნევია. ამრიგად, ნორმალური რუქის გამოყენების ყველაზე გონივრული გზა არის დაბალი პოლი მოდელის საკმარისად დეტალური შესანახად, რათა შეინარჩუნოს ობიექტის ძირითადი ფორმა და გამოიყენოთ ნორმალური რუქები წვრილმანი დეტალების დასამატებლად.

ნორმალური რუქები ჩვეულებრივ წარმოიქმნება მოდელის ორი ვერსიიდან, დაბალი და მაღალი პოლი. დაბალი პოლი მოდელი შეიცავს მინიმალურ გეომეტრიას, ობიექტის ძირითად ფორმებს და მაღალი პოლი მოდელი შეიცავს ყველაფერს რაც გჭირდებათ მაქსიმალური დეტალებისთვის. შემდეგ, სპეციალური კომუნალური საშუალებების გამოყენებით, ისინი შედარებულია ერთმანეთთან, განსხვავება გამოითვლება და ინახება ტექსტურაში, რომელსაც ეწოდება ნორმალური რუქა. მისი შექმნისას შეგიძლიათ დამატებით გამოიყენოთ მუწუკების რუქა ძალიან მცირე დეტალებისთვის, რომელთა მოდელირებაც არ შეიძლება მაღალი პოლი მოდელის პირობებშიც (კანის ფორები, სხვა მცირე დეპრესია).

ნორმალური რუქები თავდაპირველად წარმოდგენილი იყო როგორც რეგულარული RGB ტექსტურები, სადაც R, G და B ფერის კომპონენტები (0 -დან 1 -მდე) განმარტებულია, როგორც X, Y და Z კოორდინატები. ნორმალურ რუქაზე თითოეული ტექსელი წარმოდგენილია როგორც ნორმალური ზედაპირული წერტილი. ნორმალური რუქები შეიძლება იყოს ორი სახის: კოორდინატებით სამოდელო სივრცეში (ზოგადი საკოორდინატო სისტემა) ან ტანგენტურ სივრცეში (ტერმინი რუსულად არის "ტანგენტური სივრცე", სამკუთხედის ადგილობრივი კოორდინატთა სისტემა). მეორე ვარიანტი უფრო ხშირად გამოიყენება. როდესაც ნორმალური რუქები წარმოდგენილია სამოდელო სივრცეში, მაშინ მათ უნდა ჰქონდეთ სამი კომპონენტი, ვინაიდან ყველა მიმართულება შეიძლება იყოს წარმოდგენილი, ხოლო როდესაც ადგილობრივ საკოორდინატო სისტემაში, ტანგენტურ სივრცეში, მაშინ შეგიძლია გადალახო ორი კომპონენტი და მიიღო მესამე პიქსელში shader

თანამედროვე რეალურ დროში პროგრამები ჯერ კიდევ მნიშვნელოვნად აღემატება წინასწარ შექმნილ ანიმაციას სურათის ხარისხის თვალსაზრისით, ეს ეხება, პირველ რიგში, განათების ხარისხს და სცენების გეომეტრიულ სირთულეს. რეალურ დროში გამოთვლილი წვეროებისა და სამკუთხედების რაოდენობა შეზღუდულია. ამიტომ, გეომეტრიის რაოდენობის შემცირების მეთოდები ძალიან მნიშვნელოვანია. ნორმალური რუქის დაწყებამდე შემუშავდა რამდენიმე ასეთი მეთოდი, მაგრამ დაბალი პოლი მოდელები, თუნდაც დაბომბვით, ბევრად უარესია ვიდრე უფრო რთული მოდელები. მიუხედავად იმისა, რომ ნორმალურ რუქას აქვს რამდენიმე ნაკლი (ყველაზე აშკარა - ვინაიდან მოდელი რჩება დაბალი პოლი, ეს ადვილად ჩანს მისი კუთხის საზღვრებით), საბოლოო ხარისხის ხარისხი შესამჩნევად გაუმჯობესებულია, რის გამოც მოდელების გეომეტრიული სირთულე დაბალია. ცოტა ხნის წინ, ამ ტექნიკის პოპულარობის ზრდა და მისი გამოყენება ყველა პოპულარულ სათამაშო ძრავში აშკარად ჩანს. ეს განპირობებულია შესანიშნავი შედეგიანი კომბინაციით და მოდელების გეომეტრიული სირთულის მოთხოვნების ერთდროულად შემცირებით. ჩვეულებრივი რუკების ტექნიკა ახლა თითქმის ყველგან გამოიყენება, ყველა ახალი თამაში მას მაქსიმალურად ფართოდ იყენებს. აქ არის ცნობილი კომპიუტერული თამაშების მოკლე ჩამონათვალი ჩვეულებრივი რუკების გამოყენებით: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. ყველა მათგანი ბევრად უკეთ გამოიყურება ვიდრე წარსულის თამაშები, მათ შორის ჩვეულებრივი რუკების გამოყენება.

ამ ტექნიკის გამოყენების მხოლოდ ერთი უარყოფითი შედეგია - ტექსტურების მოცულობის ზრდა. ყოველივე ამის შემდეგ, ნორმალური რუქა ძლიერ გავლენას ახდენს იმაზე, თუ როგორ გამოიყურება ობიექტი და ის უნდა იყოს საკმარისად დიდი გარჩევადობით, ამიტომ ვიდეო მეხსიერების მოთხოვნები და მისი გამტარობა გაორმაგდება (არაკომპრესირებული ნორმალური რუქების შემთხვევაში). ახლა უკვე იწარმოება ვიდეო ბარათები 512 მეგაბაიტი ადგილობრივი მეხსიერებით, მისი გამტარობა მუდმივად იზრდება, შეკუმშვის მეთოდები შემუშავებულია სპეციალურად ნორმალური რუქებისთვის, ამიტომ ეს მცირე შეზღუდვები, ფაქტობრივად, არ არის ძალიან მნიშვნელოვანი. ნორმალური რუკების ეფექტი გაცილებით დიდია, რაც იძლევა შედარებით დაბალი პოლი მოდელების გამოყენებას, ამცირებს მეხსიერების მოთხოვნებს გეომეტრიული მონაცემების შესანახად, აუმჯობესებს შესრულებას და იძლევა ძალიან ღირსეულ ვიზუალურ შედეგს.

პარალაქსის რუქა / ოფსეტური რუქა

ნორმალურ რუქას, რომელიც შემუშავებულია 1984 წელს, მოჰყვა რელიეფის ტექსტურის რუქა, რომელიც შემოღებულ იქნა ოლივერას და ეპისკოპოსის მიერ 1999 წელს. ეს არის ტექსტურის შედგენის ტექნიკა, რომელიც დაფუძნებულია სიღრმისეულ ინფორმაციაზე. მეთოდმა ვერ იპოვა გამოყენება თამაშებში, მაგრამ მისმა იდეამ ხელი შეუწყო პარალაქსის რუქაზე მუშაობის გაგრძელებას და მის გაუმჯობესებას. კანეკომ 2001 წელს შემოიღო პარალექსის რუქა, რომელიც იყო პირველი ეფექტური მეთოდი პარალელური ეფექტის პიქსელებით. 2004 წელს უელსმა აჩვენა პარალაქსის რუქის გამოყენება პროგრამირებადი ვიდეო ჩიპების შესახებ.

ამ მეთოდს ალბათ ყველაზე განსხვავებული სახელები აქვს. მე ჩამოვთვლი მათ, ვინც შევხვდი: პარალაქსის რუქა, ოფსეტური რუქა, ვირტუალური გადაადგილების რუქა, პერ-პიქსელის გადაადგილების რუქა. პირველი სათაური გამოიყენება სტატიაში მოკლედ.
პარალექსური რუქა არის კიდევ ერთი ალტერნატივა მუწუკების რუქისა და ნორმალური რუქების ტექნიკისა, რაც კიდევ უფრო გაწვდით ზედაპირის დეტალებს, 3D ზედაპირების უფრო ბუნებრივ ჩვენებას, ასევე ზედმეტი შესრულების დაკარგვის გარეშე. ეს ტექნიკა მსგავსია როგორც გადაადგილების რუქისა, ასევე ნორმალური რუკების ერთდროულად, ის სადღაც შუაშია. მეთოდი ასევე შექმნილია ზედაპირის უფრო მეტი დეტალების ჩვენებისათვის, ვიდრე თავდაპირველი გეომეტრიული მოდელი. მსგავსია ჩვეულებრივი რუკების, მაგრამ განსხვავება ისაა, რომ მეთოდი ამახინჯებს ტექსტურის რუქას ტექსტურის კოორდინატების შეცვლით ისე, რომ როდესაც ზედაპირს სხვადასხვა კუთხით უყურებთ, ის ამოზნექილი ჩანს, თუმცა სინამდვილეში ზედაპირი ბრტყელია და არ იცვლება რა სხვა სიტყვებით რომ ვთქვათ, პარალაქსის რუქა არის ტექნიკა ზედაპირის წერტილების გადაადგილების ეფექტის დასაახლოებლად, თვალსაზრისის ცვლილების მიხედვით.

ტექნიკა ცვლის ტექსტურის კოორდინატებს (რის გამოც ტექნიკას ზოგჯერ უწოდებენ ოფსეტური რუქა) ისე, რომ ზედაპირი უფრო მოცულობითი ჩანს. მეთოდის იდეა მდგომარეობს იმაში, რომ დაუბრუნდეს ტექსტურის კოორდინატები იმ წერტილს, სადაც ხედის ვექტორი კვეთს ზედაპირს. ეს მოითხოვს სხივების მიკვლევას (სხივების მიკვლევას) სიმაღლის რუქისთვის, მაგრამ თუ მას არ აქვს ძალიან ბევრი ცვალებადი მნიშვნელობა ("გლუვი" ან "გლუვი"), მაშინ მიახლოების გაუქმება შესაძლებელია. ეს მეთოდი კარგია ზედაპირებისთვის, რომელთაც აქვთ შეუფერხებლად განსხვავებული სიმაღლეები, გზაჯვარედინების არასწორი გამოთვლისა და დიდი ოფსეტური მნიშვნელობების გარეშე. ასეთი მარტივი ალგორითმი განსხვავდება ჩვეულებრივი რუქისაგან მხოლოდ სამი პიქსელიანი დამცავი ინსტრუქციით: ორი მათემატიკური ინსტრუქცია და ერთი დამატებითი ამოღება ტექსტურიდან. მას შემდეგ, რაც გამოითვლება ახალი ტექსტურის კოორდინატი, იგი შემდგომ გამოიყენება სხვა ტექსტურის ფენების წასაკითხად: ძირითადი ტექსტურა, ნორმალური რუქა და ა. თანამედროვე ვიდეო ჩიპებზე პარალექსური რუქის ეს მეთოდი თითქმის ისეთივე ეფექტურია, როგორც ჩვეულებრივი ტექსტურის რუქა და მისი შედეგი არის ზედაპირის უფრო რეალისტური ჩვენება, ვიდრე უბრალო ნორმალური რუქა.

მაგრამ ჩვეულებრივი პარალექსული რუქის გამოყენება შემოიფარგლება სიმაღლის რუქებით, ღირებულებებში მცირე სხვაობით. "ციცაბო" დარღვევები დამუშავებულია ალგორითმის მიერ არასწორად, ჩნდება სხვადასხვა სახის არტეფაქტები, ტექსტურები "მცურავი" და ა.შ. შემუშავებულია რამდენიმე მოდიფიცირებული მეთოდი პარალაქსის რუქის ტექნიკის გასაუმჯობესებლად. რამდენიმე მკვლევარმა (Yerex, Donnelly, Tatarchuk, Policarpo) აღწერა ახალი მეთოდები, რომლებიც აუმჯობესებს საწყის ალგორითმს. თითქმის ყველა იდეა ემყარება სხივების მიკვლევას პიქსელის შადერში, რათა დადგინდეს ზედაპირული დეტალების კვეთა ერთმანეთთან. მოდიფიცირებულმა ტექნიკამ მიიღო რამდენიმე განსხვავებული სახელი: პარალაქსის რუქა ოკლუზიით, პარალაქსის რუქა მანძილის ფუნქციით, პარალაქსის ოკლუზიის რუქა. მოკლედ რომ ვთქვათ, ჩვენ მათ ყველა პარალაქსის ოკლუზიის რუქას დავარქმევთ.

პარალაქსის ოკლუზიის რუქის მეთოდები ასევე მოიცავს სხივების კვალს სიმაღლის დასადგენად და ტექსელის ხილვადობის გათვალისწინებით. მართლაც, ზედაპირის კუთხით განხილვისას, ტექსელები ბლოკავს ერთმანეთს და ამის გათვალისწინებით, თქვენ შეგიძლიათ მეტი სიღრმე დაამატოთ პარალექსის ეფექტს. შედეგად მიღებული სურათი უფრო რეალისტური ხდება და ასეთი გაუმჯობესებული მეთოდები შეიძლება გამოყენებულ იქნას უფრო ღრმა რელიეფისათვის, ის შესანიშნავია აგურისა და ქვის კედლების, ტროტუარების და სხვა გამოსახვისათვის. განსაკუთრებით უნდა აღინიშნოს, რომ მთავარი განსხვავება პარალექსის რუქასა და გადაადგილების რუქას შორის არის ის, რომ გათვლები ყველა პიქსელზე და არა ზედაპირული. ამიტომაც მეთოდს აქვს სახელები, როგორიცაა ვირტუალური გადაადგილების რუქა და ერთი პიქსელის გადაადგილების რუქა. შეხედეთ სურათს, ძნელი დასაჯერებელია, მაგრამ ტროტუარის ქვები აქ არის მხოლოდ პიქსელ-პიქსელის ეფექტი:

მეთოდი საშუალებას გაძლევთ ეფექტურად აჩვენოთ დეტალური ზედაპირები მილიონობით წვეროსა და სამკუთხედის გარეშე, რაც საჭირო იქნება ამ გეომეტრიის განხორციელებისას. ამავე დროს, დაცულია მაღალი დეტალები (სილუეტების / კიდეების გარდა) და ანიმაციური გათვლები მნიშვნელოვნად გამარტივებულია. ეს ტექნიკა უფრო იაფია, ვიდრე რეალური გეომეტრიის გამოყენება და მნიშვნელოვნად ნაკლები პოლიგონი გამოიყენება, განსაკუთრებით იმ შემთხვევებში, როდესაც ძალიან მცირე დეტალებია. ალგორითმის მრავალი პროგრამა არსებობს და ის საუკეთესოდ შეეფერება ქვებს, აგურებს და მსგავსს.

ასევე, დამატებითი უპირატესობა ისაა, რომ სიმაღლის რუქები შეიძლება დინამიურად შეიცვალოს (წყლის ზედაპირი ტალღებით, ტყვიის ხვრელები კედლებში და მრავალი სხვა). მეთოდის მინუსი არის გეომეტრიულად სწორი სილუეტების ნაკლებობა (ობიექტის კიდეები), რადგან ალგორითმი არის პიქსელ-პიქსელი და არ არის გადაადგილების რეალური რუქა. მაგრამ ეს ზოგავს შესრულებას შემცირებული დატვირთვის სახით გეომეტრიის ტრანსფორმაციაზე, განათებასა და ანიმაციაზე. ინახავს ვიდეო მეხსიერებას, რომელიც საჭიროა გეომეტრიული მონაცემების დიდი მოცულობის შესანახად. ტექნიკის უპირატესობაა შედარებით მარტივი ინტეგრაცია არსებულ აპლიკაციებში და ნაცნობი კომუნალური საშუალებების გამოყენება, რომლებიც გამოიყენება ამ პროცესის ნორმალური რუკებისათვის.

ტექნიკა უკვე გამოიყენება ბოლოდროინდელ რეალურ თამაშებში. ჯერჯერობით, ისინი ახერხებენ პარალექსის მარტივი რუქებით, რომელიც დაფუძნებულია სტატიკური სიმაღლის რუქებზე, სხივების მიკვლევისა და კვეთა გამოთვლის გარეშე. აქ არის რამოდენიმე მაგალითი იმისა, თუ როგორ შეიძლება პარალაქსის რუქის გამოყენება თამაშებში:

შემდგომი დამუშავება

ფართო გაგებით, შემდგომი დამუშავება არის ყველაფერი, რაც ხდება გამოსახულების ძირითადი საფეხურების შემდეგ. სხვა სიტყვებით რომ ვთქვათ, შემდგომი დამუშავება არის ნებისმიერი ცვლილება გამოსახულების გადაცემის შემდეგ. შემდგომი დამუშავება არის სპეციალური ვიზუალური ეფექტების შექმნის ინსტრუმენტების ერთობლიობა და მათი შექმნა ხორციელდება სცენის გაფორმებაზე ძირითადი სამუშაოს დასრულების შემდეგ, ანუ დამუშავების შემდგომი ეფექტების შექმნისას გამოიყენება მზა ბიტმაპი.

მარტივი მაგალითი ფოტოსურათიდან: თქვენ გადაიღეთ ულამაზესი ტბა გამწვანებით წმინდა ამინდში. ცა ძალიან კაშკაშაა და ხეები ძალიან ბნელია. თქვენ ატვირთავთ სურათს გრაფიკულ რედაქტორში და იწყებთ სიკაშკაშის, კონტრასტის და სხვა პარამეტრების შეცვლას გამოსახულების არეალისთვის ან მთლიანი სურათისთვის. მაგრამ თქვენ აღარ გაქვთ შესაძლებლობა შეცვალოთ კამერის პარამეტრები, თქვენ აკეთებთ მზა სურათის დამუშავებას. ეს არის შემდგომი დამუშავება. ან სხვა მაგალითი: პორტრეტის ფოტოგრაფიის ფონის შერჩევა და ბუნდოვანი ფილტრის გამოყენება ამ არეზე ველის ეფექტისთვის უფრო დიდი სიღრმით. ანუ როდესაც თქვენ შეცვლით ან ასწორებთ ჩარჩოს გრაფიკულ რედაქტორში, თქვენ აკეთებთ შემდგომ დამუშავებას. იგივე შეიძლება გაკეთდეს თამაშში, რეალურ დროში.

სურათის დამუშავების მრავალი განსხვავებული შესაძლებლობა არსებობს. ყველას ალბათ უნახავს ბევრი ეგრეთწოდებული გრაფიკული ფილტრი გრაფიკულ რედაქტორებში. ეს არის ზუსტად ის, რასაც ეწოდება პოსტიფილტრები: დაბინდვა, კიდეების გამოვლენა, სიმკვეთრე, ხმაური, გლუვი, ჭედური და სხვა სამიზნე და მთავარი გამოსახულების შემდეგ ეს სურათი დამატებით დამუშავდება პიქსელ შადერების გამოყენებით და მხოლოდ ამის შემდეგ გამოჩნდება ეკრანზე. თამაშებში შემდგომი დამუშავების ეფექტებიდან ყველაზე ხშირად გამოიყენება ,,. არსებობს მრავალი სხვა პოსტი ეფექტი: ხმაური, აფეთქება, დამახინჯება, სეპია და ა.

აქ მოცემულია სათამაშო პროგრამებში შემდგომი დამუშავების რამდენიმე ძირითადი მაგალითი:

მაღალი დინამიური დიაპაზონი (HDR)

მაღალი დინამიური დიაპაზონი (HDR), როგორც გამოიყენება 3D გრაფიკაზე, არის მაღალი დინამიური დიაპაზონის გაწევა. HDR– ის არსი არის ინტენსივობისა და ფერის აღწერა რეალური ფიზიკური სიდიდეებით. სურათის აღწერის ჩვეულებრივი მოდელი არის RGB, როდესაც ყველა ფერი წარმოდგენილია პირველადი ფერების ჯამი: წითელი, მწვანე და ლურჯი, განსხვავებული ინტენსივობით, 0 -დან 255 -მდე, თითოეული რიცხვისთვის, დაშიფრული რვა ბიტი თითო ფერში. მაქსიმალური ინტენსივობის თანაფარდობა მინიმუმამდე, რომელიც შეიძლება გამოჩნდეს კონკრეტული მოდელის ან მოწყობილობის მიერ, ეწოდება დინამიურ დიაპაზონს. ასე რომ, RGB მოდელის დინამიური დიაპაზონი არის 256: 1 ან 100: 1 cd / m 2 (სიდიდის ორი ორდერი). ფერის და ინტენსივობის აღწერის ეს მოდელი ჩვეულებრივ მოიხსენიება როგორც დაბალი დინამიური დიაპაზონი (LDR).

ყველა შემთხვევისთვის LDR– ის შესაძლო მნიშვნელობები აშკარად არ არის საკმარისი, ადამიანს შეუძლია დაინახოს გაცილებით დიდი დიაპაზონი, განსაკუთრებით დაბალი სინათლის ინტენსივობის პირობებში, და RGB მოდელი ძალიან შეზღუდულია ასეთ შემთხვევებში (და ასევე მაღალი ინტენსივობითაც). ადამიანის ხედვის დინამიური დიაპაზონი არის 10 -6 -დან 108 ცდ / მ 2 -მდე, ანუ 10,000,000,000,000: 1 (სიდიდის 14 ორდერი). ჩვენ ვერ ვხედავთ მთელ დიაპაზონს ერთდროულად, მაგრამ თვალისთვის ხილული დიაპაზონი დროის ყოველ მომენტში დაახლოებით ტოლია 10,000: 1 -ის (სიდიდის ოთხი ორდერი). ხედვა თანდათან ეგუება განათების დიაპაზონის სხვა ნაწილს, ეგრეთ წოდებული ადაპტაციის გამოყენებით, რომელიც ადვილად აღწერილია ღამით ოთახში სინათლის გამორთვის სიტუაციით - თავიდან თვალები ძალიან ცოტას ხედავს, მაგრამ დროთა განმავლობაში ისინი ეგუებიან განათების შეცვლილ პირობებს და ხედავენ ბევრად მეტს. ... იგივე ხდება მაშინ, როდესაც ბნელ გარემოს ისევ ნათელს გადააკეთებთ.

ამრიგად, RGB აღწერილობის მოდელის დინამიური დიაპაზონი არ არის საკმარისი იმისათვის, რომ წარმოაჩინოს ის სურათები, რომელთა დანახვაც ადამიანს შეუძლია სინამდვილეში, ეს მოდელი მნიშვნელოვნად ამცირებს სინათლის ინტენსივობის შესაძლო მნიშვნელობებს დიაპაზონის ზედა და ქვედა ნაწილებში. HDR მასალებში მოყვანილი ყველაზე გავრცელებული მაგალითია ჩაბნელებული ოთახის გამოსახულება ფანჯარასთან ერთად, ნათელ ქუჩაზე მზიან დღეს. RGB მოდელის საშუალებით შეგიძლიათ მიიღოთ ნორმალური ჩვენება იმისა, რაც ფანჯრის მიღმაა, ან მხოლოდ ის, რაც ოთახის შიგნით არის. LDR– ში 100 cd / m 2 –ზე მეტი მნიშვნელობა ზოგადად ამოჭრილია, რაც არის მიზეზი იმისა, რომ 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's Far Cry თამაშში, ის იყენებს სტანდარტულ HDR გაწევის ტექნიკას: აყვავების ფილტრების გამოყენებას, რომლებიც მოწოდებულია Kawase– ისა და ტონის რუქების ოპერატორის Reinhard– ის მიერ.

სამწუხაროდ, ზოგიერთ შემთხვევაში, თამაშის დეველოპერებს შეუძლიათ დაიმალონ 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 კოპირებულია სპეციალურ ტექსტურაში დამუშავებისათვის.
  • ფაქტურის რეზოლუცია მცირდება, მაგალითად, 4 -ჯერ.
  • ალფა არხის შემსუბუქების ფილტრები (დაბინდვა) რამდენჯერმე გამოიყენება სურათზე, ალფა არხში ჩაწერილი ინტენსივობის მონაცემების საფუძველზე.
  • შედეგად მიღებული სურათი შერეულია პირველადი ჩარჩოს ჩარჩო ბუფერში და შედეგი გამოჩნდება ეკრანზე.

სხვა სახის შემდგომი დამუშავების მსგავსად, აყვავება საუკეთესოდ გამოიყენება მაღალი დინამიური დიაპაზონის (HDR) გაწევისას. რეალურ დროში 3D პროგრამებიდან აყვავებული ფილტრის მიერ საბოლოო სურათის დამუშავების დამატებითი მაგალითები:

მოძრაობის დაბინდვა

მოძრაობის დაბინდვა ხდება ფოტოებსა და ფილმებში ჩარჩოში ობიექტების გადაადგილების გამო ჩარჩოს ექსპოზიციის დროს, ხოლო ლინზების ჩამკეტი ღიაა. კამერის მიერ გადაღებული ჩარჩო (ფოტო, ფილმი) არ აჩვენებს მყისიერად გადაღებულ სურათს ნულოვანი ხანგრძლივობით. ტექნოლოგიური შეზღუდვების გამო, ჩარჩო აჩვენებს დროის გარკვეულ მონაკვეთს, რომლის დროსაც ჩარჩოში მყოფ ობიექტებს შეუძლიათ გადაადგილდნენ გარკვეული მანძილი, და თუ ეს მოხდება, მაშინ წარმოდგენილი იქნება მოძრავი ობიექტის ყველა პოზიცია ობიექტივის ღია ჩამკეტის დროს ჩარჩოზე, როგორც ბუნდოვანი გამოსახულება მოძრაობის ვექტორის გასწვრივ ... ეს ხდება იმ შემთხვევაში, თუ ობიექტი მოძრაობს კამერასთან შედარებით ან კამერა არის ობიექტთან შედარებით, და ბუნდოვანი მოცულობა გვაძლევს წარმოდგენას ობიექტის მოძრაობის სიჩქარის სიდიდის შესახებ.

სამგანზომილებიან ანიმაციაში, დროის ნებისმიერ მომენტში (კადრი), ობიექტები განლაგებულია გარკვეულ კოორდინატებზე სამგანზომილებიან სივრცეში, ვირტუალური კამერის მსგავსი, უსასრულოდ სწრაფი ჩამკეტის სიჩქარით. შედეგად, არ არსებობს ბუნდოვანი მსგავსი კამერისა და ადამიანის თვალის მიერ სწრაფი მოძრავი ობიექტების ყურებისას. ის არაბუნებრივად და არარეალურად გამოიყურება. განვიხილოთ მარტივი მაგალითი: რამდენიმე სფერო ბრუნავს რაღაც ღერძის გარშემო. აქ არის სურათი, თუ როგორ გამოიყურება ეს მოძრაობა ბუნდოვანებით და მის გარეშე:

სურათის დაბინდვის გარეშე, ვერც კი გეტყვით მოძრაობენ თუ არა სფეროები, ხოლო მოძრაობის დაბინდვა იძლევა ნათელ წარმოდგენას ობიექტების მოძრაობის სიჩქარეზე და მიმართულებაზე. სხვათა შორის, მოძრაობის დაბინდვის არარსებობა ასევე არის მიზეზი იმისა, რომ თამაშებში მოძრაობა წამში 25-30 კადრი სიჩქარით გამოიყურება, თუმცა ფილმები და ვიდეოები მშვენივრად გამოიყურება კადრის სიხშირის იმავე პარამეტრებში. მოძრაობის დაბინდვის ნაკლებობის კომპენსირების მიზნით, სასურველია მაღალი კადრების სიხშირე (60 კადრი წამში ან უფრო მაღალი) ან გამოსახულების დამუშავების დამატებითი მეთოდების გამოყენება მოძრაობის დაბინდვის ეფექტის იმიტირებისთვის. ეს გამოიყენება ანიმაციის სიგლუვის გასაუმჯობესებლად და ერთდროულად ფოტო და კინო რეალიზმის ეფექტისთვის.

მოძრაობის დაბინდვის უმარტივესი ალგორითმი რეალურ დროში აპლიკაციებისთვის არის წინა ანიმაციური ჩარჩოებიდან მონაცემების გამოყენება მიმდინარე კადრის გამოსახატავად. მაგრამ არსებობს მოძრაობის დაბინდვის უფრო ეფექტური და თანამედროვე მეთოდებიც, რომლებიც არ იყენებენ წინა ჩარჩოებს, არამედ ემყარება ობიექტების მოძრაობის ვექტორებს ჩარჩოში, ასევე დამატებით დამუშავების შემდგომ კიდევ ერთ ნაბიჯს. ბუნდოვანი ეფექტი შეიძლება იყოს როგორც სრულ ეკრანზე (ჩვეულებრივ კეთდება დამუშავების შემდგომ), ასევე ინდივიდუალური, ყველაზე სწრაფად მოძრავი ობიექტებისთვის.

მოძრაობის დაბინდვის ეფექტის შესაძლო გამოყენება თამაშებში: ყველა სარბოლო თამაში (მოძრაობის ძალიან მაღალი სიჩქარის ეფექტის შესაქმნელად და ტელევიზიის მსგავსი გამეორებების ყურებისას), სპორტული თამაშები (იგივე გამეორება და თავად თამაშში, დაბინდვა შეიძლება გამოიყენება ძალიან სწრაფად მოძრავ ობიექტებზე, როგორიცაა ბურთი ან გოჭი), საბრძოლო თამაშები (იარაღის, მკლავებისა და ფეხების სწრაფი მოძრაობები), ბევრი სხვა თამაში (ძრავზე 3D კადრების თამაშის დროს). აქ მოცემულია თამაშებიდან მოძრაობის დაბინდვის ეფექტების რამდენიმე მაგალითი:

ველის სიღრმე (DOF)

მოკლედ, სიღრმის სიღრმე არის ობიექტების დაბინდვა, რაც დამოკიდებულია მათი პოზიციის მიხედვით კამერის ფოკუსთან შედარებით. რეალურ ცხოვრებაში, ფოტოებსა და ფილმებში, ჩვენ ყველა ობიექტს ერთნაირად ნათლად არ ვხედავთ, ეს განპირობებულია თვალის სტრუქტურის თავისებურებით და კამერებისა და კინოკამერების ოპტიკის სტრუქტურით. ფოტოსა და კინემატოგრაფიულ ოპტიკას აქვს გარკვეული მანძილი, კამერადან ასეთ მანძილზე მდებარე ობიექტები ფოკუსირებულია და სურათში მკვეთრად გამოიყურება, ხოლო კამერებიდან უფრო შორს ან მის მახლობლად, პირიქით, ბუნდოვნად გამოიყურება, სიმკვეთრე თანდათან მცირდება მანძილის გაზრდით ან შემცირებით ...

როგორც თქვენ ალბათ მიხვდით, ეს არის ფოტოსურათი და არა გადაღება. კომპიუტერულ გრაფიკაში, გამოსახული თითოეული ობიექტი სავსებით ნათელია, ვინაიდან ლინზები და ოპტიკა არ არის იმიტირებული გამოთვლებში. ამრიგად, ფოტო და კინო რეალიზმის მისაღწევად, სპეციალური ალგორითმები უნდა იქნას გამოყენებული კომპიუტერული გრაფიკის მსგავსი რამის გასაკეთებლად. ეს ტექნიკა ახდენს სხვადასხვა მანძილზე მდებარე ობიექტებზე განსხვავებული აქცენტის ეფექტის სიმულაციას.

რეალურ დროში გაწევის ერთ-ერთი გავრცელებული ტექნიკაა ორიგინალური ჩარჩოს და მისი ბუნდოვანი ვერსიის შერწყმა (ბუნდოვანი ფილტრის მრავალჯერადი გავლა) სურათის პიქსელების სიღრმის მონაცემებზე დაყრდნობით. თამაშებში DOF ეფექტს აქვს რამოდენიმე გამოყენება, მაგალითად, თამაშის მოჭრის სცენები თამაშის ძრავზე, განმეორებითი თამაშები სპორტულ და სარბოლო თამაშებში. ველების სიღრმის მაგალითები რეალურ დროში:

დეტალების დონე (LOD)

3D პროგრამებში დეტალების დონე არის მეთოდი, რომელიც ამცირებს ჩარჩოს გაკეთების სირთულეს, ამცირებს პოლიგონების, ტექსტურების და სხვა რესურსების საერთო რაოდენობას სცენაზე და საერთოდ ამცირებს მის სირთულეს. მარტივი მაგალითი: მთავარი გმირის მოდელი შედგება 10 000 მრავალკუთხედისგან. იმ შემთხვევებში, როდესაც ის დამუშავებულ სცენაზე მდებარეობს კამერასთან ახლოს, მნიშვნელოვანია, რომ ყველა პოლიგონი იყოს გამოყენებული, მაგრამ კამერიდან ძალიან დიდ მანძილზე, ის დაიკავებს მხოლოდ რამდენიმე პიქსელს საბოლოო სურათზე და არ არსებობს წერტილი ყველა 10 000 პოლიგონის დამუშავებაში. ალბათ, ამ შემთხვევაში, ასობით პოლიგონი, ან თუნდაც რამდენიმე მრავალკუთხედი და სპეციალურად მომზადებული ტექსტურა საკმარისი იქნება მოდელის დაახლოებით ერთი და იგივე ჩვენებისთვის. შესაბამისად, საშუალო დისტანციებზე, აზრი აქვს მოდელის გამოყენებას, რომელიც შედგება უფრო მეტი სამკუთხედისაგან, ვიდრე უმარტივესი მოდელი და ნაკლები ვიდრე ყველაზე რთული.

LOD მეთოდი ჩვეულებრივ გამოიყენება 3D სცენების მოდელირებისა და გადაღებისას, ობიექტების სირთულის რამდენიმე დონის (გეომეტრიული ან სხვა) გამოყენებით, პროპორციულად მანძილი მათგან კამერასთან. ტექნიკას ხშირად იყენებენ თამაშის შემქმნელები სცენაზე პოლიგონების რაოდენობის შესამცირებლად და შესრულების გასაუმჯობესებლად. კამერასთან ახლოს, მოდელები მაქსიმალურად დეტალებით გამოიყენება (სამკუთხედების რაოდენობა, ტექსტურის ზომა, ტექსტურის სირთულე), გამოსახულების უმაღლესი ხარისხისთვის და პირიქით, როდესაც მოდელები ამოღებულია კამერიდან , მოდელები ნაკლები სამკუთხედებით გამოიყენება გაწევის სიჩქარის გასაზრდელად. სირთულის შეცვლა, კერძოდ, სამკუთხედების რაოდენობა მოდელში, შეიძლება მოხდეს ავტომატურად, მაქსიმალური სირთულის ერთი 3D მოდელის საფუძველზე, ან შესაძლოა რამდენიმე წინასწარ მომზადებული მოდელის საფუძველზე, სხვადასხვა დონის დეტალებით. სხვადასხვა დისტანციებზე ნაკლები დეტალების მქონე მოდელების გამოყენებით, შეფასების სირთულე მცირდება, თითქმის არ გაუარესდება გამოსახულების საერთო დეტალი.

მეთოდი განსაკუთრებით ეფექტურია, თუ სცენაზე არსებული ობიექტების რაოდენობა დიდია და ისინი განლაგებულია კამერიდან სხვადასხვა მანძილზე. მაგალითად, აიღეთ ისეთი სპორტული თამაში, როგორიცაა ჰოკეი ან ფეხბურთის სიმულატორი. დაბალი პოლი პერსონაჟების მოდელები გამოიყენება მაშინ, როდესაც ისინი შორს არიან კამერისგან, ხოლო როდესაც მასშტაბირებულია, მოდელები იცვლება სხვებით დიდი რაოდენობით პოლიგონებით. ეს მაგალითი ძალიან მარტივია და ის გვიჩვენებს მეთოდის არსს მოდელის დეტალების ორ დონეზე, მაგრამ არავის აწუხებს დეტალების რამოდენიმე დონის შექმნა ისე, რომ LOD დონის შეცვლის ეფექტი არ იყოს ძალიან შესამჩნევი, ისე რომ დეტალები თანდათანობით "იზრდება" ობიექტის მიახლოებასთან ერთად.

კამერისგან დაშორების გარდა, სხვა ფაქტორებიც შეიძლება იყოს მნიშვნელოვანი LOD– ისთვის - ეკრანზე არსებული ობიექტების საერთო რაოდენობა (როდესაც ჩარჩოში ერთი ან ორი სიმბოლოა, კომპლექსური მოდელები გამოიყენება, ხოლო როდესაც 10-20, ისინი იცვლება უფრო მარტივზე) ან კადრების რაოდენობა წამში (დადგენილია FPS მნიშვნელობების ლიმიტები, რომლებშიც დეტალების დონე იცვლება, მაგალითად, FPS– ზე 30 ქვემოთ ჩვენ ვამცირებთ ეკრანზე მოდელების სირთულეს და 60, პირიქით, იზრდება). სხვა შესაძლო ფაქტორები, რომლებიც გავლენას ახდენენ დეტალების დონეზე, არის ობიექტის მოძრაობის სიჩქარე (ძნელად გექნებათ დრო, რომ განიხილონ რაკეტა მოძრაობაში, მაგრამ ადვილად ხედავთ ლოკოკინას), პერსონაჟის მნიშვნელობა თამაშის თვალსაზრისით ( აიღეთ იგივე ფეხბურთი - იმ მოთამაშის მოდელისთვის, რომელსაც თქვენ აკონტროლებთ, შეგიძლიათ გამოიყენოთ უფრო რთული გეომეტრია და ტექსტურები, ამას ხედავთ ყველაზე ახლოს და ყველაზე ხშირად). ეს ყველაფერი დამოკიდებულია კონკრეტული დეველოპერის სურვილებსა და შესაძლებლობებზე. მთავარია არ გადააჭარბოთ მას, დეტალების დონის ხშირი და შესამჩნევი ცვლილებები მაღიზიანებს.

ნება მომეცით შეგახსენოთ, რომ დეტალების დონე სულაც არ ეხება მხოლოდ გეომეტრიას, მეთოდი ასევე შეიძლება გამოყენებულ იქნას სხვა რესურსების შესანახად: ტექსტურირებისას (თუმცა ვიდეო ჩიპები უკვე იყენებენ მიპმაპინგს, ზოგჯერ აზრი აქვს სხვებისთვის ტექსტურის შეცვლას) სხვადასხვა დეტალებით), განათების ტექნიკა (ახლო საგნები განათებულია რთული ალგორითმის მიხედვით, ხოლო შორეული - მარტივი მიხედვით), ტექსტურირების ტექნიკა (კომპლექსური პარალექსის რუქა გამოიყენება ახლო ზედაპირებზე და ნორმალური რუკები შორეულ ზედაპირებზე) და ა.შ.

არც ისე ადვილია მაგალითის ჩვენება თამაშიდან, ერთი მხრივ, გარკვეულწილად LOD გამოიყენება თითქმის ყველა თამაშში, მეორეს მხრივ, ყოველთვის არ არის შესაძლებელი ამის ნათლად ჩვენება, წინააღმდეგ შემთხვევაში მცირე აზრი იქნებოდა LOD თავად.

ამ მაგალითში, ჯერ კიდევ ნათელია, რომ უახლოეს მანქანის მოდელს აქვს მაქსიმალური დეტალები, მომდევნო ორი ან სამი მანქანა ასევე ძალიან ახლოს არის ამ დონესთან და ყველა შორეულ მანქანას აქვს ხილული გამარტივება, აქ არის მხოლოდ ყველაზე მნიშვნელოვანი: არ არის უკანა ხედვის სარკეები, სანომრე ნიშნები, საქარე მინები და სხვა დამატებითი განათების მოწყობილობა. და ყველაზე შორეული მოდელიდან გზაზე ჩრდილიც კი არ არის. ეს არის მოქმედების დეტალური ალგორითმის დონე.

გლობალური განათება

ძნელია სცენის რეალისტური განათების სიმულაცია, სინამდვილეში სინათლის თითოეული სხივი არაერთხელ აისახება და ირეკლავს, ამ ანარეკლების რაოდენობა შეზღუდული არ არის. 3D გამოსახულებაში, ასახვის რაოდენობა მკაცრად არის დამოკიდებული დიზაინის შესაძლებლობებზე, სცენის ნებისმიერი გაანგარიშება არის გამარტივებული ფიზიკური მოდელი, ხოლო მიღებული სურათი მხოლოდ რეალიზმთან არის ახლოს.

განათების ალგორითმები შეიძლება დაიყოს ორ მოდელზე: პირდაპირი ან ადგილობრივი განათება და გლობალური განათება (პირდაპირი ან ადგილობრივი განათება და გლობალური განათება). ადგილობრივი განათების მოდელი იყენებს უშუალო განათების გაანგარიშებას, სინათლის წყაროებიდან სინათლის პირველ კვეთაზე გაუმჭვირვალე ზედაპირით, საგნების ერთმანეთთან ურთიერთქმედება არ არის გათვალისწინებული. მიუხედავად იმისა, რომ ეს მოდელი ცდილობს ამის ანაზღაურება ფონური ან ერთიანი (გარემოს) განათების დამატებით, ეს არის უმარტივესი მიახლოება, უაღრესად გამარტივებული განათება სინათლის წყაროების ყველა არაპირდაპირი სხივიდან, რომელიც განსაზღვრავს ობიექტების განათების ფერს და ინტენსივობას არარსებობის შემთხვევაში. პირდაპირი სინათლის წყაროები.

იგივე სხივების კვალი ზედაპირების განათებას ითვლის მხოლოდ სინათლის წყაროებიდან პირდაპირი სხივებით და ნებისმიერი ზედაპირი, რათა ხილული იყოს, უშუალოდ უნდა იყოს განათებული სინათლის წყაროს მიერ. ეს არ არის საკმარისი ფოტორეალისტური შედეგების მისაღწევად, გარდა პირდაპირი განათებისა, აუცილებელია გავითვალისწინოთ მეორადი განათება სხვა ზედაპირებიდან ასახული სხივებით. რეალურ სამყაროში, სინათლის სხივები რამდენჯერმე აისახება ზედაპირებიდან, სანამ ისინი მთლიანად არ ჩაქრება. მზის სინათლე, რომელიც ფანჯრიდან გადის, ანათებს მთელ ოთახს, თუმცა სხივები პირდაპირ ვერ აღწევს ყველა ზედაპირზე. რაც უფრო ნათელია სინათლის წყარო, მით მეტჯერ აისახება იგი. ამრეკლ ზედაპირის ფერი ასევე აისახება ასახული შუქის ფერიზე, მაგალითად წითელი კედელი გამოიწვევს წითელ ლაქას მიმდებარე თეთრ ობიექტზე. აქ არის აშკარა განსხვავება, გაანგარიშება მეორადი განათების გარეშე და გათვალისწინებით:

გლობალური განათების მოდელში, გლობალური განათება, განათება გამოითვლება საგნების ერთმანეთზე გავლენის გათვალისწინებით, მხედველობაში მიიღება საგნების ზედაპირის სინათლის სხივების მრავალგვარი ასახვა და რეფრაქცია, კაუსტიკური და ზედაპირული გაფანტვა. ეს მოდელი საშუალებას გაძლევთ მიიღოთ უფრო რეალისტური სურათი, მაგრამ ართულებს პროცესს, მოითხოვს მნიშვნელოვნად მეტ რესურსს. არსებობს რამდენიმე გლობალური განათების ალგორითმი, ჩვენ სწრაფად შევხედავთ რადიოსიდიფიკაციას (არაპირდაპირი განათების გაანგარიშება) და ფოტონის რუქას (გლობალური განათების გაანგარიშება დაფუძნებული ფოტოგრაფიულ რუქებზე, რომელიც წინასწარ არის გათვლილი მიკვლევის გამოყენებით). ასევე არსებობს არაპირდაპირი განათების სიმულაციის გამარტივებული მეთოდები, როგორიცაა სცენის მთლიანი სიკაშკაშის შეცვლა, მასში არსებული სინათლის წყაროების რაოდენობისა და სიკაშკაშის მიხედვით, ან სცენის ირგვლივ განთავსებული დიდი რაოდენობის შუქების გამოყენება ასახული შუქის სიმულაციისათვის, მაგრამ მაინც ეს შორს არის რეალური ალგორითმისგან. GI.

რადიაციული ალგორითმი არის პროცესი, რომელიც ითვლის სინათლის სხივების მეორადი ამრეკლებს ერთი ზედაპირიდან მეორეზე, ასევე გარემოდან ობიექტებზე. სხივები სინათლის წყაროებიდან იკვლევა მანამ, სანამ მათი სიძლიერე არ დაეცემა გარკვეულ დონეს ქვემოთ ან სხივები არ მიაღწევს გარკვეულ რაოდენობას ანარეკლს. ეს არის საერთო GI ტექნიკა, გამოთვლები ჩვეულებრივ კეთდება რენდერნამდე და გაანგარიშების შედეგები შეიძლება გამოყენებულ იქნას რეალურ დროში რენდერირებისთვის. რადიოსიდიერების ძირითადი იდეები ემყარება სითბოს გადაცემის ფიზიკას. ობიექტების ზედაპირები იყოფა მცირე ნაწილებად, რომელსაც ეწოდება წერთ და ვარაუდობენ, რომ ასახული შუქი თანაბრად არის მიმოფანტული ყველა მიმართულებით. ნათურების თითოეული სხივის გამოანგარიშების ნაცვლად გამოიყენება საშუალო შეფასების ტექნიკა, რომელიც შუქებს ყოფს ნაჭრებად ენერგიის დონის მიხედვით. ეს ენერგია პროპორციულად ნაწილდება ზედაპირულ ნაწილებზე.

ჰენრიკ ვან იენსენის მიერ შემოთავაზებული გლობალური განათების გაანგარიშების კიდევ ერთი მეთოდი არის ფოტონის რუქის მეთოდი. ფოტონური რუქები არის სხივებით მიკვლეული გლობალური განათების ალგორითმი, რომელიც გამოიყენება იმის იმიტირებისთვის, თუ როგორ ურთიერთქმედებს სინათლის სხივები ობიექტებთან სცენაზე. ალგორითმი ითვლის სხივების მეორად ასახვას, სინათლის რეფრაქციას გამჭვირვალე ზედაპირებზე, გაფანტულ ასახვებს. ეს მეთოდი მოიცავს ზედაპირზე წერტილების განათების გამოთვლას ორ გადასასვლელში. პირველი არის სინათლის სხივების პირდაპირი მიკვლევა მეორეხარისხოვანი ამრეკლებით, ეს არის წინასწარი პროცესი, რომელიც ხორციელდება მთავარ გამოსახულებამდე. ეს მეთოდი ითვლის ფოტონების ენერგიას, რომლებიც მიდიან სინათლის წყაროდან ობიექტების ადგილზე. როდესაც ფოტონები მიაღწევენ ზედაპირს, ფოტონის გადაკვეთის წერტილი, მიმართულება და ენერგია ინახება ქეშში, რომელსაც ეწოდება ფოტონის რუკა. ფოტონური რუქები შეიძლება შენახული იყოს დისკზე შემდგომი გამოყენებისთვის, რათა არ იყოს საჭირო ყველა ჩარჩოს გადაღება. ფოტონების ასახვა გამოითვლება მანამ, სანამ მუშაობა არ შეჩერდება გარკვეული რაოდენობის ასახვის შემდეგ ან როდესაც მიიღწევა გარკვეული ენერგია. მეორე გადაღების დროს, სცენის პიქსელების განათება გამოითვლება პირდაპირი სხივებით, ფოტონის რუქებში შენახული მონაცემების გათვალისწინებით, ფოტონის ენერგია ემატება პირდაპირი განათების ენერგიას.

გლობალური განათების გამოთვლები, რომლებიც იყენებენ მეორადი ასახვის დიდ რაოდენობას, გაცილებით მეტ დროს მოითხოვს ვიდრე პირდაპირი განათების გამოთვლები. არსებობს რადიო ქალაქის აპარატურის გაანგარიშების ტექნიკა რეალურ დროში, რომელიც იყენებს პროგრამირებადი ვიდეო ჩიპების უახლესი თაობის შესაძლებლობებს, მაგრამ ჯერჯერობით სცენები, რომლებისთვისაც რეალურ დროში გლობალური განათება გამოითვლება, საკმაოდ მარტივი უნდა იყოს და ბევრი გამარტივება ხდება ალგორითმებში.

მაგრამ ის, რაც დიდი ხანია გამოიყენება, არის სტატიკური წინასწარ გათვლილი გლობალური განათება, რომელიც მისაღებია სცენებისთვის, სინათლის წყაროებისა და დიდი ობიექტების პოზიციის შეცვლის გარეშე, რაც ძლიერ გავლენას ახდენს განათებაზე. ყოველივე ამის შემდეგ, გლობალური განათების გაანგარიშება არ არის დამოკიდებული დამკვირვებლის პოზიციაზე და თუ სცენაზე ასეთი ობიექტების პოზიცია და განათების წყაროების პარამეტრები არ იცვლება სცენაზე, მაშინ ადრე გათვლილი განათების მნიშვნელობები შეიძლება იყო გამოყენებული. ეს გამოიყენება ბევრ თამაშში, ინახავს GI გაანგარიშების მონაცემებს სინათლის რუქების სახით.

ასევე არსებობს მისაღები ალგორითმები დინამიკაში გლობალური განათების სიმულაციისათვის. მაგალითად, არსებობს ასეთი მარტივი მეთოდი რეალურ დროში გამოყენებისთვის, რათა გამოვთვალოთ ობიექტის არაპირდაპირი განათება სცენაზე: ყველა ობიექტის გამარტივებული გამოსახულება შემცირებული დეტალებით (გარდა იმისა, რომლისთვისაც გათვლილია განათება) დაბალ დონეზე. -რეზოლუციის კუბის რუკა (ის ასევე შეიძლება გამოყენებულ იქნას ობიექტის ზედაპირზე დინამიური ასახვის გამოსახატად), შემდეგ ამ ფაქტურის გაფილტვრა (ბუნდოვანი ფილტრის რამდენიმე გავლა) და გამოთვლილი ტექსტურის მონაცემების გამოყენება ამ ობიექტის გასანათებლად, როგორც პირდაპირი დამატება განათება. იმ შემთხვევებში, როდესაც დინამიური გაანგარიშება ძალიან მძიმეა, სტატიკური რადიოსიმოყვარეობის რუქების უგულებელყოფა შესაძლებელია. მაგალითი MotoGP 2 თამაშიდან, რომელიც ნათლად აჩვენებს GI– ს ასეთი მარტივი იმიტაციის მომგებიან ეფექტს:



"itemprop =" image ">

"რა არის შადერები?" ძალიან გავრცელებული კითხვაა ცნობისმოყვარე მოთამაშეებისა და ახალბედა თამაშების შემქმნელებისგან. ამ სტატიაში მე გეტყვით ამ საშინელი შადერების შესახებ მკაფიოდ და გასაგებად.

მე მიმაჩნია, რომ კომპიუტერული თამაშები კომპიუტერულ გრაფიკაში ფოტოორეალისტური სურათებისკენ პროგრესის ძრავაა, ამიტომ მოდით ვისაუბროთ იმაზე, თუ რა არის "შადერები" ვიდეო თამაშების კონტექსტში.

სანამ პირველი გრაფიკული ამაჩქარებლები გამოჩნდებოდნენ, ვიდეო თამაშების ჩარჩოების გადაღების ყველა სამუშაო გაკეთდა ცუდი ცენტრალური პროცესორის მიერ.

ჩარჩოს დახატვა, ფაქტობრივად, საკმაოდ რუტინული სამუშაოა: თქვენ უნდა აიღოთ "გეომეტრია" - პოლიგონური მოდელები (სამყარო, პერსონაჟი, იარაღი და ა.შ.) და მოახდინოთ მისი რასტერიზაცია. რა არის რასტერიზაცია? მთელი 3D მოდელი შედგება ყველაზე პატარა სამკუთხედებისაგან, რომლებსაც რასტერიზატორი პიქსელებად აქცევს (ანუ „რასტერიზაცია“ ნიშნავს პიქსელებად გადაქცევას). რასტერიზაციის შემდეგ აიღეთ ტექსტურის მონაცემები, განათების პარამეტრები, ნისლი და ა.შ. და გამოთვალეთ თამაშის ჩარჩოს თითოეული პიქსელი, რომელიც ნაჩვენები იქნება მოთამაშეს.

ამრიგად, ცენტრალური დამუშავების განყოფილება (CPU - ცენტრალური დამუშავების განყოფილება) ძალიან ჭკვიანი ბიჭია, რომ აიძულოს მას გააკეთოს ასეთი რუტინა. სამაგიეროდ, ლოგიკურია გამოვყოთ რაიმე სახის აპარატურის მოდული, რომელიც გადმოტვირთავს პროცესორს ისე, რომ მას შეუძლია შეასრულოს უფრო მნიშვნელოვანი ინტელექტუალური სამუშაო.

აპარატურის ასეთი მოდული არის გრაფიკული ამაჩქარებელი ან ვიდეო ბარათი (GPU - გრაფიკული დამუშავების განყოფილება). ახლა CPU ამზადებს მონაცემებს და იტვირთებს კოლეგას რუტინული მუშაობით. იმის გათვალისწინებით, რომ GPU ახლა არ არის მხოლოდ ერთი კოლეგა, ეს არის მინიონების ბირთვი, შემდეგ ის ერთდროულად უმკლავდება ამგვარ სამუშაოს.

მაგრამ ჩვენ ჯერ არ მიგვიღია პასუხი მთავარ კითხვაზე: რა არის შადერები? დაელოდე, ამას მივდივარ.

ლამაზი, საინტერესო და ახლოს ფოტო რეალიზმის გრაფიკას, ვიდეო ბარათების შემქმნელებს სჭირდებოდათ მრავალი ალგორითმის განხორციელება ტექნიკის დონეზე. ჩრდილები, განათება, მაჩვენებლები და ასე შემდეგ. ეს მიდგომა - ტექნიკაში ალგორითმების დანერგვას ეწოდება "ფიქსირებული მილსადენი ან მილსადენი" და სადაც საჭიროა მაღალი ხარისხის გრაფიკა, ის აღარ მოიძებნება. მისი ადგილი დაიკავა პროგრამირებადი მილსადენმა.

მოთამაშეთა მოთხოვნები „მოდი, მოიყვანე კარგი გრაფიონი! გაოცება! ”, აიძულა თამაშების შემქმნელებმა (და შესაბამისად ვიდეო ბარათების მწარმოებლებმა) უფრო და უფრო რთულ ალგორითმებზე. ჯერჯერობით, რაღაც მომენტში, მათთვის ძალიან ცოტაა მყარი ტექნიკის ალგორითმი.

ახლა დროა გრაფიკული ბარათები გახდეს უფრო ინტელექტუალური. გადაწყვეტილება მიიღეს იმისთვის, რომ დეველოპერებს შეეძლოთ GPU ბლოკების დაპროგრამება თვითნებურ მილსადენებში, რომლებიც ახორციელებენ სხვადასხვა ალგორითმს. ანუ, თამაშების შემქმნელებმა, გრაფიკულმა პროგრამისტებმა უკვე შეძლეს პროგრამების დაწერა ვიდეო ბარათებისთვის.

ახლა კი, საბოლოოდ, ჩვენ მივედით ჩვენს მთავარ კითხვაზე პასუხზე.

"რა არის შადერები?"

Shader (ინგლისური shader - დაჩრდილვის პროგრამა) არის პროგრამა ვიდეო ბარათისთვის, რომელიც გამოიყენება სამგანზომილებიან გრაფიკაში საგნის ან გამოსახულების საბოლოო პარამეტრების დასადგენად, შეიძლება შეიცავდეს შუქის შთანთქმის და გაფანტვის აღწერას, ტექსტურის გამოსახვას, ასახვას და რეფრაქცია, დაჩრდილვა, ზედაპირის გადანაცვლება და სხვა მრავალი სხვა პარამეტრი.

რა არის შადერები? მაგალითად, თქვენ შეგიძლიათ მიიღოთ ეს ეფექტი, ეს არის წყლის საპარს, რომელიც გამოიყენება სფეროზე.

გრაფიკული მილსადენი

პროგრამირებადი მილსადენის უპირატესობა მის წინამორბედთან შედარებით არის ის, რომ ახლა პროგრამისტებს შეუძლიათ შექმნან საკუთარი ალგორითმები და არ გამოიყენონ რთული პარამეტრების კომპლექტი.

თავდაპირველად, ვიდეო ბარათები აღჭურვილი იყო რამდენიმე სპეციალიზირებული პროცესორით, რომლებიც მხარს უჭერენ სხვადასხვა მითითებებს. Shaders იყოფა სამ ტიპად, იმისდა მიხედვით, თუ რომელი პროცესორი შეასრულებს მათ. მაგრამ შემდეგ ვიდეო ბარათებმა დაიწყეს აღჭურვა უნივერსალური პროცესორებით, რომლებიც მხარს უჭერენ ინსტრუქციის ნაკრებებს სამივე ტიპის შადერისთვის. შადერების დაყოფა ტიპებად შემორჩა შადერის დანიშნულების აღსაწერად.

გრაფიკული ამოცანების გარდა, ასეთი ინტელექტუალური ვიდეო კარტებით, შესაძლებელი გახდა GPU– ზე ზოგადი დანიშნულების გამოთვლების (კომპიუტერულ გრაფიკასთან დაკავშირებული არ არის) შესრულება.

პირველად, Shader– ების სრულფასოვანი მხარდაჭერა გამოჩნდა GeForce 3 სერიის ვიდეო ბარათებში, მაგრამ რუდიმენტები განხორციელდა ისევ GeForce256– ში (რეგისტრაციის კომბინატორების სახით).

შადერის ტიპები

მილსადენის სტადიიდან გამომდინარე, შადერები იყოფა რამდენიმე ტიპად: წვერო, ფრაგმენტი (პიქსელი) და გეომეტრიული. და უახლესი ტიპის მილსადენებში, ასევე არსებობს საცდელი შადერები. ჩვენ დეტალურად არ განვიხილავთ გრაფიკულ მილსადენს, მე მაინც ვფიქრობ, დავწერო თუ არა ცალკე სტატია ამის შესახებ, მათთვის, ვინც გადაწყვეტს შეისწავლოს შადერები და გრაფიკული პროგრამირება. დაწერეთ კომენტარებში თუ დაგაინტერესებთ, მე ვიცი თუ ღირს დროის დაკარგვა.

Vertex shader

Vertex shaders ქმნიან პერსონაჟების, ბალახის, ხეების ანიმაციებს, ქმნიან ტალღებს წყალზე და ბევრ სხვა რამეს. ვერტექს შადერში პროგრამისტს აქვს წვდომა წვეროებთან დაკავშირებულ მონაცემებზე, მაგალითად: წვეროს კოორდინატები სივრცეში, მისი ტექსტურის კოორდინატები, მისი ფერი და ნორმალური ვექტორი.

გეომეტრიული შედერი

გეომეტრიულ შადერს შეუძლია შექმნას ახალი გეომეტრია და შეიძლება გამოყენებულ იქნას ნაწილაკების შესაქმნელად, მოდელის დეტალების შესაცვლელად, სილუეტების შესაქმნელად და სხვა. წინა წვეროსგან განსხვავებით, მათ შეუძლიათ დაამუშაონ არა მხოლოდ ერთი წვერო, არამედ მთელი პრიმიტიული. პრიმიტიული შეიძლება იყოს სეგმენტი (ორი წვერო) და სამკუთხედი (სამი წვერო), და თუ არსებობს ინფორმაცია მიმდებარე წვეროების შესახებ (ინგლისური მიმდებარეობა) სამკუთხა პრიმიტივისთვის, ექვსამდე წვერო შეიძლება დამუშავდეს.

პიქსელის შედერი

Pixel shaders ასრულებს ტექსტურის რუქას, განათებას და ტექსტურის სხვადასხვა ეფექტს, როგორიცაა ასახვა, რეფრაქცია, ნისლი, შეჯახების რუქა და სხვა. Pixel shaders ასევე გამოიყენება პოსტი ეფექტებისთვის.

პიქსელის შემმუშავებელი მუშაობს ბიტმაპის ნაჭერებთან და ტექსტურებთან - ამუშავებს პიქსელებთან დაკავშირებულ მონაცემებს (მაგალითად, ფერი, სიღრმე, ტექსტურის კოორდინატები). პიქსელის გამანათებელი გამოიყენება გრაფიკული მილსადენის ბოლო ეტაპზე გამოსახულების ფრაგმენტის შესაქმნელად.

რას წერენ შადერები?

თავდაპირველად, შადერები შეიძლება დაიწეროს ასამბლერის მსგავს ენაზე, მაგრამ მოგვიანებით იყო მაღალი დონის შადერის ენები, რომლებიც მსგავსია C ენაზე, როგორიცაა Cg, GLSL და HLSL.

ასეთი ენები გაცილებით მარტივია ვიდრე C, რადგან მათი დახმარებით გადაჭრილი ამოცანები გაცილებით მარტივია. ასეთ ენებზე ტიპის სისტემა ასახავს გრაფიკული პროგრამისტების საჭიროებებს. ამიტომ, ისინი პროგრამისტს აწვდიან მონაცემთა სპეციალურ ტიპებს: მატრიცებს, სინჯებს, ვექტორებს და ა.

რენდემანი

ყველაფერი, რაც ზემოთ განვიხილეთ, დაკავშირებულია რეალურ დროში გრაფიკასთან. მაგრამ არსებობს გრაფიკები არა რეალურ დროში. რა განსხვავებაა - რეალურ დროში - რეალურ დროში, ანუ აქ და ახლა - თამაშში 60 კადრის გაცემა წამში, ეს არის რეალური დროის პროცესი. მაგრამ რთული ჩარჩოს გადაღება უახლესი ანიმაციისთვის რამდენიმე წუთის განმავლობაში არის რეალურ დროში. არსი დროშია.

მაგალითად, ჩვენ ვერ მივიღებთ ისეთი ხარისხის გრაფიკას, როგორიც არის პიქსარის სტუდიის უახლესი ანიმაციური ფილმები რეალურ დროში. ძალიან დიდი ფერმერული მეურნეობები გამოთვლიან სინათლის სიმულაციებს სრულიად განსხვავებული ალგორითმების გამოყენებით, ძალიან ძვირი, მაგრამ იძლევა თითქმის ფოტორეალისტურ სურათებს.

სუპერ რეალისტური გრაფიკა Sand piper– ში

მაგალითად, შეხედეთ ამ მიმზიდველ მულტფილმს, ქვიშის მარცვლებს, ფრინველის ბუმბულს, ტალღებს, ყველაფერი წარმოუდგენლად რეალური ჩანს.

* ვიდეოების აკრძალვა შესაძლებელია Youtube– ზე, თუ ისინი არ გაიხსნება, google pixar sandpiper - მოკლე მულტფილმი მამაცი ქვიშაქვის შესახებ არის ძალიან საყვარელი და ფუმფულა. შეეხოთ და წარმოაჩენთ რამდენად მაგარი შეიძლება იყოს კომპიუტერული გრაფიკა.

ეს არის RenderMan Pixar– დან. ის გახდა პირველი shader პროგრამირების ენა. RenderMan API არის დე ფაქტო სტანდარტი პროფესიონალური გაწევისთვის და გამოიყენება პიქსარის ყველა სამუშაოსა და მის ფარგლებს გარეთ.

Გამოსადეგი ინფორმაცია

ახლა თქვენ იცით რა არის შადერები, მაგრამ შადერების გარდა, არის სხვა ძალიან საინტერესო თემები თამაშის შემუშავებასა და კომპიუტერულ გრაფიკაში, რომლებიც აუცილებლად დაგაინტერესებთ:

  • არის ტექნიკა თანამედროვე ვიდეო თამაშებში განსაცვიფრებელი ეფექტების შესაქმნელად. მიმოხილეთ სტატია და ვიდეო გაკვეთილებით Unity3d– ში ეფექტების შექმნის შესახებ
  • - თუ თქვენ ფიქრობთ ვიდეო თამაშების, როგორც პროფესიული კარიერის ან ჰობის განვითარებაზე, ეს სტატია შეიცავს რეკომენდაციების შესანიშნავ კომპლექტს "საიდან დავიწყო", "რა წიგნები წავიკითხო" და ა.შ.

Თუ თქვენ გაქვთ რაიმე შეკითხვები

როგორც ყოველთვის, თუ თქვენ ჯერ კიდევ გაქვთ რაიმე შეკითხვა, დასვით მათ კომენტარებში, მე ყოველთვის ვპასუხობ. ნებისმიერი სახის სიტყვისთვის ან შეცდომების გასწორებისთვის, მე ძალიან მადლობელი ვიქნები.

ეს გაკვეთილი დაგეხმარებათ დააინსტალიროთ შადერები Minecraft– ში და ამით გააუმჯობესოთ თამაშის სამყარო დინამიური ჩრდილების, ქარისა და ბალახის ხმაურის, რეალისტური წყლის დამატებით და მრავალი სხვა.

დაუყოვნებლივ უნდა აღინიშნოს, რომ შადერები ატვირთავს სისტემას საკმაოდ მძიმედ და თუ თქვენ გაქვთ სუსტი ვიდეო ბარათი ან თუნდაც ინტეგრირებული, ჩვენ გირჩევთ თავი შეიკავოთ ამ რეჟიმის დაყენებისგან.

ინსტალაცია შედგება ორი ეტაპისგან, პირველ რიგში თქვენ უნდა დააინსტალიროთ მოდერი შადერებზე, შემდეგ კი მასზე დამატებითი shaderpacks

ნაბიჯი # 1 - მოდერის დაყენება შადერებისათვის

  1. ჩამოტვირთეთ და დააინსტალირეთ Java
  2. Დაინსტალირება OptiFine HD
    ან ShadersMod;
  3. ჩვენ ვხსნით შედეგად არქივს ნებისმიერ ადგილას;
  4. გაუშვით jar ფაილი, რადგან ის არის ინსტალერი;
  5. პროგრამა გაჩვენებთ თამაშისკენ მიმავალ გზას, თუ ყველაფერი სწორია, დააწკაპუნეთ დიახ, კარგი, კარგი;
  6. Წადი .მეინქრაფტიდა შექმენით საქაღალდე იქ shaderpacks;
  7. ჩვენ შევდივართ გამშვებ მოწყობილობაში და ვხედავთ ახალ პროფილს სახელწოდებით "ShadersMod", თუ არა, მაშინ შეარჩიეთ იგი ხელით.
  8. შემდეგი, თქვენ უნდა ჩამოტვირთოთ shaderpacks

ნაბიჯი # 2 - shaderpack– ის დაყენება

  1. ჩამოტვირთეთ თქვენთვის საინტერესო shaderpack (ჩამოთვალეთ სტატიის ბოლოს)
  2. დააჭირეთ ღილაკებს გამარჯვება + რ
  3. Წადი .minecraft / shaderpacks... თუ ასეთი საქაღალდე არ არის, შექმენით იგი.
  4. გადაიტანეთ ან ამოიღეთ shader არქივი იქ .minecraft / shaderpacks... გზა ასე უნდა გამოიყურებოდეს: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [. fsh და .vsh ფაილები შიგნით]
  5. დაიწყე Minecraft და წადი პარამეტრები> Shaders... აქ ნახავთ ხელმისაწვდომი შადერების ჩამონათვალს. აირჩიეთ საჭირო
  6. Shader პარამეტრებში ჩართეთ "tweakBlockDamage", გამორთეთ "CloudShadow" და "OldLighting"

სონიკ ეთერის დაუჯერებელი შადერები
სილდურის შადერები
ჩოკაპიჩის 13 -ის შადერები
sensi277 "yShaders
MrMeep_x3 "Shaders
ნაელეგოს სელ შადერები
RRe36 "Shaders
დედელნერის CUDA Shaders
bruceatsr44 "Acid Shaders
ბეიდ 28 -ის Shaders
ზიპზააპის Shader Pack
robobo1221 "Shaders
dvv16 "Shaders
Stazza85 სუპერ შადერები
hoo00 "Shaders პაკეტი B
Regi24- ის ტალღოვანი მცენარეები
MrButternuss ShaderPack
DethRaid– ის გასაოცარი გრაფიკა ნიტრო ჩრდილებზე
ედის Shader ForALLPc "s
CrankerMan's TME Shaders
კადირ ნკ შადერი (სკეიტ 702 -ისთვის)
ვერუსის შადერები
კნევტონვაკოს ცხოვრების Nexus Shaders
თავსატეხი CYBOX
CrapDeShoes CloudShade Alpha
AirLoocke42 Shader
CaptTatsu's BSL Shaders
ტრილიტონის შადერები
ShadersMcOfficial "Bloominx Shaders (Chocapic13" Shaders)
dotModded's Continuum Shaders
Qwqx71 "მთვარის ჩრდილები (chocapic13" s shader)

განკუთვნილია ვიდეო ბარათის პროცესორების (GPU) შესრულებისთვის. Shaders შედგენილია პროგრამირების ერთ – ერთ სპეციალიზებულ ენაზე (იხ.) და შედგენილია GPU– ს ინსტრუქციებში.

განაცხადი

შადერების გამოყენებამდე გამოიყენებოდა პროცედურული ტექსტურის გენერირება (მაგალითად, არარეალურ თამაშში წყლისა და ცეცხლის ანიმაციური ტექსტურების შესაქმნელად) და მულტიტექსტირება (რასაც საფუძვლად დაედო Quake 3 თამაშში გამოყენებული shader ენა). ეს მექანიზმები არ უზრუნველყოფდა იგივე მოქნილობას, როგორც შადერები.

ხელახალი კონფიგურაციის გრაფიკული მილსადენების მოსვლასთან ერთად შესაძლებელი გახდა მათემატიკური გამოთვლების (GPGPU) GPU– ზე განხორციელება. ყველაზე ცნობილი 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

გეომეტრიული შადერები

გეომეტრიულ შადერს, ვერტექსისგან განსხვავებით, შეუძლია დაამუშაოს არა მხოლოდ ერთი წვერო, არამედ მთელი პრიმიტიული. პრიმიტიული შეიძლება იყოს სეგმენტი (ორი წვერო) და სამკუთხედი (სამი წვერო), და თუ არსებობს ინფორმაცია მიმდებარე წვეროების შესახებ (ინგლისური მიმდებარეობა) სამკუთხა პრიმიტივისთვის, ექვსამდე წვერო შეიძლება დამუშავდეს. გეომეტრიის შადერს შეუძლია შექმნას პრიმიტივები ფრენის დროს (ცენტრალური პროცესორის გამოყენების გარეშე).

გეომეტრიული შადერები პირველად გამოიყენეს Nvidia 8 სერიის გრაფიკულ ბარათებზე.

პიქსელის (ფრაგმენტის) შადერები

პიქსელის შემმუშავებელი მუშაობს ბიტმაპის ნაჭერებთან და ტექსტურებთან - ამუშავებს პიქსელებთან დაკავშირებულ მონაცემებს (მაგალითად, ფერი, სიღრმე, ტექსტურის კოორდინატები). პიქსელის გამანათებელი გამოიყენება გრაფიკული მილსადენის ბოლო ეტაპზე გამოსახულების ფრაგმენტის შესაქმნელად.

პიქსელის შემმუშავებლის კოდის ნიმუში ენაზე:

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

Დადებითი და უარყოფითი მხარეები

უპირატესობები:

  • ნებისმიერი ალგორითმის შედგენის უნარი (მოქნილობა, გამარტივება და პროგრამის შემუშავების ციკლის ღირებულების შემცირება, გადაღებული სცენების სირთულისა და რეალიზმის გაზრდა);
  • გაზრდილი შესრულების სიჩქარე (იგივე ალგორითმის შესრულების სიჩქარესთან შედარებით, რომელიც შესრულებულია ცენტრალურ პროცესორზე).

ნაკლოვანებები:

  • პროგრამირების ახალი ენის სწავლის აუცილებლობა;
  • სხვადასხვა მწარმოებლისგან GPU– ებისთვის ინსტრუქციების განსხვავებული ნაკრების არსებობა.

Პროგრამირების ენები

დიდი რაოდენობით shader პროგრამირების ენა შეიქმნა ბაზრის სხვადასხვა მოთხოვნილებების დასაკმაყოფილებლად (კომპიუტერულ გრაფიკას აქვს მრავალი სფერო).

ჩვეულებრივ, შადერების წერის ენები პროგრამისტს აწვდიან მონაცემთა სპეციალურ ტიპებს (მატრიცებს, სინჯებს, ვექტორებს და ა.შ.), ჩამონტაჟებული ცვლადებისა და მუდმივების ერთობლიობას (3D API- ის სტანდარტულ ფუნქციონირებასთან ურთიერთქმედებისათვის).

პროფესიონალური გაფორმება

ქვემოთ მოცემულია shader პროგრამირების ენები, რომლებიც ორიენტირებულია გაწევის მაქსიმალური ხარისხის მიღწევაზე. ასეთ ენებზე, მასალების თვისებები აღწერილია აბსტრაქციების გამოყენებით. ეს საშუალებას აძლევს ადამიანებს, რომლებსაც არ გააჩნიათ პროგრამირების სპეციალური უნარები და არ იციან ტექნიკის განხორციელების სპეციფიკა, დაწერონ კოდი. მაგალითად, მხატვრებს შეუძლიათ დაწერონ ეს შადერები, რათა უზრუნველყონ "სწორი გარეგნობა" (ტექსტურის რუქა, განათების განთავსება და ა.შ.).

ჩვეულებრივ, ასეთი შადერების დამუშავება საკმაოდ რესურს-ინტენსიურია: ფოტორეალისტური სურათების შექმნა მოითხოვს ბევრ გამომთვლელ ძალას. როგორც წესი, გამოთვლების უმეტესობა ხდება კომპიუტერის დიდი კლასტერებით ან დანა სისტემებით.

RenderMan Shader პროგრამირების ენა, რომელიც განხორციელებულია Pixar– ის RenderMan პროგრამულ უზრუნველყოფაში, იყო პირველი shader პროგრამირების ენა. RenderMan API, შემუშავებული რობ კუკის მიერ და აღწერილი RenderMan ინტერფეისის სპეციფიკაციაში, არის დე ფაქტო სტანდარტი პროფესიონალური გაწევისთვის, რომელიც გამოიყენება პიქსარის მუშაობის განმავლობაში. OSL OSL - ინგლ. ღია დაჩრდილვის ენა არის shader პროგრამირების ენა შემუშავებული Sony Pictures Imageworksდა ჰგავს ენას. იგი გამოიყენება საკუთრების პროგრამაში "არნოლდ", რომელიც შემუშავებულია Sony Pictures Imageworks- ის მიერ და განკუთვნილია რენდერირებისათვის და უფასო პროგრამა Blender- ში, რომელიც განკუთვნილია სამგანზომილებიანი კომპიუტერული გრაფიკის შესაქმნელად. რეალურ დროში რენდერი GLSL GLSL ღია GL ჰედინგი წვალება) არის shader პროგრამირების ენა აღწერილი OpenGL სტანდარტში და ემყარება ANSI C სტანდარტში აღწერილი ენის ვერსიას. ენა მხარს უჭერს ANSI C მახასიათებლების უმეტესობას, მხარს უჭერს მონაცემთა ტიპებს, რომლებიც ხშირად გამოიყენება სამგანზომილებიანი გრაფიკით (ვექტორები, მატრიცები) მუშაობისას. სიტყვა "shader" GLSL- ში აღნიშნავს ამ ენაზე დაწერილ დამოუკიდებლად შედგენილ ერთეულს. სიტყვა "პროგრამა" აღნიშნავს შეკრებილი შადერების კოლექციას, რომლებიც ერთმანეთთან არის დაკავშირებული. Cg (ინგლ. ამისთვის რაფიკები) არის shader პროგრამირების ენა, რომელიც შემუშავებულია nVidia– ს მიერ Microsoft– თან ერთად. ენა ჰგავს ენას და HLSL ენას, რომელიც შემუშავებულია Microsoft– ის მიერ და შედის მასში DirectX 9... ენა იყენებს ტიპებს "int", "float", "half" (მცურავი წერტილის ნომერი 16 ბიტი). ენა მხარს უჭერს ფუნქციებსა და სტრუქტურებს. ენას აქვს თავისებური ოპტიმიზაცია "შეფუთული მასივების" სახით (