PovRay istifadə edərək dərinlik xəritələri yaratmaq

Müəllif Paul Bourke
Sentyabr 2019


Aşağıda PovRay istifadə edərək dərinlik xəritələrini necə yaratmağın qısa bir təlimatı var. Stereoskopiyada müxtəlif tətbiqetmələr var ki, niyə bunu etmək istəyə bilər, amma yazı zamanı motivasiya FaceBooks “3D model” şəkilləri üçün dərin xəritələr yaratmaq idi. Bunlar bir izləyiciyə baxış nöqtəsini soldan sağa-yuxarıdan biraz dəyişməsinə imkan verən əlaqəli dərinlik xəritəsi xəritəsi ilə birlikdə bir şəkil çəkir.

Bir 3D model yükləndikdə FaceBook’un qəbul etdiyi bir nümunə aşağıda göstərilmişdir. Bu eyni adlı, lakin “_depth” əlavəsi olan ikincil şəkil ilə əsas görüntüdən ibarətdir. Aydındır ki, bunların uyğunlaşması gözlənilir, yəni eyni baxımdan göstərilmişdir. Bu ikincili görüntüdə ağ rəng kameraya yaxın olan obyektlərə, qara rəng isə uzaqdakı obyektlərə aiddir.


İlkin şəkil: Elephant.png

Orta şəkil: Elephant_depth.png

Dərinlik xəritələri müxtəlif yollarla yaradıla bilər. Məsələn, demək olar ki, daimi dərinlikdəki bölgələri əl ilə maska edə bilərsiniz və bir şəkil düzəliş paketində dərinlik xəritələri yarada bilərsiniz. Dərinlik xəritələri bir obyektin və ya səhnənin bir sıra (2 və ya daha çox) fotoşəkilini çəkmək və fotogrammetrik üsullardan istifadə edərək dərinlik xəritələrini əldə etməklə yaradıla bilər. Burada müzakirə edərkən yalnız mövcud 3D modelin dərinlik xəritələrini yaratmaq üçün PovRay-dan necə istifadə edəcəyimizi təqdim edəcəyik. Prinsiplərin, ehtimal ki, digər göstərilən paketlərdə oxşar olması mümkündür, lakin terminologiya fərqli olacaqdır. Məsələn, aşağıda bir gradient piqmentə istinad digər paketlərdə şader adlanır.

Dərinlik xəritələrini yaratmaq üçün istifadə edilə bilən PovRay-ın əsas xüsusiyyətləri “gradient” piqmenti və “colour_maps” ın birləşməsidir. Bir gradient piqment, cismin səthindəki bir nöqtənin yerindəki mövqeyindən asılı olaraq 0 ilə 1 arasında bir sıra yaradır. Colour_map, həmin dəyəri qara-ağ rampa xəritələşdirmək üçün istifadə olunur ki, nəticədə dərinliyə qaytarılır. Doku üçün aşağıdakı PovRay kod parçası istifadə edilə bilər.

   #declare thetexture = texture {
      pigment { 
         gradient z
         color_map {
            [0 color rgb <0,0,0> ]
            [1 color rgb <1,1,1> ]
          }
         scale <1,1,ZMAX-ZMIN>
         translate <0,0,ZMIN>
      }
      finish { ambient 1 diffuse 0 specular 0 }
   }

Yuxarıda qeydlər:

  • Modelin istiqamətlənmiş olduğu güman edilir, nəzərdə tutulmuş dərinlik xəritəsi z oxu boyunca. Kamera mövqeyi eynilə z oxu boyunca olduğu güman edilir.

  • ZMIN və ZMAX dəyişənlərinin əvvəlcədən elan olunduğunu güman edir, bu xəritələr 0 -> 1-dən zmin -> zmax-a qədər dəyişir.

  • Gradient piqmenti dövri olur, buna görə model dərinliyini sərhədlərlə əhatə etmək lazımdır. Ölçək və tərcümə əmrlərinin əldə etdiyi şey budur.

  • Modelin həndəsəsi bir union{} qurumunun daxilində olduğu və mövcud toxumaların tətbiq edilmədiyi qəbul edilir. Misal üçün

    union { 
       object { modelpart1 }
       object { modelpart2 }
           etc
       texture { thetexture }
    }
    

Başqa bir misal. Bu və sonuncu, Sukhothai, Taylandda bir stupanın qurulduğu bir platforma tutan kərpic fillərdir.



Şərq Malayziya, Kuching şəhərindəki Siew San Teng məbədindən nümunə.