Oyun
Sanal Gerçeklik: Geliştirici Gözünden Süreç
1995 yılında Virtual Boy adıyla Nintendo'nun piyasaya çıkardığı oyun konsolu, güncel sanal gerçeklik başlıklarının atası konumunda bir ekran barındırıyordu. Başarısız satışlar nedeniyle varlığını sürdüremeyen Virtual Boy, 1996 yılında p...
1995 yılında Virtual Boy adıyla Nintendo'nun piyasaya çıkardığı oyun konsolu, güncel sanal gerçeklik başlıklarının atası konumunda bir ekran barındırıyordu. Başarısız satışlar nedeniyle varlığını sürdüremeyen Virtual Boy, 1996 yılında piyasadan çekildi. Devam eden süreçte çeşitli simülatörler ve farklı giyilebilir ekranlar üretildi. Bu yolculukta gelinen son noktada, milisaniye bazında veri iletimi yaparak kafa hareketlerimizi çok hassas olarak hesaplayan, 2160x1200 piksel çözünürlükteki görüntüyü 90 Hz tazeleme oranıyla aktaran sanal gerçeklik başlıklarından bahsediyoruz.
Donanım olarak epey güçlü bir seviyeye gelen sanal gerçeklik başlıkları son iki yılda hızla gelişti. Sanal ile gerçek arasındaki bu kaynaşma süreci çok heyecan verici bir potansiyele sahip ancak henüz bunu tam anlamıyla deneyimleyebildiğimiz bir dönemde değiliz. Yeni nesil cihazların son kullanıcıya ulaşmasına aylar kala sanal gerçeklik konseptinin ne kadar başarılı olduğuna, tam anlamıyla aşılamamış sorunlarına ve bir geliştirici perspektifinden zorluklarına değineceğim.
Sanal gerçeklik ve 5 duyu
Duyularımızı yapay olarak üretilen etkilerle kandırmaya başladığımızda sanal gerçekliği oluşturmaya başlıyoruz. Başarılı bir sanal gerçeklik kurgusu geliştirmek için yalnızca görmek ya da duymak yetmiyor. Eğlence ve oyun merkezlerinde çeşitli simülatörlerde ve çok boyutlu sinemalarda (4D, 7D ve bunlar gibi) hareket ve hava akımı da deneyimi güçlendiren faktörler olarak yer alıyor.
Etkili bir sanal gerçeklik deneyimi tasarlamak için tüm duyuları uyum içinde besleyebilen sistemlere ihtiyaç var. Gelişmekte olan başlıklar kafa hareketlerine duyarlı olmaları sebebiyle gerçekte çevremize bakmak isterken yaptığımız doğal hareketlerle sanal dünyayı da görebilmemizi sağlıyor. Bu sanal gerçeklik konsepti için son derece önemli bir durum.
Deneyimlediğimiz sanal ortamı daha iyi gerçekçi kılmak adına çeşitli donanımlar geliştiriliyor. Bunlar:
- Vücut iskeletimizi takip ederek sanal ortama aktarabilen algılayıcılar. (örn: Kinect, Asus Xtion Pro)
- Çeşitli yöntemlerle hareket takibi yaparak el, kol hareketlerini algılayan sistemler. (örn: PS Move, Wii Remote)
- El, kol ve yüz hareket ve işaretlerini algılamaya odaklanmış algılayıcılar (örn: Leap Motion, MYO armband, Intel Real Sense)
- Giyilebilir hareket yakalama ve tüm vücut hareketlerini tarama üniteleri (örn: Xsens MVN, Synertial IGS-Cobra, STEM System)
- Fiziksel konum takibi yapabilen kumandalar (örn: Oculus Touch, Vive Wands)
- Yürüme bantları (örn:Virtuix Omni, Cyberith Virtualizer, Virtusphere)
Özellikle fiziksel konum algılama odaklı donanımlar ile etkili sanal gerçeklik deneyimleri yaşamak mümkün olacak. Bazı donanımların son kullanıcının evine girmesi, kapladığı alan ve maliyet dolayısıyla pek pratik görünmüyor.
Donanımların da duyu organlarının doğasına göre gelişmeye devam etmesi gerekiyor. Örneğin; gözlerimizi gözlük içinde oynattığımızda beynin doğal beklentisi odağımızın değişmesi yönünde oluyor. Gördüğümüz görüntü içerisinde odaklanma sabit kaldığında, doğal olmayan bu durum bizi zorluyor. Bu problemin çözümü için kolları sıvamış sanal gerçeklik odaklı bir girişim göz takibi yapabilen bir başlık üzerine çalışıyor.
Kaba başlıklar, vücudumuza takılan algılayıcılar, özel kıyafetler, devasa yürüme bantları; tüm bu donanımlar bir deneyim yaşamak için alışık olmadığımız derecede fazla. Bu ekipmanları giyip bir oyun oynamak pek de konforlu olmaz diye düşünüyorum. Dışarıdan "cyborg" gibi görünmek de söz konusu. Belki ileride "Matrix" filmlerinde olduğu gibi başımızın arkasından sinir sistemimize bağlanan bir cihazla doğrudan beyni yanıltma yoluna gideriz.
Oyunları bugüne kadar klavye, fare, oyun kolu ve kumanda gibi donanımlarla oynadık. Oyun geliştiricileri/tasarımcıları bu donanımlarla hissetmemizin mümkün olmadığı hisleri farklı görsel efektler kullanarak aşmaya çalıştılar. Örneğin; Bir FPS oyununda vurulduğumuzu bize hissettirmek adına ekranda kırmızılaşma, kararma, bulanıklaştırma gibi efektler kullanılıyor. Hız algısını yaratmak için motion blur, center focus gibi filtrelerden yararlanıyor, bazı oyunlarda ise farklı kamera hareketleri uygulanıyor. Sanal gerçeklik oyunlarında kendimizi oyunun içinde gibi algılasak da benzer durumlar burada da geçerli.
Geliştirdiğimiz sanal gerçeklik deneyimlerinden birinin adı "Aksiyon Yıldızı – Paraşüt". Bu oyun içerisinde bir uçaktan atlama sahnesi var. Oculus Rift kullanarak tecrübe ettiğiniz bu oyunda uçaktan atladıktan sonra hızla düşmeye başlıyorsunuz. Ardından paraşütünüzü açmanız ve deniz üzerinde süzüldükten sonra adaya inmeniz gerekiyor. Geliştirme aşamasında iken çok yüksek bir mesafeden düşme hissinin çok zayıf algılandığına tanık olduk. Adaya yaklaşana kadar düşme hissi çok etkili olmuyor ve heyecansız bir deneyim yaşanıyordu. Gerçek hayatta vücudumuzun hissettiği basınç ve hız algısı yalnızca görü ve duyma ile verilemiyordu. Bu noktada düşüş algısını kuvvetlendirmek için referans nesneleri eklemeye başladık. Bunlar uçak ile yeryüzü arasında farklı yüksekliklere yerleştirdiğimiz kurguyla uyumlu nesnelerdi. Bu sayede düşerken sürekli bazı nesnelere yaklaşıyor, yakınından geçiyor ve dinamik bir düşüş hissi yaşıyordunuz. Öncelikle bulutları yoğunlaştırdık. Daha sonra oyuna bir kuş sürüsü ekledik ve atlayışın ilk aşamasında oyuncuyu bu sürünün içinden geçirdik. Ardından uçaktan ilk atlayan paraşütçünün tam altımızdan süzülerek geçme animasyonunu ekledik. Bu süreç içinde adaya yeteri kadar yaklaşılıyordu. Kesintisiz ve etkileyici bir düşüş deneyimini bu referans noktaları sayesinde sağlamış olduk. "Aksiyon Yıldızı – Paraşüt"ün videosunu aşağıda izleyebilirsiniz:
75 FPS, 90 FPS ve ötesi
Sanal gerçeklik başlıkları bir süre kullanıldığında mide bulantısı, baş ağrısı, baş dönmesi, göz yorgunluğu ve denge kaybına yol açabiliyor. Bu sorunlar kişiden kişiye değişen seviyelerde hissediliyor. Sanal dünyadaki ani ve çok hızlı hareketler bu problemleri daha da somutlaştırıyor.
Var olan sıkıntıların kaynaklarını şu şekilde sıralayabiliriz:
- Yeteri kadar yüksek olmayan FPS (saniye başına ekrana gelen görüntü sayısı) değeri ve ekran tazeleme oranı.
- Kullanıcı hareketleri ile görüntü arasındaki gecikme ve uyuşmazlıklar.
- Uzun süreli yakına odaklanma
- Yükseklik ve mesafe algısından duyulan rahatsızlıklar.
Gecikme sanal gerçeklik başlıklarındaki en kritik durumlardan biri. Kafa hareketinize göre değişmesi gereken görüntüde oluşan milisaniyeler bazındaki gecikmeler bile deneyimin size rahatsız etmesine ve başarısız olmasına yol açıyor. Oculus Rift'in DK2 de gözlükteki görüntü saniyede 75 kez yenileniyor. Geliştirdiğimiz uygulamalarda 75 FPS değerini yakalamak çok kritik. Özellikle yüksek sistem gereksinimlerine ihtiyaç duyan bu cihaz için 75 FPS alabileceğimiz içerikler geliştirmek adına çok fazla optimizasyon yapmak gerekiyor. Gecikme durumları minimuma indirmek adına John Carmack'in geliştirdiği TimeWarp yöntemi kafa hareketlerine göre tahminleme yapabilen ve bu tahminleme doğrultusunda en son render edilen görüntüyü açısal olarak değiştiren bir çözüm sunuyor. Böylece sistemi tekrar render etme yükünden kurtarıp, kullanıcıya da doğruya yakın bir görüntü sunarak fps değerini yükseltiyor.
Oculus Rift CV1 (tüketici sürümü) için açıklanan minimum sistem gereksinimlerinde NVIDIA GeForce GTX970 gibi epey güçlü bir ekran kartı var. 90 Hz tazeleme oranına sahip olacak CV1 için daha akıcı grafikler sağlamak adına daha yüksek FPS değerlerine ulaşmak gerekecek. Codemodeon olarak geliştirdiğimiz oyunlarda Oculus Rift entegrasyonu yapmadığımızda NVIDIA GTX760 gibi orta seviye bir kart yeterli olurken, entegrasyon sonrası GTX970'in bile zorlandığını görebiliyoruz. Tüketici sürümü piyasaya çıktığında Oculus Rift almak isteyen birçok kişi yeni bir sistem toplamak durumunda kalabilir.
Grafik teknolojisinin en önemli oyuncularından NVIDIA ve AMD'nin sanal gerçeklik için geliştirdiği bazı çözümler var. Bunlar henüz çok yeni ve en güncel grafik kartlarında var olacak birtakım özellikler. NVIDIA bu teknolojisine GameWorks VR ismini verirken, AMD kendi teknolojisini LiquidVR ismiyle anıyor. Temel olarak benzer amaçları olan iki teknoloji olarak görebiliriz bu çözümleri. NVIDIA GameWorks VR'ı ele alarak neler sunduğuna bir bakalım:
- NVIDIA Multi-Res Shading (MRS): Oculus Rift ekranında 2 benzer görüntü oluşur. Biri sağda diğeri solda olan bu görüntüler gözlük içerisindeki mercekler sayesinde tek bir görüntü olarak algılanır. Grafik işlemciler bu iki görüntüyü de ayrı ayrı hesaplamalar ile oluşturur. GeForce GTX980 Ti grafik işlemcisi içerisinde yer alan sistem özel bir mimari sayesinde tek seferde bu görüntüyü oluşturabiliyor. Böylece önemli bir performans artışı sağlanıyor.
- VR SLI: SLI köprüsü kullanarak birden fazla grafik işlemci barındıran sistemlerde her bir göze düşen görüntüyü farklı bir kartın paralel olarak işlemesini sağlayan bu teknoloji ile çok ciddi performans kazanımları elde ediliyor.
- Context Priority: Grafik işlemcinin işlem öncelikleri üzerinde değişiklikler yaparak Asenkron TimeWarp gibi gelişmiş sanal gerçeklik özelliklerini desteklemesini sağlar. Bu sayede oyuncu kafa hareketlerini yaparken arada oluşan gecikmeler öncelikli gerçekleşen TimeWarp işlemi sayesinde minimuma iner.
- Direct Mode: Sanal gerçeklik başlıkları varsayılan olarak birer masaüstü monitörü gibi algılanırlar. Oculus Rift gibi bir başlık aldığınızda görüntü aktarmak için ayarlamalar yapmanız gerekir. Bu sıkıcı süreçleri ortadan kaldırmak için Direct Mode özelliği grafik kartının sanal gerçeklik gözlüğünü doğrudan tanımasını ve ona uygun davranmasını sağlar. Rahat ve basit bir kullanım elde edilir.
- Front Buffer Rendering: Ekrana gidecek görüntü grafik işlemci tarafından oluşturulur. Bu görüntü doğrudan ekrana iletilmez(eski donanımlarda iletilirdi) ve bir tampon bellekte bekletilir. Ekran tazeleneceği an bu görüntüyü alır ve gösterir. Bir önceki görüntü henüz gösterilmemişken yeni görüntü hazırlanmışsa yeni görüntü ikinci bir tampon bölgeye yerleştirilir. Bu konseptler Double Buffer / Triple Buffer olarak nitelendirilir. Front buffer rendering ile grafik işlemcinin doğrudan birincil tampon bölgeye yazması sağlanarak tampon bölgeler arasındaki aktarımdan doğan gecikmelerin minimum inmesi sağlanır.
Sanal gerçeklik teknolojilerinin güncel olarak sundukları çok etkileyici görünse de, önümüzdeki süreçte yeni gelişmeler bizi çok daha fazla etkileyecek. Henüz yeni başladık.
10.07.2015
Yorumlar
Sanal Gerçeklik artık hayatımızın her alanında bizimle birlikte ve daha uzunca bir zaman da bizimle olmaya devam edecek gibi görünüyor.
Animasyon görüntülerinden (CGI) oluşan ada değil de gerçek yüksek çözünürlüklü uydu görüntülerinden oluşan şehrin üzerine atlansa çok daha gerçekçi olabilirdi. :)