270 likes | 513 Views
3B Görüntüleme III. İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü. Görünür Yüzey Tespiti.
E N D
3B Görüntüleme III İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü
Görünür Yüzey Tespiti • Görüntülenmek istenen 3B sahnedeki nesnelerin hangi kenar veya yüzeylerinin görünebilir olduğunun tespit edilmesi, görünmeyen kısımların “render” edilmeyerek performans artışı sağlaması açısından önemlidir. • Bir nesnenin (veya bir yüzeyin) görünmemesi başka bir nesne (veya yüzey) tarafından örtülmüş olması ya da görüntüleme hacminin dışında kalması nedeniyledir. • Kırpma düzlemleri ile görüş hacmi dışında kalmak suretiyle görünmeyen yüzey ve nesnelerin ayıklanması yapılır.
Görünür Yüzey Tespiti • Bir nesnenin başka bir nesneyi örtmesi (occlusion) durumunda görünmeyen nesnelerin (yüzeylerin) tespiti için başka algoritmalar geliştirilmiştir. • Bu işlemlere ayrıca gizli yüzeylerin çıkarılması (hiddensurfaceremoval) adı verilir. • Görünür yüzey tespiti algoritmaları iki sınıfta toplanır • Nesne uzayı (objectspace)algoritmaları: Sahnedeki nesneler üzerinde kullanılır. • Resim uzayı (imagespace)algoritmaları: Nesnelerin ekran koordinatları ile belirlenen izdüşümlerine uygulanır.
Resim Uzayı Algoritmaları • Çizdirilecek piksellerin hangi nesneye ait olduklarını belirleyen algoritmalardır. • Bu algoritmaların çalışma zamanı karmaşıklığı piksel sayısı * nesne sayısıdır. • Alan karmaşıklığı (spacecomplexity) ise 2 * piksel sayısıdır. • Bir piksel dizisi görüntü karesi arabelleği (framebuffer) içindir. • Diğeri ise derinlik arabelleği (depth buffer) içindir. • Yüzeylerin birbirleriyle ahenkli (uyumlu) olmasından yararlanılabilir.
Derinlik İması (DepthCueing) • Bazı durumlarda gizli yüzeyleri tamamen kaldırmak yerine daha farklı etkilerle (renk yoğunluğu, gölge vb.) görüntülenerek nesnenin üçüncü boyutu olduğu vurgulanır. • Basit bir yöntem olarak şekillerin uzaklığına bağlı farklı renkler veya renk yoğunlukları kullanımından söz edilebilir.
Arka Yüzün Tespiti • Bir yüzeyin ön ve arkasının tespiti kolaydır. • Bunun için öncelikle yüzeyin normalini (N) hesaplamak gerekir. Daha sonra görüntüleme yönü vektörü (V) ile normalin nokta çarpımından yüzeyin hangi yüzünün görüntülendiği anlaşılır. • Eğer V • N > 0 ise söz konusu yüzey arka yüzdür.
Arka Yüzün Tespiti • Bir yüzeyin normal vektörünün yönü, çokgenin arka yüzünden ön yüzüne doğrudur. • Normal vektörü ise çokgenin iki kenarının saatin tersi yönünde vektörel çarpımı ile bulunur. V3 N = (V2 – V1) X (V3 – V2) N V2 V1
Arka Yüzün Tespiti • Görüntülemenin –z ekseni yönünde olduğu durumda yüzey normali N = (A, B, C) şeklinde ifade edilirse, C ≤ 0 durumunda o yüzeyin arkada olduğu anlaşılır. • C = 0 durumunda herhangi bir yüzey görünmeyeceğinden arka yüze dahil edilir. • Arka yüz tespiti ile dışbükey ve üst üste gelmeyen çok yüzlü cisimlerin bulunduğu bir sahnedeki bütün gizli yüzeyler bulunabilir. • Ancak gerçekte yüzeyler çakışabildiğinden, ilave yöntemlere ihtiyaç vardır.
Derinlik Arabelleği Yöntemi • Aynı zamanda z-arabelleği (z-buffer) yöntemi olarak da bilinir. • Her yüzey bir anda bir piksel konumuna göre ayrı ayrı ele alınır. • Bir piksel için derinlik değerleri mukayese edilir ve en yakındaki yüzey (en düşük z değeri) görüntü karesi arabelleğinde yer alacak rengi belirler. • Çokgen yüzeyleri üzerinde oldukça etkilidir. • Yüzeyler herhangi bir sırada ele alınabilir.
Derinlik Arabelleği Yöntemi • Görüntü karesi arabelleği (framebuffer)ve derinlik arabelleği (depthbuffer) birlikte kullanılır. • Derinlik değerleri (z koordinatları) genelde [0,1] aralığındaki değerlere dönüştürülür.
Algoritma • Derinlik arabelleği ve görüntü karesi arabelleği depthBuff (x,y) = 1.0, frameBuff(x,y) = ArkaplanRengi olacak şekilde ayarlanır. • Sahnedeki her çokgenin bir anda bir tanesi alınır. • Her çokgenin izdüşümü alınmış (x,y) piksel konumu için z derinliği hesaplanır. • Eğer z <depthBuff(x,y), o konumdaki yüzey rengi hesaplanır ve geçerli hale gelir. (depthBuff (x,y) = z, frameBuff (x,y) = surfCol (x,y)) • Bir çokgenin köşe noktalarından sonra diğer noktaların derinliği için çokgen yüzey denkleminden değerleri bulunur. • Yan yana olan dikey veya yatay konumların arasında 1 birim fark vardır. Böylece bir sonraki (x+1,y) nin derinlik değeri için yi bulmak yeterlidir.
Algoritma • Ayrıca http://www.cs.technion.ac.il/~cs234325/Applets/applets/zbuffer/GermanApplet.html voidzBuffer(){ int x, y; for(y =0; y < YMAX; y++) for(x =0; x < XMAX; x++){ WritePixel(x, y, BACKGROUND_VALUE); WriteZ(x, y,1); } for each polygon { for each pixel in polygon’s projection { //plane equation doublepz= Z-value at pixel (x, y); if(pz<ReadZ(x, y)){ // New point is closer to front of view WritePixel(x, y, color at pixel (x, y)) WriteZ(x, y,pz); } } } }
Avantajları • Kaba kuvvet yapısına ve her pikselin defalarca üzerinden geçiliyor gibi görünmesine rağmen donanımda kodlanması ve çalışması çok kolay ve hızlıdır. • Hiçbir ön işleme gerek kalmadan çokgenleri herhangi bir sırada işleme alabilir. • Görüntüye eklemeli ilaveler yapar, iki arabelleği kullanır ve yeni çokgenleri çizdirir. • Her piksel için kaybolan ahenk ve çokgen kimliği nedeniyle bunun tam tersini yapamamaktadır. • Basit yüzey tanımlamaları için idealdir.
Dezavantajları yakın uzak z • Perspektifte küçültmeler nedeniyle perspektif sonrası hacimde z ekseninde sıkışmalar olur. • Kameradan çok uzaktaki nesnelerin z değerleri birbirine çok yakındır. • Tam sayı değerleri ile işlem yapıldığında derinlik bilgisindeki hassasiyet kaybolur. • z kavgasına sebebiyet verebilir. Öncesi 0 1 x z x Sonrası
Z Kavgası • İki temel bileşenin z arabelleğinde aynı değere sahip olması durumunda oluşan görüntü bozukluğuna Z kavgası denir. • İki yüzeyden rastgele biri seçilerek diğer yüzeyin üzerinde görüntülenir ancak o piksel için z değeri iki yüzey arasında sürekli gidip gelerek farklı renklerin çekişmesi görüntüsüne neden olur. • Bu davranış deterministiktir, yani aynı kamera konumu sürekli aynı kavga görüntüsünü verecektir.
Z Kavgası • http://www.youtube.com/watch?v=UVGdOFVbvBo Orijinden z ekseninde aşağı bakan göz Kırmızıdan sonra (daha önceden) çizilmiş mavi kırmızının önünde1 Kırmızı mavinin önünde Görüntünün x ekseni (her sütun bir pikseldir) Buradaki kırmızı ve mavi çizgiler, şekildeki çokgenlerin çakışan bölgelerini göstermektedir. z-değerleri 1glDepthFunc(GL_LEQUAL) fonksiyonu derinlik modu ile kullanıldığında, yeni bir parçanın z-değeriz-arabelleğindeki değer ise oradaki parçanın üzerine çizilecektir.
Işın Gönderme (Ray Casting) • Bakış noktasından her piksele ışınlar gönderilerek en öndeki yüzey bulunur. • Derinlik arabelleği algoritmasının bir çeşidi gibidir, burada yüzeyler yerine pikseller peş peşe ele alınır.
A – Arabelleği Yöntemi • Derinlik arabelleği yönteminin, arabellekteki her konum bilgisinin yüzeylerin bir bağlı listesine referans verecek şekilde genişlemiş halidir. • Daha fazla bellek gerektirir. • Lakin değişik yüzey renklerini doğru bir şekilde karıştırabilir (composition) ve transparan yüzeyleri belirtebiliriz. • A-arabelleğindeki her konumun derinlik bilgisi ve yüzey veri bilgisi olmak üzere iki alanı vardır. • Yüzey veri bilgisi yüzey verisi veya o piksel pozisyonuna katkıda bulunan yüzeylerin bağlı listesini gösteren bir gösterge (pointer) olabilir.
Nesne Uzayı Algoritmaları • Şekillerin hangi kısımlarının görüntüleneceğini 3B koordinatlar türünden belirleyen algoritmalardır. • Bu algoritmalar nesnelerin bir görüş noktasına (viewpoint) göre 3B konum ve boyutlarının (dimension) mukayesesine dayanır. • n sayıdaki nesne için n * n kez karşılaştırma işlemi gerektirebilir. • Az sayıdaki nesneler için etkilidir ancak kodlanması uğraştırıcı olabilir.
Ressamın Algoritması • Derinlik sıralaması yapan nesne uzayındaki bir yöntemdir. • Uzaktaki nesneler yakındaki nesnelerden önce çizdirilir. • Çakışma durumundaki her nesnenin pikselleri önceki nesnelerin üzerine çizdirilir. (ressamın boyaması gibi)
Ressamın Algoritması • İlk olarak 1967 yılında General Electric firmasının geliştirdiği uçuş simülatöründe kullanılmıştır. http://www.youtube.com/watch?v=vajvwNctrb8
Ressamın Algoritması • Öncelikle bütün çokgenler z eksenindeki uzaklıklarına göre sıralanır. • Sıralamadaki belirsizlikler çözülür. • Çokgenler arkadan öne doğru sırayla çizdirilir. • Çokgenlerin birbirlerinin üstünde olma durumunda belirsizlik çözümü karmaşıklaşmaktadır. • Bu yüzden bu algoritma basit haliyle yeterli olamamaktadır.
Örnek • Bir dikdörtgenin başka bir dikdörtgenin hem üstünde hem de altında olması durumunda, bu algoritmanın basit hali yeterli olmaz.
Newell’ınAlgoritması • Martin Newell, DickNewellve TomSancha tarafından 1972’ de ressamın algoritması ile çözülemeyen durumlar için önerilmiştir. • z eksenleri çakışan bütün çokgenler birbirleri arasında test edilmelidir. • En uzaktaki çokgen (örneğin P) alınır ve kendisinin z uzantısı ile çakışan diğer çokgenler karşılaştırılır. • Sırayla 5 karşılaştırma yapılır, eğer herhangi birinin sonucu P lehine ise P, diğer çokgenin önünde yazılır. Eğer en az bir karşılaştırma diğer çokgenin lehine ise P çizdirilir ve ondan bir önce gelen çokgen yeni P olur.
Karşılaştırmalar • P ve diğer çokgenin x uzantıları çakışmıyor mu? • P ve diğer çokgenin y uzantıları çakışmıyor mu? • P’ nin tamamı, görüş noktasına göre diğer çokgenin bulunduğu düzlemin diğer tarafında kalıyor mu? • Diğer çokgenin tamamı P’ nin düzleminin görüş noktasına göre önünde kalıyor mu? • P ve diğer çokgenin (x,y) düzlemine izdüşümleri çakışmıyor mu? • Eğer bütün bu testler başarısız ise P ve diğer çokgenin yer değiştirdiği durum için 3 ve 4. testler tekrarlanır. • Testler ikinci kez de başarısız olursa yüzeyler ikiye bölünür ve algoritma 4 yeni yüzey için uygulanır.
Örnek • Şekildeki durum için karşılaştırmalar yapıldığında çokgenlerin sırayla Q2, P1, P2, Q1 kısımları çizdirilir. -z P1 Q2 Q1 P2 x
Sonuç • Aşağıdaki sayfada algoritmaların genel bir karşılaştırması yapılmıştır. http://www.youtube.com/watch?v=kPxfIXaKKUI • Hesapsal geometride karmaşık geometriye sahip nesnelerin görüntülenmesi için daha çeşitli algoritmalar öne sürülmektedir.