Photo by Tim Mossholder on Unsplash

Oyun Nasıl Yapılır ?

Oyun Geliştirmenin Temelleri

Oyunun Mekanik Yapısı, Ekran Kartının Yapısı, İşletim Sisteminin Yapısı, OpenGL Nasıl Çalışır ?

1. OYUNUN MEKANİK YAPISI

Oyun mekanizması denince aklıma bir sistem ve bu sistemin kontrol ettiği alt parçalar gelmekte. Sırayla parçaları ve görevlerini sayacak olursak

Oyun Mimarisine Üstten Bakış

1.1 Sistem

Oyunun belkemiği olan bu mantıksal bölüm tüm oyunun ve parçaların hangi sıra ile çalışacağına karar verip bunun kontrolünü yapan kısımdır.

Yukarıda da görüldüğü gibi sistem sıra ile;

  • Dosyaların yüklenmesi için yüklenme ve kaydetme parçasını çalıştırır.
  • Daha sonra ses ve grafik parçalarını kullanarak intro animasyonunun çalıştırılmasını sağlar.
  • Oyun arayüzünün kullanımı sırasında kullanıcı girişleri, grafik ve ses parçalarının uyumlu bir şekilde çalışmasını sağlar.
  • En son olarakta oyun içerisinde grafik, ses, kullanıcı girişi, yapay zeka ve network parçalarının uyumlu bir şekilde çalışmasını sağlar.

1.2 Kaynak

Sabit diskte bulunan oyun için gerekli dosyaları tanımlamaktadır.

  • Bu dosyalar oyunun varsayılan ile hangi konfigürasyonda çalışacağını anlatan konfigürasyon dosyaları içerir.
  • Belki oyun ilk başladığında oynatılacak olan intro için video dosyasını içerir
  • Kullanıcının oyun öncesi oyun hakkında bilgi aldığı dosyaları içerir.
  • Oyun içerisindeki grafikleri, müzikler ve bölüm bilgilerini içeren dosyaları içerir.

1.3 Oyun Modeli

Kaynaktan alınarak belleğe yüklenmiş oyun grafiklerinin, müziklerinin ve metin dosyalarının bellekteki durumuna denir.

  • Resim dosyaları bellekte veya ekran kartının texture belleğinde depolanır.
  • Bölüm, skor vb bilgiler Değişkenlerde ve veri yapılarında tutulur.

1.4 Yükleme ve Kaydetme

Bu kısım kaynaktan grafikleri, müzikleri ve diğer bilgileri alarak belleğe(oyun modeli) içerisine atan gerektiği durumda mesela yeni skor durumlarında veya oyunun kaydedilmesi durumunda tekrar kaynağa kaydetme işlemini üstlenen parçacıktır.

Yükleme: Konfigürasyon dosyaları, Bölüm Dosyaları, Resim Dosyaları, Müzik ve Ses Dosyaları, 3D Model Dosyaları, Video Dosyaları, Yardım Dosyaları

Kaydetme: Skor Dosyaları, Arada kaydedilecek oyun hakkındaki dosyalar

1.5 Grafik

Bu kısım bence oyunun en önemli ve en zor bölümüdür. Çünkü görsellik olmadan oyunun olması imkansızdır. Bu kısım ekranı boyama ile görevlidir.

  • Video’nun Oynatılması
  • Oyun Arayüzünün Gösterilmesi
  • Skor, Yardım ve Konfigürasyon Bilgilerinin Görüntülenmesi
  • Oyunun Kendi Grafiklerinin Gösterilmesi

1.6 Kullanıcı Girişleri

Etkileşim olmayan bir oyun düşünülemez olsa olsa o bir animasyon yahut film olur. Oyunu oyun yapan, kullanıcıyı oyuna bağlayan şey; kullanıcı ile sistemin sürekli etkileşimde olmasıdır. Kısaca klavye, mouse vb ile sisteme etkide bulunmaktadır.

  • Oyun Arayüzünün Kullanımı
  • Yardım Dosyalarının İncelenmesi
  • Skor Dosyalarının İncelenmesi
  • Konfigürasyon Yapılması (Sistem ve Oyun ile İlgili)
  • Kullanıcının oyundaki karakterini kontrol etmesi

1.7 Ses ve Müzik

Ses ve Müziğin önemini anlamak için bir oyun oynarken sesi kapatın. Ve oyun oynamaya devam edin. Ses yokken oyunda sesin değerinin oyun grafikleri kadar önemli olduğunu görebilirsiniz. Kısaca oyun müziklerini ve seslerini, ses kartı yardımı ile çıkaran parçadır

  • Arka planda çalan müzikler
  • Çarpışma ve hareketlerde çıkarılacak ses efektleri

1.8 Yapay Zeka

Bu parça düşmanların zekice hareket etmelerinden sorumludur. Bu parçanın başarılı olması oyunun dahada zevkli geçmesini sağlar.

1.9 Ağ Dinleme ve Gönderme

Bu kısım oyunun birden fazla kişi tarafından oynanabilmesini sağlayan parçadır. Bu kısımda taraflar oyun sunucusuna bilgiler gönderir ve sunucuyu dinleyerek gelen bilgiler oyunda update edilir.

Oturumun Kurulması: Oyuna katılacak oyuncular ilk başta hangi protokolde ve hangi port üzerinden haberleşecekleri üzerinde anlaşırlar.

Paket Gönderimi: Oyunda yaptığı hareketler paket halinde sunucuya gönderilir. Daha sonra sunucu gerekli değişikliği yaptıktan sonra bunu tüm taraflara dağıtır.

Paket Alımı: Taraflar aynı zamanda sunucuyu dinleyerek yapılan değişikliklerden haberdar olur ve bunu oyuna yansıtır.

2 DONANIM

Bilgisayar oyunu sevenler her zaman daha iyi grafik, müzik, fizik ve daha iyi bir yapay zeka ister. Tüm bunların gerçekleşebilmesi için iki koşuldan biri gerçekleşmeli

  • yazılım optimizasyon edilmeli, yeni algoritmalar bulunmalı veya
  • Daha hızlı, göreve özel donanımlar çıkarılarak hesaplama ve işlem hızı arttırılmalıdır.

Günümüzde yeni algoritmalar ve kod optimizasyonu donanımın geliştiği hızdan çok yavaş ilerlemektedir. Artık yazılımda yeni algoritmalar yerine tekrar kullanabilirlik, kod açıklığı, kod güvenliği(encapsulation) gibi konular üzerinde durulmakta. Donanımda bu yeni istekler için elinden geldiği kadar işlemci hızını, bellek kapasitesini arttırmaya çalışılmaktadır.

Bu kısımda bir çok donanımdan bahsedilebilir aslında;

  • ekran kartları,
  • işlemci,
  • anakart,
  • ses kartları,
  • monitörler, hoparlör ve yeni giriş cihazları vb… .

Ama ben bu kısımda sadece bir tanesi üzerinde duracağım. Sonuçta bu bir donanım dökümanı değil. Üzerinde duracağım donanım ekran kartları olacak.

2.1 Ekran Kartı

Oyun programcıları için en önemli ve en çok donanım savaşının yaşandığı ekran kartı piyasasına bakarsak ilk önce NVDIA, sonra da ATI gelmekte. NVIDIA en son GeForce 4’ü çıkarırken, ATI buna Radeon 9700 Pro ile karşılık verecekmiş gibi görünüyor.

Radeon 9700 Ekran kartına göz gezdirdiğimizde VPU(Visual Processing Unit) işlemcisi aşağıdaki şekildeki gibidir.

Ekran Kartının İç Yapısı

Radeon 9700 yongası hala 15µ teknolojisiyle üretiliyor ve 110 milyonu aşkın transistörü ile oldukça büyük bir alana sahip.

AGP 8X Arayüzü: İşlemciden, grafik işlemcisine 2GB/s bir bant genişliğinin sağlaması. Bu sayede işlemciden aktarılacak olan vertex transferindeki darboğaz bir müddet daha önleyebilecek.

Bellek Denetleyicisi: İşlemci üzerinde ne kadar büyüklükte bellek desteklediği ve bu bellek alanlarının kontrolünün nasıl gerçekleştiği ile ilgilenen bu kısımda Radeon 9700, 256(64*4) bit veri yolu, 256 MB 310 Megahertz DDR bellekler kullanılacak.

Vertex Shader Üniteleri: Bu konuyu şu anda kısaca inceleyelim ileride 3D Yazılım içerisinde ayrıntılı olarak değineceğiz.

2.1.1 Vertex Shader

Vertex Shading işlemi aşağıdaki şekilde de görüldüğü gibi sabit bir fonksiyon sırasına sahip olan rendering pipeline sırasında T&L(Transform ve Lighting) işlemi sırasında fonksiyon sırasını kendi üzerine alarak pipilene üzerinde by-pass uygulamaktadır.

Bu sayede T&L sağlayamadığı popüler vertex hesaplamalarına bir alternatif sağlanmış olur. Ayrıca bazı efektlerin T&L sıkı sıkıya bağlı olduğu bir durumda, bu kısmı kendinizin programlamanızı sağlayarak(assembly) çok daha iyi efektleri ortaya çıkarma imkanı sunar.

Vertex Shader Yapısı

Mesela aşağıdaki işlemleri Vertex Shader operasyonları ile yerine getirebilirsiniz.

  • Procedural Geometry (cloth simulation, soap bubble [Isidoro /Gosslin])
  • Advanced Vertex Blending for Skinning and Vertex Morphing (Tweening) [Gosselin]
  • Texture Generation [Riddle/ Zecha]
  • Advanced Keyframe Interpolation (complex facial expression and speech)
  • Particle System Rendering
  • Real-Time Modifications of the Perspective View (lens effects, underwater effect)
  • Advanced Lighting Models (often in cooperation with the pixel shader) [Bendel]
  • First Steps to Displacement Mapping [Calver]

Bu çerçeve içerisinde ekran kartının bu kısmıda vertex shader’ları çalıştıracak birimleri içerir.

2.1.2 Pixel Shader

Pixel Shader Üniteleri niye vardır ? Yine biraz önceki şekle bakarsanız. MultiTexturing safhasında pipeline karışarak by-pass yaptığını görebilirsiniz. En önemli başarısı 64 bit, 128 bit kayar nokta renk hassaslığı ve aşağıdaki bir takım efektlerin ve gerçekçi görüntülerin oluşmasına olanak sağlayamasıdır.

  • Single-pass, per-pixel lighting (see next part)
  • True Phong shading [Beaudoin/Guardado]
  • Anisotropic lighting [Isidoro/Brennan]
  • Non-Photorealistic-Rendering: cartoon shading, hatching, Gooch lighting, image-space techniques [Card/Mitchell]
  • Per-pixel fresnel term [Brennan]
  • Volumetric effects [Kraus][Hart]
  • Advanced bump mapping (self-shadowing bump maps (also known as Horizon Mapping)
  • Procedural textures [Zecha] and texture perturbation [Isidoro / Riguer]
  • Bidirectional reflectance distribution functions [Moravánsky]

Hyper-Z: Radeon görünmeyen yüzeylerin çizimini önlemek için kullandığı tekniği Hyper-Z olarak adlandırıyor.

Smoothvision 2.0 — Anisotropic Filtering: Anisotropic Filtreleme, kişiye geniş bir açısı olan yüzeylerdeki (mesela bir koridor boyunca uzanan duvarlar) kaplamaların kalitesini oldukça yükselten özel bir tekniktir.

Gerek bilinear gerekse de trilinear kaplama filtrelemesinin burada iyi bir iş çıkaramamasının sebebi, var olan pikselin yukarıda anlatılan filtreleme tekniklerinde pixel rengini tanımlamak için kullanılan dört ya da sekiz teksel örneğinden daha büyük bir kısmını kaplamasıdır.

Anisotropic filtreleme, pikselin rengini tanımlamak için, yüzeyin eğimi boyunca 16 bilinear veya trilinear örneği almaktadır.

ATi Video Shader: ATi, video shader’ ın düşük bant genişliğinde akan bir videodaki karelenmeleri gerçek zamanlı olarak nasıl önlediğini, ya da ‘blurring’, ‘embossing’ ve ‘outlining’ gibi özel efektlerin bir video sinyaline nasıl uygulanabileceğini gösterdi.

3 İŞLETİM SİSTEMİ

İşletim Sistemi Nedir ? İşletim sistemi bilgisayar kullanıcısı ile bilgisayar donanımı arasında işleyen bir programdır.

3.1 Amaçları Nelerdir?

  • Kullanıcı programlarını çalıştırmak ve problemlere çözüm üretmek
  • Bilgisayar Sistemini kullanılmaya uygun hale getirmek
  • Bilgisayar donanımını en etkili yoldan kullanmak

3.2 Bilgisayar Sistemi İçerisindeki Yeri Nedir ?

Bilgisayar Sistemindeki Yeri
  • Hardware: Ana işlem kaynaklarının sağlanması (CPU, bellek, I/O)
  • İşletim Sistemi: Donanım ile kullanıcılar için hazırlanmış farklı uygulama programları arasında kontrol ve koordinenin sağlanmasından sorumludur.
  • Uygulama Programları: Kullanıcı problemlerini çözmek için sistem kaynaklarının nasıl kullanılacağı belirler.(compiler, veritabanı sistemleri)
  • Kullanıcılar: (insanlar, makinalar, diğer bilgisayarlar)

3.3 İşletim Sisteminin Hangi Bölümlerden Oluşur ?

Süreç(process) Yönetimi: Süreç programın işletilmesidir. Süreç görevini yerine getirebilmek için belli kaynaklara ihtiyaç duyar. (CPU zamanı, bellek, dosya, I/O aygıtları)İşletim sistemi aşağıdaki aktivitelerden süreç yönetimi ile sorumludur.

  • Süreç yaratma ve silme
  • Süreci askıya alma ve tekrar başlatma
  • Süreç Senkronizasyonu ve Süreç iletişimi

Bellek Yönetimi: Bellek büyük miktarda word ve byte’ lerin oluşturduğu kendi adresi olan array’ dir. Ana bellek geçici bellek aygıtıdır.İşletim sistemi aşağıdaki aktivitelerden bellek yönetimi ile sorumludur.

  • Kullanılmakta olan bellek alanlarının izlerini tutmak
  • Bellek alanı boşaldığında hangi sürecin belleğe yükleme yapacağına karar vermek.
  • İhtiyaca göre yer tahsisi ve serbest bırakımını gerçekleştirmek

Dosya Yönetimi: Oluşturucusu tarafından bir araya getirilmiş ilişkili bilgilerdir. Genellikle dosyalar programları ifade eder.(tüm obj formları, kaynak dosyaları ve veriler) İşletim sistemi aşağıdaki aktivitelerden dosya yönetimi ile sorumludur.

  • Dosya yaratma ve silme
  • Dizin oluşturma ve silme
  • Dosyalar ve dizinler üzerinde değişiklik yapabilmek için ilkel ilkel yetenekleri desteklemek
  • Dosyaları ikinci bellekte aynen eşleştirebilmek (mapping)
  • Dosyaların yedeklerini sabit diske alabilmek

I/O Sistem Yönetimi: Buffer-caching sistemi, Genel aygıt-sürücü arayüzleri Sürücüye özel donanım aygıtlarını kapsar.

İkincil Bellek Alanı Yönetimi: Birinci bellek alanı verileri geçici olarak tutabilmesi ve çok küçük olması sebebiyle tüm programlar ve verileri sürekli olarak ana bellekte tutulmaz. İşte burada ikincil bellek alanı birincil bellek alanının backup’ı olarak kullanılır.Birçok bilgisayar sistemi backup edilecek proğram ve veriler için diskler (sabit diskler) kullanır.İşletim sistemi aşağıdaki aktivitelerden ikincil bellek yönetimi ile sorumludur.

  • Boş alan yönetimi
  • Depolama yer tahsisi
  • Disk paylaştırımı

Networking (Distributed Sistem): Distributed Sistemden kasıt aynı bellek alanını ve saatini paylaşmayan işlemci topluluğu.İşlemciler sisteme network aracılığı ile bağlanır.İletişim belli bir protokol aracılığı ile gerçekleşir. Distributed Sistem kullanıcıların başka sistem kaynaklarına erişebilmesini sağlar. Bu da

  • İşlem hızının arttırılmasına
  • Veri erişebilirliğinin arttırılması
  • Gelişmiş güvenilirlik sağlar.

Koruma(Protection) Sistemi: Kullanıcıların, programlarını süreçlerin sisteme ve kullanıcı kaynaklarına erişimini kontrol eden mekanizmadır.Koruma mekanizması

  • Yetkili veya yetkisiz kullanımı ayırt edebilmeli.
  • Aldatmaları belirleyebilmeli
  • Zorlayıcı olabilmeli

Komut Yorumlayıcı Sistemi: Kontrol deyimi olarak bir çok komutun işletim sistemine verilmesi. Bunlar;

  • Süreç yaratma ve yönetme,
  • I/O handling
  • İkincil bellek yönetimi
  • Birincil bellek yönetimi
  • Dosya Sistemine erişim
  • Koruma
  • Network

4. PROGRAMLAMA DİLİ

Programlama dili insanlar ile makineler arasındaki iletişim dilidir.. Sizinde bildiğiniz gibi makineler sadece 0 ve 1(on ,off) değerlerinden algılarlar. Geçmiş senelerde makine dili ile proğramlama yapılsada bunun zorluğu anlaşılarak assembly dili çıkarılmıştır. Peki bu assembly dilini makine nasıl anlar MOV AX, 00000001 yazdığımız kaynak kod parçası 000101010111 gibi değerlere dönüştürülerek makineye verilir. Oyun programlaması açısından önemli olduğunu düşündüğüm iki programlama dilini aktarmaya çalışacağım.

Assembly: Bildiğiniz gibi assembly makine diline en yakın programlama dilidir. Bu sebepten donanıma en etkili ve encapsulation hızlı ulaşan programlama dilide denir. Buna rağmen yazılım geliştirme zorluğu ve platformlar arası taşınamaması gibi sebeblerden dolayı oyun programlamada pek kullanılmaz. Sadece oyunun tamamı yazıldıktan sonra programdaki bazı kısımların hızlandırılması için assembly diline çevrilmesi ile kullanımı gerçekleştirilir. (Yalnız bu birkaç sene içinde vertex shader ve pixel shader programlamada sıkça kullanılarak assembly kullanımını arttırabilir.)

C++/C: Oyun programlamada kullanılan ana dildir. C’nin çıkış amacına baktığımızda bir sistem programlama dili olarak çıkmıştır. Yani hem programlamanın kolay bir şekilde yapılması hemde donanıma etkili erişimin gerçekleşmesi amaçlanarak gerçekleştirilmiştir ve de çok başarılı olmuştur. Şu anda piyasada en çok VC++ compiler’i kullanılmaktadır.(Windows için)

5. API’ler

Api nedir? Açılımı Application Programming Interface yani Uygulama Programlama Arayüzüdür. Sağladığı bir takım fonksiyonlar ile spesifik görevleri yerine getirmemizi yardımcı olan kütüphanelerdir.

Bizim oyunlarda kullanıcağımız API’ler grafik ve ses donanımına arayüz sağlayarak ondan yararlanmamızı sağlayan kütüphaneler olacaktır. Mesela OpenGL, GLUT, GLU DirectX (Direct3D, DirectDraw, DirectShow, DirectInput, DirectPlayer, DirectSound, DirectMusic), Java2D, Java3D, JavaMusic, JavaNET, JavaMedia, FMOD, vb …gibi.

Ben bu kısımda OpenGL Api’sinden kısaca bahsetmeyi uygun gördüm.

5.1 OpenGL Nedir ?

OpenGL grafik donanımı üzerinde bulunan bu donanıma arayüz oluşturan bir yazılımdır. Bu arayüz 250 farklı komut seti içermektedir. Bunlardan 200 OpenGL çekirdeği içerisinde diğer 50 tanesi ise OpenGL Utility Library içerisindedir. OpenGL grafik api’ si sayesinde 3 boyutlu interaktif uygulamalar geliştirebilirsiniz.

OpenGL platform bağımsız bir API’ dir. Arka arkaya çalıştırılan komut akışı gerçekleştiren bir arayüz olarak dizayn edilmiştir. Bu kaliteyi sağlamak içinde kendi bünyesinde windowing task’lar ve obtaining user input gibi komutları içermez, onun yerine kullandığı platformun OpenGL’e sağladığı windowing ve input servislerinden yararlanır. Aynı şekilde yüksek seviyeli 3 boyutlu nesneler oluşturmak için de komut içirmez. Fakat sağladığı komutlarla bir otomobil, uçak veya molekül yüzeyi oluşturabilir. OpenGL ile bu tipte istenen modelleri oluşturmak için geometrik primitif dediğimiz küçük araç kitindeki nokta, çizgi ve polygonlardan yararlanırız.

Elbette ki daha iyi bir grafik sistemin oluşturulması OpenGL’ in temel yapılarının üzerine oturtularak kurulabilir. OpenGL Utility Library (GLU) birçok yüksek düzey modelleme özelliklerine, Quadratic yüzeylere, NURBS eğri ve yüzey oluşturma özelliklerine sahiptir. Daha farklı olarak yine OpenGL üzerine kurulu Scene Graph özelliğine sahip olan daha yüksek düzeyli Fahrenheit Scene Graph yine OpenGL kütüphanesi üzerine kurulmuş yüksek düzeyli bir kütüphanedir.

Renderleme Sırasında Yapılan İşlemler Nelerdir ?

Aşağıdaki 4 aşamada kısaca renderleme işleminin gerçekleşmesi sırasında hangi işlemlerin olduğu gözükmektedir.

  • Şekillerin ve geometrik nesnelerin matematiksel ifadelerle oluşturulması (OpenGL kendi bünyesinde nokta, çizgi, polygon , görüntü, bitmap gibi primitif nesne oluşturacak araçlara sahip)
  • Nesnelerin üç boyutlu düzlemde düzenlenmesi ve bakış açısının ayarlanması
  • Nesnelere ait renk değerlerinin hesaplanması, ışık, doku(texture) değerleri de hesaba katılarak ekrana uygulanması
  • Tüm nesne değerlerine ait tanımların ve renk değerlerinin pixel değerlerine çevirilmesi kısaca rasterization olayının gerçekleşmesi

Bu aşamalar süresince OpenGL nesnelerinin elimine edilmesi gereken yerlerin elenmesi, gözükmeyen(hidden) kısımlarının yok edilmesi. Ayrıca rasterization işlemleride soyutlayarak anlatmıştır.

Basit Bir OpenGL Kodu

Bu kadar fazla opsiyonun ve kompleks işlemlerin OpenGL grafik sistemiyle yapılması OpenGL kompleks bir hale getirebilir. Fakat temelde OpenGL ile yapılmış bir programın yapısı çok basittir. Yaptığınız iş aslında OpenGL ‘in hangi nesneleri renderlemesi ve nasıl renderlemesi gerektiği hakkında belli stateleri tanımlamak ve kontrol mekanizması koymaktan ibarettir.

OpenGL’i aslında bir Gerçek Zamanlı Renderleme Yazılımı olarakta düşünebilirsiniz. Bu programlama yapısını ortaya koymadan önce bazı terimleri kavramaya çalışalım.

Basit Bir OpenGL kodu

OpenGL Bir Durum Makinasıdır

OpenGL bir durum makinasıdır (state machine). Siz belli parametreleri aktif hale getirerek OpenGL machine’ in belli bir durumda (state) bulunmasını sağlarsınız.

Mesela boyama işlemi için bir renk değeri atadığınızda bu renk değeri tekrar atanıncaya kadar aynı kalır ve o süre içerisindeki tüm boyama işlemleri bu renkle gerçekleştirilir. Bunun gibi birçok durum (state) belirleyen kontroller içerir mesela görüş (current viewing), projeksiyon (projection), dönüşümler (transformations), çizgi (line), poligon (polygon), “stipple patterns”, polygon drawing model, pixel paketleme ve çevrimleri, ışığın pozisyonu ve karakteristik özellikleri, nesnelerin meteryal özellikleri . Birçok durum (state) değişkeni mod içerir ve glEnable( ) ve glDisable ( ) komutlarına sahiptir

OpenGL’ de Durum Makinesi Sorgulaması

Sistemdeki durumlar default değerler içerirler. Durum değeri hakkında bilgi edinmek içinse glGetBooleanv( ) , glGetDoublev( ) , glGetFloatv( ), glGetIntegerv( ), glGetPointerv( ) veya glIsEnabled( ) komutlarıyla sorgulama gerçekleştirilebilir. Bu tip sorgulamalar genelde veri tiplerine özgüdür. Bir de daha spesifik konular için hazırlanmış sorgular bulunur. glGetLight( ), glGetError( ), glGetPolygonStipple ( ), gibi ayrıca yığınlarda ki durumlarıda geriye döndürmenize olanak sağlar. glPopAttrib( ), glPushAttrib( )

OpenGL Rendering Pipeline

OpenGL işlemlerinde ortak operasyonlarla belirli katmanlar oluşturularak. OpenGL rendering pipeline oluşturur.

OpenGL Rendering Pipeline

Display List

Geometrik yada pixel olarak tanımlanmış tüm veriler display listte şu an yada sonra kullanılmak üzere kaydedilir. (Display list’e tutulan veri dışında immediate modu kullanan verilerde bulunur.) ne zaman ki Display List çalıştırılmak istense display listte tutulan veriler çalıştırılmak üzere işleme sokulur.

Evaluators

Tüm nesneler noktalardan oluşturulabilir. Ama parametrik yüzeyler veya eğriler kontrol noktasıyla idare edilir. İşte evaluator yüzey noktaları ve kontrol noktalarının uyumlu olarak ortak bir şekilde hareket etmesini sağlayan arabulucu method topluluğudur.

Per- Vertex Operations

Bu aşamada noktaların primitiflere (4*4 Matrislere) dönüştürülmesi işleminin yapıldığı aşama Uzaysal koordinatların ekrandaki 3D Dünya koordinatlarına çevrildiği , hesaplandığı aşama. Eğer ileri düzey özellikler kullanılırsa bu aşamanın üzerine düşen yük artar. Mesela doku kaplama özelliği sonucunda doku koordinatlarının hesaplarının yapılması. Lighting özelliğiyle aydınlatma hesaplarının yapılması tabi bu sırada dönüşüme uğramış köşe, kenar, yüzey normali, ışık pozisyonu ve meteryal özelliklerine hesaplanması ve renk değerlerinin hesaplanması bu aşamada gerçekleşir.

Primitive Assembly

Temel görevi için clipping işlemi diyebiliriz. Bu aşamada düzlem dışında kalan geometrilerin elenmesi gerçekleşir. Noktanın clipping işlemi basit olmasına rağmen, çizgi ve poligonlar için ek algoritmalar kullanılır. Bazı durumlarda bu aşamayı perspective division izler bu kısım uzaktaki objelerin daha küçük gözükmesini sağlıyor. Viewport ve depth işlemleri uygulanarak (z-coordinate işlemlerinin gerçekleşmesi).Genelde bu aşama sonunda primitif geometrik nesnelerle ilgili işlemler biter. (transformation, clipping vertices with related color, depth and texture coordinate values)

Pixel Operations

Geometrik nesneler OpenGL rendering pipeline sırasında bir yol izlerken pixel data farklı bir rota izler. Sistem belleğindeki dizi halinde tutulan veri unpacked edilerek değişik formatlardan OpenGL için uygun bileşenlere dönüştürülür. Daha sonra bu veri pixel map tarafından scaled, biased edilir. Sonuç sıkıştırılarak texture belleğine depolanır ve buradan da rasterization aşamasına geçer.Bu aşamada framebuffer’a yada texture belleğine özel pixel kopyalama metodlarına sahiptir. Bu tekil kopyalamalar tüm verinin framebuffer veya texture buffer’a kopyalanmadan yapılması gerekmektedir.

Texture Assembly

OpenGL uygulamaları kaplama görüntülerinin geometrik nesnelerin üzerine uygulanarak daha gerçekçi bir şekilde görüntülenmesini sağlar. Eğer değişik kaplama görüntüleri kullanılıyorsa akıllıca olan bunları kaplama nesneleri haline dönüştürerek bunlar arasında kolayca değişiklik yapmanıza olanak sağlaması.Bazı OpenGL gerçekleştirimlerinde kaplama performansını arttırmak ve hızlandırmak için özel kaynaklar kullanılmakta. Belki texture belleği için özel olarak geliştirilmiş yüksek düzeyli bellek alanı. Bu tarz bir bellek olursa texture nesneleri öncelik değerleri vererek etkin kullanılması sağlanabilir.

Rasterization

Tüm geometrik nesnelerin ve pixel verilerinin fragmentlere dönüştürüldüğü aşamadır. Bu fragment frame-buffer da bulunan pikselden sorumludur.

Fragment Operation

FrameBuffer a değerleri yüklenmeden önce bir takım operasyonların yapıldığı değişikliklerin yapıldığı aşamadır. Bu aşamadaki operasyonlar enabled() ve disabled() şeklinde gerçekleşir.Belirlenen texture elemanlarının ilgili fragmentlere uygulanması. Scissor testi, Alpha testi, stencil testi ve depth buffer testi( for hidden surface removal) uygulandıktan sonra sis hesaplarının yapılması gerçekleştirilmesi . Eğer bu aşamada yapılan testlerde hata oluşursa fragment için yapılan işlemleri sonlandırır bu testler başarıyla gerçekleşirse blending, dithering, logical operasyonların, masking işlemleri gerçekleştirilebilir.

OpenGL ile İlgili Kütüphaneler

OpenGL tüm bu komutlar yanında window sistemin alt yapısını oluşturan değişik kütüphanelere sahiptir. The OpenGL Utility Library (GLU): Özel viewpoint orientation ve projeksiyonlar, tessellation ve rendering surface ile ilgili low — level komutlar içermektedir. NURBS interface de bu kütüphanede bulunmakta

GLX : X window Graphics Library Extension

WGL: Windows Graphics Library Extension

PGL: IBM Graphics library Extension

AGL: Apple Graphics library Extension

The OpenGL Utility Toolkit(GLUT): bağımsız system toolkit Bu toolkit sayesinde windowing ile karşılaşılacak kompleks yapılardan kurtulmanızı sağlar.

The Fahrenheit Scene Graph (FSG): OpenGL üzerine object-oriented tabanlı yüksek seviyeli uygulamalar için geliştirilmiş grafik paketi

GLUT, the OpenGL Utility Toolkit

OpenGL renderleme komutları içermesine rağmen window sistemlerinden ve operating sistemlerinden bağımsız olarak dizayn edilmiştir. Bunun sonucunda window açma keyboard ve mouse ile ilgili eventler hakkında hiçbir komut içermez ama bu işlemler yapılmadan da renderleme ve interaktiflik sağlanmaz. İşte GLUT kütüphanesinde bu tarz işleri arka planda gerçekleşmesini sağlar. Artı olarak OpenGL sadece nokta, çizgi ve polygon çizgi çizme gibi basic çizim özelliklerine sahipken GLUT complex üç boyutlu nesneleri(sphere, torus, teapot) çizme yeteneklerine sahiptir(OpenGL Utility Library, GLU kütüphanesinde quadraticsler gibi kompleks nesneleri(sphere, cylinder, cone) çizim yeteneklerine sahiptir.

Yardımcı Yazılım Paketleri

Yardımcı yazılım paketlerinden kast ettiğim oyun için gerekli grafik, ses, müzik ve level dosyalarının hazırlanmasında kullanılan programlar. Ben burada grafik ile ilgili olanları üzerinde durdum. Müzik için Sound Forge, Cakewalk, GitarPro, Quake Level Editor, oyun karakterleri için MilkShape gibi yazılımlarda bulunmaktadır.

Adobe Premier: Non-linear video editing yani video görüntülerini parçalayarak onlar üzerinde değişiklik yapmanızı ve tekrar istediğiniz şekilde birleştirmenizi sağlayan bir grafik yazılımıdır.

Adobe After Effects: Video ve resimler üzerinde değişik efektler uygulayabilmenizi sağlayacak yardımcı araçları olan bir grafik paketidir.

CorelDraw: Vektörel çizim programıdır. matbaacılar tarafından sıkça kullanılmaktadır.

Adobe Photoshop: Resim işlemek(raster işlemler) için kullanılan grafik paketidir.

3D Studio Max: 3D modelleme ve kaplama, karakter animasyonu, animasyon ve film oluşturmanızı sağlayan grafik paketidir.

Lightwave: 3D modelleme ve kaplama, karakter Animasyonu, animasyon ve film oluşturmanızı sağlayan grafik paketidir.

SoftImage: 3D modelleme ve kaplama, karakter animasyonu, animasyon ve film oluşturmanızı sağlayan grafik paketidir.

Maya: 3D modelleme ve kaplama, karakter animasyonu, animasyon ve film oluşturmanızı sağlayan grafik paketidir.

Poser: İnsan ve yaratık kütüphanesi ile hızlı bir biçimde karakter ve karekter animasyonu gerçekleştirmeye yarayacak grafik paketidir.

Uzun süredir farklı sektörlerde (Askeri, Telekomünikasyon, Devlet, Bankacılık, Sigortacılık, Tübitak, SaaS) yazılımlar geliştiriyorum. Bu süreçte Havelsan, Milsoft, T2, Cybersoft ve Thundra firmalarında yönetici ve yazılım mühendisi olarak çalıştım. Deneyimlerimi ve teknolojik bilgi birikimi mi olabildiğince OnurDayibasi.com adresinde toplamaya çalışıyorum. Tüm yazılarıma ve daha fazlasını bu site üzerinden erişebilirsiniz.

--

--

Frontend Lead at Thundra

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store