1 puan yazan GN⁺ 2024-11-21 | 1 yorum | WhatsApp'ta paylaş

Bugünün yolculuğu: Kenar yumuşatma

  • Kenar yumuşatma, onlarca yıllık matematik, yaratıcı teknikler ve durmaksızın süren yeniliklerle gelişmiş bir sanat biçimidir.
  • SSAA, SMAA, DLAA gibi çeşitli yaklaşımlar vardır ve her biri aynı hedefe farklı yollarla ulaşmaya çalışır.
  • Bu yazı, bu yöntemlerin nasıl çalıştığını inceliyor ve sorunu çözmek için yeni bir yöntem olan analitik kenar yumuşatmayı tanıtıyor.

Kurulum

  • Kenar yumuşatma algoritmasını anlamak için WebGL canvas kullanılarak hareket eden bir çember çizilip uygulanıyor.
  • Çözünürlük çok yüksek olduğu için aliasing görünmüyorsa, bunu görmek için çözünürlüğü düşürebilirsiniz.

Teknik analiz

  • GPU kodunu anlamak zorunlu değildir, ancak analitik kısmı anlamaya yardımcı olur.
  • Çember geometrik olarak çizilmez; bir shader tarafından çizilir.

SSAA

  • SSAA, Super Sampling Anti-Aliasing'in kısaltmasıdır; daha yüksek çözünürlükte render alıp ardından downsample etme yöntemidir.
  • Uygulaması basittir, ancak bellek ve hesaplama gereksinimi yüksektir.
  • Uygun örnek yerleşimi gerekir ve render pipeline ile derin entegrasyon ister.

MSAA

  • MSAA, yalnızca modelin siluetinde, çakışan geometrilerde ve doku kenarlarında super sampling uygular.
  • Donanım tarafından uygulanır ve destek durumu donanıma göre değişir.
  • Bazı durumlarda performans maliyeti hiç olmayabilir.

Post-process kenar yumuşatma

  • 2009'da Alexander Reshetov'un makalesiyle MLAA ortaya çıktı.
  • FXAA, MLAA'dan ilham alınarak geliştirilen bir algoritmadır; performans maliyeti düşüktür ve uygulanması kolaydır.
  • Karmaşık sahnelerde daha etkilidir.

Analitik kenar yumuşatma

  • Analitik kenar yumuşatma, probleme tersinden yaklaşır: gereken şekli bildiği için zaten kenar yumuşatılmış pikselleri ekrana çizer.
  • Ek buffer ya da donanım gereksinimi yoktur; temel WebGL 1.0 veya OpenGLES 2.0 üzerinde de çalışabilir.
  • Piksel boyutunu hesaplayarak şeklin sınırlarını kademeli olarak soldurur.

Uygulama

  • Signed distance field kullanılarak, örneklenen her noktadan istenen şekle olan uzaklık bilinebilir.
  • Piksel boyutunu hesaplamak için dFdx, dFdy ve fwidth fonksiyonları kullanılır.
  • Blending, alpha blending veya MSAA + Alpha to Coverage ile gerçekleştirilir.
  • Performansı optimize etmek için smoothstep yerine linearstep kullanılabilir.

Sonuç

  • Analitik kenar yumuşatma, şeklin sınırlarını hassas biçimde soldurarak daha yumuşak kenarlar sağlar.
  • Çeşitli uygulama yöntemleri vardır ve performans ile doğruluk arasında seçim yapılabilir.

1 yorum

 
GN⁺ 2024-11-21
Hacker News görüşleri
  • Grafik programlama analizi WebGL örnekleri üzerinden yapılmış ve oldukça derinlikli bir yazı
    • MSAAx4 kullanıyordum ama FXAA/TAA'ya geçmeyi düşünüyordum; UI öğeleri için analitik yaklaşımı öğrenebilmek güzeldi
    • Grafik programlamayla ilgili kaynaklar nadir bulunuyor ama frame analizleri listesi faydalı bir kaynak
    • Birçok oyun AA ayarlarındaki kısaltmaların farkını açıklamıyor, bu da kullanıcı dostuluğunu azaltıyor
    • SDF (mSDF) zaten yeterince iyi, klasik bir teknik
    • Slug ve DirectWrite'da Bézier eğrisi segmentlerini piksel düzeyinde çözmek mevcut ya da gelecekteki teknoloji
    • Captain Disillusion'ın çalışmalarını ilk kez öğrendim; video efektleriyle ilgilenenlere tavsiye ederim
    • Daire ve büyütülmüş bölüm içeren frame, mesajı iletmenin harika bir yolu
    • Yumuşak gradyanlar çok tatmin edici
    • 2D ve 3D render motorlarının hedefleri ve kullanım senaryoları tamamen farklı
    • 3D'de önemli olmasa da 2D'de doğruluk ve bias, AA tekniği için önemli ölçütler
    • NeoTokyo ekran görüntüsü etkileyiciydi; o mod için bir sunucu işletiyordum ve çok keyifli zaman geçirmiştim
    • SSAA'yı yanlışlıkla 'ekran alanı anti-aliasing' olarak okudum