Skip to main content

სფერული განათების შერჩევა

Sampling Spherical Light
        გზების მიდევნების მეთოდში განათების შერჩევა გულისხმობს განათებისკენ მიმართული ვექტორების გენერირებას. განათების შერჩევა განსაკუთრებით ეფექტურია როდესაც ზედაპირის მოცემულ წერტილში განათების მიერ შედგენილი კუთხე არის მცირე და BRDF-ის შერჩევით განათების მოხვედრის ალბათობა მცირეა.
        განვიხილოთ სფერული განათების შერჩევის პროცესი. სფერული განათების შერჩევისას არსებული შემთხვევები შეგვიძლია გავყოთ 2 ნაწილად: როდესაც წერტილი ექცევა სფეროს შიგნით და როდესაც არის გარეთ. პირველ შემთხვევაში ნებისმიერი შერჩეული ვექტორი აუცილებლად განათებისკენაა მიმართული, ასე რომ საკმარისია მოვახდინოთ მიმართულების შემთხვევითი თანაბარი შერჩევა. ახლა განვიხილოთ შემთხვევა, როცა წერტილი განათების გარეთაა(იხილეთ ზემოთ მოცემული სურათი). სიმარტივისთვის შემთხვევა განვიხილოთ 2 განზომილებაში. წერტილი რომლისთვისაც ვახდენთ მიმართულებების შერჩევას აღვნიშნოთ P-თი, სფეროს ცენტრი O-თი ხოლო რადიუსი r-ით. პირველ რიგში უნდა დავითვალოთ სფეროს ცენტრამდე მანძილი d=|O-P|. შემდეგ უნდა გამოვთვალოთ სფეროს მიერ P წერტილის მიმართ შედგენილი კუთხე. კონუსის წვეროსთან არსებული კუთხე რომელსაც კონუსის მსახველი ადგენს ღერძთან აღვნიშნოთ α-თი. ნახაზიდან კარგად ჩანს რომ sin(α)=r/d; α=asin(r/d). ახლა, როცა უკვე ვიცით განათებისკენ მიმართული კონუსის წვეროსთან არსებული კუთხე α, შეგვიძლია მოვახდინოთ მიმართულებების შერჩევა კონუსში ლოკალურად. ეს ამოცანა განვიხილოთ ცალკე.
        პირველი რაც თავში შეიძლება მოგივიდეთ ამ დრო არის ის, რომ სასურველი გაშლილობის მქონე კონუსში მიმართულებების გენერირება ადვილად შეიძლება გაკეთდეს სფერული კოორდინათთა სისტემის დახმარებით, თუმცა აქ არ უნდა დაგვავიწყდეს ერთი მნიშვნელოვანი მომენტი. სფერული კოორდინათთა სისტემაში Φ და Θ-ს თანაბარი შერჩევის დროს პოლუსებთან უფრო მეტი სიმკვრივით ხდება შერჩევა ამიტომ ეს პრობლემა უნდა მოვაგვაროთ. ცხადია ამისთვის Θ-ს შერჩევა თანაბრად არ უნდა მოხდეს.

//function calculates normalized uniform random vector directed within cone
Vector3 uniformRandomDirectionWithinCone( double cosMaxTheta )
{
    Vector3 dir;
    const double Phi = TWO_PI*random01();

    dir.z = cosMaxTheta+(1.0-cosMaxTheta)*random01();
    double sinAlpha = sqrt(1.0-dir.z*dir.z);
    dir.x = cos(Phi)*sinAlpha;
    dir.y = sin(Phi)*sinAlpha;
 
    return dir;
}
        ფუნქცია თავისმხრივ იოლი ნამდვილად არაა, რადგან შეიცავს თითო სინუს/კოსინუსს(რომლის გამოთვლაც ხდება ტეილორის მწკრივებით და საკმაოდ მძიმეა), ფესვის ამოღებას და 2 შემთხვევითი რიცხვის გენერაციას. შესაბამისად თუ თქვენთვის მიუკერძოებლობა ნაკლებად მნიშვნელოვანია შეგიძლიათ ხსვა ხერხს მიმართოთ.

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 განსხვავებულ ფერს.