plazma - amatör bilgisayar kültürü

Grafik Efektler için Matematik 2

Bilgem 'Nightlord' Çakır

1. Vektörler ile 3D efektlerin ne ilgisi var ?

Bu kadar çok vektörlerden bahsetmemize rağmen henüz sadece vektörler üzerinde bazı

işlemlerin matematiksel olarak nasıl yapılacağını gördük. Bu işlemlerin ve vektörel ifadelerin ne işimize yarayacağını anlayabilirsek onları gereken yerlerde kullanabilecek durumdayız.

1.1. Objelerin vektörlerle ifade edilmesi

İşte kilit konu bu. Uzayda duran herhangi bir obje (kalem, kitap, ev, Hüsnü, Ayşe vs...) nasıl matematiksel olarak ifade edilebilir. Bir objenin şeklini matematiksel olarak ifade etmenin bir yolunu bulmalıyız ki o obje hakkındaki bilgileri bilgisayarda saklayabilelim ve üzerinde işlemler yapabilelim.

Her objeyi sonsuz sayıda noktalardan oluşuyor gibi düşünebiliriz. Yani sonsuz miktarda belleğimiz, sonsuz güçte bir cpu'muz olsa bir objeyi oluşturan bütün noktaları bir vektör olarak alıp her nokta için x ve y koordinatlarını belleğe saklayabilir ve üzerlerinde işlem yapabilirdik. Bu pratikte mümkün olmadığına göre bütün noktaları seçmeyeceğiz.

Eğer objenin sınırlarındaki noktaları seçip içini göz ardı edersek bayağı bir noktadan kurtulmuş oluruz. Yani artık objenin sadece dış yüzeylerindeki noktaları düşünelim. Maalesef hala sonsuz sayıda nokta demektir bu. iste bu noktada bu sonsuz sayıdaki dış noktadan sonlu sayıda nokta seçip objeyi yaklaşık bir şekilde modelleyeceğiz.

1.2. Modellemek

Modellemek bütün mühendislik dallarında kullanılan bir terimdir. Genel olarak gerçek dünyada var olan bir objeyi, olayı veya problemi matematiksel olarak ifade etmeye verilen addır. Çoğunlukla bu matematiksel ifadeye çevrim esnasında bazı bilgiler kaybedilir ve sisteme bir 'hata payı' dahil olur. Bu hata payının miktarı bilindiği müddetçe modelden verimli sonuçlar elde edilebilir.

Mesela bir kalemin boyunu ölçseniz ve 20 cm deseniz bir modelleme yapmış olursunuz. Bu modelleme ile gerçek dünyada var olan 'kalemin boyu' kavramını matematiksel bir büyüklük olan '20 cm' ile modellemiş olursunuz. Cetvelinizdeki en dar çentik 1 mm ise, siz kalemin boyunu 20.0 cm ile 20.1 cm arasında gördüğünüz için 20 cm dersiniz, ama kalemin gerçek boyu belki de 20.024 cm. Ama sizin elinizdeki imkanlarla bunu bilme şansınız yok. Dolayısıyla yaptıgınız modellemenin getirdiği bir hata payı var.

Peki modeliniz bu durumda hiç işe yaramaz mı? Mesela birisi dese ki “ben bu kalemden 4 tanesini uç uca koyacağım acaba şuradaki 1 metrelik masaya sığar mı?” Siz bu modeli kullanarak bu probleme cevap verebilirsiniz. Elinizdeki model, kalemin 20 cm olduğunu ve 1 mm'lik hata payınız olduğunu söyler. Öyleyse 4 kalemin boylarında 4 kere maksimum hatayı goze alırsanız 4 kalemin uç uca 80 cm ile 80.4 cm arasında olacağını söyleyebilirsiniz. Bu da 1 m'nin altında olduğu için bu kalem manyağı arkadaşınıza içinin rahat olmasını söyleyebilirsiniz.

1.3. Obje Modellemek

Böylece objenin dış yüzeylerinden seçeceğiniz sınırlı sayıdaki nokta ile o objeyi modelleyebilirsiniz. bu noktada objenin özelliklerine bakılarak nasıl bir modelleme yapılacağına ve ne tip noktaların seçileceğine karar verilir. Örneğin elinizde tam düzgün küp şeklinde bir obje varsa bunun 8 köşe noktasını seçerek modelleyebilirsiniz. Bu noktaların aralarında doğrusal kenarlar olduğunu kenarların oluşturduğu karelerin de doğrusal yüzeyler olduğunu söylersiniz. Aralardan daha fazla nokta da seçebilirsiniz. Ama doğrusal olduğunu bir kere söylediğiniz bir kenarın iki dış köşesini vermişseniz ortasından üçüncü bir noktayı daha vermeye gerek yoktur. Çünkü zaten o iki kenarın doğrusal olduğunu bir kere söylediniz. Bu sayede o aradaki her noktayı tanımlamış oldunuz. Bunun dışında seçilecek her ekstra nokta sisteme getirilen gereksiz bir yük olacaktır.

Şekil 1.

1.3.1. Doğrusal Kenarlar ve Yüzeyler.

Eğer obje böyle doğrusal kenar ve yüzeylere sahipse genelde 3 boyutlu jargonda MESH (meş diye okunur) olarak bilinen modelleme ile modellenir. Bu metotda obje;

  1. köşe noktaları

  2. köşeleri bağlayan kenarlar

  3. kenarların arasında kalan yüzeyler

cinsinden ifade edilir. Unutulmaması gereken şey bu kenarların doğrusal, yüzeylerin düzlemsel olduğudur.

1.3.2. Eğri Kenar ve Yüzeyler

Bu konuya kısaca değineceğiz. bazen eğri kenarları olan organik canlı, kumaş vs gibi objeler farklı matematiksel ifadelerle modellenir. Çoğunlukla polinomik yaklaşık modelleme teknikleri kullanan bu sistemlerde (splines, NURBS vs) işlemler daha güçlü matematik CPU'lara ihtiyaç duyar. Önce doğrusal sistemlerde kendinizi geliştirmeniz daha mantıklı olur.

Objeleri bilgisayarda modelleme aracılığı ile temsil etmeyi öğrendiğimize göre şimdi o modeller üzerinde nasıl işlemler yapacağımızı görebiliriz.

2. Vektörel Dönüşümler

En genel tabiriyle dönüşüm eldeki bir vektöre bir takım işlemler uygulayıp yeni bir vektör elde etmemizi sağlayan bir operasyondur. Yani elimizde P vektörü varken bu vektöre M dönüşümünü uygularsak P' vektörü elde ederiz. Mesela örnek bir dönüşüm şöyle olabilir. P vektörünün bütün koordinatlarına 3 eklemek. Ya da P vektörünün x koordinatını 5 ile çarpıp y koordinatını 2 ile bölmek. Aklınıza gelen her dönüşüm, sonuçta aynı boyutlu başka bir vektör verdiği müddetçe geçerli bir dönüşümdür. (Hatta aynı boyutlu olmak zorunda bile değildir. Mesela perspektif dönüşüm 3 boyutlu bir vektörü iki boyutlu bir vektöre dönüştürür. Buna sonra değineceğiz)

Dönüşümler çoğu zaman tek bir vektöre uygulanmazlar. Birçok vektöre aynı anda uygulanırlar. Uzayda objeler köşe noktaları ile tanımlanabileceği için bir objeyi oluşturan bütün noktalara bir dönüşüm uygulanarak obje üzerinde bir dönüşüm yapılabilir. Bu dönüşüm objenin şeklinde bir değişiklik yapmayıp uzaydaki yerini veya duruşunu değiştirebilir. Ya da objenin şeklinde bir deformasyon meydana getirebilir işte dönüşümlerin 3D efektlerdeki kullanımı budur. donen küpler veya 3 boyutlu mekanlarda yapılan gezintiler hep aslında objeleri tanımlayan köşelere, o anda kameranın bulunduğu yer ve açıya göre bir takım dönüşümlerin uygulanması sonucu elde edilen yeni koordinatlara göre ekranda çizim yapılması ile gerçekleştirilir.

2.1. Yer Değiştirme

Bir noktanın koordinatlarına bir takım değerler eklediğimizde o noktanın yerini değiştirmiş oluruz. Bir objeyi modellerken kullandığımız bütün köşe noktalarına aynı dönüşümü uygularsak objeyi olduğu gibi uzayda hareket ettirmiş oluruz.

Genel olarak yer değiştirme hareketini de bir U(xh,yh) vektörü ile tanımlarsak, P(x1,y1) noktasını U vektörü kadar yer değiştirdiğimizde varacağımız noktaya Q(x2,y2) dersek,

x2 = x1 + xh

y2 = y1 + yh

olur.

Şekil 2.

2.2. Dönme

Dönme işleminin nasıl olduğunu anlayabilmek için tek bir noktanın a açısı kadar origin etrafında döndürülmesini inceleyeceğiz.

Şekil 3.

Noktamız P(x1,y1) noktası olsun bu noktayı saatin ters yönünde a açısı kadar döndürdüğümüz zaman noktamız Q(x2,y2) koordinatlarına gelecek. Elimizde x1,x2 ve a varken x2 ve y2 yi nasıl bulacağız.

Bunun için gelin P vektörünü iki bileşene ayıralım. Px(x1,0) ve Py(0,y1). Dikkat ederseniz P'yi, Px'i ve Py'yi ne kadar döndürürsek döndürelim. P her zaman Px ve Py nin toplamına eşit olacak. Öyleyse biz Px ve Py'nin a açısı kadar döndürüldüğünde nereye geldiklerini bulursak (ki bunu bulmak kolay) sonra bu ikisini toplayıp Q(x2,y2) noktasını bulabiliriz.

Şekil 4.

Px, a kadar dönünce x ekseni ile a derece açı yapan x1 uzunluğunda bir vektör olur. Trigonometriden hatırlarsak bu durumda Px'in x koordinatı (x1)cos(a) olur. Aynı şekilde y koordinatı ise (x1)sin(a) olur.

Py, a kadar döndüğünde y ekseninin sol tarafına doğru a açısı yapan y1 uzunluğunda bir vektör olur. onun koordinatları da sırası ile (-y1)sin(a) ve (y1)cos(a) olur.

Son olarak P'nin yeni yerini yani x2 ve y2 yi bulmak için Px ve Py nin aynı koordinatlarını toplarsak,

x2 = (x1)cos(a) – (y1)sin(a)

y2 = (x1)sin(a) + (y1)cos(a)

İşte bu bir noktayı tek eksende iki boyutlu döndürmek için gereken işlemdir. Bir objeyi oluşturan bütün noktalar için bu işlem tekrarlanırsa obje origin etrafında (ya da 3 boyutlu düşünürsek z ekseni etrafında) döndürülmüş olur.

2.3. Ölçekleme

Ölçekleme işlemi bir objeyi büyütüp küçültmeye yarar. Bir vektörün skaler ile çarpılması konusundan hatırlarsanız, bu işlem sonucu vektörlerin boyları uzayıp kısaltılabiliyordu. Eğer bir objeyi tanımlayan bütün noktaların vektörlerini aynı skaler ile çarparsak o objeyi o skaler oranında ölçeklemiş oluruz.

Genelde bütün noktaların x ve y koordinatları aynı skaler ile çarpılarak ölçeklenir bu durumda obje şeklinde herhangi bir deformasyona uğramadan büyür ve küçülür. Eğer x ve y koordinatları aynı oranda ölçeklenmezse objeler x veya y yönünde yassılaşırlar. Bu da bazen kullanılan bir efekttir. Ben bu efekti mist demosundaki wobbling vektör partında kullanmıştım.

Hatta objeyi oluşturan noktalar farklı farklı skalerler ile anime bir şekilde ölçeklenirse çok ilginc jelimsi objeler elde edilebilir ki bu tip efektler genelde çok pirim yapar. 3 boyut motorunuzu yazdıktan sonra böyle ufak oynamalarla çok ilginç ve orijinal efektler bulabilirsiniz.

2.4. Dönüşümlerin birleştirilmesi

Genelde dönüşümler tek tek değil birlikte gerçekleşirler. Yani bir obje uzayda aynı anda yer değiştirip kendi etrafında dönerken büyüyüp küçülüyor olabilir. Bir objeye olan dönüşümler bu durumda birleştirilip hesaplanabilmelidir.

Bu ihtiyacın doğduğu bir diğer popüler durum daha vardır. Kinematik. Örneğin kendi kolunuzu düşünün. Kolunuz omzunuzdan bir açı ile bir eksende dönerken, dirseğiniz başka bir açı ile döndüğünde eliniz ne kadar dönmüş ve yer değiştirmiş olur. Bu soruyu cevaplayabilmek için objelerin birbirlerine bir ebeveyn-çocuk hiyerarşisi ile bağlandığını düşünebiliriz. Yani bu örnekte gövdeniz, üst kolunuzun babası, üst kolunuz ön kolunuzun babası, ön kolunuz ise elinizin babası gibi. Atalar bir dönüşüm yaptıklarında bütün çocuk ve torunlar da bu dönüşümü geçirir. Ama çocuklar belli kısıtlar dahilinde atalarından bağımsız bazı dönüşümler geçirebilir.

İşte bütün bu “bileşik dönüşüm” hesaplama işlemlerinde “matrisler” kullanılır. Bu yüzden bir sonraki bölümümüzde matrislerden bahsedeceğiz.

plazma - (2006 - 2011)