"bir yazılımcının not defteri.."

24 Ağustos 2012 Cuma

Browser Oyunlarında Devrim: Google Native Client

Bugüne dek yaptıklarına bakarak Google in vizyonunu kestirmek zor değil: masaüstü sistemlerin ve hatta belli bir sisteme özel tüm yazılımların yerini http üzerinden işleyen web ortamına bırakması. Dahası web / internet kelimelerinin dahi tarihe karışması çünkü akla gelebilecek her türlü cihazın zaten sürekli http üzerinden online olması. Akla gelebilecek her türlü bilginin de bulut üzerinde yer alması, ve ona bağlı online istemciler şeklinde olayın işlemesi..

Google in sağladığı servislere bakarsak ; Google App Engine (GAE), BigTable, Drive, ve diğer sayısız API vs... tüm bunların az önce bahsettiğim olaya adım adım yaklaştırdını söyleyebiliriz.

Bu durum da bizleri bilgisayar kullanımı adına browserlara çok daha bağımlı kılacaktır. Yani yukarıdaki vizyon gerçekleşirse (ki gerçekleşecek) browser lar sıradan web sayfası görüntülemeden çok daha fazlasını yapmak durumunda kalacaklar demektir. Html 5 in flash ın yerini alacak olması (gerçi buna biraz daha zaman varsada) herkesin dilinde ama bu olacak gelişmelerin sadece ilk ve belkide en önemsiz (!) aşaması.

Google birşeyin pekala farkındaki: bilgisayar dünyasında korkunç bir hızla büyüyen ve gelecek vadeden bir sektör varsa o da OYUN sektörüdür. Ve dolayısı ile bütün vizyonunu http servisleri ve onlara bağlanan browser ve diğer istemciler üzerinden yürütmeye kararlı bir internet devi için bu uzak bir konu gibi görünebilir; ancak google in son 5 yıldır bu oyun konusu üzerinde harıl harıl çalıştığı biliniyor.

Google oyun konusuna destek vermek zorunda olduğunun farkında. Aksi durumda insanları sisteme bağlı yazılımlara gerek olmadığına inandırması ve bir kaç aptal flash / html5 oyunu ile oyun delilerini kandıramayacağı aşikar. Dolayısı ile burada karşı karşıya olunan fikir : bir browser üzerinden profesyönel oyun deneyimi sunmak gibi çılgın bir fikir ki,, aslına bakarsanız hiçbir fikrin google için yeterince çılgın olmadığı tecrübe ile sabittir :)


Google in bu konuda ki ilk çıkışı WEBGL teknolojisi ile oldu. Nedir webGL ?  Kısaca browserin, üzerinde çalıştığı bilgisayarın 3D kartının nimetlerinden sonuna kadar faydalanmasını sağlayan, JavaScript ile kodlanan,  web sayfası üzerinde 3D görüntülerin oluşturulması ve oynatılmasını sağlayan bir API dir. Başlarda sadece chrome browser da desteklenen bu özellik bugün hemen hemen tüm browserlarda desteklenmektedir. Aslında webGL, eski OpenGL in küçültülmüş versiyonu olan OpenGL ES 2.0 üzerinde çalışan daha da basitleştirilmiş bir API dir. Yani öyle çok da yeni birşey sayılmayabilir. Ama bunu browser a entegre etmek ve doğrudan web sayfasının içinde oyun oynatmak fikri elbette Google a aitti.


Devam edelim,
e iyi güzel de neden adını o kadar sık duymuyorum? dediğinizi duyar gibiyim. Çünkü webGL deki bazı deneyimler çok geçmeden google i bir adım daha ilerisine yöneltti. Bir musibet bin nasihattan iyidir misali nedir bu deneyimler dersek şöyle kısaca özetleyelim :

WebGL de 3D objelerin her bir vertex (x,y,z) noktası da siber uzayda metinsel rakamlar dizisi halinde javascript ortamında ifade edilir. Mesela bir küpün 4 noktası vardır; bu da 4x3 = 12 farklı float tipi rakam ile çizilebileceği anlamına gelir. Ancak kötü haber o ki, karmaşık şekillerin yüzlerce vertex noktası olabilir; yani şekillerin karmaşıklığı hele ki bu şekillerin sayısı da arttıkça bunları 3D ortamda ifade etmek için uzadıkça uzayan javascript kodları bazen megabaytları bulabilir! Hadi şekilleri yüklediniz; ortama yön verecek olan diğer parametreler? sahneler, ışıklar, kameralar, çarpışmalar, patlamalar vs.. her biri üzerideki olay handle lerinin de yine JavaScript ile yapıldığını ve tüm bu kodların web sayfasının her çağrılmasında tekrar tekrar baştan yüklendiğini hayal edin... kelimenin tam anlamıyla kabus gibi. Dahası webGL halen bait bir programlama arabirimi yok. Yani nispeten zor olmasa da kolay da diyemem. Bunun gibi birçok sebepten ötürü Sevgili Google imiz varolan deneyimlerden ders alarak bir adım ilerisini yapmaya girişti,

Ve işte huzurlarınızda Google Native Client !

NativeClient (NalCl), webGL gibi (ama ondan evrim olarak bir kaç adım ileride) bir başka open source 3D teknolojisi şeklinde basitçe özetleyelim. İlk WebGL demeyiminden ders alan google bu defa kodları tıpkı java ya da .NET gibi kodların bir ara binbary forma derlenebileceği (!) bir ortam yarattı. Bu ne demek? artık 3D kodları JavaScript metin ile ifade edilmiyor, java byte kod ya da .NET IL gibi ara aşamaya derlenmiş bir binary dosyada saklanıyor. Ve Client a bu dosya yollanıyor. Bu da daha ilk yükelemede dahi çok kısa bir yükleme süresi anlamına geliyor. Dahası artık karşınızdaki metinsel kodlar değil, binary dosyaları olduğundan nihayet browser cache nimetlerinden sonuna kadar faydalanılıyor. Böylece webGL deki gibi sayfa her çağırıldığında aynı bilgilerin tekrar tekrar baştan yüklenmesi gibi sorunları ortadan kalkıyor. Kodlar yorumlanma değilde doğrudan browser üzerinde derlenmiş kod olarak çalışacağı için neredeyse desktop oyun uygulamalarına eş bir performans elde ediliyor! Yapılan testler normal bir desktop oyununa oranla chrome üzerinde çalışan nacl modüllerinin en fazla %10 performans kaybı ile çalıştığını göstermiş ki, bu kesinlikle bir devrim, webin evrimi, bir sonraki bilgisayar çağıdır. Kısaca NativeClient kullanılan web sayfaları,, bir web sayfası olmasına rağmen tıpkı bir desktop yazılımı gibi istemcinin tüm donanım gücünü kullanıyor! Üstelik burada bahsettiğimiz şey sonuçta bir web sayfası..




Native Client ‘da,

  • C++ dili ile (ilgili api kullanılarak) yazılan ve derlenen modüller tamamen taşınabilir; bu da programcıya “bir kez yaz yeter” rahatlığı veriyor. Tüm modüller tekrar kullanılabilir. (diğer dillerinde desteklenmesi için çalışmalar yürütülüyor.)
  • Çalışma ortamı sistem bağımsız olan chrome browser gibi günümüzün yaygın, geleceğin evrensel ortamıdır. Client sisteminin Windows, Linux, Apple, vs olması olması hiç farketmez. Chrome un veya NaCl destekli herhangi bir browser olması yeterlidir.
  • Web in tüm nimetleri NaCl uygulamalarında sonuna kadar kullanılabilir. (veri iletişimi gibi)
  • NaCl web sayfasındaki java veya flash uygulamaları gibi bir kutu içinde çalışan sayfanın kalanını umursamayan yapıda değil,  JavaSctipt  aracılığı ile sayfanın tümü ile etkileşimlidir.
  • Sisteme özel yazılımların download edilmesi her bir client a install edilmesi NaCl kullanımına oranla çok zahmetli bir iştir.
  • Browser pluginleri korkunç güvenlik açıkları yaratır. NaCl de güvenlik tamamen Chrome browser a bırakılmıştır.



Şu an piyasadaki bazı bilinen oyunlar NaCl ortamına çok kısa bir sürede çevrilerek tamamen browser ortamından oynatılması sağlanmıştır. Özellikle C++ ile yazılan oyunlar kolayca ve çok kısa sürelerde NaCl ye çevrilmiştir. Aşağıdaki resim NaCl nin klasikleşen oyunlarından Bastion a ait: 


Quake 2 oyununu da NaCl da başarı ile test edildi:
http://www.youtube.com/watch?v=s0WoX7Vv-QM


Başka NaCl uygulamaları :
http://www.youtube.com/watch?v=-Njh4emueFo
http://www.youtube.com/watch?v=W7JTJH0IpxI

örnekleri artırabilirim. Bu oyunların basit flash ya da html5 oyunlarına hiç benzemediğini farketmişsinizdir. Bunların hiçbir plugin gerektirmeden doğrudan browserda çalışabilmesi oyun firmalarını hızla bu teknolojiye çekmeye başladı bile.

Son olarak bir konu yanlış anlaşılmasın: Google WebGL i çöpe atmış değil. Desteğini sürdürmeye devam ettiği gibi, Google Erath deki bazı 3D yapıları da halen webGL teknolojisi ile görüntülüyor. Yani basit 3D işlerde kendisi de kullanıyor. Ama Google in oyun dökümanlarında artık webGL i değil sadece Native Client i ön planda sunuyor ve öneriyor. Kısaca google : oyun yapacaksan artık nacl kullan diyor.

daha yazabilirim :) ama dilerseniz NativeClient in detaylı teknik incelemesini bir sonraki makaleye bırakalım. Ve bu heycan verici teknoloji devriminde ilk küçük uygulamalarımızı yazmaya başlayalım !

Hiç yorum yok: