Obra Dinn 1 Bit Dithering Sürecinin Kararlı Hale Getirilmesi (2017)
(forums.tigsource.com)-
TIGSource forumu
- TIGSource resmi bir Discord sunucusu açtı.
- Forumda çeşitli konular ve tartışmalar var ve çok sayıda üye katılıyor.
-
Return of the Obra Dinn
- Oyunun grafik stili ve dithering sorunları üzerine bir tartışma sürüyor.
- Titreme sorununu çözmek için daha yüksek çözünürlükte render alıp ardından downscale etme denemeleri yapılıyor.
- Hareket sırasında kararlılık sağlamak için dithering desenini sabitleme yöntemi tartışılıyor.
-
Dithering süreci
- Obra Dinn, 8 bit grayscale olarak render edildikten sonra 1 bite dönüştürülüyor.
- Çeşitli görsel efektler sağlamak için iki farklı dithering deseni kullanılıyor.
- Hareketli görüntülerde dithering deseni sorun yaratabiliyor.
-
Dithering kararlılığı
- Kararlılığı artırmak için dithering desenini geometriye sabitleme yöntemi araştırılıyor.
- En iyi sonucu bulmak için çeşitli mapping yöntemleri deneniyor.
-
Sonuç
- Dithering sorununu çözmek çok zaman aldı, ancak sonuçta oyunun görsel stilini koruyarak sorun çözüldü.
- Nihai oyunun iki farklı görüntüleme modu sunması planlanıyor.
1 yorum
Hacker News yorumları
10 yılı aşkın süredir grafik programlama yapmama rağmen oyunu oynarken bunu fark etmemiştim. Oyunun genel görsel dili düşünüldüğünde, o 100 saatin gerçekten iyi harcandığını düşünüyorum.
Bu çalışma, gerçekçi olmayan render işlemede zamansal tutarlılık konusu olarak SIGGRAPH'a gönderilse bile olurmuş.
Bilmeyenler için ekleyeyim: Return of the Obra Dinn ve Papers, Please ikisi de Lucas Pope'un oyunları ve çok sayıda ödül almış, kesin klasikler olarak görülüyor.
Normalde oyun oynamayı pek sevmiyor olsanız bile göz atmaya kesinlikle değer. İkisi de tipik oyunlar değil.
Beni bu kadar ileri götüren oyun sayısı çok azdır. Obra Dinn'i sanat tarzı bana çekici gelmediği için denemedim; ama dedektiflik oyunlarını seviyorsanız Curse of the Golden Idol'a da bakmaya değer. Yaratıcılık açısından bu oyunlara yakın ve oldukça eğlenceli.
Yine de sonuna kadar bitirdim.
Güçlü 1 bit dithering gerçekten ilginç bir konu. 2D'de bile birçok yöntem var; her birinin artıları, eksileri ve ödünleşimleri bulunuyor.
80'ler bilgisayar deneyiminin merkezinde olan bir şeyin modern donanımda aksine epey zor olması şaşırtıcı. Kendi projemde[0], offscreen pikselleri tarayıcının sağladığı canvas ile 1:1 eşlemek neredeyse imkânsız çıktı.
[0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...
Eskiden yaptığım basit bir oyunda ekranın 3/4'ü düşük çözünürlüklü renkli gösterim kullanıyordu; alt kısım ise daha fazla metin sığdırmak için 4 renk ve yatayda 2 kat çözünürlük kullanıyordu. Bu yüzden çözünürlüğü saniyede 120 kez değiştirirken bile CPU belirgin biçimde yavaşlamıyordu.
Önerilen yaklaşımların hiçbirinin pek iyi işlemediği anlaşılıyor ve bu problem göründüğünden çok daha karmaşık duruyor.
Düzgün çalışma ihtimali olan şeyler şunlar olabilir: yakınlaştırma/uzaklaştırmanın pürüzsüz ve ölçekten bağımsız olması için “fraktal” bir dither deseni kullanmak; hem kamera hareketi hem nesne hareketi doğru çalışsın diye bunu texel uzayında işlemek; bilinear filtreleme ya da dither deseninin süper örneklemeli render edilmesinden sonra ekran uzayında compute shader ile bir tür hata yayılımı pass'i uygulamak.
Yine de pratikte iyi çalışacağından emin değilim. Bu yeterli olmazsa, ekran uzayında basitçe işleyip sonucu çözünürlüğü koruyacak biçimde texel uzayına geri eşlemek; sonraki karede texel uzayı bilgisini kullanarak uyumlu bir ekran uzayı çözümü üretmek ve bunu tekrar texel uzayına eşlemek gibi, çalışma zamanında texel başına fraktal desenleri aşamalı olarak biriktiren bir alternatif de mümkün görünüyor. En iyi yol bu olabilir, ama bellek, hesaplama yükü ve karmaşıklık açısından çok pahalı görünüyor.
https://x.com/dgant/status/1851840125065453894
https://x.com/dgant/status/1851835968342446576?t=kCUSWCtJEc_...
Çalışma biçimi şöyle: dünya uzayı dithering kullanıyor, triplanar eşlenmiş yüzeylere 2D dithering uyguluyor, derinliğe göre koordinat ölçeğini seçerek dither deseninin [1px, 2px) aralığında kalmasını sağlıyor ve yeterince uzak yüzeyleri küresel koordinatlarla boyuyor. Derinlik eşiklerinde bazı yerler yeniden boyanıyor, ama pratikte çok rahatsız etmiyor.
İlgilenenler için biraz daha kurcalayınca, onun bu konuda daha önce yayımladığı geliştirme günlüklerini buldum [1] [2].
Özellikle Scale2X adlı upscaling algoritmasını ele alan bölüm dikkatimi çekti; oldukça havalı [3].
[1] https://forums.tigsource.com/index.php?topic=40832.260
[2] https://forums.tigsource.com/index.php?topic=40832.msg121719...
[3] https://www.scale2x.it
Bu kişinin forumda her şeyi paylaşmasını gerçekten seviyorum.
Papers, Please'in erken dönem çalışmalarını gördüğümü hatırlıyorum; çalışma sürecini paylaşmak ve geri bildirime açık hâle getirmek konusunda güzel bir şey var.
O zamanki tartışma: https://news.ycombinator.com/item?id=15766249
Şimdiye kadar gördüğüm dithering yazıları arasında en üst düzeylerden biri. Ben Return to Dark Castle'ın siyah-beyaz dithering işi üzerinde çalışmıştım.
Atkinson dithering kullanmak istiyordum, ama komşu piksel değerlerinin birbirine akma biçimi nedeniyle shader'da uygulaması zordu; o dönemde stres ve yorgunluk da fazlaydı. Deseni sahnenin offset'ine sabitleme fikri aklıma gelmemiş sanırım; bu yüzden yeraltı mezarları ya da helikopter paketi gibi kaydırmalı seviyelerde parıldama olabilir. Belki de yapmışımdır ama hatırlamıyorum. Her hâlükârda harika.
Kısa süre önce GOG'dan alıp 5K Studio Display'de oynamayı denedim, ama güzel piksellerin bulanıklaşmadığı bir sonuç elde edemedim. Gerçekten üzücü.
Ayarlar menüsündeki her şeye baktım.
Eğlence olsun diye ekleyeyim, oyunun soundtrack'i burada:
https://www.youtube.com/watch?v=8qvdAWLcPyU