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
Hacker News görüşleri