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

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

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

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

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

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

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

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

● სხივი სცდება სცენას,

● სხივი ხვდება გაუმჭვირვალე სხეულისინათლის შთანთქმა,

● სხივი ურტყამს Სინათლის წყარო,

● სხივის ინტენსივობა ეცემა ქვემოთ მგრძნობელობის ბარიერი,

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

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


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

● გაუმჭვირვალე საგნები, რომლებიც შთანთქავენ დამაბრუნებელ სხივებს;

● გამჭვირვალე საგნები, რომელთა მეშვეობითაც დამკვირვებლისთვის სხვა ობიექტები ჩანს გარდატეხის გამო;

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

● ჩრდილები, რომლებიც წარმოიქმნება სხვა ობიექტების მიერ წყაროდან დაფარულ ზედაპირულ წერტილებზე;

● სხვადასხვა ოპტიკური ეფექტები.

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

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

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

კვალიფიკაციის მეთოდის შეზღუდვები:

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

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

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

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

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

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

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

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

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

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

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

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

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

კვალიფიკაციის მეთოდის უარყოფითი მხარეები:

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

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

Backtrace მეთოდი

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

რუსეთის ფედერაციის განათლების სამინისტრო

მოსკოვი სახელმწიფო ინსტიტუტიელექტრონიკა და მათემატიკა

(ტექნიკური უნივერსიტეტი)

ინფორმაციისა და კომუნიკაციის დეპარტამენტი

ტექნოლოგიები

კურსი თემაზე:

”3D მოდელირებაში სხივების მიკვლევის მეთოდის გამოყენების პერსპექტივების ანალიზი”

დასრულებული:

გულიან ბორის

პოძოროვი ივანე

ჯგუფი C -35

მოსკოვი 2010 წ

1. 3D გრაფიკა. შესავალი

3. სხივების მიკვლევის ალგორითმები

4. სხივების მოკვლევის ძირითადი უპირატესობები და უარყოფითი მხარეები

5. სხივების მიკვლევის მეთოდის გამოყენება

6. Ექსპერიმენტი.

ამოცანა: "3D მოდელირებაში სხივების ტრასირების მეთოდის გამოყენების პერსპექტივების ანალიზი"

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

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

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

2)მიღებული სურათების ანალიზი სხივების ტრასინგით და მის გარეშე.

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

3D გრაფიკა. შესავალი.

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

ნებისმიერი 3D სურათი განისაზღვრება შემდეგი პარამეტრებით და ობიექტებით:

· გეომეტრია (აშენებული მედელებით)

· მასალები (ინფორმაცია ვიზუალური თვისებებიმოდელები)

· სინათლის წყაროები (მიმართულება, სიმძლავრე, განათების სპექტრის პარამეტრები)

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

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

· დამატებითი ეფექტები (ობიექტების სიმულაცია ატმოსფერული მოვლენები: სინათლე ნისლში, ღრუბლებში, ცეცხლში და ა.შ.)

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

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

წინ და უკან სხივების მიკვლევა

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

არსებობს სხივების მიკვლევის 2 მეთოდი: წინ და უკან

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

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

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

Ray Tracing ალგორითმები

განვიხილოთ ძირითადი ტრასირების ალგორითმი (ნახ. 1). ავიღოთ სფერო, როგორც ობიექტი.

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

2. მას შემდეგ, რაც სხივი კვეთს ობიექტს, განისაზღვრება:

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

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

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

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

· რეფრაქციული სხივები;

· ჩრდილის/შუქის სხივები;

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

ბრინჯი. 1 Ray Tracing ალგორითმის დიაგრამა


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

კდ-ხე

kd-ხის აგების ალგორითმი შეიძლება წარმოდგენილი იყოს შემდეგნაირად (ჩვენ მას დავარქმევთ კუბოიდურიინგლისური სიტყვა "box" (ყუთი).

1. „დაამატეთ“ ყველა პრიმიტივი შემოსაზღვრულ ყუთში. ანუ ავაშენოთ ყუთი, რომელიც ზღუდავს ყველა პრიმიტივს, რომელიც შეესაბამება ხის ძირეულ კვანძს.

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

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

4. მარცხენა კვანძთან გადაკვეთილი პრიმიტივები დაამატეთ მარცხენა კვანძთან, მარჯვენა კვანძთან გადაკვეთილი პრიმიტივები მარჯვნივ.

5. თითოეული კვანძისთვის შეასრულეთ ეს ალგორითმი რეკურსიულად დაწყებული ნაბიჯი 2-დან.

რეგულარული ბადე

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

მეთოდი პრაქტიკაში არ გამოიყენება.

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

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

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

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

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

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

font-size:14.0pt"> ნახ. 2 ორი სარკის ბურთის ანარეკლი ერთმანეთში

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

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

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

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

4. კიდევ ერთი გავრცელებული პრობლემა სხივების კვალიფიკაციის მეთოდთან დაკავშირებით არის ანტი-ალიასინგი (AA). სხივები შედგენილია როგორც მარტივი მათემატიკური აბსტრაქცია და ისინი არ ითვალისწინებენ რეალურ ზომას. სამკუთხედის გადაკვეთის ტესტი არის მარტივი ლოგიკური ფუნქცია, რომელიც იძლევა დიახ ან არა პასუხს, მაგრამ არ იძლევა ისეთ დეტალებს, როგორიცაა „სხივი კვეთს სამკუთხედს გზის 40%-ით“. ამ ეფექტის პირდაპირი შედეგი იქნება "კიბეების" გამოჩენა (ნახ. 3).

ბრინჯი. 3 ჩრდილის გასწორება

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

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

Ray Tracing მეთოდის გამოყენება

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

· 3D ანიმაცია;

· კინოინდუსტრიის სპეციალური ეფექტები;

· რეალისტური ფოტო გადაღება;

· Cad სისტემები.

სპეციალური პირობები:

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

რენდერი - (ინგლისური რენდერი - „ვიზუალიზაცია“) - მოდელიდან გამოსახულების მიღების პროცესი.

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


სურათი 4. მრავალკუთხა ბადე

Ექსპერიმენტი.

ექსპერიმენტის ჩასატარებლად პროგრამულად ავირჩიეთ Blender 3D რედაქტორი.

მისი სწავლა საკმაოდ მარტივია და შეიცავს ყველა საჭირო ფუნქციას:

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

· ნიმუშების ზედმეტად აღება (ანტიალიასინგი ან ალიასინგის საწინააღმდეგო)

ჩვენ გავზომეთ დრო, რომელიც საჭიროა 3 სხვადასხვა სფეროს (მინა, სარკე და მქრქალი) გამოსატანად სხვადასხვა Multeris Equals-ზე (თითოეული დონე 4-ჯერ ზრდის მრავალკუთხედების რაოდენობას). როდესაც დონე გაიზარდა, დრო ითვლებოდა 0-დან.

0 " style="margin-left:48.35pt;border-collapse:collapse">

ლვ. მულტერისი

გაწევის დრო თითოეული დონისთვის. 0-დან

RayT-ის გარეშე [c]

RayT-ით [c]

0,53

3,36

0,46

0,54

2,84

0,55

3,02

0,61

3,85

0,96

5,96

10,64

29,12

43,9

ცხრილი 1.

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

შედეგად, ჩვენ ვხედავთ, რომ დახარჯული დრო მე-4 დონის მქონე სამი სფეროს დამუშავებაზე (თითოეულ სფეროზე 256 პოლიგონი) ნაკლებია, ვიდრე მე-2 დონის სფეროების დამუშავებაზე დახარჯული დრო (თითოეული 16 პოლიგონი).


სურათი 5. პოლიგონური ბადეები სხვადასხვა დონისთვის

ქვედა ხაზი

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

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

ბრინჯი. 6 გამჭვირვალე სფერო (ალფა არხი მარცხნივ, სხივების მიკვლევა მარჯვნივ)


2) სურათზე A არ არის სარკის ბურთი, რადგან მასზე ასახვის მიღება ემყარება სხივების მიკვლევას (ნახ. 7).

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


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


სურ. 8 სინათლის ვარდნა ბურთის ჩაზნექილზე (A მარცხნივ, B მარჯვნივ)

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

ახლახან ინტერნეტში პოლ ჰაკბერტის სავიზიტო ბარათზე სხივების ტრასერი წავაწყდი. მათთვის, ვინც არ იცის, ეს არის ძალიან ცნობილი პრობლემა, რომელიც თავდაპირველად შემოთავაზებული იყო პოლ ჰაკბერტის მიერ 1984 წლის 4 მაისს comp.graphics-ზე. მისი არსი არის სხივების სროლის მეთოდის დემონსტრირების დაწერა, რომელიც... მოერგებოდა სავიზიტო ბარათი(დაწვრილებით ამის შესახებ Graphics Gems IV-ის Ray Tracing განყოფილებაში)!

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

სავიზიტო ბარათის უკანა მხარე

აი, როგორ გამოიყურება თავად კოდი:

#შეიცავს // ბარათი > aek.ppm #include #შეიცავს typedef int i;typedef float f;struct v(f x,y,z;v ოპერატორი+(v r)(return v(x+r.x,y+r.y,z+r.z);)v ოპერატორი*(f r)(return v( x*r,y*r,z*r);)f ოპერატორი%(v r)(დაბრუნება x*r.x+y*r.y+z*r.z;)v()()v ოპერატორი^(v r) (დაბრუნება v(y*r.z-z*r.y,z*r.x-x*r.z,x*r. y-y*r.x);)v(f a,f b,f c)(x=a;y=b;z=c ;)v ოპერატორი!())(return*this*(1/sqrt(*this%* this));));i G=(247570,280596,280600, 249748,18578,18577,231184,16,16 ) ;f R())( return(f)rand()/RAND_MAX;)i T(v o,v d,f &t,v&n)(t=1e9;i m=0;f p=-o.z/d.z;if(. 01 0)(f s=-b-sqrt(q);if(s .01)t=s,n=!(p+d*t),m=2;))დაბრუნება m;)v S(v o,v d)(f t ;v n;i m=T(o,d,t, n);if(!m)return v(.7, .6,1)*pow(1-d.z,4);v h=o+d*t,l=!(v(9+R(),9 +R(),16)+h*-1),r=d+n*(n%d*-2);f b=l% n;if(b<0||T(h,l,t,n))b=0;f p=pow(l%r*(b >0),99);if(m&1)(h=h*.2;return((i)(ჭერი(h.x)+ceil(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);)return v(p,p,p)+S(h,r)*.5;)i main())(printf("P6 512 512 255 " );v g=!v (-6,-16,0),a=!(v(0,0,1)^g)*.002,b=!(g^a)*.002,c= (a+b)*-256+g;for(i y=512;y--;) for(i x=512;x--;)(v p(13,13,13);for(i r =64;r - -;)(v t=a*(R()-.5)*99+b*(R()-.5)* 99;p=S(v(17,16,8)+t,!( t *-1+(a*(R()+x)+b *(y+R())+c)*16))*3.5+p;)printf("%c%c%c" ,( i )p.x, (i) p.y, (i) p.z);))

ზემოთ მოყვანილი კოდი გამოიყურება ... საშინელი, მაგრამ ის იკრიბება და მუშაობს უპრობლემოდ! შეგიძლიათ შეინახოთ იგი თქვენს სამუშაო მაგიდაზე, როგორც card.cpp, გახსენით კონსოლი და შეიყვანეთ:

C++ -O3 -o card card.cpp ./card > card.ppm

27 წამის შემდეგ ეკრანზე გამოჩნდება შემდეგი სურათი:

Ray Tracer სავიზიტო ბარათის მახასიათებლები

შესაძლებლობები უბრალოდ გასაოცარია!

  • მკაცრად ორგანიზებული სფეროებისგან შემდგარი სამყარო;
  • ტექსტურირებული იატაკი;
  • ცა გრადიენტით;
  • რბილი ჩრდილები;
  • OMG, ველის სიღრმე! Ხუმრობ?!

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

ვექტორული კლასი

მოდით შევხედოთ კოდის პირველ ნაწილს:

#შეიცავს // ბარათი > aek.ppm #include #შეიცავს typedef int i;typedef float f;struct v(f x,y,z;v ოპერატორი+(v r)(return v(x+r.x,y+r.y,z+r.z);)v ოპერატორი*(f r)(return v( x*r,y*r,z*r);)f ოპერატორი%(v r)(დაბრუნება x*r.x+y*r.y+z*r.z;)v()()v ოპერატორი^(v r) (დაბრუნება v(y*r.z-z*r.y,z*r.x-x*r.z,x*r. y-y*r.x);)v(f a,f b,f c)(x=a;y=b;z=c ;)v ოპერატორი!())(return*this*(1/sqrt(*this%* this));));

მთავარი ხრიკი აქ არის შემცირება საკვანძო სიტყვები int და float ტიპები i და f typedef-ის გამოყენებით. კიდევ ერთი ხრიკი, რომელიც შეიძლება გამოყენებულ იქნას კოდის რაოდენობის შესამცირებლად, არის v კლასი, რომელიც გამოიყენება არა მხოლოდ როგორც ვექტორი, არამედ პიქსელების დასამუშავებლად.

#შეიცავს // ბარათი > aek.ppm #include #შეიცავს typedef int i; // სივრცის შენახვა int-მდე i typedef float f-ის შემცირებით; // დაზოგეთ კიდევ მეტი სივრცე f-ით float-ის ნაცვლად // ვექტორული კლასი კონსტრუქტორით და ოპერატორებით struct v( f x,y,z; // სამი ვექტორული კოორდინატი v ოპერატორი+(v r)(return v(x+r.x,y+r.y, z +r.z);) // ვექტორების ჯამი v ოპერატორი*(f r)(return v(x*r,y*r,z*r);) // ვექტორების მასშტაბირება f ოპერატორი%(v r)(return x* r.x +y*r.y+z*r.z;) // სკალარული პროდუქტივექტორები v()() // ცარიელი კონსტრუქტორი v ოპერატორი^(v r)(return v(y*r.z-z*r.y,z*r.x-x*r.z,x*r.y-y*r.x);) // ვექტორული პროდუქტი ვექტორები v(f a,f b,f c)(x=a;y=b;z=c;) // Constructor v ოპერატორი!())(return *this*(1 /sqrt(*this%*this)); ) // ვექტორის ნორმალიზაცია );

Rand() და მსოფლიო თაობის მონაცემები

i G=(247570,280596,280600, 249748,18578,18577,231184,16,16);f R())( return(f)rand()/RAND_MAX;)

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

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

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

// სფეროს პოზიციების ნაკრები, რომელიც აღწერს სამყაროს // ყველა ეს რიცხვი არსებითად არის ცოტა ვექტორი i G=(247570,280596,280600,249748,18578,18577,231184,16,16); // გენერატორი შემთხვევითი რიცხვები, აბრუნებს მცურავი წერტილის რიცხვს 0-1 დიაპაზონში f R())(return(f)rand()/RAND_MAX;)

მთავარი მეთოდი

i main())(printf("P6 512 512 255");v g=!v (-6,-16,0),a=!(v(0,0,1)^g)*.002,b = !(g^a)*.002,c=(a+b)*-256+g;for(i y=512;y--;) for(i x=512;x--;)(v p(13 , 13,13);for(i r =64;r--;)(v t=a*(R()-.5)*99+b*(R()-.5)* 99;p=S( v (17,16,8)+t,!(t*-1+(a*(R()+x)+b *(y+R())+c)*16))*3.5+p; ) printf("%c%c%c" ,(i)p.x,(i)p.y,(i)p.z);))

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

გამოსახულების თითოეული პიქსელისთვის პროგრამა აგროვებს (S) 64 სხივის ფერს, აგროვებს შედეგს და გამოსცემს მას stdout-ში.

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

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

// Მთავარი ფუნქცია. აჩვენებს სურათს. // პროგრამის გამოყენება მარტივია: ./card > erk.ppm i main())( printf("P6 512 512 255"); // PPM header // "!" ოპერატორი ახდენს ვექტორის ნორმალიზებას v g=!v( -6,- 16,0), // კამერის მიმართულება a=!(v(0,0,1)^g)*.002, // კამერის სიმაღლეზე პასუხისმგებელი ვექტორი... b=!(g^a )*.002 , // მარჯვენა ვექტორი მიღებული გამოყენებით ვექტორული პროდუქტი c=(a+b)*-256+g; // WTF? აქ https:// news.ycombinator.com/item?id=6425965 ამის შესახებ დაწვრილებით წერია. for(i y=512;y--;) // თითოეული სვეტისთვის for(i x=512;x--;)( // მწკრივის თითოეული პიქსელისთვის // გამოიყენეთ ვექტორული კლასი ფერის შესანახად RGB v p( 13, 13,13 // სტანდარტული პიქსელის ფერი თითქმის შავია // გადააგდეთ 64 სხივი თითოეული პიქსელიდან (i r=64;r--;)( // ოდნავ შეცვალეთ მარცხნივ/მარჯვნივ და ზევით/ქვევით კოორდინატები. სხივის დასაწყისი (ველის სიღრმის ეფექტისთვის) v t=a*(R()-.5)*99+b*(R()-.5)*99 // კამერის ფოკუსური წერტილის მინიჭება v (17,16,8) და გადააგდე სხივი / / დააგროვე დაბრუნებული ფერი t ცვლადში t p=S(v(17,16,8)+t, // სხივის დასაწყისი!(t*-1+(a *(R()+x)+b*(y+R ())+c)*16) // სხივის მიმართულება მცირედი დამახინჯებით // სტოქასტური შერჩევის ეფექტისთვის)*3.5+p ფერის დაგროვება ) printf("%c%c%c",(i) p.x,(i)p.y,(i)p.z);

სემპლერი

v S(v o,v d)(f t ;v n;i m=T(o,d,t,n);if(!m)return v(.7, .6,1)*pow(1-d.z,4) ;v h=o+d*t,l=!(v(9+R(),9+R(),16)+h*-1),r=d+n*(n%d*-2) ;f b=l% n;თუ(ბ<0||T(h,l,t,n))b=0;f p=pow(l%r*(b >0),99);if(m&1)(h=h*.2;return((i)(ჭერი(h.x)+ceil(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);) დაბრუნება v(p,p,p)+S(h,r)*.5;)

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

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

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

// (S) აიღეთ სამყარო და დააბრუნეთ პიქსელის ფერი // სხივით, რომელიც იწყება o წერტილიდან (წარმოშობა) და აქვს მიმართულება d (მიმართულება) v S(v o,v d)( f t; v n; // შეამოწმეთ არის თუ არა სხივი ეჯახება რაღაცას i m=T(o,d,t,n) თუ(!m) // m==0 // სფერო ვერ მოიძებნა და სხივი მაღლა მიდის: ცის ფერის დაბრუნების გენერირება v(.7); , 6,1)*pow(1-d.z,4) // შესაძლოა სხივი ეხება სფეროს v h=o+d*t, // h - გადაკვეთის კოორდინატი l=!(v(9+R(); 9+R) (),16)+h*-1), // "l" = სინათლის მიმართულება (მსუბუქი დამახინჯებით რბილი ჩრდილის ეფექტისთვის) r=d+n*(n%d*-2); r = ნახევრად ვექტორი / / გამოთვალეთ ლამბერტის კოეფიციენტი f b=l%n // გამოთვალეთ განათების კოეფიციენტი (ლამბერტის კოეფიციენტი > 0 ან ვართ ჩრდილში) თუ(b)<0||T(h,l,t,n)) b=0; // Рассчитываем цвет p (с учетом диффузии и отражения света) f p=pow(l%r*(b>0),99); if(m&1)( // m == 1 h=h*.2; // სფერო არ შეხებია და სხივი ეშვება იატაკზე: გენერირება იატაკის ფერის დაბრუნება((i)(ჭერი(h.x)+ ceil(h.y ))&1?v(3,1,1):v(3,3,3))*(b*.2+.1 // m == 2 სფერო მოხვდა: სხივის გენერირება); ზედაპირული სფეროს მობრუნება v(p,p,p)+S(h,r)*.5; // შეასუსტეთ ფერი 50%-ით, როგორც კი ის ამოხტება ზედაპირიდან (*.5) )

ტრასერი

i T(v o,v d,f &t,v&n)(t=1e9;i m=0;f p=-o.z/d.z;if(.01 0)(f s=-b-sqrt(q);if(s .01)t=s,n=!(p+d*t),m=2;))დაბრუნება m;)

T (Tracer) ფუნქცია პასუხისმგებელია მოცემული წერტილიდან (o) სხივის გადაგდებაზე მოცემული მიმართულებით (d). ის აბრუნებს მთელ რიცხვს, რომელიც არის სხივის სროლის შედეგის კოდი. 0 - სხივი ცაში ავიდა, 1 - სხივი იატაკში შევიდა, 2 - სხივი დაეჯახა სფეროს. თუ სფერო მოხვდა, ფუნქცია განაახლებს ცვლადებს t (პარამეტრი, რომელიც გამოიყენება გადაკვეთის მანძილის გამოსათვლელად) და n (ნახევრად ვექტორი სფეროდან გადახრისას).

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

// ხაზების გადაკვეთის ტესტი // დააბრუნეთ 2, თუ სფერო მოხვდა (ასევე გადაკვეთის მანძილი t და ნახევრად ვექტორი n). // დააბრუნეთ 0, თუ სხივი არაფერს მოხვდება და ავიდა ცაში // დააბრუნეთ 1, თუ სხივი არაფერს მოხვდება და დაეცემა იატაკში i T(v o,v d,f& t,v& n)( t=1e9 i m=0 f p=-o.z/d.z; 0)( // დიახ. გამოთვალეთ მანძილი კამერიდან სფერომდე f s=-b-sqrt(q); if(s .01) // ეს არის მინიმალური მანძილი, შეინახეთ. და ასევე // გამოთვალეთ მბრუნავი სხივის ვექტორი და ჩაწერეთ "n" t=s, n=!(p+d*t), m=2; ) ) დაბრუნება m; )

ლიტის ნომერი

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

Fabien$ wc card.cpp 35 95 1337 card.cpp - ბევრი მათემატიკა, მაგრამ ყველაფერი დეტალურად და ნათლად არის ახსნილი.

Წინასიტყვაობა

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

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

შესავალი

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

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

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

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

პრობლემა

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

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

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

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

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

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

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

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

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

უახლესი მასალები განყოფილებაში:

ფროიდიზმისა და არაფროიდიზმის ფილოსოფია ფროიდიზმის საფუძვლები
ფროიდიზმისა და არაფროიდიზმის ფილოსოფია ფროიდიზმის საფუძვლები

ფროიდიზმის ფუძემდებელია ავსტრიელი ფსიქიატრი და ფსიქოლოგი ზიგმუნდ ფროიდი (1856-1939). ფროიდის იდეებზე დაყრდნობით მათი შევსება და გარკვევა...

ცივი ომის მოვლენების ქრონოლოგია
ცივი ომის მოვლენების ქრონოლოგია

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

ლათინური ამერიკის ქვეყნების ეკოლოგიური პრობლემები 21-ე საუკუნეში
ლათინური ამერიკის ქვეყნების ეკოლოგიური პრობლემები 21-ე საუკუნეში

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