სხივების მიკვლევა რეალურ დროში. DirectX Raytracing: რეალურ დროში სხივების მიკვლევა

არც ისე დიდი ხნის წინ, 4A Games, საოცრად რეალისტური Metro თამაშების შემქმნელმა, გამოუშვა ვიდეო Nvidia-ს RTX ტექნოლოგიის გამოყენებით METRO: EXODUS-ის მაგალითის გამოყენებით. ეს გრაფიკული ინოვაცია დიდი და თავდაჯერებული ნაბიჯია სხივების მიკვლევაში. მაგრამ რას ნიშნავს ეს ყველაფერი?

საიდუმლოების ფარდის მიღმა

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

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

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

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


გამარტივებული სხივების მიკვლევის სქემა

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

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

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

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

მაგრამ ყველაზე მნიშვნელოვანი ჩრდილებია. ნებისმიერ თამაშში ჩრდილებზე უარესი არაფერია.

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


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

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

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

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

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

აქედან გამომდინარე, ჩნდება კითხვა, როგორ გამოვიდნენ Nvidia და პარტნიორები ამ სიტუაციიდან: რას სწირავდნენ მათ რეალურ დროში ტრეკინგის მისაღწევად?

ერთი მთლიანის ორი ნახევარი

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

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

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

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


სინათლის სხივების ანარეკლი ზედაპირიდან

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

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

როდის ვნახავთ სარგებელს?

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

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

ტექსტი: ალექსეი ხარიტონოვი, QA, Bytex

უკან კვალის მეთოდი

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

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

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

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

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

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

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

ბრინჯი. 14.1 საპირისპირო სხივების მიკვლევის მაგალითი.

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

როგორ მუშაობს სხივების მიკვლევა:

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

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

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

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

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

Gamescom 2018-ზე Nvidia-მ გამოაცხადა Nvidia GeForce RTX გრაფიკული ბარათების სერია, რომელიც მხარს დაუჭერს Nvidia RTX რეალურ დროში სხივების კვალიფიკაციის ტექნოლოგიას. ჩვენმა რედაქტორებმა გაარკვიეს, როგორ იმუშავებს ეს ტექნოლოგია და რატომ არის საჭირო.

რა არის Nvidia RTX?

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

რა არის სხივების კვალი?

Ray Tracing არის ფუნქცია, რომელიც საშუალებას გაძლევთ სიმულაცია მოახდინოთ სინათლის ქცევაზე, შექმნათ დამაჯერებელი განათება. ახლა თამაშებში სხივები რეალურ დროში არ მოძრაობენ, რის გამოც სურათი, თუმცა ხშირად ლამაზად გამოიყურება, მაინც არ არის საკმარისად რეალისტური - ამჟამად გამოყენებული ტექნოლოგიები საჭიროებს უზარმაზარ რესურსებს სხივების მიკვლევისთვის.

ეს შესწორებულია Nvidia GeForce RTX გრაფიკული ბარათების ახალი სერიის მიერ, რომელსაც აქვს საკმარისი სიმძლავრე სხივების გზის გამოსათვლელად.

Როგორ მუშაობს?

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

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

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

და რა გავლენას ახდენს სხივების კვალი ხარისხზე?

გრაფიკული ბარათების პრეზენტაციისას Nvidia-მ აჩვენა არაერთი მაგალითი, თუ როგორ მუშაობს სხივების კვალი: კერძოდ, ცნობილი გახდა, რომ ზოგიერთი მომავალი თამაში, მათ შორის Shadow of the Tomb Raider და Battlefield 5, იმუშავებს RTX პლატფორმაზე. თუმცა, ეს ფუნქცია თამაშში იქნება სურვილისამებრ, რადგან ერთ-ერთი ახალი ვიდეო ბარათია საჭირო ტრასინგისთვის. კომპანიის მიერ პრეზენტაციის დროს ნაჩვენები თრეილერები შეგიძლიათ იხილოთ ქვემოთ:

Shadow of the Tomb Raider, რომელიც გამოვა მიმდინარე წლის 14 სექტემბერს:

Battlefield 5, რომელიც გამოვა 19 ოქტომბერს:

Metro Exodus, რომლის გამოშვება იგეგმება 2019 წლის 19 თებერვალს:

Control, რომელსაც ჯერ არ აქვს გამოშვების თარიღი:

ამასთან, Nvidia, რა სხვა თამაშები მიიღებს ray tracing-ს.

როგორ ჩართოთ RTX?

ამ ტექნოლოგიის ტექნიკური მახასიათებლების გამო, მხოლოდ ტურინგის არქიტექტურის მქონე ვიდეო კარტებს დაუჭერს მხარს სხივების მიკვლევა - ამჟამად ხელმისაწვდომი მოწყობილობები ვერ უმკლავდებიან იმ სამუშაოს, რომელსაც კვალიფიკაცია მოითხოვს. ამ დროისთვის, ამ არქიტექტურის ერთადერთი ვიდეო ბარათია Nvidia GeForce RTX სერია, რომლის მოდელები ხელმისაწვდომია წინასწარი შეკვეთისთვის 48,000-დან 96,000 რუბლამდე.

არის AMD-ის ანალოგები?

AMD-ს აქვს რეალურ დროში სხივების მიკვლევის ტექნოლოგიის საკუთარი ვარიანტი, რომელიც წარმოდგენილია მათ Radeon ProRender ძრავში. კომპანიამ თავისი განვითარება ჯერ კიდევ GDC 2018-ზე გამოაცხადა, რომელიც მარტში გაიმართა. მთავარი განსხვავება AMD მეთოდსა და Nvidia-ს შორის არის ის, რომ AMD იძლევა წვდომას არა მხოლოდ ტრასირებაზე, არამედ რასტერიზაციაზე, ტექნოლოგია, რომელიც ახლა გამოიყენება ყველა თამაშში. ეს საშუალებას გაძლევთ გამოიყენოთ ტრასირება, მიიღოთ უკეთესი განათება და დაზოგოთ რესურსები ისეთ ადგილებში, სადაც თვალყურის დევნება არასაჭირო დატვირთვა იქნება ვიდეო ბარათზე.

ტექნოლოგია, რომელიც იმუშავებს Vulkan API-ზე, ჯერ კიდევ დამუშავების პროცესშია.

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

შესავალი

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

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

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

ასხივებს;

ასახავს და შთანთქავს;

გაივლის საკუთარ თავს.

თითოეული ეს თვისება შეიძლება აღწერილი იყოს გარკვეული მახასიათებლების მიხედვით.

რადიაცია შეიძლება ხასიათდებოდეს ინტენსივობითა და სპექტრით.

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

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

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

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

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

1. REVERSE RAY TRACING

ეს ნამუშევარი ეძღვნება რეალისტური სურათების გენერირების ამ მეთოდს.

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

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

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

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

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

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

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

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

შეზღუდვები ტრასინგის განხორციელებისას

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

ამრეკლავი ზედაპირების თვისებები აღწერილია ორი კომპონენტის ჯამით - დიფუზური და სპეკულარული.

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

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

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

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

კვალის დასასრულებლად შემოღებულია გამეორებების რაოდენობის შეზღუდვა (რეკურსიის სიღრმე).

დასკვნები უკანა კვალის მეთოდის შესახებ

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

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

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

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

ხარვეზები:

დიფუზური ასახვისა და რეფრაქციის მოდელირების პრობლემები.

გამოსახულების თითოეული წერტილისთვის ბევრი გამოთვლითი ოპერაცია უნდა შესრულდეს. Tracing არის სურათის სინთეზის ერთ-ერთი ყველაზე ნელი ალგორითმი.

2. დიზაინის ნაწილი

ალგორითმები.

საპირისპირო სხივების მიკვლევა.

ბრინჯი. 1 - განმეორებითი ალგორითმის ბლოკ-სქემა საპირისპირო სხივების მიკვლევისთვის

ray tracing პროგრამირების ენა

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

ალგორითმი:

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

იპოვეთ პიქსელის კოორდინატები მსოფლიო კოორდინატულ სისტემაში.

იპოვნეთ პირველადი სხივის კოორდინატები.

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

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

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

ფერის გამოსათვლელად ვიღებთ მთლიან ინტენსივობას ფონის ინტენსივობის ტოლი. გადადით საფეხურზე 12. თუ გზაჯვარედინზეა ნაპოვნი, გადადით მე-6 საფეხურზე.

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

თუ მასალა ირეკლავს სინათლეს მხოლოდ დიფუზურად, მაშინ მიგვაჩნია, რომ არეკლილი და გატეხილი სინათლის ინტენსივობა არის ნულოვანი. გადადით საფეხურზე 12. სხვა შემთხვევაში გადადით მე-8 საფეხურზე.

თუ მაქსიმალური რეკურსიის სიღრმე მიიღწევა, მაშინ აიღეთ არეკლილი და გატეხილი სინათლის ინტენსივობა ნულამდე. გადადით საფეხურზე 12. სხვა შემთხვევაში გადადით მე-9 საფეხურზე.

გამოთვალეთ არეკლილი სხივის ვექტორი. რეკურსიის გაშვება არეკლილი სხივის ინტენსივობის დასადგენად.

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

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

დაუბრუნდით სხივების ინტენსივობის გამოთვლის ფუნქციის გამოძახების წერტილს.

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

ჩრდილების აშენება.

მყარი ჩრდილები.

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

ალგორითმის პრინციპი.

გამოსაცდელი წერტილიდან აგებულია სინათლის წყაროსკენ მიმართული სხივი.

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

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

გადამოწმებადი წყარო.

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

უკანა სხივების მიკვლევის ალგორითმის მათემატიკური და ფიზიკური ფონი.

განათება.

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

უკანა განათების ინტენსივობა (IA) მოცემულია გარკვეული მუდმივით.

დიფუზურად არეკლილი სინათლის (ID) ინტენსივობა გამოითვლება კლასიკური „კოსინუს კანონის“ მიხედვით.

ID = IL cos α,(2.2.1.6)

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

სცენის რამდენიმე წყაროთი განათების შემთხვევაში, Id გამოითვლება თითოეული მათგანისთვის და შემდეგ ჯამდება.

IDi =Σ ILi cos αi.(2.2.1.7)

აფეთქების ინტენსივობა წყაროდან (IS) გამოითვლება Phong მოდელის მიხედვით.

IS = IL cosp β, (2.2.1.8)

სადაც IL არის სინათლის წყაროს ინტენსივობა (0<=IL<=1), β - угол между отраженным лучом от источника света и направлением на точку, в которой расположена камера (центр проекции), p - некоторая степень от 1 до 200 -влияет на размытость блика. При

p-ის დაბალ მნიშვნელობებზე, ხაზგასმა უფრო ბუნდოვანია.

როგორც ID-ის გაანგარიშებისას, სცენის რამდენიმე წყაროს განათების შემთხვევაში, IS გამოითვლება ცალ-ცალკე თითოეული წყაროსთვის, შემდეგ კი შედეგები ჯამდება.

ISi =Σ ILi cosp β i.(2.2.1.9)

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

გარდა ამისა, შემოღებულია შემდეგი კოეფიციენტები: KD - ზედაპირის დიფუზური ასახვის კოეფიციენტი, KS - მბზინავი კოეფიციენტი - ეს კოეფიციენტი არის ამრეკლი ზედაპირის უხეშობის მახასიათებელი. რაც უფრო დიდია ზედაპირის უხეშობა, მით ნაკლები სინათლე აირეკლება მისგან სპეკულარულად და ნაკლებ სინათლეს გადასცემს და შესაბამისად, მით უფრო მეტ სინათლეს ირეკლავს დიფუზურად.<= KD <= 1.

KD = 0-ზე - ზედაპირზე დაცემული მთელი სინათლე აირეკლება და ირღვევა. KD = 1 - მთელი სინათლე აირეკლება დიფუზურად. დიფუზურად ასახული სინათლის ინტენსივობა და უკანა განათების ინტენსივობა მრავლდება ამ ფაქტორზე. სპეკულარულად არეკლილი და გარდატეხილი სინათლის ინტენსივობა მრავლდება (1 - KD) ეს კოეფიციენტი პასუხისმგებელია წყაროდან შუქის სიკაშკაშეზე. 0<=KS<=1.

KS = 0-ზე - ხაზგასმა არ ჩანს, KS = 1-ზე - ხაზგასმის სიკაშკაშე მაქსიმალურია.

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

I = IAKD + ​​Σ(ILiKDcos αi + ILiKScosp β i) + (1 - KD)(IRr + IT(1 - r)).(2.2.1.10)

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

ფერადი გამოსახულების მისაღებად, აუცილებელია გამოთვლები ცალკე განხორციელდეს წითელი, მწვანე და ლურჯი სინათლის კომპონენტებისთვის. გამოსახულების პიქსელის ფერი გამოითვლება თითოეული ინტენსივობის კომპონენტის გამრავლებით რიცხვზე, რომელიც განსაზღვრავს გამოსახულების ინტენსივობის გრადაციის მაქსიმალურ რაოდენობას. 32-ბიტიანი სურათისთვის ის უდრის 255-ს თითოეული ფერისთვის (R, G, B).

255*IR,= 255*IG,= 255*IB.

აქ IR (არ უნდა აგვერიოს სპეკულარულად არეკლილი სინათლის ინტენსივობით), IG, IB არის სამი სინათლის კომპონენტის ინტენსივობა წერტილში, მიღებული ზემოთ ფორმულით.

კოეფიციენტები KD, KS, p არის ობიექტის ინდივიდუალური მახასიათებლები, რომლებიც ასახავს მის თვისებებს. გარდა ამისა, არსებობს კიდევ ერთი კოეფიციენტი - აბსოლუტური რეფრაქციული ინდექსი n. n = c/v, სადაც c არის სინათლის სიჩქარე ვაკუუმში, v არის სინათლის სიჩქარე გარემოში (ობიექტის შიგნით). აბსოლუტურად გაუმჭვირვალე სხეულებისთვის ეს კოეფიციენტი უდრის ∞-ს (რადგან სხეულის შიგნით სინათლის სიჩქარე ნულის ტოლია). პროგრამაში, აბსოლუტურად გაუმჭვირვალე სხეულის დასაზუსტებლად, თქვენ უნდა დააყენოთ ეს კოეფიციენტი >> 1 (დაახლოებით 10000). ამ შემთხვევაში, სპეკულარულად ასახული სინათლის r პროპორცია მიისწრაფვის ერთიანობისკენ და გარდატეხისკენ, შესაბამისად, ნულამდე.

ნორმების გაანგარიშება.

ტრასირების ალგორითმში, ობიექტთა ნორმატივები საჭიროა არეკლილი და გარდატეხილი სხივების გამოსათვლელად, ასევე ფონგის მოდელის მიხედვით განათების დასადგენად.

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

მრავალკუთხედის (სამკუთხედის) ნორმალურის გამოთვლა.

სამკუთხედის ნორმალურის გამოთვლა მცირდება ვექტორული გამრავლების ოპერაციამდე. სამკუთხედი ABC მოცემულია მისი სამი წვეროების კოორდინატებით:

XA, YA, ZA, XB, YB, ZB, XC, YC, ZC.

მოდით გამოვთვალოთ ორი ვექტორის კოორდინატები, მაგალითად AB და AC:

XB - XA, = XB - XA,

ZAB = XB - XA,(2.2.2.1)= XC - XA,= XC - XA,= XC - XA.

ნორმალური ვექტორული კოორდინატები გამოითვლება ფორმულების გამოყენებით:

YABZAC - YACZAB,= XABZAC - XACZAB,(2.2.2.2)= XABYAC - XACYAB.

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

მეორე რიგის ზედაპირის ნორმალურის გამოთვლა.

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

Q(x,y,z) = a1x2 + a2y2 + a3z2 + b1yz + b2xz + b3xy + c1x +c2y +c3z + d =0.

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

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1,(2.2.2.3)

სადაც x0, y0, z0 არის ელიფსოიდის ცენტრის კოორდინატები, A, B, C არის ელიფსოიდის ნახევარღერძების სიგრძეები.

პარაბოლოიდური განტოლება:

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1,(2.2.2.4)

სადაც x0, y0, z0 არის პარაბოლოიდის ცენტრის კოორდინატები, A, B, C არის პარაბოლოიდის ნახევრადღერძების სიგრძეები. პარაბოლოიდის ღერძი მდებარეობს მსოფლიო კოორდინატთა სისტემის ოზის ღერძის გასწვრივ. ნორმალური ვექტორის კოორდინატების გამოსათვლელად საჭიროა ნაწილობრივი წარმოებულების გამოთვლა x, y, z მიმართ.

ელიფსოიდური ნორმალური ვექტორული კოორდინატები:

Yn \u003d 2 (y-y0) / B2, \u003d 2 (z-z0) / C2.

ვექტორის მიმართულება არ შეიცვლება, თუ მისი ყველა კოორდინატი იყოფა 2-ზე:

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.5)

Zn \u003d (z-z0) / C2.

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

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.6)

Zn \u003d - (z-z0) / C2.

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

ასახული სხივის გაანგარიშება.

ნება მიეცით მოხვედრილი სხივის ვექტორი S იყოს მოცემული და ცნობილი იყოს ნორმალური ვექტორი N. საჭიროა არეკლილი R სხივის ვექტორის პოვნა.

განვიხილოთ ერთეული ვექტორები R1, S1 და N1. ვინაიდან ნორმალურის, დაცემის და ასახული სხივის ვექტორები ერთ სიბრტყეშია, შეგვიძლია დავწეროთ R1 + S1 = N`, სადაც N` არის ვექტორი, რომელიც შეესაბამება რომბის დიაგონალს და ემთხვევა მიმართულებით ნორმალურს. . ვექტორის N` სიგრძე უდრის 2cosθ. ვინაიდან ვექტორი N` ემთხვევა მიმართულებით N1-ს, მაშინ

N` = N`2cosθ.

აქედან ვპოულობთ არეკლილი სხივის ერთეულ ვექტორს:

R1 = N1 2cosθ - S1 = N/|N| 2cosθ - S/|S|.

მოდი ვიპოვოთ cosθ. ეს შეიძლება გაკეთდეს N და S ვექტორების სკალარული ნამრავლის გამოყენებით:


ვივარაუდოთ, რომ არეკლილი სხივის საჭირო ვექტორს ექნება იგივე სიგრძე, რაც დაცემის სხივის ვექტორს, ანუ R = |S| R1, მივიღებთ

N 2NS/|N|2 - ს.

ეს გამოსავალი არის ვექტორული სახით. დავწეროთ ვექტორის კოორდინატები:

2xN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - xS,= 2yN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - yS,(2.2.3.1)= 2zNy(xNx +zNzS)/(xN2+yN2+zN2) - zS.

რეფრაქციული სხივის გაანგარიშება.

მოდით მივცეთ ორი ერთეული ვექტორი: S1 არის დაცემის სხივის ვექტორი, ხოლო N1 არის ნორმალის ვექტორი ორ მედიას შორის ინტერფეისის მიმართ. ასევე ცნობილი უნდა იყოს ამ მედიისთვის ორი რეფრაქციული ინდექსი - n1 და n2 (ან მათი თანაფარდობა).

საჭიროა T1 გადატეხილი სხივის ერთეული ვექტორის პოვნა. ამოხსნისთვის ვასრულებთ რამდენიმე გეომეტრიულ კონსტრუქციას.

სასურველი ვექტორი T1 უდრის ორი ვექტორის ჯამს:

ჯერ ვიპოვოთ ვექტორი NT. ის საპირისპიროა ნორმალური ვექტორის მიმართულებით და მისი სიგრძე უდრის |T1|-ს cos α2 = cos α2 (რადგან T1 არის ერთეული). ამრიგად, NT = -N1 cos α2. აუცილებელია cos α2-ის დადგენა. მოდით დავწეროთ გარდატეხის კანონი n1 sin α1 = n2 sin α2 სახით:

sinα2 = n sinα1,

სადაც n = n1 / n2.

გამოვიყენოთ იდენტობა cos2α + sin2α = 1. მაშინ

cosα2 = √ 1 - sin2α2 = √ 1 - n2 sin2α1

cosα2 = √ (1 + n2 (cos2α1 - 1)

cos α1-ის მნიშვნელობა შეიძლება გამოისახოს S1 და N1 ერთეული ვექტორების სკალარული ნამრავლის მიხედვით, ანუ cos α1 = S1N1. შემდეგ ჩვენ შეგვიძლია დავწეროთ შემდეგი გამოხატულება NT ვექტორისთვის:

N1√1+n2((S1N1)2 - 1).

რჩება გამოთქმის პოვნა ვექტორისთვის B. ის განლაგებულია A ვექტორთან იმავე ხაზზე და A = S1 - NS. იმის გათვალისწინებით, რომ NS უდრის N1 cos α1, მაშინ A = S1 - N1 cos α1. ვინაიდან cos α1 = S1N1, მაშინ A = S1 - N1 (S1N1).

ვინაიდან A ვექტორის სიგრძე უდრის sin α1, ხოლო B ვექტორის სიგრძე უდრის sin α2, მაშინ

|B|/|A| = sinα2/ sinα1 = n2/n1 = n,

საიდანაც |B| = n |A|. A და B ვექტორების ფარდობითი პოზიციის გათვალისწინებით, ვიღებთ

NA =n(N1(S1N1) - S1).

ახლა ჩვენ შეგვიძლია დავწეროთ სასურველი გამოხატულება T1 გარდატეხის სხივის ერთეული ვექტორისთვის:

T1 = nN1 (S1N1) - nS1 - N1√1 + n2 ((S1N1)2 - 1).(2.2.4.1)

პრიმიტივებთან გადაკვეთის წერტილის გამოთვლა.

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

R = A + Vt, (2.2.5.1)

სადაც R არის სხივის კუთვნილი თვითნებური წერტილის რადიუსის ვექტორი, A არის სხივის საწყისი წერტილის რადიუსის ვექტორი, V არის სხივის მიმართულების ვექტორი, t არის პარამეტრი.

თუ მიმართულების ვექტორი V ნორმალიზებულია, მაშინ t პარამეტრი რიცხობრივად ტოლი იქნება მანძილის A სხივის საწყისი წერტილიდან R წერტილამდე.

თქვენ შეგიძლიათ დაწეროთ ეს განტოლება კოორდინატების სახით:

x = x1 + at,= y1 + bt,(2.2.5.2)= z1 + ct.

აქ x1, y1, z1 არის სხივის საწყისი წერტილის კოორდინატები მართკუთხა დეკარტის სამყაროს კოორდინატულ სისტემაში, a,b,c არის სხივის მიმართულების ვექტორის კოორდინატები.

სხივის მეორე რიგის ზედაპირთან გადაკვეთის წერტილის გამოთვლა.

იპოვონ (2) განტოლებებით მოცემული სხივის გადაკვეთის წერტილი მეორე რიგის ზედაპირთან, რომელიც მოცემულია (2.2.2.3) ან (2.2.2.4) განტოლებებით:

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1 (ელიფსოიდი)

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1 (პარაბოლოიდი),

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

სხივისა და ზედაპირის გადაკვეთის წერტილების კოორდინატების საპოვნელად, საკმარისია t პარამეტრის ნაპოვნი მნიშვნელობების ჩანაცვლება სხივების განტოლებებში (2).

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

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

ამისათვის, გადაკვეთის წერტილის პოვნის შემდეგ, გაანალიზებულია მისი z-კოორდინატი.

სხივის გადაკვეთის წერტილის გამოთვლა მრავალკუთხედთან (სამკუთხედთან).

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

სიბრტყის განტოლება ასე გამოიყურება:

Q(x, y, z) = Ax + By + Cz + D = 0.(2.2.5.3)

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

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

Ax-By-Cz.(2.2.5.4)

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

ახლა, გადაკვეთის წერტილის საპოვნელად, ჩვენ ვცვლით სხივების განტოლებებს (2).

სიბრტყის განტოლება.

(x1 + at) + B (y1 + bt) + C (z1 + ct) + D = 0

სად მივიღოთ

= - (Ax1 + By1 + Cz1 + D) / (Aa + Bb + Cc) (2.2.5.5)

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

გადაკვეთის წერტილის კოორდინატების საპოვნელად აუცილებელია t პარამეტრის ნაპოვნი მნიშვნელობის ჩანაცვლება სხივების განტოლებებში (2). გადაკვეთის წერტილს დავარქვათ D. მივიღებთ კოორდინატებს xD, yD, zD.

ახლა ჩვენ უნდა დავადგინოთ არის თუ არა წერტილი D სამკუთხედის შიგნით. იპოვეთ AB, BC, CA (A, B, C სამკუთხედის წვეროები) ვექტორების კოორდინატები და AD, BD, CD ვექტორების კოორდინატები. შემდეგ ჩვენ ვიპოვით სამ ჯვარედინი პროდუქტს:

nA = AB x AD, = BC x BD, (2.2.5.6) = CA x CD.

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

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

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

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

რჩება იმის დამატება, რომ პროექციისთვის უმჯობესია აირჩიოთ ერთ-ერთი თვითმფრინავი, რომლის სამკუთხედის პროექციის ფართობი უფრო დიდია. ამ პირობით, სამკუთხედის სეგმენტში პროექციის შემთხვევა გამორიცხულია (იმ პირობით, რომ გამოსაცდელი სამკუთხედი არ არის გადაგვარებული სეგმენტად). გარდა ამისა, პროექციის ფართობის მატებასთან ერთად, შეცდომის ალბათობა მცირდება. ასეთი პროექციის სიბრტყის დასადგენად საკმარისია სამკუთხედის ნორმის სამი კოორდინატის შემოწმება. თუ ნორმალის z-კოორდინატი უფრო დიდია (აბსოლუტური მნიშვნელობით) x და y, მაშინ საჭიროა პროექცია xOy სიბრტყეზე. თუ y მეტია x-ზე და z-ზე, მაშინ ვაპროექტებთ xOz-ზე. დანარჩენ შემთხვევაში - yOz-ზე.

მონაცემთა ტიპების აღწერა. პროგრამის სტრუქტურა.

პროგრამის მოდულების აღწერა

მოდულების სია: .h-TTex სტრუქტურის აღწერა.h-TPlaneTex და TEllipsoidTex სტრუქტურების აღწერა.h-TPoint2d და TPoint3d სტრუქტურების აღწერა.h-TRGBColor სტრუქტურის აღწერა.h-TLamp ​​კლასის აღწერა. .h-TCam კლასის აღწერა.h-აღწერილობა TPrimitive კლასის.h-კლასის აღწერა TFrstSurface.h-კლასის აღწერა TScndSurface.h-კლასის აღწერა TTriangle.h-კლასის აღწერა TEllipsoid.h-კლასის აღწერა TCylinder.h-class აღწერა THyperboloidVert.h-class აღწერა THyperboloidHor.h-class აღწერა TScene.h- TTracer კლასის აღწერა

განმახორციელებელი მოდულები, პროგრამის ინტერფეისი:

"ოფციები" ფორმის Options.h-მოდული

"კამერის თვისებების" ფორმის ExtraCamOptions.h-მოდული

MainUnit.h - პროგრამის ძირითადი ფორმის მოდული

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

შეიცავს სამ წერტილს, რომელზეც ტექსტურაა მიმაგრებული: TLamp ​​- კლასი, რომელიც აღწერს სინათლის წყაროს.

შეიცავს TPoint3d coord ობიექტს წყაროს კოორდინატებით და სამ ცვლადი ცვლადი (Ir, Ig, Ib) სამი სინათლის კომპონენტის ინტენსივობის შესანახად. TCam არის კლასი, რომელიც აღწერს კამერას.

შეიცავს ორ კუთხეს (a, b), რომელიც მიუთითებს კამერის ხედვის მიმართულებაზე, წერტილზე, რომელზეც კამერა მიუთითებს (viewP) და მანძილს კამერიდან ამ წერტილამდე (r). TPrimitive არის აბსტრაქტული პრიმიტიული კლასი. პირველი და მეორე რიგის ზედაპირები მემკვიდრეობით მიიღება მისგან. TFrstSurface არის პირველი რიგის ზედაპირის აბსტრაქტული კლასი. სამკუთხედის კლასი მისგან არის მემკვიდრეობით.TScndSurface არის მეორე რიგის ზედაპირული აბსტრაქტული კლასი. მისგან არის მემკვიდრეობით მიღებული ელიფსოიდური და პარაბოლოიდური კლასები TTriangle - სამკუთხედის კლასი. შეიცავს სამკუთხედის სამ წვეროს და მის ნორმალურს TCcylinder - ცილინდრის კლასი THyperboloidVert - ერთფურცლიანი ჰიპერბოლოიდის კლასი, რომელიც მდებარეობს oZ ღერძის გასწვრივ.THyperboloidHor - ერთფურცლიანი ჰიპერბოლოიდის კლასი, რომელიც მდებარეობს oX ღერძის გასწვრივ.TEllipsoid - კლასი ელიფსოიდის.TScene - სცენის კლასი. შეიცავს ინფორმაციას ყველა პრიმიტივის, წყაროსა და კამერის შესახებ. TTracer არის კლასი, რომელიც პასუხისმგებელია გამოსახულების რენდერზე. შეიცავს ბუფერს (ბუფერს) 400x400 პიქსელის განლაგებით, რომელშიც იქმნება სცენის გამოსახულება. გენერირებამდე აუცილებელია ფუნქციის გამოძახება, პარამეტრად გადაცემის მაჩვენებლის გენერირებულ სცენაზე. გენერირებისთვის გამოიძახეთ რენდერის ფუნქცია.

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

void getTArr(float* arr, int& n, TPoint3d p0, TPoint3d viewDir) - ავსებს arr მასივს viewDir სხივის საწყისი წერტილიდან (p0) მანძილით პრიმიტიულთან გადაკვეთის უახლოეს წერტილამდე.

void getNormal(TPoint3d& n, const TPoint3d& p) - აბრუნებს ნორმალური ვექტორის კოორდინატებს პრიმიტიულში p წერტილში.

void getColor(TRGBColor& c, const TPoint3d& p) - აბრუნებს პრიმიტიული წერტილის p (მათ შორის ტექსტურის) ფერს.

3. ტექნოლოგიური ნაწილი

პროგრამირების ენის არჩევანი.

პროგრამის შემუშავებისას მაღალი დონის პროგრამირების ენა C++ გამოიყენებოდა ვიზუალური პროგრამირების გარემოს ნაწილად CodeGear RAD Studio Windows-ისთვის.

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

გარდა ამისა, ვიზუალური პროგრამირების გარემო CodeGear RAD Studio Windows-ისთვის

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

ვარიანტების ფორმა. განათების ჩანართი.

ეს ჩანართი შეიცავს ინსტრუმენტებს სცენის განათების დასაყენებლად.

წყაროს კოორდინატები - კოორდინატები ჩამოსაშლელ სიაში შერჩეული სინათლის წყაროს მსოფლიო კოორდინატულ სისტემაში.

წყაროს ინტენსივობა - ჩამოსაშლელი სიაში არჩეული სინათლის წყაროს ინტენსივობის სამი კომპონენტის მნიშვნელობები.

ფონის ინტენსივობა - ფონის ინტენსივობის სამი კომპონენტის მნიშვნელობები.

ღილაკი „+“ (ჩამოსაშლელი სიის გვერდით) - ახალი სინათლის წყაროს დამატება.

ღილაკი „-“ (ჩასაშლელი სიის გვერდით) - წაშლის ჩამოსაშლელ სიაში არჩეულ სინათლის წყაროს.

ვარიანტების ფორმა. კამერის ჩანართი.

ეს ჩანართი შეიცავს ინსტრუმენტებს კამერის პარამეტრების დასაყენებლად.

გადახედვა - აქ შეგიძლიათ იხილოთ გამოსახულების სავარაუდო ხედვა მის გენერირებამდე.

ნავიგაცია - კამერის პოზიციის პარამეტრები.

Advanced - ამ ღილაკზე დაჭერისას გამოჩნდება ფორმა

კამერის თვისებები კამერის გაფართოებული პარამეტრებით.

კამერის თვისებების ფორმა.

რადიუსი - მანძილი კამერიდან იმ წერტილამდე, სადაც ის არის მიმართული.

რადიუსის ცვლილების საფეხური - კამერის რადიუსის გაზრდა ღილაკზე „-“ ერთხელ დაჭერით „ოფციები“ ფორმის „კამერა“ ჩანართზე (ან მისი შემცირება ღილაკზე „+“ ერთხელ დაჭერით).

ვარიანტების ფორმა. მასალების ჩანართი.

ეს მენიუ აჩვენებს მაგიდის მასალის პარამეტრებს, რომელზეც დგას სცენა.

ფერი - მაგიდის მასალის ფერი.

კოფ. დიფუზური ასახვა - ცხრილის მასალის Kd კოეფიციენტი (იხ. პუნქტი 2.2.1).

ტექსტურა - თუ მონიშნული ველი მონიშნულია, მაშინ ტექსტურა გამოჩნდება მაგიდაზე

აირჩიეთ ტექსტურა - აირჩიეთ სურათის ფაილი (*.bmp), რომელიც გამოყენებული იქნება როგორც ცხრილის ტექსტურა.

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

ცხრილის თვისებების ფორმა.

გაბრწყინების კოეფიციენტი არის მაგიდის მასალის KS კოეფიციენტი (იხ. სექცია 2.2.1).

მბზინავი ბუნდოვანი არის ცხრილის მასალის მაჩვენებლის p.

ტექსტურა მეორდება - რამდენჯერ განმეორდება ცხრილის ტექსტურა OX და OY ღერძების გასწვრივ.

ვარიანტების ფორმა. სისტემის ჩანართი.

ამ ჩანართზე შეგიძლიათ დააკონფიგურიროთ პროგრამაში განხორციელებული ალგორითმები.

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

ყურადღება!

რეკურსიის სიღრმე ძლიერ გავლენას ახდენს გამოსახულების გენერირების სიჩქარეზე. არ არის რეკომენდებული ამ პარამეტრის 10-ზე მეტის დაყენება.

Anitialising - გამოსახულების გამარტივების ალგორითმის ჩართვა.

ჩრდილის ტიპი - ჩრდილის აგების ალგორითმის შერჩევა.

4. კვლევითი ნაწილი

კვლევები ჩატარდა კომპიუტერზე შემდეგი კონფიგურაციით:

პროცესორი - Intel Core 2 Duo T5850- 2048 Mb DDR2 - Nvidia GForce 9300M 256Mb- Windows 7

4.1 გენერირების დროის დამოკიდებულება რეკურსიის სიღრმეზე

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


4.2 გენერირების დროის დამოკიდებულება წყაროების რაოდენობაზე


4.3 კვლევის შედეგების ანალიზი

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

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

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

დასკვნა

ამ პროგრამაში ნაჩვენები იყო რეალისტური გამოსახულების გენერირების ალგორითმის შედეგები - უკუ სხივების მიკვლევა.

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

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

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

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

ბიბლიოგრაფია

1. Rogers D. კომპიუტერული გრაფიკის ალგორითმული საფუძვლები: პერ. ინგლისურიდან - M.: Mir, 1989. - 512გვ.

Porev VN კომპიუტერული გრაფიკა. - სანკტ-პეტერბურგი: BHV-Petersburg, 2002. - 432 გვ.

ნიკულინი ე.ა. კომპიუტერული გეომეტრია და კომპიუტერული გრაფიკის ალგორითმები. პეტერბურგი: BHV-Petersburg, 2003. - 560გვ.

Angel E. ინტერაქტიული კომპიუტერული გრაფიკა. - "ვილიამსი", 2001. - 592გვ.: ილ. - პარალ. ტიტ. Ინგლისურიდან.

ავდეევა ს.მ., კუროვი ა.ვ. 3D კომპიუტერული გრაფიკის ალგორითმები: სახელმძღვანელო. - მ.: MSTU im. ნ.ე. ბაუმანი, 1996. - 60გვ.