DEMO EFEKTLERİ

ÜÇÜNCÜ BOYUT

NEREDEN : İZMİR NİCK / GRUP(LAR) : NIGHTLORD / AESRUDE / CIVITAS WEB SİTE : http://nightlord.dr2.net

Herkese merhaba... Bu bölümde sizlere 3D demo efektleri dünyasını tanıtmaya çalışacağım. Yazıları takip ettikçe bu tür efektlerin arkasında yatan temel matematik ve geometrik prensipleri öğrenecek, ve ardından bunları C64'te assembler'da nasıl gerçekleştirebileceğinizi göreceksiniz. Bu sırada yer yer scene programcılığı, yazılım mühendisliği, bilgisayar mimarisi gibi çeşitli konulara da değinmeyi planlıyorum. Ama önce biraz felsefe. “Eee hani matematik öğrenecektik” demeyin. Felsefe bütün bilimlerin babasıdır. Düşünüyoruz öyleyse varız hesabı.

Neden Demolar, Neden C64 ve Neden 3D?

Herhangi bir konuda oturup emek harcamanız gerektiğinde, bu emeğin karşılığında ne kazanacağınızı, ne öğreneceğinizi sorgulamak hem hakkınız, hem de yol boyunca ihtiyacınız olacak olan motivasyonun kaynağı olacak cevaplara giden yolunuzdur. Öyle ya, neden şimdi durduk yerde 20 yıllık eski bir bilgisayarda, günümüzde ucuz ve hızlı donanım sistemlerinin kolaylıkla yapabildiği bazı şeyleri zorlaya zorlaya yapmaya çalışasınız ki? Bu büyük soruyu kendi kendinize cevaplayıp bu işlere girişmek konusunda kendinizi dürüst bir şekilde sorgulamanız ve cevaplarınıza ikna olmanız kesinlikle çok önemli. Bu konuda bazı noktalara en baştan açıklık getirmek ve yanlış sebeplerle zamanınızı ve emeğinizi harcamanızı engellemek istiyorum:

1- Kolay olmayacak ve sizin çabanız gerekecek. Ben bu yazılarda mümkün olduğu kadar alt seviyeden başlayacağım. Ama ne olursa olsun sizin bol miktarda kafa yormanız, anlamadığınız yerleri tespit edip üzerinde çalışmanız ve çözüm bulamadığınız noktalarda bana bir şekilde sorularınızı iletmeniz gerekecek. Yani bu yazıları roman okur gibi okuyup tamamlarsanız çok gelişme kaydedemezsiniz.

2- Çok zor da olmayacak. Kimi insanlar matematik kelimesini duydukları anda korkuya kapılırlar. Matematik, geometri ve bilgisayar bilimleri sistematik, tutarlı ve öğrenilebilir konulardır. Bu alanlarda kafa yormak hem zevklidir hem de size tutarlı, açık ve analitik düşünmeyi öğretir.

3- Parasal getiri beklemeyin. C64 üzerindeki demo çalışmalarınızdan dolayı kimse size para ödemeyecek. Siz genel olarak çeşitli meslekleri icra ederken işinize yarayabilecek pek çok şey öğreneceksiniz elbette ama oyun veya demo yapıp satmak ve para kazanmak gibi planlarınız varsa yanlış yerdesiniz.

4- Yüksek seviyeli diller (C++/Java vs), Script dilleri (Perl, Tcl/Tk vs), Web Teknolojileri (html, .NET vs) gibi konularla uzaktan yakından ilgisi olmayan işler yapacaksınız. Eğer bu alanlarda kendinizi geliştirmek istiyorsanız yanlış yerdesiniz.

Bu noktalardan sonra gelelim ilk soruya... Neden demo programcısı olmak isteyesiniz? En basit ve dürüst cevap “çok zevkli olduğu için”... Programcılık zaten zevkli bir iştir. Bilmece çözmek, kafayı zorlamak neden zevkli ise programcılık da o yüzden zevklidir. Başlangıçta kafanızda soyut bir fikir olarak başlayan bir programın, sonunda önünüzdeki bilgisayarda çalışmasını izlemek başlı başına çok zevklidir.

Üstelik demo programlamayı başka yazılımları programlamaktan daha zevkli kılan şeyler de vardır. Demolar görsel ve işitsel yönden hoş (janjanlı) programlardır. Sadece bu yüzden bile bir fabrikada üretim hattını kontrol eden yazılımı yazmaktan çok daha zevklidir demo yazmak. Ayrıca demoların en önemli özelliği donanımdan maksimum verim almak üzerine planlanmalarıdır. Diğer yazılımlar üzerlerinde çalıştıkları donanımdan maksimum yararlanmaya çalışmaz. Hatta tam tersine mümkün olduğunca çeşitli donanımlar üstünde çalışabilecek şekilde tasarlanırlar ki daha çok müşterileri olsun.

Oysa demo programcılığının temelini oluşturan prensiplerden biri deyim yerindeyse “donanıma takla attırmaktır”. İşte bu takla attırma hissi de bir demo programcısına kendini en iyi hissettiren unsurlardan biridir.

Peki neden C64? C64 genel olarak iyi tasarlanmış ve karmaşıklığı ile yapabildiği işler çok “tadında” bir bilgisayardır. Kullandığı assembler dili kolay öğrenilebilir ve demo programcılığına kolayca başlanabilir bir platformdur. Ayrıca nasıl olduğunu açıklayamadığım ama kesinlikle pek çok C64 kullanıcısında gözlemlediğim üzere bir şekilde kullanıcılarında bir bağlılık ve kullanırken mutluluk üreten bir alettir. Bu yüzden insanlar Commodore firmasının batmasının ardından 10 yıl sonra bile zevkle bu bilgisayar için kafa patlatıp acayip efektler üretmekte, dergiler çıkartmakta ve hatta üç boyutlu efektler hakkında tanıtım yazıları yazmaktadır... :)

Bu noktada PC demolarına da değinelim. PC Scene'de aktif olan arkadaşların tepkisini çekmek gibi bir niyetim olmadığını fakat özellikle yeni başlayanlar için C64'ün neden daha iyi bir scene platformu olduğuna inandığımı açıklamak istiyorum. PC üzerinde de bugün demolar programlanmaktadır. Hatta C64 ile uğraşanlardan çok daha fazlası PC demoları üretmektedir. Bu noktada “Demek demo programlamak istiyorum gideyim 2.4 GHz Pentium 4 üzerinde programlayayım” diyebilirsiniz. İşte demo programcılığında platform seçimi sizin önceliklerinize bağlıdır. Kimi insanlar demolarındaki ses, müzik ve sanatsal anlatıma en çok önemi verirler. Onlar için demo hazırlamak, kısa film çekmek ya da kısa bir animasyon film hazırlamak gibidir. Teknik anlamda yapılması zor şeyler yapmak ikinci plandadır. Bu tip demolarda en önemli şey senaryo ve akıştır. Bu tip demolar özellikle son yıllarda bütün platformlarda artarak yapılmaktadır. PC özellikle bu tip demolar (bunlara konsept demoları da denir) yapmak isteyenler için kesinlikle en uygun platformdur. Bu arada C64'te de son yıllarda konsept demolarında artış olduğu söylenebilir.

Kimi insanlarsa demolarda teknik açıdan şov yapmaya çalışır. İzleyenlere imkansızmış gibi gözüken efektler üzerinde uğraşırlar. Özellikle ya daha önce yapılmamış efektler ya da daha önceki yapılan örneklerini hız veya başka özellikler bakımından yenen efektler yapmak bu yaklaşımdakilerin amacıdır. Teknik anlamda bu tip efektler üzerinde çalışıp başarılı olabilmek için mutlaka ve mutlaka makine dili kullanılır. Ayrıca bir işletim sistemi üzerinde bu tip efektleri yapmak da kendi içinde yavaşlamalara sebep olur. Bu bakımlardan C64 teknik anlamda kendini ve donanımı çok zorlamak isteyen insanlar için gerçek bir hacker makinesidir. Bazı efekt dallarında (özellikle matematiksel efektlerde) gerçekten istediğiniz şeyi C64'te kesinlikle yapamayacağınızı düşünüyorsanız (ki böyle efektler olabilir. Ama geçmişte imkansız olduğu söylenen texture mapping, doom türü efektlerin bir noktada gerçek olduğunu unutmamalı) o zaman PC gerçekten sizin için doğru seçim olabilir. O halde bile C64 üzerinde geçirilmiş bir iki yıldan sonra PC'ye geçmek, direkt PC'de başlamaktan çok daha güçlü kılabilir sizi.

Bu son iki paragrafta anlatılan demo yaklaşımlarına sırasıyla kavramsal ve teknik yaklaşımlar diyebiliriz. Bu söylediklerimden PC'de hiç teknik demo yapılmadığı gibi bir anlam çıkarılmamalı. Ancak PC'de teknik demo programcılığı yapmak birazdan anlatacağım üzere daha zor 'ölçülebilir' sonuçlar üretir.

Demo programcıları arasındaki rekabet açısından da C64 bazı avantaj ve dezavantajlar sağlamaktadır. En önemli avantaj C64'ün donanımının değişmemesidir. CPU, grafik ve ses çipleri hep aynıdır. Yani bütün programcılar tamı tamına eşit kaynaklarla yola çıkar ve kim daha akıllıca algoritmalar kullanır ve trikler uygularsa o kazanır. Çünkü demoları dünyada izleyen herkes aynı hızda ve etkinlikte izler. Oysa PC platformunun sabit güçte olmaması yüzünden bir demoyu GeForce4 ile izleyen birisi çok beğenirken TNT ile izleyen birisi çok kötü bulabilir. Şahsen ben PC demolarını izlerken gördüğüm şeyin ne kadarının programcının başarısı ne kadarının donanımın başarısı olduğu hakkında hep şüpheye düşmüşümdür. Bana Formula 1 yarışlarını çağrıştırır.

Herkes farklı teknolojide arabalarla yarışırken birinci olan, arabası yüzünden mi pilotu yüzünden mi oluyor? Tabii orada arabayı yapanlarla süren kişi bir takım ve başarı takımın başarısı. Ama demo programcıları ile grafik kartı tasarımcıları beraber çalışmıyor.

C64'ün bu konudaki dezavantajı ise dünyada pek çok sayıda süper iyi C64 programcısının bulunmasıdır. 20 yıllık başarılı bir geçmişin birikimi bugün yeni başlayan bir programcı için hemen rekabete girilemeyecek kadar güçlüdür. Bugün scene'de aktif olan ve belki hayatınız boyunca çalışsanız geçemeyeceğiniz 5-6 adam olabilir. Ama denemeye değer. Bu konuda genelde iş hayatına yeni başlayan genç mühendislere söylediğim bir şeyi paylaşmak istiyorum. Hiç kimseyi gözünüzde büyütmeyin ve hiç kimseyi hafife almayın.

Peki neden 3D? Eğer C64 demo programcısı olmak konusunda ikna olmuş iseniz üzerinde çalışabileceğiniz iki temel yaklaşım vardır. Birincisi C64'ün donanımının çeşitli özelliklerini kullanarak yapılan özellikle de grafik çipine resmen takla attıran efektler üzerine gitmek. Bir diğeri de diğer platformlarda da yapılan bazı efektleri o platformlardan çok daha güçsüz olan C64 üzerinde yapmaktır. Bu efektler genelde sıkı matematik bilgisi üzerine kurulu efektlerdir. İşte 3D efektleri bu sınıfa girer. Eğer iyi bir demo programcısı olmak istiyorsanız aslında bu iki grup efekt üzerinde de yavaş yavaş kendinizi geliştirmelisiniz. Yalnızca bir gruptaki efektleri yaparak listelerde gelebileceğiniz nokta genelde ilk 30'un içine girmektir. İlk 10'a girmenin yolu iki grup efektten de yapabilmektir.

Hala neden 3D sorusunu cevaplamadım. Çünkü bir cevabı yok. Nasıl olsa bu efektleri öğrenmeye bir yerden başlamanız lazım. Örneğin ben bu grup efekti yapmayı daha zevkli bulacağımı düşündüğüm için bunlara girişmiştim. Siz de aslında ne tür efektlerden hoşlanıyorsanız onlar üstünde çalışmalısınız. Sonuçta unutmayın en önemli şey bu işten zevk almanız.

Bu kadar felsefeden sonra artık teknik tarafa geçelim. Şu anda demo programcısı olmaya karar vermiş, C64'ün sizin için doğru platform olduğuna ikna olmuş ve 3D efektlerini bizzat yapmadan rahat edemeyeceğinizi anlamışsanız, artık beyaz tavşanı takip edip harikalar diyarına yuvarlanmaya hazırsınız. Ya da mavi hapı alıp normal yaşantınıza dönebilirsiniz...

Koordinat Sistemleri ve Vektörler

Vektör efektlerinin temelini oluşturan kavram çok boyutlu uzay geometrisidir. Bu karizmatik ada kanmayın aslında basit bir konudur. Bizim üzerinde çalışacağımız koordinat sistemleri birbirine dik eksenlerin oluşturduğu sistemler olacak. İlk olarak bu koordinat sistemlerinde yer alan vektörler ve onların üzerindeki basit bazı işlemlerden bahsedeceğiz. Ardından vektörler üzerinde dönüşüm adı verilen işlemlerden bahsedeceğiz.

Dönüşümler, yer değiştirme, döndürme ve ölçekleme olacak. Bu kavramları önce 2 boyutlu uzayda anlatacağım. Ardından 3 boyuta geçmemiz zor olmayacak.

İki boyutlu uzay Şekil 1'de görüldüğü gibi birbirine dik x ve y eksenlerinin ifade ettiği bir uzaydır. Bu uzayda her nokta bir x ve bir y koordinatı ile ifade edilebilir.

Şekil-1: 2 boyutlu uzayda eksenler

Bu uzayda noktaların x ve y koordinatları ile nasıl ifade edildiğine Şekil 2'deki örneklerden bakabilirsiniz. Koordinat sisteminde (0,0) noktası özel olarak adlandırılır. Bu noktaya origin denir.

Şekil-2: örnek noktalar

Vektörler

Vektörler matematikte çok boyutlu değerlerdir. Bu ne demek? Matematikte büyüklükler skaler ve vektörel diye iki gruba ayrılır. Skaler değerler 3, 5, 12000, 4√2 gibi tek bir reel sayı ile ifade edilebilen değerlerdir. Vektörler ise çok boyutlu değerlerdir. Çok boyutlu bir uzayda bir yön ve büyüklük ifade ederler.

Vektörler en çok fizikte kuvvetleri, manyetik ve elektriksel alanları ifade etmekte kullanılırlar. Vektörleri çok boyutlu sayılar gibi düşünürseniz onlar üzerinde toplama çıkarma gibi işlemlerin de yapılabileceğini anlarsınız. Şekil-2'deki noktaları vektörler olarak da düşünebiliriz. Vektörler şemalarda gösterilirken bir ok olarak gösterilirler ve V1, V2, P, Q gibi büyük harf ve rakamlarla isimlendirilirler. Ok olan uca baş, diğer uca kuyruk denir

Şekil-3'te örnek vektörler görebilirsiniz. Unutmamanız gereken bir nokta var. Vektörleri ifade eden oklar koordinat sisteminde farklı yerlere çizilebilirler. Önemli olan vektörün kuyruğu origine getirilince vektörün başının nereye geldiğidir. Vektörün değeri, kuyruk origindeyken baş noktasının koordinatlarıdır.

Şekil-3: Örnek vektörler

Vektörlerin Toplanması

Vektörlerde toplama işlemi şöyle yapılır. Diyelim ki P(2,1) ile Q(-1,2) vektörlerini toplamak istiyoruz. Bütün yapmamız gereken aynı eksenlerin koordinatlarını toplamaktır. Yani iki vektörün x koordinatları olan 2 ve -1 değerlerini toplayarak sonuç vektörünün x koordinatını elde ederiz. Aynı işlemi y koordinatlarına da yaparız. P + Q = R (2,1) + (-1,2) = (2+(-1), 1+2) = (1,3) yani genel olarak: (x1,y1) + (x2,y2) = (x1+x2, y1+y2)

Vektör toplamasını aynı zamanda görsel olarak da yorumlayabiliriz. P vektörünü kuyruğu origine gelecek şekilde yerleştirdikten sonra Q vektörünü kuyruğu P'nin başına gelecek şekilde yerleştiririz. Bu anda Q'nun başı nereye geliyorsa sonuç vektörü originden bu noktaya kadar ki vektördür. (Bkz. Şekil 4)

Şekil-4: Vektörlerin Toplanması

Vektörlerin Tersi

Vektörlerin tersini almak için bütün yapmamız gereken koordinatların tersini almaktır. -(P(x1,y1)) = (-x1,-y1)

Grafiksel olarak bunun anlamı vektörün başı ve kuyruğunu yer değiştirmektir. Yani vektörü tam ters istikamete baktırmaktır.

Vektörlerin Çıkarılması

Vektörlerin çıkarılması demek birinci vektör ile ikinci vektörün tersinin toplanması demektir. Başka bir deyişle koordinatlar arası çıkarma işlemi yapılır. P – Q = P + (-Q) = R (x1,y1) – (x2,y2) = (x1-x2,y1-y2)

Grafik yorumu ise şudur. İkinci vektörün tersinin kuyruğu birinci vektörün başına eklenir. (Bkz. Şekil-5)

Şekil-5: Vektörlerin Çıkarılması Bu sayı için bahsedeceğimiz konular bu kadar. Önümüzdeki sayıda vektörel dönüşümlerle devam edeceğiz. O zamana kadar hoşça kalın.