წარმოვიდგინოთ გვაქვს ფოტოკამერით გადაღებული სურათი, რომელზეც რაიმე სცენაა ასახული მასზე არსებული სხვადასხვა ობიექტებით და ჩვენ გვსურს, რომ ჩვენი რაიმე ვირტუალური 3D ობიექტი ჩავსვათ ამ სცენაში და დავარენდეროთ ისე, რომ ის ბუნებრივად მოერგოს გარემოს და შესაბამისად შეიქმნას განცდა თითქოს ის მართლაც იმ გარემოში იყო სურათის გადაღებისას. ეს ამოცანა საკმაოდ მოთხოვნადია სხვადასხვა ტიპის ოფლაინ თუ ონლაინ რენდერერებში. ამ პრობლემის გადასაჭრელად არსებობს რამოდენიმე მიდგომა:
- პირველი როდესაც ჩვენ გვსურს საბოლოო გამოსახულების მიღება მთლიანად რენდერერის შიგნით. ასეთ შემთხვევაში ჩვენ რენდერერს ვაძლევთ როგორც სცენას ასევე ფონურ გამოსახულებას ხოლო ის აბრუნებს სურათს სადაც მითითებული ვირტუალური ობიექტი მოცემულ ფონურ სურათზე არსებულ გარემოშია მოთავსებული.
- მეორე როდესაც რენდერერი იძლევა სურათს რომელზეც მოცემულია ჩვენი მითითებული ვირტუალური ობიექტი ხოლო სურათის დანარჩენი ნაწილი ძირითადად გამჭვირვალეა. ასეთ შემთხვევაში მიღებული ნახევრადგამჭვირვალე სურათი შეგვიძლია დავაფაროთ ჩვენს პირველად სურათს, რომლის შესახებაც რენდერერმა არაფერი იცის და რაც უკვე რენდერერს გარეთ შეიძლება მოხდეს(მაგალითად ფოტოშოპში) და საბოლოოდ მივიღებთ სასურველ შედეგს. ამ მეთოდს უწოდებენ რენდერს ალფა კანალით. (ალფათი რენდერი ცალკე კიდევ 2 ნაწილად იყოფა რომელზეც ცალკე ვისაუბრებთ.)
მოცემულ 2 მეოდს შორის განსხვავება მხოლოდ ისაა რომ საბოლოოდ მათი სხვადასხვანაირი გამოყენება ხდება თუმცა რენდერის კუთხის მათ შორის დიდი განსხვავება არაა. უბრალოდ უნდა აღინიშნოს რომ იმის გამო რომ მეორე ვარიანტში რენდერერმა ფონურ სურათზე არაფერი იცის მის მიერ მიღებული შედეგი უფრო არასწორია.
იმისათვის რომ რენდერერმა შეძლოს ვირტუალური ობიექტის მოთავსება გარემოში რომელიც ფონზეა ასახული მას უნდა ჰქონდეს რაიმე ინფორმაცია ფონზე არსებული ობიექტების გეომეტრიის და მატერიალის შესახებ. საუკეთესო შემთხვევაში თუ ჩვენ დავუშვებთ რომ ფონზე არსებული გამოსახულების შესაბამისი სცენა რენდერერისათვის მთლიანაც ცნობილია მაშინ იდეალური რენდერერის მიერ დარენდერებული ეს სცენა ზუსტად უნდა დაემთხვეს ფონზე არსებულ გამოსახულებას. თუკი გამოსახულებას შევხედავთ როგორც სინათლის გადამტანი გზების სიმრავლეს მაშინ ადვილი მისახვედრია რომ თუკი ამ სცენაში რაიმე ობიექტს მოვათავსებთ ის მხოლოდ იმ გზებს შეცვლის რომლებიც ახალი ობიექტის ადგილას გადიოდნენ ხოლო ახლა მას ხვდებიან და ირეკლებიან სხვა მიმართულებით. ყველაფერ ამის გათვალისწინებით რენდერერის მთავარი ამოცანაა განათების გადამტანი სინათლის გზების გამიჯვნის საფუძველზე მოახდინოს რენდერი რომელიც არსებულ ფონურ გამოსახულებაში შეიტანს ცვლილებებს. პრაქტიკული ამოცანა ცოტა უფრო რთულია, როდესაც ფონური გამოსახულება არის კამერით გადაღებული რეალურად შეუძლებელია მასზე არსებული ობიექტების იდეალურად ზუსტი მოდელირება. პრაქტიკულად ხდება მხოლოდ მისი ძალიან მცირე ნაწილის მოდელირება(როგორც გეომეტრიის ასევე მატერიალების), ობიექტების რომლებიც შედარებით ახლოს არიან იმ ადგილთან სადაც ვაპირებთ ჩვენი ობიექტის ჩასმას მომავალში და მეტი ალბათობით შეიძლება ხდებოდეს განათების სხივების ინტერაქცია ერთი ობიექტიდან მეორეზე.
გარდა კომპოზიტინგის იმ 2 საშუალებისა რომელიც ზემოთ ვახსენეთ ასევე გამოყოფენ 2 სხვადასხვა ტიპის რენდერს, რომელსაც საჭიროება განსაზღვრავს:
ალფათი რენდერის მთელი სირთულე არის ალფას სწორად გამოთვლაში. ალფათი რენდერის დროს ხდება წინა და ფონურ სურათზე არსებული პიქსელების შერევა ალფას პროპორციულად. რაც ბევრად უფრო გამარტივებული ვარიანტია და შესაძლოა ძალიან არასასურველი შედეგი მოგვცეს როდესაც სცენაში არის უხეში, ბუნდოვნად გამჭვირვალე ზედაპირები, ან ზედაპირები რომლებიც სხივებს გარდატეხავენ(მაგალითად შუშა). ზემოთ მოცემულ სურათზე ნაჩვენებია ალფათი რენდერი. მარცხნიც არის მოცემული RGB რენდერის შედეგი, შუაში შესაბამისი ალფა კანალი, ხოლო მარჯვნივ საბოლოო შედეგი. ალფათი რენდერის 2 ვარიანტს გამოყოფენ:
![]() |
სურათზე მოცემულია 2 სხვადასხვა ფონური გამოსახულება და შესაბამისი გარემომცველი განათება |
გარდა კომპოზიტინგის იმ 2 საშუალებისა რომელიც ზემოთ ვახსენეთ ასევე გამოყოფენ 2 სხვადასხვა ტიპის რენდერს, რომელსაც საჭიროება განსაზღვრავს:
- როდესაც ვარენდერებთ რაიმე განსაზღვრულ ფონზე. ხშირად ეს ფონი შეიძლება იყოს სურათი ან ვიდეოს კადრები როდესაც ანიმაციაში გვსურს ვირტუალური ობიექტის ჩასმა.
- როდესაც ხდება გარემომცველი განათების გამოყენება ფონად. ასეთ დროს უკანა ფონი არ გვაქვს და HDRI-ს ვიყენებთ მის მაგივრად.
ამ ორ ვარიანტს შორის პრინციპული განსხვავება რენდერერისათვის თითქმის არ არსებობს, თუმცა მომხმარებლის მხრიდან სხვადასხვა დროს სხვადასხვა ტიპის რენდერი არის საინტერესო.
ერთერთი უმნიშვნელოვანესი კომპონენტი ასეთი რენდერის დროს არის განათება. უმეტეს შემთხვევაში მომხმარებლები იყენებენ უკანა ფონს და გარემომცველ განათებას ან მხოლოდ გარემომცველ განათებას, თუმცა ხანდახან მხოლოდ გარემომცველი განათება(HDRI) არ არის საკმარისი გარემოში არსებული განათების აღსაწერად და საჭირო არის დამატებითი განათებების გამოყენება. ძალიან მნიშვნელოვანია გვესმოდეს რომ ყოველი განათება რომელსაც ამ დროს ვქმნით რენდერერში ღწერს განათებას რომელიც ასახულია უკანა ფონზე. სხვა სიტყვებით, რომ ვთქვათ სცენაში განათებების დამატებით ჩვენ ვცდილობთ იმ განათების მოდელირებას რომელიც წინასწარ გადაღებულ უკანა ფონზე არის ასახული.
რა ხდება როდესაც ვირტუალურ ობიექტს რომელიც გვსურს რომ სცენაში ჩავამატოთ აქვს განათებები?? (მაგალითად მანქანა რომელსაც აქვს ფარები) ასეთ შემთხვევაში ეს განათებები დამატებით უნდა მოინიშნოს როგორც განათებები რომლებიც ფონურ სურათზე არსებულ განათებას არ ასახავს არამედ ახალია. ეს ძალიან მნიშვნელოვანია. ასეთ შემთხვევაში რენდერერმა უნდა შეძლოს როგორც ვირტუალური ობიექტების ასევე უკანა ფონზე არსებული ობიექტების განათება ახალი განათებით.
![]() |
ვირტუალური ობიექტი განათებით. წყარო |
![]() |
წყარო |
- რენდერი სადაც RGB გამოსახულება უკვე გადამრავლებულია ალფაზე. ამ ვარიანტს უწოდებენ წინასწარ გადამრავლებულ ალფას.(premultiplied alpha). თუკი ასეთ რამოსახულებას დავადებთ რაიმე ფონზე შეიძლება შევამჩნიოთ ობიექტებს კიდეებში არასასურველი ფერის კანტები აქვთ. ამ პრობლემას ხსნის რენდერის მეორე ვარიანტი.
- როდესაც RGB რენდერი არაა ალფაზე გადამრავლებული. ასეთ დროს RGB კანალში გამოსახულების კიდეებზე ალიასინგის არტიფაქტები ჩანს თუმცა ასეც უნდა იყო, მისი მოშორება მოხდება მაშინ როცა RGB გამოსახულება გამრავლდება ალფაზე და შეერევა ფონს. იხილეთ ქვემოთ მოცემული სურათი.
![]() |
RGB რენდერი რომელიც არაა გადამრავლებული ალფაზე. წყარო |
ხშირ შემთხვევაში სხვადასხვა რენდერერები სხვადასხვანაირად ახდენენ ამ ფუნქციონალის იმპლემენტაციას(ზოგი მეტნაკლებად სრულად, ზოგიც ნაწილობრივ) და შესაბამისად პარამეტრების კონტროლიც შესაძლოა განსხვავდებოდეს ერთმანეთისგან თუმცა პრინციპი ყველგან ერთია და მისი ცოდნა უნდა დაეხმაროს არტისტებს ამ ფუნქციონალთან მუშაობის დროს.
Comments
Post a Comment