Plazma sayı 1, sayfa 19

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 19

- Haydi bakalım neymiş bu: ===========================

Once upon a time, diye başlayalım... Burda çok basit de olsa ufak bi yazı dizisi ile az çok basit bi demo framework tarzı bişi nasıl hazırlanır ondan bahsetmeye çalışacağım. Burda anlatacağım şeyin, yüzyirmisekiz byte, dört k v.b tarzı demolara pek apply edilemeyeceğini söyleyebilirim. Daha çok bahsetmek istediğim şey, yapısal olarak biraz da flexible bi design nasıl yaparız onun üstüne değineceğim.

Öncelikle bir design'a başlamadan önce temel yapı taşlarımıza bakalım. Neler lazım bize sonuçta. Düşünelim bakalım. Demo dediğimiz şeyi standart bir oyun application v.s. gibi şeylerden ayıran tarafı, user interaction kısmının hemen hemen hiç olmaması. Yani 'escape' dışındaki bir tuşu kontrol eden bir demo türüne henüz rastlamadım (çok enderdir, yok space'e basarsın secret music gelir falan filan...) Bu yüzden o açıdan epey bir şanslıyız. Yani user interaction yoksa her şey daha bi kontrol altında olur. Aslında temel yapacağımız şey bir müzik/ ses v.s. eşliğinde sunacağımız görüntüsel effectler zinciri tarzında, o anki yaptığımız makinada yapılması gerçekten zor olup ve görsel olarak da sanatsal bi tarafı olan bi yapıdır. Yani aslında... Film çekiyoruz... Başlar ve bir süre sonra da biter. Hiç bir şey farklılık göstermez. Çok enteresan şekillerde hazırlanmış bariz randomize effectler dışında her çalıştırdığımızda aynı saliselerde aynı görüntüleri görür.. aynı sesleri duyarız. O zaman burdan şuna gelebiliriz ki, en sağlam olması gereken yerimiz, bizim timing control'umuz diyebiliriz. Yani istediğimiz şeyleri, istediğimiz anlarda yapmamızı sağlayan bir yapı. Bunu öyle bir design etmeliyiz ki, ufacık bir değişiklik yapmak bize pahalıya patlamamalı.

Tamam timing olayı bir yana, bunun dışında neler gerekiyor. Temel bi gfx lib tasarımı !? ...Hmm tam olarak değil. Çünkü neticede 'standard'ın dışında bir şeyler yapacağımız için bize uygun bir library oluşturulabilinir mi bilemiyorum. Tıpkı AI library'leri gibi düşünün. Her oyunda kullanılabilecek bir AI library'si yazmak mümkün mü !? Hayır değil. Neticede AI dediğimiz şey, fake'lerden ibaret, oyununa göre yapacağın fake, veya izleyeceğin yöntem değişir. Ancak tabi ki bazı belli başlı yapılar var... Örneğin bir AI için bakarsak, ne bileyim ben bir path finding önemli yapı taşlarından biri. (Haaala anlamış değilim niye path finding'i AI sayarlar... o ayrı konu). Yani yapacağımız şeyin içine bunu koyabiliriz.. Ama general bişi yapmak imkansız... Aynısı demogfx lib'i için de geçerli. Ne koyabiliriz ki içine... Çok basit ve genel şeyleri !? Nedir bu... Bir grup tridi objeyi çok rahat bi şekilde ekrana istediğimiz shader'la basabilecek bir yapı !? Yoksa procedural texture hazırlayıp texture'u ekrana basan bi yapı !? Yoksa 3-5 pass'de hazırlanmış 3-5 texture'u alıp onlara screen space effect ile post-processing yapan bi yapı!? Yoksa hepsi mi !? Yani yok bunun tam cevabı. Mükemmelini de yapmak imkansız. İki gün sonra aklınıza "yaa hadi burda da bezierlerden 4. derece fractal bişii çizdirip arkasında da radiosity hodo hodosu" yapayım dediğiniz anda o library'den tek bir function çağırmıyor durumunda bulacaksınız kendinizi. Ama, bi çok şeyi kolaylaştırabilmemizi sağlayan bi yapı yapmak elbette mümkün. Buna değineceğiz.

Başka neyimiz var bunların yanı sıra??.. Müzik!.. Evet müzik veya ses effectleri. Burda yapılacak abartı miktarda bir şey yok açıkçası. Genel olarak ses effect'leri çok kullanılmaz. Yani ya direk müziğin içine gömülüdür o effectler ya da... Yoktur.. O yüzden demo'muz başladığı andan itibaren sadece 'play' diyip, arkasından her şeyi kendi haline bırakmak her zaman en güzel çözüm gibidir.

Temel bi bakışta bu üç component yeterli gibi gözükse de (timing/gfx/music) bunların yanı sıra arka planda olup da bizim işimizi cidden çok feci anlamda kolaylaştıran bi kaç yapı daha vardır. Bunların arasında, memory manager, resource manager (texture, sound, mesh..vs. gibi şeylerin yüklenme mekanizması ve demo tarafından erişebilirliği..) ve en önemlisi thread manager library'si. Biliyorsunuz artık günümüzde bir adet CPU diye bir şey kalmadı. Bir adet CPU bile olsa sistemde bir de GPU diye bi kavram var ki bunlardan maximum performansı elde etmek istiyorsak bunların senkronizasyonunu çok çok çok iyi bi şekilde sağlamak zorundayız. ki... Günümüzde hemen hemen bi çok kişide artık ya dual-pentium ya da en azından hyper-thread pentium ayarında aletler var. Kalkıp da CPU'nun %50'sini kullanan ve GPU ile sync olmayan (yani GPU çalışırken CPU bekler veya CPU çalışırken GPU bekler) bi yapı hazırladığımızda makinadan alacağımız performans kafadan üçte birine düşer. İşte buradaki sync olayları için kesinlikle bir thread manager, task manager vari bir yapı kesinlikle şarttır. Bi taraftan CPU'nun biri bi procedural texture'u hazırlarken (ki.. aslında GPU'da da mümkün) diğer taraftan diğer CPU mesh'leri sort ederken GPU'da bi önceki frame'i present etmek için, bi önceki frame'in sortedilmiş mesh'lerini çizebiliyor olmalı. Bunu çok rahat bir ortamda sağlayamadığımız bir durumda ortalık 1 - çöplük gibi olur, 2 - ciddi anlamda bir performans akışı sağlayamayız.

Klavyeyle gezinmek için ← ve → tuşları.