4 Ekim 2009 Pazar

Onlive - Yenilikçi Bir Oyun Hizmeti

OnLive teknolojisi daha önce 2009 yılının mart aynıda bir GDC'da tanıtılmıştı. Yakın bir zamanda ise onlive.com'da beta test için kayıt bölümü açıldı. Ancak bunun için amerikada yaşamanız gerekiyor.

Onlive Nedir?

Onlive bilgisayarınızla veya televizyona bağlanan bir mikro-konsol aracılıyla oyun oynamanıza yarayan bir hizmettir. Bu hizmetin en ilginç özelliği ise, oynadığınız oyundaki hiç bir işlemin istemci tarafından yapılmaması. Bu sayede ekran kartı olmayan bir laptopta crysis oynayabilirsiniz.

Bilgisayarınızda, tarayıcınıza yüklediğiniz 1mb'lık bir plugin ile bu hizmeti başlatıyorsunuz. Uygulamanın başlamasıyla bilgisayarınız ile onlive sunucuları arasında bir bağlantı açılıyor ve sürek olarak bir video akışı sağlanıyor. Menüye girdiğinizde, oyunları listeden seçip, trailer'larını veya diğer oyuncuların oyunlarını izleyebiliyorsunuz. Oyunu oynayabilmeniz için onu ya satın almanız ya da kiralamanız gerekmekte. Bu işlemden sonra oyunu oynamaya başlıyorsunuz. Herhangi bir bekleme olmadan oyun başlıyor.

Aynı zamanda eğer bir televizyonunuz varsa, onlive'ın mikro konsolunuda satın alabilirsiniz. Bu konsol, bir ele sığabilecek kadar küçük ve üzerinde HDMI, optik çıkış,ses çıkışı, ethernet girişi ve 2 adet usb portu bulunmaktadır.

1

Herkes gibi sizin de aklınızda şu soru oluşmuştur. Peki ama internet videolarında büyük bir gecikme süresi var.

Onlive'ın geliştiricileri daha önce quicktime oluşturulmasında da rol almışlar ve geliştirdikleri yeni algoritma sayesinde gecikme sürelerini 1ms'ye kadar düşürdüklerini idda ediyorlar. Youtube videolarında yaklaşık olarak 500ms. Bir kere bağlantı kurulduğunda bir daha bekleme veya indirme gibi bir durumla karşılaşmıyorsunuz. Ekrandaki görüntüler sürekli olarak sunucundan bilgisayarınıza gönderiliyor.

2

Tabii ki bu hizmetten yaralanabilmeniz için stabil bir internet bağlantınız olmalı. Eğer bana standart definiton (SD) yeter diyorsanız 1.5 Mbps'lık bir bağlantı hızı gerekmekte, ancak oyunları High Definition (HD) olarak oynamak isterseniz bağlantı hızınız 5 Mbps civarında olmalı.

Beta testi daha yeni açılmış oluğundan deneme fırsatım olmadı, ancak izlediğim video'lardan crysis'in ortalama bir laptopta gayet akıcı olarak oynanabildiğini gördüm.

3

Bu hizmetin yatırım maliyeti çok yüksek ancak tutulma olasılığı birkaç nedenden dolayı bana yüksek geliyor, öncelikle geliştiriciler için oldukça avantajlı. Tek bir platform için geliştirme yapılıyor, yani başka platformlara port etme gibi bir sorun yok. En önemlisi korsan kullanımın önüne geçilmiş olunuyor. Her ne kadar yatırım maliyeti yüksek olsa da günümüzde korsan kullanım yüzünden oluşan kayıplar çok yüksek.

4

Eğer oturduğunuz yerden kalkamayacak kadar tembelseniz sizin için de avantajlı bir hizmet çünkü CD/DVD almak için mağzaya gitmenize gerek yok ve yine aldığınız bu CD/DVD'leri konsolunuza takmak zorunda kalmayacaksınız :) Ancak sunuculardan yararlanmak için sürekli olarak para dökmeniz gerekecek. Büyük ihtimalle oyun bilgisayarı almaktan daha ucuza gelecektir.

Beta testleri başladı, ancak onlive hizmetinin ne zaman başlayacağı tam olarak bilinmiyor, yaklaşık 7 yıllık gizli bir proje olduğundan, bu süre birkaç ayda olabilir birkaç yılda. Merakla bekliyoruz.

29 Eylül 2009 Salı

Yeni Blog

artık bu blog'a daha fazla yazı eklemeyeceğim, onun yerine başka bir blog başlattım. Bu blogdaki tüm yazılar orada da var. Aslında devamı gibi. Yeni blogum artık hem ingilizce hem de türkçe olacak. Çok az post olmasından dolayı şu an için ingilizcesine ulaşılamıyor ama zaman içerisinde o da çalışır hale gelicektir. Hemen gitmek için;
Sonradan gelen düzenleme;
Sürekli güncellemeydi, spamdi derken blog'umu tekrar blogspot'a taşımış bulunmaktayım.

5 Eylül 2009 Cumartesi

Yol Bulma (Path Finding)

İnternette path finding ile ilgili bir makale okudum, önemli birkaç konuya değiniyordu, bu yüzden ben de bu makaleyi biraz özetleyerek türkçe olarak aktarmaya karar verdim. Umarım yardımcı olur. Bu makalenin orjinalini bu adreste bulabilirsiniz.

Oyunlarda hala yol bulma ile ilgili ciddi problemler bulunmaktadır, aşağıdaki video'da çeşitli oyunlardaki çeşitli hatalar gösterilmiştir.


Video'da görüldüğü gibi, bir çok oyundaki yol bulma algoritmaları her durumda doğru sonuç vermemektedir. Ancak bu sorunların çoğu, yol bulma işleminin way-point'ler ile hesaplanmasından kaynaklanmaktadır.

(Waypoint, gezilebilinen alanları tanımlamak için konan noktalardır. Buna 'yol noktaları' diyebiliriz.)

Waypoint'ler Neden Yol Bulmak için Uygun Değildir ?

Aşağıda tipik bir waypoint örneği bulunmakta.

Stormwind
[World of Warcraft'daki Stormwind City]

Stormwind_waypoints
[Waypointlerin konulmuş hali]

Gezilebilir alanları (yolları) way-pointlerle belirtebildiğimiz gibi konveks poligonlarla da ifade edebiliriz. Bu AI'a yol hakkında daha fazla bilgi ve daha düzgün karar verme olanağı verir. Bu şekildeki geometriler "navigation mesh" olarak adlandırılmıştır.

Stormwind-NavMesh

1. Bazı alanlarda, çok yüksek miktarda waypoint kullanmamız gerekebilir.

Geniş, açık alanlarda, AI'ın düzgün bir hareket yakalaması için çok fazla poligon gerekebilir.

Aşağıdaki resim, World of Warcraft'taki "Halaa" ismindeki kasabadan. NPC'lerin açık kısımlarda rahatça hareket etmesi isteniyor.

Halaa

Açık alanlar için çok fazla waypoint koymamız gerekiyor. Ancak bu sayı bile yeterli değil, waypointlerimizi daha da arttırmazsak, karakterlerimiz hareket ederken zig-zaglar çizerek ilerleyecektir.

Halaa_waypoints2

Diğer yandan, navigation mesh ile tanımlama yaparsak, çok daha az poligon kullanarak işimizi bitirmiş oluruz.

Halaa_navmesh2

Bu sayede daha az arama yaparak, yol bulma işleminin hızını da arttırabilirisiniz.

2. Karakterler ilerlerken zig-zaglar çizerek ilerleyebilir.

Waypoint'ler belirlediğiniz zaman, karakteriniz bu waypointlerin üzerinde hareket edecektir. Bu yüzden, büyük ihtimalle seçtiğiniz herhangi iki nokta arasında, düzgün waypointler bulunmayacağından, karakteriniz zig-zaglar çizerek hareket edecektir.

Karakterimizin A'dan B'ye gittiğiniz düşünelim.

Halaa_ab

Burada da sarı ile gösterilmiş olan yol, A'dan B'ye giden en ideal waypoint'leri göstermektedir.

Halaa_waypoints2_AB

Bu noktalar ile daha yumuşak olarak bir eğri oluşturmayı da düşünebilirsiniz, fakat waypointler etrafındaki objelerle ilgili bir bilgi barındırmadığından, eğrinin istenmeyen bir noktadan geçip geçmeyeceğini hesaplamanız zor olabilir.

Ancak, navigation mesh kullansaydık, en doğru yolu bulmamız daha kolay olacaktı. Aşağıda ise aynı işlemin navigation mesh ile yapılmış hali bulunmakta.

Halaa_navmesh2_AB

Bu durumda ise, karakterlerin dolaşabileceği alanın tümünü bildiğimizden dolayı, hesapladığımız yolu istediğimiz gibi yumuşatabiliriz. Aynı şekilde, aşağıdaki resimde, kırmızı olarak işaretlenen yol waypoint kullanıldığında ortaya çıkarken, mavi ile gösterilen yol ise navigation mesh kullandığımızda oluşturuluyor. (Tabii ki mavi olan yol programcının kullandığı algoritmaya göre değişir.)

Stormwind-NavMesh-with_splines

3. Waypointler kullandığımızda yolu, dinamik olarak değişen çevreye göre, değiştirmemiz daha zordur.

Eğer çevre dinamik olarak değişiyorsa ve sizin o bölgede yeterli sayıda waypointiniz yoksa, yol bulma işlemi başarısız olabilir. Aşağıdaki resimde yol üzerinde bir kutu olduğunu düşünelim. Bu durumda çok az waypoint bulunduğundan, karakter kutunun yanından düzgün bir şekilde dolaşamayacaktır.

Stormwind_waypoints_and_crate

Ancak, navigation mesh kullanırsak, çevre hakkında da bilgi sahibi olduğumuzdan, çeşitli yöntemlerle daha uygun bir yol bulabiliriz.

Stormwind-NavMesh-avoidance-cropped

4. Waypoint'ler farklı hareket tipleri olan karakterler için düzgün sonuç vermez.

Genişliği, yüksekliği, dönüş şekli ve bunun gibi bir çok parametrenin değiştiği durumlarda waypoint sistemi düzgün çalışmayabilir. Örnek olarak, aşağıdaki resimde bir panzer ile bir kişinin olduğunu düşünelim. Kişi, kum torbalarının yanından kolaylıkla yürüken, bir panzer bunu yapamaz.

bf42_piece

Kırmızı çizgi kişinin, mavi çizgi ise panzerin yolunu göstermektedir.

bf42_piece_paths

Waypoint'lerin düzgün çalışması için farklı waypoint grupları belirtebilirsiniz. Ancak bu işlem çok vakit isteyebilir. Bunların yanında waypointleri birleştirip panzerin nerede dolaşabileceğini hesaplayabilirsiniz ki, bu durumda waypointlerinizle bir navigation mesh oluşturmuş olursunuz.

bf42_piece_mesh

Yukarıdaki resimde gördüğünüz gibi, gezilebilinen alanların köşeleri belirli. Bu durumda, her farklı karakteriniz için bir yarıçap belirtebilirsiniz. Örnek olarak bir kişinin yarıçapı 1m, panzerin ise 5m olarak belirlenebilir.

bf42_piece_mesh_with_extents

Aynı zamanda farklı tipte karakterler için farklı hareket stilleri belirtebilirsiniz. Örnek olarak bir motorsiklet köşeleri daha yuvarlak alırken, bir insan köşeli dönüşler yapabilir.

motorcycle

Yukarıdaki resimde, motorsiklet kırmızı yolu izleyebilirken, sarı yolu izleyemez.

5. Waypointler karakterlerinizin, yol bulma dışındaki işlemleri için yeterli veri barındırmaz.

Bazı zamanlarda, yol bulma için kullanılan verilerin, AI'a nasıl davranacağını veya hareket edeceğini hesaplamada yardım etmesi gerekir. Örnek olarak bir karakterin belirli bir yola değilde, bir düşmana göre yer değiştirdiğini düşünelim. Bir canavar tarafından kovalanan köylü, kendine göre bir algoritmayla kaçmaya başlayacaktır. Eğer siz waypoint kullandıysanız, karakteriniz bu waypointleri kullanarak sağa sola koşamaz veya atlayamaz. Bu durum navigation mesh ile giderilebilir. Yani her nokta için, o noktanın uygun olup olmadığını hesaplayabilirsiniz. Bu işi, fizik motorunuz da sizin yerinize yapabilir, ancak navigation mesh kullanarak daha az sistem kaynağı tüketen bir AI sistemi yazabilirsiniz.

swordsman2

Hala ikna olmayanlar, makalenin orjinalinde yer alan soru/cevap kısmını inceleyebilirsiniz. http://www.ai-blog.net/archives/000152.html

29 Ağustos 2009 Cumartesi

Video Oyunları Orkestrası - Video Games Orchestra

GDnet'in facebook sayfasında karşılaştım, böyle bir orkestra varmış. Youtube sayfalarını da inceledim, eski oyunları oynamışlığınız varsa kesinlikle bir ara ziyaret etmelisiniz. Hepsini izlemek isterseniz http://www.youtube.com/user/VGOOnline#play/all adresine tıklayınız. Bende birkaç tane seçtim sizin için, iyi seyirler :)

Super Mario Medley (5/8/2009 @ IGC East '09)


Donkey Kong Medley (3/5/2009 @ BPC) Laptop hoparlörleri ile dinliyorsanız pek bişey duyamayabilirsiniz.


Super Mario Galaxy: Wind Garden (5/8/2009 @ IGC East '09)



Chrono Trigger Medley (5/8/2009 @ IGC East '09)


Linkler
Anasayfa:
http://www.vgo-online.org/
Youtube Sayfası:
http://www.youtube.com/user/VGOOnline#play/all

9 Ağustos 2009 Pazar

Bilgisayarın IP'sinden Bağlandığı Ülke Nasıl Bulunur ?

Web sitenize giren kullanıcıların hangi ülkeden bağlandığını öğrenmek isteyebilirsiniz, böylelikle onlara uygun bir sayfa veya karşılama metni gösterebilirsiniz. Bu yazıda, geo ip veritabanı kullanarak, bunu nasıl yapılacağını anlatacağım.

Öncelikle işe veritabanı için gerekli csv dosyasını indirmekle başlıyoruz. Csv dosyasını http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip adresinden indirebilirsiniz.

İndirme işlemi tamamlandıktan sonra, bu dosyayı uygun bir veritabanına aktarmamız gerekiyor. Herhangi bir veritabanı oluşturun, ya da hali hazırdaki bir veritabanını kullanın. Daha sonra bu veritabanında bir tablo yaratın. Bu tablonun ismi 'geoip' olabilir. Uygun bir tablo oluşturmak için, aşağıdaki kodu çalıştırabilirsiniz.

CREATE TABLE IF NOT EXISTS `geoip` (
`start_ip` char(15) NOT NULL,
`end_ip` char(15) NOT NULL,
`start` int(10) unsigned NOT NULL,
`end` int(10) unsigned NOT NULL,
`cc` char(2) NOT NULL,
`cn` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Şimdi bu tabloya, indirdiğimiz csv'deki verileri yükleyeceğiz. Bunun için, indirdiğiniz csv dosyasının yerini bilmeniz gerekiyor. Aşağıdaki SQL sorgusunu

çalıştırdığınızda csv dosyası veritabanına yüklenecektir.

LOAD DATA LOCAL INFILE [dosyanın yolu] INTO TABLE [tablo adı] FIELDS TERMINATED BY [kolon ayıracı] ENCLOSED BY [kapatma işareti] LINES TERMINATED BY [satır ayıracı];

Yukarıdaki koddan tam anlaşılmayabilir. Ben kendi durumum için doldurduğumda aşağıdaki sonucu elde ediyorum.

LOAD DATA LOCAL INFILE 'c:\\GeoIPCountryWhois.csv' INTO TABLE geoip FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Tablomuz hazır olduğuna göre, küçük bir php script'i ile ip'lerin hangi ülkeye ait olduğunu bulabilirsiniz.

<?php
$pth = "localhost";
$user = "root";
$psw = "123456";
$dbname = "country";

$con = mysql_connect($pth,$user,$psw);

if (!$con)
{
     die("Veritabanı bağlantısı sağlanamıyor: " . mysql_error());
}

mysql_select_db($dbname, $con);

// IPden Ülke kodunu ve ismini array olarak döndüren fonksiyon.
function getCountry($ip) {

          $ip = explode(".",$ip);
          
          $result = 16777216 * $ip[0] + 65536 * $ip[1] + 256 * $ip[2] + $ip[3];
          
          $sql = "SELECT cc, cn FROM geoip WHERE ".$result." BETWEEN start AND end";
          $result = mysql_query($sql);
          $country[0] = mysql_result($result,0,"cc");
          $country[1] = mysql_result($result,0,"cn");
          if(empty($ccode)) $ccode = "default";
          return $country;
}

$myip = $_SERVER['REMOTE_ADDR'];
$myip = "85.100.153.122"; // eğer localhostta çalıştırısanızi 127.0.0.1 döneceğinden, herhangi bir ülke bulunmayacaktır.
                // O yüzden örnek olarak bir ip adresi yazıyorum buraya, scripti kullanırken silmeyi unutmayın.
echo "IP Address = <b>".$myip."</b><br>n";
$code = getCountry($myip);
echo "Code = <b>".$code[0]."</b><br>n";
echo "Country = <b>".$code[1]."</b><br>n";

?>

27 Temmuz 2009 Pazartesi

3G Şakası


Bugün Avea 3G fiyatlarını açıkladı. Ancak bu fiyatlar dünya standartlarının çok üstünde. Ayrıca kotasız bir tarifede yok. Ücretlendirmeler şöyle;
  • Görüntülü Konuşma ücreti her yöne dakikası 10 kuruş/1 kontör olacak.
  • Cepten TV izlemek abonelik ücretine dahil olacak ve fiyatlar 5 TL'den başlayacak.
  • Belirli bir video, film seçip indirmenin ücreti ise 3,5 TL.
  • Cep telefonu için 100 MB kotalı bağlantı 8 TL
  • 2GB Kotalı bağlantı ise 35 TL.
  • Bilgisayar bağlantıları içinse 3G internet hızının maliyeti, 2GB 35 TL. 6GB 55 TL.
Birçok kişi 3G'nin TTNET ADSL hizmetine bir seçenek olacağını umut ediyordu. Ancak bu fiyatlarla normal kullanımın bile pahalı olduğunu söyleyebiliriz.

Diğer operatörlerde fiyatların çok oynamayacağını düşünüyorum. 3 gün sonra tüm operatörler tarifelerini açıklamış olacaklar.

Güncelleme:

Turkcell'inde fiyatlarıda çok farklı değil, işte fiyatlar.
  • 1 GB internet bağlantısı aylık 29TL, 4 GB 39TL, 8GB ise 69 TL.
  • Haftalık kullanmak isterseniz, 1 GB internet 19 TL.
  • Cepten internete girmek isterseniz, 100 MB 9 TL / 65 Kontör

23 Temmuz 2009 Perşembe

Ogre ile Küçük Bir Deneme

Önceki yazıda ogre ile uğraştığımdan bahsetmiştim. Deneme amaçlı bir oyun yazmaya çalıştım. Her projede kullanabileceğim bir kod oluşturmak istedim, ancak yeniden yazılması gerekiyor.

Kısaca anlatmam gerekirse, 3000x3000 lik bir düzlemde kamera, ağaçlar, kutular, çimler ve zombiler rastgele yerleştiriliyor. Daha sonra sizden oyundaki zombileri öldürmeniz isteniyor :). Oyunda Ogre'nin haricinde NxOgre eklentisini kullandım.


Linkler
NxOgre:
http://www.nxogre.org/
NxOgre Forum:
http://www.ogre3d.org/addonforums/viewforum.php?f=6