Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Grafik İçin Veri Yapıları İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü.

Benzer bir sunumlar


... konulu sunumlar: "Grafik İçin Veri Yapıları İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü."— Sunum transkripti:

1 Grafik İçin Veri Yapıları İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü

2 Sahne Çizgesi • 3B sahnelerin gösterimi için sıklıkla kullanılan bir yapıdır. • Ayrıca karmaşık yapıdaki 3B nesneler için de kullanılır. • Sahne çizgesi (scene graph) bir döngüsüz yönlü çizgedir.(directed acyclic graph) • Genelde bir sahne çizgesinde; o Nesneler (küp, küre, koni vb.) düğüm olarak o Özellikler (renk, doku haritası vb.) ayrı düğümler olarak o Dönüşümler düğüm olarak bulunur. • Sahne çizgesi oluşturmak için çeşitli kütüphaneler mevcuttur. o WPF (Windows Presentation Foundation) o Open Scene Graph o Java3D o X3D™

3 Örnek

4 Örnek (XML)

5 Sahne Çizgesi ve Dönüşümler • Bir robot modeli oluştururken sahne çizgesi ve dönüşümler birlikte kullanılabilir. • Çeşitli dönüşümler her yaprağa (nesnenin temel bileşenlerine) uygulanır. • Daha sonra ek dönüşümler nesne gruplarına (robot uzuvlarına) uygulanır. • Bunlarla birlikte bu dönüşüm hiyerarşisi robot modelini bir bütün olarak oluşturur. ROBOT Üst kısımAlt kısım kafa taban Sahne Çizgesi ayak gövdekol

6 Sahne Çizgesi ve Dönüşümler • Bir nesne için bir dönüşüm tanımlarken bulunduğu düğümden köke doğru çıkıldıkça eklenerek artan dönüşüm matrisi (cumulative transformation matrix) oluşturulabilir. • Mesela: o 1. nesne için (o1), CTM = M 1 o 2. nesne için (o2), CTM = M 2 M 3 o 3. nesne için (o3), CTM = M 2 M 4 M 5 • 3. nesnedeki bir v köşesinin dünya koordinat sistemindeki konumu (M 2 M 4 M 5 )v şeklinde belirtilebilir. Nesne düğümleri Dönüşüm düğümleri Grup düğümleri

7 Sahne Çizgesi ve Dönüşümler • Eğer daha önceden tanımlanmışlarsa, nesne gruplarını tekrar kullanmak pekala mümkündür. • Bu örnekte 3. grup iki kez kullanılmaktadır. • 3. grup içerisinde tanımlanan dönüşümler değişmez, 3. grubun bir bütün olarak her kullanımı için farklı eklenerek artan dönüşüm matrisleri mevcuttur. grup3 obj3 obj4 kök grup1 obj1grup3 grup2 grup3obj2

8 Sınırlayıcı Hacimler • Karmaşık nesneleri çevreleyerek ışın izleme, çarpışma tespiti vb. durumlarda işlem kolaylığı sağlayabilecek bir yapıdır. • Bu kuşatıcı hacimler içindeki nesnelere göre daha basit ifade edilebilen geometrik şekillerdir. • İçerideki nesnelerin görünebilmesi için bu hacimlerin de görünür ve içini gösterir (transparan vb.) nitelikte olması gerekir. • Kodlanması oldukça kolaydır. • Örneğin eksen hizalı sınırlayıcı kutular, her kenarı x, y ya da z eksenine paralel küplerdir. Şeklin her köşesinin en küçük ve en büyük x, y, z değerleri bulunarak oluşturulabilir.

9 Sınırlayıcı Hacim Hiyerarşisi • Bütün bir modelin yönetiminde bir yöntem olarak kullanılabilir. • Sınırlayıcı hacimler ağaç yapısı oluşturacak şekilde diğer sınırlayıcı hacimlerin içine konur. • Bu şekilde ağaç yapısı aşağıdan yukarıya doğru oluşturulur. • Bütün sahne kuşatılana kadar yakınlardaki diğer nesneler de sınırlayıcı hacimlerle gruplandırılır. o Birbirine yakın nesneleri bulmak O(n 2 ) güçlüğünde olabilir. Sıralama ile O(n logn) seviyesine indirilebiilir. • Sahne çizgesi şeklinde bir ağaç hiyerarşisi oluşturulursa sınırlayıcı hacimler düğüm noktaları ve bu düğümlerin birleşimi ile üst seviyeler elde edilir. • Böyle bir sahne çizgesi mantıklı bir şekilde tertiplidir, ancak mekansal bir tertip içermeyebilir.

10 Sınırlayıcı Hacim Hiyerarşisi • Bu hiyerarşi sahnelerin bir alt kümesi için oldukça işe yarar ve kodlanması kolaydır. • İlave kullanıcı girdileri ile (user input) büyük oranda performans artışı sağlanabilir. o Nesneleri gruplamada sahnenin durumuna göre davranmak daha makuldür. o Sahneler önceden bilindiğinden bilgisayar oyunlarında oldukça işe yaramaktadır. • Rastgele sahnelerde çok düşük performans nedeniyle pek işe yaramamaktadır. o Çok detaylı çokgen örgülerinin yakın gösteriminde o Ağaç ve çimenlerle kaplı bir manzara görüntüsünde

11 Uzay Bölümleme • Nesneleri alttan üste doğru sınırlamak yerine, uzayı düzgün aralıklı hücrelere bölme mantığıdır. • Canlandırmalı sahneler için kolayca ve hızlıca oluşturulabilir. • Böyle bir yapıda gezinmek için doğru tarama (scan conversion) algoritmaları kullanılabilir.

12 Uzay Bölümleme • Uzayı bölümlerken, ızgara yapısından kaynaklanan verimlilik/yeterlik dengesini de göz önünde bulundurmak gerekir. o Küçük hücre kullanımında içi boş çok sayıda hücre oluşabileceği gibi, bunların hepsini kontrol etmek de kaynak israfına yol açar. o Büyük hücre kullanımında ise bazı hücreler aşırı miktarda nesne içerebilir., • Bazı bölgeler için daha ince bir ızgara oluşturmak gezinme esnasında çok sayıda atlama işlemine (dolayısıyla daha uzun süreye) yol açabilir ancak oluşturma zamanından tasarruf sağlar. o Canlandırmalı sahnelerde kullanışlıdır. • Fakat böyle bir yapıda hiyerarşi yoktur, bu yüzden daha akıllıca çözümler gerekir.

13 Uyarlamalı Ağaç Yapısı - Octree • Octree ağaçları, sınırlayıcı hacim hiyerarşisi ve ızgaraların avantajla yanlarını içerir. • Aynı boyutta olması zorunlu olmayan voxel (3B hücreler) haricinde ızgara yapısına benzer niteliktedir. Quadtree de denilen 2B örnek ağaç bölümlemesi

14 Octree Oluşturmak • Üstten alta doğru ilerlenerek oluşturulur. • Bütün sahnenin sınırlayıcı kutusu bulunur. Bu kutu ağacın köküdür ve bütün temel bileşenleri içerir. • Her iterasyonda mevcut düğüm, sekizlik (octant) bölümlere ayrılır. • Mevcut düğümdeki temel bileşenler sekizliklere ayrılır. o Eğer bir düğüm bir bölünmede iki tarafı da kapsıyorsa, iki sekizlik parçaya da konur. o Yeni düğümlerde ayırma tekrarlanır. o Bir voksein yeterince küçük temel bileşeni olana kadar veya maksimum bir derinlikte işlem sonlandırılır.

15 Octree Üzerinde Gezinme • Kök düğümden başlanır. • Eğer bir düğüm yaprak ise bütün çocukları üzerinde kesişim yapılır. • Değilse düğümün çocukları üzerinde ilerlenerek ışın ve çocuğun sınırlayıcı kutusu arasındaki kesişimler hesaplanır. • Kesişim varsa çocuk üzerinde özyineleme yapılır.

16 Avantaj ve Dezavantajları • Octreeler ile rastgele sahneler iyi bir başarımla yönetilebilir. • Işın başına O(log n) zamanda çalışabilir. • Temel bileşenlerin çok düzensiz bir şekilde dağıldığı sahnelerde octreeler çok kötüdür. o Böyle sahnelere de sıklıkla rastlanılmaktadır. o Octree algoritması karmaşık geometri üzerinde çalışırken alanı çok fazla sayıda alt kısımlara ayırarak, daha derin ve verimsiz ağaçlar oluşturabilmektedir.

17 kd Ağaçları • Düğümlerin boyutlarını belirlerken daha akıllıca davranmak için; düğümlerle kesişimleri tespit zamanı (derin ağaç) ile sahne temel bileşenleriyle kesişimleri (sığ ağaç) tespit zamanının dengesini ayarlamak gerekir. • Yüksek karmaşıklığa sahip alanları izole ederek geniş boşluklar oluşturarak gezinme çabuklaştırılabilir. • Bunun için k boyutlu, eksenlerle hizalı ikili bir ağaç olan kd ağacı tanımlanabilir. • Octree gibi eksenlerle aynı hizadadır, ama octree ikili bir yapıda değildir. • Her düğümde bölünme için bir eksen seçilir. • Esas sıkıntı (hangi eksen boyunca bölündüğü de) verilen bir düğümde bölünmüş düzlemin nerede konumlandırılacağıdır. o Nesnelerin konumlarını yansıtmak için bölünebilir. o Bozulmuş bir kd ağacı, muadili octree ile denktir.

18 kd Ağaçları • Aşağıdaki örnekte gezinme sırasında ışın eşit şansla sol yada sağ yandan girebilir. Fakat sağ yandan girmenin maliyeti çok daha fazladır. 0 x=1 y=1

19 kd Ağaçları • Bu durumda gezinme sırasında her tarafa giriş maliyeti; -muhtemel kesişim testleri türünden- yaklaşık olarak birbirine eşittir. • Fakat bir ışının sol tarafa girmesi çok daha muhtemeldir, zira alan çok daha büyüktür. 0 x=1 y=1

20 kd Ağaçları • Bu durumda bir düğüme girme maliyetini o düğüme girme ihtimali ile dengelemeye çalışılmaktadır. • Geometrik karmaşıklığı hızlıca izole etmekte, gezinme esnasında kolayca elenecek geniş ve boş düğümler oluşturmaktadır. 0 x=1 y=1

21 kd Ağaçları • Sol tarafı daha fazla bölmeye gerek yoktur. Sağ tarafı da kabaca ortadan bölmek mantıklıdır. Sağ taraf için bu aşamadan sonra ilave bölümlemeler octree gibi olacaktır. • Buradaki fark; sol taraftaki tek şekil, bir bölünme ile diğerlerinden ayrıştırılarak kolayca erişilebilir hale gelmiştir. Octree kullanılsaydı bu şekle daha derin bir ağaç yapısının en altında erişilerek verimsiz bir bölünme yapılacaktı. 0 x=1 y=1

22 kd Ağaçlarını Oluşturma • Verilen mevcut düğümün eksen hizalı bir kutusu ve L sayıdaki temel bileşen için eğer çok az temel bileşen varsa yaprak düğümü oluştur ve geri dön değilse Bir bölünme ekseni seç Bu eksen etrafında bir bölünme düzlemi seç L’ deki hangi temel bileşenlerin sol ve sağ çocukla kesiştiklerini belirle Sol çocuğa özyineleme uygula Sağ çocuğa özyineleme uygula • Yüksek performans için iyi bir ayırma düzlemi seçmek çok önemlidir. • Maliyet açısından en hesaplı kd ağacını oluşturma problemi NP- complete karmaşıklığındadır. • Verilen bir düğüm ile yerelde sezgisel yüzey alan araması yapılarak (greedy surface area heuristic) yaklaşık bir çözüm bulunabilir.

23 Sezgisel Yüzey Arama • Verilen mevcut düğümün eksen hizalı bir kutusu ve L sayıdaki temel bileşen için Her muhtemel bölme pozisyonu için maliyet = olası sol * maliyet sağ + olası sağ * maliyet sol Bu maliyeti minimize eden ayırma düzlemini kullan • Olasılık hesaplamasında ışınların uzay boyunca eşit olarak dağılacağı kabul edilir. o olası çocuk = bir alt kutunun yüzey alanının üstteki kutunun yüzey alanına oranı o maliyet çocuk = çocuktaki temel bileşen sayısı o olası çocuk * maliyet çocuk = Çocuk düğüme girmenin öngörülen maliyeti

24 Sezgisel Yüzey Arama • Muhtemel bölme konumları sonsuz sayıdadır. • Bunun önüne geçmek için yalnızca ayırma eksenleri boyunca yer alan temel bileşenlerin kenarlarında bölünmeler ele alınabilir. • Yüksek oluşturma maliyetinin gezinmede kazanılan avantajı etkisizleştirmemesine dikkat edilmelidir. o Doğrudan oluşturmanın maliyeti O(n 2 logn) olabilmektedir. • Bunun için bölünmüş eksenler boyunca temel bileşenler sıralanarak istenen koşul sağlanana kadar devam edilebilir. o Bu işlemin maliyeti O(n logn) dir.

25 Sezgisel Yüzey Arama 0 10 x y 8 6

26 kd Ağaçlarında Gezinme • Octree için kullanılan bir gezinme algoritması ile yapılabilir. • Burada iki çocuğu gezerken rastgele sıra yerine ışına ilk çarpan çocuk seçilir. Bu çocuğa «ön yüz çocuğu» denir. Diğerine de «arka yüz çocuğu» denir. • Eğer ön yüz çocuğunda arka yüz çocuğunun sınırlayıcı kutusundan daha önce bir kesişim olursa, arka yüz çocuğuna gitmeye gerek yoktur. • Bu teknik, önceki veri yapıları için de kullanılabilir. • Burada ışın G’ den önce F’ ye girmektedir. F’ yi gezerken ışın yeşil üçgenle kesişmektedir ama gezinme sonlandırılmaz çünkü sınırlayıcı kutuların için t değerlerinin kesişim t değerleri ile karşılaştırılması gerekir. • Eğer bir temel bileşen ayırma düzleminde ise bu nesne iki tarafa da konur.

27 Şimdiye Kadar Izgaralar Sınırlayıcı Hacim Hiyerarşisi Octree kd-tree

28 İkili Uzay Bölümleme Ağaçları • İngilizcesi Binary Space Partitioning Trees olan bu ağaçlar çokgenlerin görünür yüzey tespitinde kullanılır. • Hangi objelerin ilk çizdirileceğinin belirlenmesinde z arabelleğinin yerini alır. • Çarpışma testlerinde kullanılabilir. • BSP oluşturulurken uzaysal alt bölmelerle ikili bir ağaç oluşturulur. Bu ağaç kd ağacının eksene hizasız halidir. • Maliyet hesabı yoktur, bölme düzlemi rastgele seçilebilir.

29 İkili Uzay Bölümleme Ağaçları • İlk olarak herhangi bir çokgen alınarak üzerindeki düzlem üzerinden bölme yapılır. Lüzumu halinde çokgenler de bölünür.

30 İkili Uzay Bölümleme Ağaçları • Ön alt ağaca öz yineleme uygulanır.

31 İkili Uzay Bölümleme Ağaçları • Arka alt ağaca öz yineleme uygulanır.

32 İkili Uzay Bölümleme Ağaçları • Aynı sahne için 5. çokgenin kök olduğu bir BSP ağacı

33 İkili Uzay Bölümleme Ağaçları • kd ağacında önden arka düğümlere doğru gezinme yapılırken BSP düğümlerinde arkadan öne doğru gezinilir. Bir düğümün arka çocuğu, düğümün bakış noktasını içermeyen yüzüdür. • Quake III oyun motorunda (idTech 3) örtüşmeleri ayıklamada ve çarpışma testini hızlandırmada bu yöntem kullanılmaktadır.

34 BSP için Sözde Kod void BSP_displayTree(BSP_tree* tree) { if ( tree is not empty ) if ( viewer is in front of root ) { BSP_displayTree(tree->backChild); displayPolygon(tree->root); BSP_displayTree(tree->frontChild); } else { BSP_displayTree(tree->frontChild); // ignore next line if back-face // culling desired displayPolygon(tree->root); BSP_displayTree(tree->backChild); } BSP uygulaması için:

35 Avantaj ve Dezavantajları • Herhangi bir bakış noktası için tek ağaç yeterli olmaktadır. • Oluşturması oldukça kolaydır. • Ayırıcı düzlem bir nesnenin içinden geçiyorsa nesneyi ikiye bölüp her alt düğüme bir parçası verilir. Bu durumda çok sayıda nesne varsa O(n 3 ) kadar nesne ortaya çıkabilir.

36 İleri Düzey Teknikler • Çeşitli grafik uygulamalarında kapalı mekanlar genellikle koridorlar ve kapılarla birbirine bağlı odalardır. • Eğer kapı kapalı ise diğer odanın çizdirilmesinin gereği yoktur. Eğer açık bir kapı veya geçit varsa, sadece kapıdan görünen şekilleri çizdirmek daha mantıklıdır. • Manzara içeren sahnelerde bu yöntem pek işe yaramaz. • Örnekler için: ortals.html ortals.html

37 İleri Düzey Teknikler • Eğer büyük bir nesne ekranın önemli bir kısmını işgal ediyorsa, o nesnenin örttüğü geometriyi çizdirmeye gerek olmayabilir. Buna örtüşme ayıklaması (occlusion culling) da denilir. • Bunun için öncelikle görüntü hacmindeki (kesik piramit) görünebilecek bütün nesneler listelenir. Her nesne ikilileri için eğer biri diğerini örtüyorsa, diğeri görüntü hacminden çıkarılır. Ancak bu yöntem O(n 2 ) karmaşıklığında olduğundan optimizasyon gerektirir. • Bu makalede çeşitli algoritmalar incelenmektedir: ing_algorithms.php ing_algorithms.php • Çok sayıda küçük nesnenin bulunduğu kapalı mekanlarda örtüşme ayıklaması işe yaramaz.

38 Örnek Primitives: 7 Spheres Render Time: 16 secs Primitives: 37 Spheres Render Time: 22 secs Primitives: 187 Spheres Render Time: 43 secs Primitives: 937 Spheres Render Time: 52 secs Primitives: 4687 Spheres Render Time: 85 secs KD Tree Build Time: 2 secs Primitives: Spheres Render Time: 135 secs KD Tree Build Time: 6 secs Primitives: Spheres Render Time: 212 secs KD Tree Build Time: 80 secs Primitives: Spheres Render Time: 14 min KD Tree Build Time: 6 min Primitives: ~3M Spheres Render Time: 18 min KD Tree Build Time: 4.5 hours


"Grafik İçin Veri Yapıları İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü." indir ppt

Benzer bir sunumlar


Google Reklamları