gerçek zamanlı render ne demek!? opengl ve directx nedir
gerçek zamanlı render ne demek!? opengl ve directx nedir
gerçek zamanlı render demek :
bilgisayar ortamında oluşturulmuş ve anlık olarak zaman içinde değişen bir 3d ortamın görüntüsünü bir dijital kamera gibi sürekli tarayıp ekranda görüntülemek diyebiliriz.
3d ortamın gerçek zamanla paralel olarak saniyede 20 - 30 kare ( veya daha fazla ) görüntüsü alınıp sıra ile ekranda görüntülenerek akıcı şekilde kullanıcıların 3d ortamı takip etmesini sağlayan sistemlere realtime rendering, yani gerçek zamanlı render sistemleri deniyor.
biz de oyunumuzu geliştirirken, arka planda bilgisayarın elektronik aksamı üzerinde oluşan 3d ortamda akan oyunumuzu takip edebilmek için, oyunumuzda, bizim istediğimiz bir noktadan 3d ortamın görüntüsünü alacak ve o görüntüyü bize saniyede 20 - 30 kare şeklinde ( en az ) gösterecek bir gerçek zamanlı render sistemi oluşturmalıyız.
bunu yapmanın iki yolu var :
1.si software render denen yöntem.
eğer 3d ortamdaki görüntüleri taramak ve resme dönüştürmek istiyorsak, bizim istediğimiz bir açıdan 3d ortamın nasıl göründüğünü üçgenler ve açılar üzerinde işlemler yaptırtarak baktığımız düzlemde poligonların nasıl göründüğünü hesaplatmamız gerekir. bunun yanında bu poligonlara kaplanan dokuların poligonun iz düşümüne göre nasıl deforme olduğunu, diğer material özelliklerine göre üzerinde oluşan renk değişimlerini tek tek hesaplayacak ve bunları oluşturup ekrana görüntüleyecek bir sistem yazmamız gerekir. bütün bu işlemleri yapmak için 3d dünyanın bilgisayarda nasıl kurgulandığını ve nasıl saklandığını, 3d ortamın nasıl tanımlandığını bilmemiz ve uzay geometri ilişkilerinden çok iyi anlamamızın yanında iyi ir matematikçi olmamız yada iyi matematikçilerle çalışmamız gerekir. ki bütün o görüntüleri hesaplayacak matematiksel fonksiyonları hatasız, ve en az işlem gücü gerektirecek şekilde yazabilelim.
bu mümkün olsa bile, bütün bu işlemleri bilgisayarın işlemcisi yapacaktır. bütün bu işlemler sırasında çok fazla kesirli işlemler geçecek ve bilgisayarın işlemcisi çok yavaşlayacaktır. bizim bunun yanında oyun akışını ve oyunun içinde geçen olayları hesaplatmamız, içeriği değiştirmemiz ve yeniden oluşturmamız için ekstra işlemci performansına ihtiyacımız olacak.
....
elbette software rendering pek de pratik bir yöntem değil
2.si hardware rendering
yani donanım temelli render sistemi. bu yöntemde, 3d sahnenin görüntüsü bilgisayar donanımı üzerindeki 3d grafik hızlandırıcı donanıma hesaplatılır. bunun için, 3d sahnenin içeriği, kaplamaları özellikleri grafik kartının kendi üzerinde bulunan belleğe aktarılır. grafik kartına 3d ortamın hangi noktasından ve hangi açısından görüntü istendiği tarif edilir. grafik donanımı bu açıdan kendi hafızasına yüklenmiş 3d sahnenin görüntüsünü kendi üzerinde bulunan ve 3d görüntüleri hesaplamak için özel olarak geliştirilmiş grafik işlemcisinde hesaplayıp kendi üzerinden akan ekran görüntüsünün üzerine direkt yapıştırarak işlemci üzerinden akıtmayıp çok yüksek bir hızla 3d sahnenin renderını bize sunar.
bu sayede 3d görüntü hesaplaması için bilgisayarın işlemcisi hiç zaman harcamadığından biz oyunun fizik, dinamik ve etkileşim özelliklerini hesaplatmak için bütün işlemci gücünü kullanabiliriz. böylece oyunlarımızda daha güzel etki ve efektler kullanabiliriz.
elbette donanım temelli render oldukça pratik ve performans açısından çok iyidir. dolayısıyla biz de her oyundaki gibi bu pratik teknolojiden yararlanıcaz. zaten biz de kendi yazılım temelli render sistemimizi geliştirsek büyük ihtimalle opengl ve directx´in bize sunduğu avantajlar kadar geniş özellik ve avantajlara sahip olabilmek için 10 yıl kadar bu yazılım temelli render sistemimizi geliştirmemiz gerekir. ki opengl yada directx yada her ikisini birden kullanmak en doğru yöntem.
peki bu opengl yada directx nerden çıktı? nedir bunlar.
opengl ve directx birbirinin yaptığı işi yapan rakip teknolojiler olmakla birlikte, dünyanın en büyük firmaları tarafından geliştirilen, grafik donanımları ile bizim yazılımımız arasındaki ortak bir aracı geliştirme standartlarıdır.
opengl veya directx standartlarından birini kullanarak bu standardın kod mekanizması ile biz ekran kartına komut gönderebilir ve sonuçları alıp istediğimiz gibi kullanabiliriz.
opengl Silicon Graphics yada sgi adı ile ün yapmış dünyanın en güçlü grafik donanımlarını üreten firmanın geliştirdiği bir realtime grafik standardıdır.
directx hepmizin bildiği Microsoft´un Windows işletim sistemi için geliştirdiği bir realtime grafik standardıdır.
güçlü bir yazılımda opengl ve directx mekanizmalarını bir arada kullanabilir, yada sadece birini kullanabilir yada hiç birini kullanmayıp arada bir başvurabilirsiniz.
ama biz oyunumuzu geliştirirken anlaşılması ve öğrenmesi kolay olan opengl üzerinde yoğunlaşacağız. elbette atelyenin akışı dahilinde directx´e de değiniriz. ama başlarda opengl temelinde çalışacağız.
kısacası, oyunumuzda biz 3d sahnemizi oluşturacağız, render´i opengl ( dolayısıyla ekran kartı ) yapacak. ve biz sonucu alıp program penceresine yapıştıracağız. bunu da saniyede en az 20 - 30 kere olacak şekilde yaptırarak arka planda sürekli içeriği değişen 3d sahnemizi, oyuncunun gerçek zamanlı olarak görmesini ve akıcı olarak takip etmesini sağlayacağız.
gayrısı program geliştirme konularında... allah kurtarsın :)