1 puan yazan GN⁺ 2023-12-21 | 1 yorum | WhatsApp'ta paylaş
  • Gerçek 3D’nin zor olduğu 2D oyun döneminde bile geliştiriciler, parallax scrolling ve SNES Mode 7 ile derinlik hissi yarattı; Diablo 2’nin Perspective Mode’u ise bu soyun 2D ARPG içinde nasıl sürdüğünü gösteriyor
  • Don’t Starve, çalıları, ağaçları ve düşmanları düzlemsel asset’lerle işlerken bile üç boyutlu bir sahne yaratıyor; Diablo 2 ise 2000 yapımı bir 2D oyunda zemin render’ı ile sprite dönüşümünü birleştirerek benzer bir izlenim veriyor
  • Diablo 2’nin Perspective Mode’u, sprite’ları basitçe kaydıran bir efekt değil; tüm ekranın ufka doğru eğilmiş gibi görünen bir dönüşüm geçirmesini sağlayarak kaçış noktasını ve perspektifi ortaya çıkarıyor
  • Blizzard, DT1 sprite’larını 32×32px parçalara ayırdı ve orientation değerine göre duvar, çit gibi nesneleri farklı biçimde dönüştürerek sahnedeki boşlukları azaltmaya çalıştı
  • Sonradan paylaşılan Gamasutra içeriğine göre Perspective Mode, 3D grafik kartı gerektiriyordu; mini tile texture’ları hafifçe döndürüp ölçekleyerek ve esneterek derinlik ile parallax etkisi oluşturuyordu ve uygulaması yaklaşık 1-2 hafta sürdü

2D’yi 3D gibi gösteren ilk teknikler

  • 1990’ların oyunları 2D’den 3D’ye geçmeye başlamıştı, ancak gerçek 3D’den önce de geliştiriciler 3D gibi görünen ekranlar üretmek için çeşitli hileler kullanıyordu
  • Bunun en bilinen yollarından biri parallax efektiydi
    • Mesafeye göre bazı öğeler hızlı, bazıları yavaş hareket ederek derinlik hissi oluşturuyordu
    • 1982 tarihli Moon Patrol, birden fazla düzlemin farklı hızlarda hareket etmesiyle bile güçlü bir hacim hissi veriyordu
  • SNES döneminin Mode 7 tekniği gerçek 3D değildi, ancak zemin texture’ını işleyerek perspektifli bir görüntü gibi görünmesini sağlıyordu
    • GBA açıklamasına göre, gerçek 3D donanım olmadan bile her scanline için scale ve offset değerlerini değiştirerek 3D taklit edilebiliyordu
    • Bu yöntem, yüksekliği derinlik gibi gösteren bir texture manipülasyonuna daha yakındı

Don’t Starve ve Diablo 2’de düzlemsel asset kullanımı

  • Günümüzde tüm asset’ler gerçek 3D olarak render edilebiliyor, ancak her sahnede üç boyutlu model kullanmak şart değil
  • Don’t Starve içindeki çalılar, ağaçlar ve düşmanlar düzlemsel asset’ler olsa da görsel olarak fazlasıyla çekici sonuçlar veriyor
  • Diablo 2, 2000’de çıkmış bir 2D ARPG olarak, Moon Patrol tarzı parallax ile Mode 7 tarzı zemin sunumunu birlikte hatırlatan bir örnek
  • Varsayılan ayarlardaki Diablo 2 tamamen 2D bir görüntü sunuyor
    • Perspektif yok
    • Parallax efekti de yok
  • Perspective Mode açıldığında, aynı zemin pikselleri sütunlar tarafından sürekli örtülmüyor ve Don’t Starve’daki gibi düzlemsel asset’ler derinlikli bir uzamda hareket ediyormuş gibi görünüyor

Diablo 2 Perspective Mode’unun nasıl incelendiği

  • Diablo 2 hakkında resmi bilgi neredeyse hiç olmadığı için, MPQ ve DT1 dosyalarını çıkarıp analiz eden araçlarla Perspective Mode incelendi
    • MPQ Editor, MPQ içinden DT1 dosyalarını çıkarmak için kullanıldı
    • DT1 Tools, DT1 içinden PCX dosyalarını çıkarmak için kullanıldı
    • DT1 Tutorial, DT1 formatını anlamak için kullanıldı
  • Perspective Mode, sprite’ları biraz kaydıran basit bir efekt değil
    • Mod açık ve kapalı görüntüler aynı konumda karşılaştırıldığında, tüm öğelerin ufuk yönüne doğru eğilmiş gibi görünen bir dönüşüm geçirdiği görülüyor
    • Zemine dama deseni eklendiğinde bu dönüşüm daha net ortaya çıkıyor
  • Sahne çok sayıda sprite parçasından oluştuğu için, dönüşüm sırasında sınır çizgilerinde boşluk oluşması kolay
    • Diablo 2, parçaları birbirine uydururken aynı zamanda perspektif hissini koruyor

32×32 parçalar ve orientation değeri

  • Blizzard, sprite’ları 32×32px bölümlere ayırdı
    • Bu, yalnızca gerekli görsel parçaları yüklemeye yönelik bir optimizasyon gibi görünüyor
    • Perspective Mode’da dönüşüm uygularken de faydalı görünüyor
  • Sütun texture’ına 32px aralıklı çizgiler eklenip sahte bir wireframe gibi bakıldığında, dikey çizgiler yerin derinlerindeki kaçış noktasına gidiyormuş gibi görünüyor
  • Bazı sprite’larda alt sınırın kıvrılmış göründüğü fark ediliyor
    • Yalnızca perspektif düşünülürse böyle bir eğrilik zorunlu değil
    • Bu dönüşüm, sprite’a bakış açısına ya da oyuncu/kamera konumuna göre değişiyor
  • DT1 formatında sprite’lar bir orientation değeri taşıyabiliyor
    • Paul Siramy’nin belgelerine göre yön değerine bağlı olarak sprite dönüşüm yöntemi değişebiliyor
    • Örnekler arasında Left Wall, Upper Wall ve Lower-Left corner gibi duvar yönleri yer alıyor
  • Duvar veya çit gibi yönü farklı sprite’lar farklı şekillerde dönüştürülüyor
    • Bazı durumlarda üst ve alt sınırlar kıvrılmıyor; bunun yerine sınır çizgileri soldaki kaçış noktasına yöneliyormuş gibi görünüyor
    • Oyun, boşlukları önlemek için dönüşümü biraz abartıyor gibi ve çit sprite’ları birbirine iyi oturuyor
    • Aynı duvar yanlış orientation değeriyle tanımlanırsa sprite’lar arasında boşluklar oluşuyor

Paylaşılan ek bilgiler ve benzer örnekler

  • Perspective Mode, Diablo 2’de yalnızca D3D tam ekran modunda etkinleştirilebiliyordu
    • Diablo 2, Glide ve Software Rendering desteği de sunuyordu
    • Eski DirectX belgelerinde ek bilgi aranmış olsa da sonuç alınamadı
  • Sonraki güncellemelerde görüntü bozulmasıyla ilgili bağlantılar da eklendi
    • image aberration, Diablo 2’nin Perspective Mode’unda görülen bozulmaya çok benziyor
    • Ancak Diablo 2 geliştiricilerinin gerçekten bunu kullanıp kullanmadığı bilinmiyor
  • Paul Siramy’nin paylaştığı Gamasutra yazısında, Perspective Mode’un uygulama yöntemi daha doğrudan anlatılıyor
    • Perspective Mode’u açmak için 3D grafik kartı gerekiyordu
    • Diablo II, büyük elmas biçimli tile’ları çok sayıda küçük elmas biçimli tile’dan oluşturarak daha ayrıntılı bir ızgara kullanıyordu
    • Her mini tile’ın texture’ı hafifçe döndürülüyor, ardından ekran kartı bunu iki poligona kaplıyor ve dikey/yatay olarak esneterek karakterin konumuna göre daha büyük ya da daha küçük görünmesini sağlıyordu
    • Ağaçlar ve binalar yaklaşınca ya da uzaklaşınca boyut değiştiriyor, ön plan ve arka plan nesneleriyle farklı hızlarda kayarak parallax efekti oluşturuyordu
    • Nesnelerde görülen hafif titreşim/parıltı, ekran kartının bilinear filtering uygulamasının sonucu olarak açıklanıyordu
    • Character’lar, item’lar, hatta Act I’deki kulübe ve kule gibi yapılar bile Perspective Mode’da büyütülüp küçültülüyordu
    • Dave’in anlatımına göre gerçek 3D matematiği kullanılarak ızgara hafifçe ölçeklenip esnetiliyor ve böylece derinlik hissi yaratılıyordu
    • Uygulama yaklaşık 1-2 hafta sürdü; duvar hizalaması ve ışık işlemesi gerekiyordu, ayrıca sanatçıların nesneleri yeniden kesip farklı biçimde render etmesi gerekti
    1. güncellemede, Cultures da benzer bir 2D perspektif hilesi kullanan örneklerden biri olarak eklendi

1 yorum

 
GN⁺ 2023-12-21
Hacker News yorumları
  • Eskiden merak ettiklerim listesinde olan bir konuydu; artık silebilirim. World of Warcraft gökyüzünün nasıl yapıldığını ve daha az ölçüde de olsa Warcraft 3’ün arazisinin nasıl oluşturulduğunu bilen varsa anlatırsa sevinirim.
    Warcraft 3 arazisinin marching squares’in zekice bir kullanımı olduğunu düşünüyordum. 10 yıldan uzun süredir merak ediyorum; gündüz/gece/bulut/ay/yıldız gibi özellikleri inanılmaz, güzel ve hafif, sanki bir kare atlayarak güncelleniyor gibi görünmesine rağmen çok doğal. Render-to-texture değil gibi; poligon ya da texel görünmeyecek kadar pürüzsüz ve 2002 bilgisayarlarında da çalışıyordu; bu açıdan teknik sanatın bir mucizesi.

  • Project Diablo 2’yi[1] işleten insanlar sayesinde hâlâ D2 oynuyorum. Perspektif modu 144fps’te gerçekten çok güzel görünüyor; özgün LoD istemcisinin 30fps’ine dönmek epey zor.
    Hâlâ Pandemonium Fortress’ta kıvrımlı merdivenlerden inerken güzel, hatta belki ürkütücü demek daha doğru olur, grafiklerin beni nasıl etkilediğine dair anılarım ve nostaljim var.
    [1] https://www.projectdiablo2.com/

  • Mode 7’nin özünde ilkel bir 3D hızlandırıcıya yakın olduğunu düşünüyorum. Çeşitli dönüşümler uygulanmış tek bir dokulu düzlemi render ediyor; bu yüzden ilke olarak modern GPU’lar kadar “gerçek 3D” sayılabilir, sadece çok sınırlı ve düşük doğruluklu.

    • Pek öyle değil. Mode 7 yalnızca bir katmanı 2D’de büyütüp/küçültebilir, taşıyabilir ve döndürebilir. Örneğin Super Mario World’deki Bowser dövüşü tipik bir kullanım: Bowser hareket eder ve ara sıra döner; raundlar arasında da büyütme/küçültmeyle “3D” gibi uçar.
      Daha ikna edici 3D hileleri kartuşun yardımcı işlemcisinden geliyordu. Super Mario Kart gibi oyunlarda ek çip, her tarama çizgisi için yeni Mode 7 parametrelerini hızla hesaplıyordu; her satırda ölçek ve konum değiştirip dönüşü aynı bırakırsanız üst satırlar daha küçük, alt satırlar daha büyük görünür ve eğimli bir 3D hissi yaratabilirsiniz.
      Bu “her tarama çizgisinde ölçeği değiştirme” yöntemi modern GPU’lardan çok farklıdır ve keyfi bir dönüşüm de değildir. Örneğin bu teknikle bir düzlemi yalnızca yatay eksen etrafında döndürebilirsiniz; dikey eksen etrafında döndüremezsiniz.
    • Gerçekten sabit işlevli bir pipeline’a daha yakın.
  • Erken dönem bilgisayar grafikleri her baktığımda şaşırtıyor. Erken animasyonun ve bilgisayar grafiklerinin katkısı olmasaydı, hem yazılımın hem donanımın bugün olduğundan birkaç nesil geride olacağına eminim.
    NVIDIA’ya bakınca, aynı mimarinin makine öğreniminin ve “yapay zekânın” erken biçimlerinde işe yaraması neredeyse şans gibiydi; ama şirketin kendisi bilgisayar grafikleri üzerine kurulmuştu.

    • Tam olarak öyle değil. NVIDIA yapay zekâyı öngörmedi ama çok erken dönemden itibaren genel amaçlı hesaplamaya yatırım yaptı. Bugünkü piyasa değeri, bu vizyonu 20 yıl boyunca istikrarlı biçimde sürdürüp doğru uygulamasının sonucu.
    • Ondan önce vektör işleme ve SIMD gibi alanlar eski Cray türü süper bilgisayarların alanıydı.
  • Sprite’ın alt kenarının neden bu kadar kavisli olduğuna gelince, dikey sprite’lar için zeminin “altındaki” kaçış noktasını taklit etmek adına gerekliydi sanırım. Üç kazık üst tarafta dışa doğru açılarak dönüyorsa, alt tarafın da bir ölçüde onunla birlikte dönmesi gerekir; basit bir eğme dönüşümü garip dururdu.
    3ds Max sahnesinde nesne viewport’a karşıdan bakacak şekilde yerleştirilmiş ve kare bir doku kullanıldığı için eğme iyi görünmüş, bu yüzden fark pek ortaya çıkmamış olabilir. Hareketli örnekte gerçeğe yakın bakıldığında, yaklaştıkça üç kazığın bakış noktasına göre açılması gerekir; 3ds Max render’ı bunu iyi gösteremiyor.

  • Bu yazı oyunlardaki paralaksa odaklanıyor ama paralaks efektinin animasyonda uzun bir geçmişi var.
    Disney’in multiplane kamerası ve öncülleri neredeyse 100 yıl öncesine dayanıyor. 2D görüntülerle de derinlikli sahneler kurmak için pek çok hile mümkün.
    https://en.wikipedia.org/wiki/Multiplane_camera

  • Geliştirici paralaks efektinden epey memnun gibiydi ama ben gerçekten kullandığımı hatırlamıyorum. Varsayılan ayarlara zaten alıştıktan sonra bana sadece tuhaf gelmişti sanırım.

    • Sprite’ları 1:1 ölçekte render etmediği için görsel kaliteyi de düşürüyordu. Az miktarda 3D’nin artık şaşırtıcı olmadığı günümüz bakışıyla bence daha kötü görünüyor.
    • Ekran daha “yakınlaşmış” gibi hissettirdiği için daha az düşman görünüyordu. Büyü kullanan biri için bu sorun oluyordu.
    • O dönemde karakter hızlı hareket ederken ve duvar ya da ağaç gibi çok sayıda engelleyici nesne geçerken gerçekten 3D hissi veriyordu. Bazı render’larda ışık efektlerinin de daha iyi göründüğünü hatırlıyorum.
  • Bu eski oyunlardaki 3D’ye “gerçek değil” deniyor ama modern 3D oyunlar da sonuçta düz bir ekranda gösteriliyor. O hâlde temelde aynı anlamda gerçek 3D değiller denemez mi?

    • Şart değil. Modern 3D oyunlar, keyfi konumdaki bir kamerayı kullanıp lineer cebirle 3D’yi 2D clip space’e yassılaştırır, sonra rasterize eder. D2 gibi oyunlar ise sprite’lar ve ofsetlerle 3D illüzyonu yaratır; en başta bir 3D koordinat sistemi yoktur. Bu tür oyunlarda hareket de genellikle iki eksenle sınırlıdır.
      Bir diğer önemli fark, önceden render edilmiş sprite’lardır. Roller Coaster Tycoon ya da Diablo gibi oyunlarda modeller pahalı, özel bilgisayarlarda oluşturulur ve sprite sheet’lere render edilirdi. Nesneler 3D gibi görünse bile çoğu zaman düz varlıklar olarak dağıtılırdı. Bazı modern piksel art oyunları, 2D sprite’lara dinamik ışık uygulamak için yanına normal map de koyuyor.
      Modern oyunlarda paralaks efektini, 3D sahne içinde düz nesneleri render ederek kolayca yapmak mümkün; fakat 20 yıl önceki grafik pipeline’ları çok farklıydı ve 3D efekti vermek için çok daha zeki çözümler gerekiyordu.
    • Evet. Yazıda Mode 7 ile uygulanmış düz 3D düzleme basitçe “sahte 3D” deniyor ama sonuç, tek bir doku kaplanmış poligonla neredeyse aynı görünüyor. Tek fark, “kamera”nın yalnızca yaw ve pitch değişimlerine izin verip roll’a izin vermemesi gibi.
      Bu, Mode 7 sisteminin render edebildiği 3D durumların sınırlı olması demek; render edilebilen şeyin kendisinin daha sahte olduğu anlamına gelmez. Sonuçta tüm 3D render yöntemleri, ekrandaki 2D piksel ızgarasını manipüle ederek sanal nesnelere bakıyormuşuz gibi bir illüzyon yaratır.