Ray Marching
 |
ნისლიანი ტყე დარენდერებული მთლიანად სხივზე მარშირების მეთოდით. სურათი აღებულია Iñigo Quílez-ის საიტიდან. |
სხივზე მარშირება არის ვიზუალიზაციის ერთ-ერთი მეთოდი, რომლის საშუალებითაც ხდება ვიზუალიზაცია, სადაც ხილვადობის ამოცანა წყდება სხივზე მარშირების გზით. მარშირება იწყება სხივის სათავიდან და ხდება სხივის გასწვრივ მანამ, სანამ ზედაპირს არ მივუახლოვდებით წინასწარ განსაზღვრულ მანძილზე ახლოს. თუკი ბიჯების წინასწარ განსაზღვრული რაოდენობის გავლის შედეგაც ზედაპირთან სათანადოდ მიახლოვება არ მოხდა ეს ნიშნავს, რომ თანაკვეთა ვერ ვიპოვეთ. იმისათვის რომ მოვახდინოთ მარშირება მაგალითად 3 განზომილებიან სცენაში საჭიროა სცენის თინოეული წრტილისათვის ვიცოდეთ უახლოეს ზედაპირამდე მანძილი. ზოგ შემთხვევაში, ძირითადად მარტივ სცენებში ამისი დადგენა ხდება მარშირების პროცესშივე თუმცა რთული სცენების შემთხვევაში ხშირად გამოიყენება გადათვლილი ინფორმაცია, რომელიც შენახულია მოსახერხებელი ფორმით ამაჩქარებელ სტრუქტურაში. ინფორმაციას, რომელიც სცენის თითოეული წერტილისათვის უახლოეს ზედაპირამდე მანძილს ინახავს უწოდებენ მანძილების ველს(Distance Field). აქვე უნდა აღინოშნოს, რომ დიდი ნაწილი ოპერაციებისა მანძილების ველზე საკმაოდ ადვილია, მაგალითად თუ გვსურს 2 ასეთი ველის გაერთიანება საჭიროა მათი ელემენტებიდან მინიმუმების არჩევა.
არსებობს მარშირების სხვადასხვა ვარიაციები. ყველაზე მარტივ შემთხვევას წარმოადგენს
თანაბარი ბიჯით მარშირება. როგორც სახეწოდებიდან ჩანს ხდება მარშირების ბიჯის ზომის განსაზღვრა და ამის შემდგომ სხივზე მარშირება ხდება თანაბარი ბიჯით. თანაბარი ბიჯით მარშირებას აქვს პრობლემები, რომლებიც შემდგომ ვიზუალური ხარვეზებს წარმოშობს. მაგალითად თანაბარი ბიჯით მარშირების დროს ნაბიჯევს შორის შესაძლოა ხდებოდეს რეალური თანაკვეთა თუმცა ნაბიჯების პოზიციებსზე ზედაპირამდე მანძილი ფიქსირებულ ზღვარზე დიდი იყოს, რაც მოგვცემს იმას, რომ თანაკვეთას ვერ ვიპოვით.
 |
ფიქსირებული ბიჯით მარშირება. შემთხვევა როდესაც ვერ ვპოულობთ არსებულ თანაკვეთას. წრეწირებით ნაჩვენებია ზედაპირის ძებნის რადიუსი. |
სფეროებით მარშირების შემთხვევაში, მარშირების თითოეულ ბიჯზე ვიღებთ მანძილს უახლოეს ზედაპირამდე და მშვიდად გადავადგილდებით სხივზე ამ მანძილით.
 |
სფეროებით მარშირება. თანაკვეთის პოვნა მოხდა მე-13 ბიჯზე, როდესაც უახლოეს ზედაპირამდე მანძილი დასაშვებზე ნაკლები აღმოჩნდა. |
მარშირების ეს მეთოდი ბევრ შემთხვევაში ჯობნის თანაბარი ბიჯით მარშირებას რადგან ის უფრო ზუსტია და სფეროებით მარშირებისას ჩვენ არ გადავახტებით გეომეტრიას. თუკი ფიქსირებული ბიჯით მარშირებისას ზუსტად შეგვეძლო იმის თქმა თუ რამდენი ბიჯია საჭირო სხივზე გარკვეული მანძილის გასავლელად, სფეროებით მარშირების შემთხვევაში ბიჯების რაოდენობა პირდაპირ დამოკუდებულია იმაზე თუ რა გზას გადის ესა თუ ის სხივი სივრცეში. სხივები რომლებიც მოძრაობენ სცენაში არსებულ ზედაპირებთან ახლოს თუმცა არ კვეთენ მას გადაადგილდებიან მოკლე ნაბიჯებით, რაც ფიქსირებული მანძილის გავლისათვის საჭირო ბიჯების რაოდენობას ზრდის.
 |
სურათის თითოეული პიქსელი უჩვენებს მარშირებისას ბიჯების რაოდენობას. ბიჯების მაქსიმალური რაოდენობა ტოლია 64-ის. (სწარო) |
როგორც სურათზე ჩანს დიდი რაოდენობით ბიჯები არის საჭირო იმ სხივებისათვია რომლებიც გეომეტრიულ ზედაპირებს ჩაუვლიან ახლოს. ეს ხშირ შემთხვევაში სერიოზულ პრობლემას წარმოადგენს თუმცა გარკვეულ სცენებში იტერაციების რაოდენობას იყენებენ
გარემომცველი წინაღობის ეფექტის მისაღებად, რაც საკმაოდ დამაკმაყოფილებელ შედეგს იძლევა. თუმცა ასევე შესაძლებელია ამ ეფექტის მიღება ტრადიციული ხერხითაც როდესაც სხივების გამოშვება თანაკვეთის წერტილიდან ხდება.
 |
სურათზე ნაჩვენებია 3D ფრაქტალი. მარჯვენა სურათზე იტერაციების რაოდენობის ინფორმაცია გამოყენებული AO-ს მისაღებად. (წყარო) |
ასევე უნდა აღინიშნოს, რომ ამ მეთოდით შესაძლებელია ბევრი საინტერესო ეფექტის მიღება ძალიან ადვილად, ისეთი როგორიცაა: ბულიან ოპერაციები სივრცულ ობიექტებზე, ობექტების გაღუნვა, დახვევა,
ამოზნიქვა, ....
 |
სურათზე ნაჩვენებია გეომეტრიული პრიმიტივები და სხვადასხვა ოპერაციები მათზე. (წყარო) |
სხივზე მარშირების პროცესში ჩვენ პირდაპირ გვაქვს ცოდნა იმისა თუ რა მანძილზე ხდება უახლოეს ზედაპირთან მიმართებაში მოძრაობა. დიდი განათების დროს დაცემულ ჩრდილზე გვაქვს ნაწილობრივად და სრულად დაჩრდილული რეგიონები (umbra/penumbra), რასაც ჩვენ რბილ ჩრდილებს ვეძახით. შესაბამისად ინფორმაცის რომელსაც სხივზე მარშირებისას ვაგროვებთ გვეხმარება რბილი ჩრდილების მიღებაში. მანძილების ვერლში მარშირებით მიღებული რბილი ჩრდილების მეთოდის მხარდაჭერა მოხდა ასევე Unreal Engine 4-ში. ეს მეთოდი რა თქმა უნდა არაა ფიზიკურად სწორი მეთოდი თუმცა მიღებული ეფექტი საკმაოდ დამაკმაყოფილებელია და რაც მთავარია მისი გამოთვლა სწრაფად ხდება.
 |
მანძილების ველში სხივზე მარშირებით მიღებული რბილი ჩრდილები Unreal Engine 4-ში. |
გარდა ზედაპირებისა სხივზე მარშირების მეთოდი ძალიან გავრცელებულია სივრცული რენდერში, რასაც შემდგომში უფრო დეტალურად განვიხილავთ.
Comments
Post a Comment