Skip to main content

კომპოზიცია უკანა ფონზე

Backplate Compositing

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

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

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


Comments

Popular posts from this blog

CPU GPU და ჰიბრიდული რენდერერები

წყარო         დღემდე აქტუალურია თემა CPU რენდერერი ჯობია თუ GPU . იმისათვის რომ ამ კითხვას მეტნაკლებად ამომწურავი პასუხი გავცეთ განვიხილოთ რენდერერის სტრუქტურა და მოცემულ პლათფორმებზე იპმლემენტაციასთან დაკავშირებული პრობლემები. რენდერერი შედგება რამოდენიმე დიდი კომპონენტისგან როგორიცაა ხილვადობის ამოცანა შეფერადება ინტეგრატორები ფუნქციონალი ხილვადობის ამოცანა         ხილვადობის ამოცანა ერთერთი ყველაზე რთულია გამოთვლითი რესურსის კუთხით. გარდა იმისა, რომ სხივის გეომეტრიასთან თანაკვეთის დათვლას საკმაოდ დიდი დრო ჭირდება, ასევე საჭიროა ამაჩქარებელ სტრუქტურების განახლება კადრიდან კადრზე დინამიური სცენებისათვის. კარგი ისაა, რომ რენდერერის ეს ნაწილი საკმაოდ ადვილად ენკაპსულირებადია და შესაბამისად გვხვდება ბიბლიოთეკები მაგალითად embree(intel), fireRays(AMD), OptiX prime(nvidia), ... რომლებიც ამ ამოცანას საკმაოდ ეფექტურად ხსნიან და რენდერერებშიც მეტნაკლებად ადვილად ინტეგრირდებიან.  სხივების მიდევნების პროცესში ძალიან მნიშვნელოვანია მსგავსი გამოთვლების ლოკალიზება და არსებული SIMD

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

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

ფერების RGB მოდელი

RGB Color Model         ფერების RGB მოდელი წარმოადგენს ისეთ მოდელს რომელშიც სამი ძრირითადი ფერის წითელი, მწვანე და ლურჯის საშუალებით მიიღება ფერების ფართო სპექტრი. მისი დასახელებაც მოდის სწორედ ძირითადი ფერების ინგლისური სახელწოდების ინიციალებიდან(Red, Green, Blue).         ფერთა სპექტრის ამდაგვარი წარმოდგენა დაკავშირებულია იმასთან, რომ გამოსახულების გამოტანის მოწყობილობებში რომელიც გააჩნიათ კომპიუტერებს, ტელევიზორებს ფერის მიღება ფიზიკურად ხდება სწორედ ამ სამი ძირითადი ფერის შეზავებით. დღესდღეობით ყველაზე გავრცელებული არის 24 ბიტიანი RGB მოდელი, სადაც თითოეულ კომპონენტს ეთმობა ერთი ბაიტი და შესაბამისად შეუძლია მიიღოს ნებისმიერი მნიშვნელობა [0, 255] დიაპაზონში, რაც საბოლოოდ გვაძლევს 16777216 განსხვავებულ ფერს.