1992 yapımı Comanche oyunundaki Voxel Space motorunun 2.5D arazi render algoritması ve perspektif görüntüsü.

Voxel Space: 1992’nin Çığır Açan 2.5D Oyun Motoru ve Sırları

Voxel Space motoru, erken dönem 3D grafik teknolojilerinde çığır açan bir dönüm noktasıdır. Özellikle 1992 yılında piyasaya sürülen NovaLogic’in efsanevi oyunu Comanche’ye hayat veren bu motor, o dönemin kısıtlı donanım imkanlarına rağmen nefes kesici grafikler sunarak sektörde adeta bir devrim yaratmıştır. Bu makalede, Voxel Space’in tarihini, temel render algoritmasını ve performans optimizasyonlarını teknik detaylarıyla inceleyeceğiz. Hazırlanın, 1990’ların dijital dünyasına bir yolculuğa çıkıyoruz!

Geçmişe Yolculuk: 1990’ların VoxelSpace Mimarisi

1992 yılına geri döndüğümüzde, CPU’lar günümüzdekine göre bin kat daha yavaştı ve GPU’larla hızlandırma ya bilinmiyordu ya da pahalıydı. 3D oyunlar tamamen CPU üzerinde hesaplanıyor ve render motorları doldurulmuş poligonları tek bir renkle çiziyordu. İşte tam bu dönemde, NovaLogic firması Comanche oyununu yayımladı. Comanche’nin grafikleri, zamanına göre gerçekten nefes kesiciydi ve dönemin diğer oyunlarından adeta 3 yıl ilerideydi. Dağlarda ve vadilerde daha fazla detay, dokular, pürüzsüz gölgelendirmeler ve hatta gölgeler dikkat çekiyordu. Elbette, grafikler pikselleşmişti, ancak o yıllarda çıkan tüm oyunlar pikselleşmişti.

VoxelSpace Render Algoritmasının Temelleri

Comanche, ‘Voxel Space‘ adı verilen bir teknik kullanır ve bu teknik, ‘ray casting‘ ile benzer fikirlere dayanır. Bu nedenle, Voxel Space motoru 2.5D bir motordur; yani geleneksel bir 3D motorun sunduğu tüm serbestlik derecelerine sahip değildir.

Yükseklik ve Renk Haritası Kullanımı

Bir araziyi temsil etmenin en kolay yolu, bir yükseklik haritası ve bir renk haritası kullanmaktır. Comanche oyunu için 1024×1024 boyutlarında, tek baytlık bir yükseklik haritası ve yine 1024×1024 boyutlarında, tek baytlık bir renk haritası kullanılmıştır. Bu haritalar periyodiktir. Bu tür haritalar, araziyi ‘haritadaki her konum için tek bir yükseklik’ ile sınırlar. Bu durum, binalar veya ağaçlar gibi karmaşık geometrilerin temsil edilmesini imkansız kılar. Ancak, renk haritasının büyük bir avantajı vardır: gölgelendirmeyi ve gölgeleri zaten içermesi. Voxel Space motoru sadece rengi alır ve render işlemi sırasında aydınlatmayı hesaplamak zorunda kalmaz.

Temel VoxelSpace Render Algoritması Adımları

Bir 3D motor için render algoritması şaşırtıcı derecede basittir. Voxel Space motoru, yükseklik ve renk haritasını tarar ve dikey çizgiler çizer. Temel adımlar şunlardır:

  • Ekranı temizle.
  • Kapanmayı (occlusion) garanti etmek için arkadan öne doğru çizim yap (ressam algoritması).
  • Harita üzerinde, gözlemciden aynı optik mesafeye karşılık gelen çizgiyi belirle. Görüş alanını ve perspektif projeksiyonu (uzaktaki nesnelerin daha küçük görünmesi) dikkate al.
  • Çizgiyi, ekranın sütun sayısıyla eşleşecek şekilde rasterize et.
  • Çizginin segmentine karşılık gelen 2D haritalardan yüksekliği ve rengi al.
  • Yükseklik koordinatı için perspektif projeksiyonunu uygula.
  • Perspektif projeksiyondan alınan yükseklik ve karşılık gelen renkle dikey bir çizgi çiz.

Bu çekirdek algoritma, en basit haliyle sadece birkaç satır Python kodundan oluşur ve kamera parametreleri (konum, yükseklik, ufuk çizgisi konumu, yükseklik için ölçeklendirme faktörü, en büyük mesafe, ekran genişliği ve ekran yüksekliği) ile çağrılır.

Dönüş Yeteneği ile Manzara Keşfi

Yukarıdaki algoritma ile sadece kuzeye bakabiliriz. Farklı bir açıdan bakmak için koordinatları döndürmek üzere birkaç satır daha kod eklemek gerekir. Bu, sinüs ve kosinüs değerlerinin önceden hesaplanması ve `pleft`, `pright` noktalarının x ve y koordinatlarının bu değerler kullanılarak dönüştürülmesiyle sağlanır. Bu eklemeler sayesinde, kamera açısı (phi) parametresi ile sahnenin farklı yönlerden görüntülenmesi mümkün hale gelir.

Performansı Artırma Yöntemleri

Daha yüksek performans elde etmek için elbette birçok püf noktası vardır:

  • Arkadan öne doğru çizmek yerine önden arkaya doğru çizim yapılabilir. Bu yaklaşımın avantajı, kapanma nedeniyle her seferinde ekranın altına kadar çizgileri çizmek zorunda kalmamamızdır. Ancak, kapanmayı garanti etmek için her sütun için en yüksek y konumunun saklandığı ek bir y-buffer’a ihtiyaç duyulur. Önden arkaya çizim yaptığımız için, bir sonraki çizginin görünür kısmı yalnızca daha önce çizilen en yüksek çizgiden daha büyük olabilir.
  • Detay Seviyesi (Level of Detail – LOD) kullanmak. Öndeki nesneleri daha fazla detayla, uzaktaki nesneleri ise daha az detayla render etmek, performansı önemli ölçüde artırır.

Önden arkaya çizim yapan algoritma, bir `ybuffer` dizisi başlatarak ve her sütun için ekran yüksekliğini ayarlayarak çalışır. Ardından `z` değeri artırılırken adım boyutu da kademeli olarak büyütülür (`dz += 0.2`) ki uzaktaki detaylar daha seyrek hesaplansın. Bu optimizasyonlar, o dönemin kısıtlı işlem gücünde bile akıcı bir deneyim sunulmasını sağlamıştır.

Voxel Space motoru ve Comanche gibi oyunlar, erken dönem bilgisayar grafiklerinin nasıl yaratıcı çözümlerle sınırları zorladığını gösteren harika örneklerdir. Daha fazla teknik bilgi ve harita örnekleri için kaynak web sitesindeki web demonstrasyonunu ziyaret edebilirsiniz. Yazılımın MIT lisansı altında olduğunu ve Comanche’den tersine mühendislikle elde edilen haritaların lisans kapsamı dışında olduğunu unutmayın.

Comments

No comments yet. Why don’t you start the discussion?

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir