30 Mart 2015 Pazartesi

Bilgisayar Grafikleri ve Rendering

İlk bilgisayarlardan günümüze şüphesiz gözle görülebilen en büyük değişim bilgisayar grafiklerinde yaşanmıştır. Görüntülerin, ilk yıllarda sadece hesap yapma ve veri yönetimi gibi görevler için geliştirilen basit metin tabanlı grafiklerden zamanla göz dolduran ve çoğu zaman gerçekle ayırt edilemeyen 3 boyutlu grafiklere evrilmesi benim gibi çoğu kişinin de merakını cezbetmiş bir süreçtir. Bu sürecin arkasında her yıl giderek artan bilgisayar hızları ve işlemci kabiliyetleri yanında görüntü motorlarının beyni olan matematik modellerinin de büyük payı vardır. Gerçekçi, kaliteli ve ayrıntılı görüntülerin hızlı bir şekilde üretilmesi (bilgisayar oyunları, animasyonlar ve görsel efektler) için bu modellere ait denklemlerin hızlı bir şekilde çözülmesi ve uygun verilerle işlenmesi gerekir. Sanıldığının aksine bir tek görüntü için bile birçok hesap (ışık kaynağına göre parlaklık, gölgeleme, yansıma, iz düşüm vs) yapılır ki bu da birçok görüntünün iç içe girdiği ve anlık üretilmesi gereken uygulamalarda çok yüksek bir işlem gücüne ihtiyaç olduğunun kanıtıdır.



Peki nedir bu grafik işlemleri ? Tabi ki hepsinden bahsetmek imkansız (eğer ilginiz varsa "Bilgisayar Grafikleri" ile ilgili dersler almanızı veya "Fundamentals of Computer Graphics - P. Shirley, S. Marschner" kitabını okumanızı tavsiye ederim), bu yüzden bu yazıda sadece rendering'den bahsedeceğim.

Rendering, bilgisayar litaretüründe 3D bir modelin 2D görüntüsünün (resminin) elde edilmesine denir. 3D bir modeli niye 2D'ye çeviriyoruz diyebilirsiniz, dikkat edin 3D bir görüntüyü değil bir modeli görüntüye çeviriyoruz. Bunu bir ressamın veya sanatçının gördüğü bir nesneyi tuvaline resmetmesi gibi düşünebilirsiniz. Nesneler 3 boyutludurlar ama görüntüleri her zaman (hologramlar istisna) 2 boyutlu düzlemlerde veya yüzeylerde görüntülenir. Aynı şey bilgisayarlarda da gerçekleşir. Nesneler 3 boyutlu uzayda matematik vektörleri ve yüzeyleri ile ifade edilerek modellenir. Pekala bu nesnenin herhangi bir gözlem noktasından bakıldığında gözde oluşacak 2 boyutlu görüntüsü nasıl oluşur ? İşte rendering böyle bir soruya cevap veren bilgisayar algoritmasıdır.



Eğer rendering'i bir fonksiyon gibi düşünürsek belki de şu şekilde tasvir edebiliriz;

"Uzaydaki herhangi bir nokta ve o noktadan çıkan bir yön vektörünü, bir görüntü matrisine (resim) götüren işleme denir."

Bu tanım benim tamamen kendi kafamda basitleştirdiğim bir anlama karşılık gelir. Gerçekte böyle bir işlem için yukarıda da bahsettiğim gibi ışık, yansıma, konum, hareket gibi bir çok parametrenin de dahil olduğu daha karmaşık fonksiyonlarla icra edilir.



Uzayda kırmızı renkli bir küp düşünün. Tabi bu küpü görebilmek için ise bir ışık kaynağı hayal edin, bu kaynağı dilediğiniz yere yerleştirebilirsiniz. Bu küpü zihniniz hemen iki boyutlu bir görüntüye çevirecektir. Çünkü tüm yönlerini bir anda görmeniz imkansızdır. Şimdi küpe farklı açılardan, yerlerden ve uzaklıklardan bakın. Her hareketinizde görüntünün değiştiğini görürsünüz. Bazı yerlerde tek kenarını, bazen iki, bezense üç kenarını birden göreceksiniz. Yine bulunduğunuz yere ve küpün ışık kaynağına göre konumundan dolayı farklı kenarlar farklı derecelerde gölgeli görünecektir. Ayrıca radyal hareketlerde görüntünün boyutu sabit kalırken küpten uzaklaşırken veya ona yaklaşırken yapacağınız doğrusal hareketler gözünüzde oluşan küpün boyutunu da değiştirecektir. Şimdi aynı uzaya bir de küre ekleyelim. Kürenin kendine has geometrisi, yüzeyi, ışık tepkisi gibi bir çok farklı parametresinden dolayı tüm bu hareketlerde farklı görüntüler elde edeceksiniz. Mesela kenarları olmadığı için uzaydan hep daire şeklinde görülecek veya ışığa maruz kaldığında bir yarı küresi karanlıkta kalacaktır. İşin zor tarafı ise bundan sonra başlayacaktır. Uzaya koyduğunuz her nesne diğer tüm nesnelerin görüntülerini etkileyecek, bazen yansımalarla bir ışık kaynağı gibi davranırken bazen de ışığı önleyen bir engel görevi görecektir. Ayrıca bu nesnelerin olası hareketleri de yine tüm değer kümesinin elemanlarını değiştirecek, görüntülerin tekrar hesaplanıp üretilmesine neden olacaktır. Zihninizin anlık yaptığı tüm bu işlemleri bilgisayarlara yaptırmak ise azim, tecrübe, akıl ve kurursuz bir mühendislik gerektirir.



Gördüğünüz gibi sadece iki nesneli ve bir ışık kaynağı olan uzay modelinin farklı noktalardan 2 boyutlu resmedilmesinin altında bile çok ince, hassas ve ileri seviyede hesaplama ve işlem gücü yatar. Bu durum bilgisayar oyunları gibi (ki bu oyunlarda değişen, hareket eden, ortaya çıkan/kaybolan binlerce nesne vardır), bu türden işlemlerin her saniye başına 30-40 (fps) kere yapılması gereken uygulamalarda özelleşmiş grafik işlemcilerin (ekran kartları) kullanılmasını gerektirmiştir. Böylece tüm bu işlemler merkezi işlem birimini meşgul etmeden, bu iş için özel tasarlanıp üretilmiş, çok çekirdekli matematik işlemcilerinde paralel bir biçimde icra edilirler.



Rendering, 3 boyutlu modellemelerin kullanıldığı hemen hemen her program tarafından yapılan bir işlemdir. Bilgisayar oyunları ve bilgisayar destekli çizim programları, özel film efektleri, animasyon filmler ve daha nice uygulamarlarda tasarlanan her 3D model ekrana bir takım rendering işlemlerinden geçirilerek (bkz:perspektif) 2 boyutlu olarak yansıtılır. Yani her zaman dediğim gibi işin mutfağında büyük bir emek vardır.

Bu konuda araştırma yaparsanız özellikle animasyon şirketlerinin, oyun ve film üreticilerinin oldukça keyif alarak izleyebileceğiniz videolarına rastlayabilirsiniz. Çoğu film için "sahne arkası" çekimleri, oyun motoru tasarımları, animasyon hazırlama kursları ilginizi çekebilir. Ayrıca bu iş için matematik bilginizi de canlı tutmanız ve doğrusal cebir ve analitik geometri gibi konulardan da keyif almanız gerekebilir.




Eğer programlama kısmına kendinizi yakın hissediyorsanız, OpenGL öğrenmeniz ve kendi 2 boyutlu oyunlarınızı kodlamanız oldukça eğleneceğiniz ve tecrübe kazanacağınız aktiviteler olacaktır.

Aşağıda fikir edinmek ve motivasyon kazanmak için izleyebileceğiniz videoları paylaşıyorum.

Hepinize iyi eğlenceler ve iyi çalışmalar.

@Emin_Ucer












Hiç yorum yok:

Yorum Gönder