Giriş
Ana vektör grafik oluşturma motorlarının çoğunun içinde algoritmik bir kusur vardır. Her bir şekli ayrı ayrı oluştururlar ve piksel kapsamını hesaplayarak kenar yumuşatırlar ve sonra birbirlerinin üzerine oluştururlar. Evet, basit ama doğru çözümler daha da basit.
Bu, kapsama alanını şeffaflıkla sınırladığı için bir birleşme sorununa yol açar. Alfa harmanlama, durumu doğru bir şekilde temsil etmeyen bir kuralı izler; örneğin,% 50 tamamlayıcı örtülü bir pikselle komşu olan% 50 örtülü bir piksel alın% 100 kapsama alanı ile sonuçlanmaz,% 75 kapsama alanı ile sonuçlanır . Bunun nasıl göründüğü, algoritmanın nasıl ayarlandığına ve diğer ayrıntılara bağlıdır, ancak özünde bu bilinen bir hatadır. Hatta birisi, farklı motor hatalarını belgeleme ve bunun nasıl daha iyi yapılabileceğini gösteren bir kağıt yazma zahmetinden bile geçti .
Resim 1 : Üst satırda büyütülmüş hata gösteren üçgenlerden oluşan bir şekil oluşturmak için tamamen temsili olmayan örnek. SVG kaynağı
Sorun basit naif bir çözüm * kapsamı hesaplama olmadan sadece süper örnek ve görüntü aşağı filtre. Bonus olarak, kutu filtrelemeden daha iyi görüntü yeniden oluşturma algoritmaları kullanabilirsiniz ( Bir Piksel Kare 3 değildir ). Mevcut çözümler olarak karşılaştırılabilir hıza sahip çözümler bile var ve bu çözümlerin donanım rasterleştirme boru hatlarında yapılması çok daha kolay (ve GPU'da nadiren bu hatayı görüyorsunuz çünkü sadece bu sorunu önlemek için inşa edildi).
Bu da maliyetsiz bir sorun değildir. Grafik tasarımda çalışan ve burada üst üste binme olduğundan ve bilgisayarın kendileri için yapması gereken sorunu düzeltmek için hiçbir çakışma olmadığından emin olarak bu sorunu manuel olarak atlatmaya çalışırken çok fazla zaman harcayan birçok insan var. Ve birçok durumda muhteşem bir şekilde başarısız oluyor. Ancak müşterileri hatanın neden orada olduğu umrunda değil, düzeltmeleri gerekir.
Soru
Hata nasıl yayılır? Hepsi aynı hatayı yaptıkları için algoritmaları için aynı kaynağı kullandıkları sonucuna varılabilir. Tasarımcıların bu algoritmayı seçmesine ne neden olabilirdi? Neden sadece 3B programcılar bu hatayı fark etti ve hatta 2B programcılar tanımadığında API'larındaki ve öğretimindeki rolünü kodladı?
Bu hatanın daha fazla yayılmasını durdurması nasıl sağlanır?
Zeyilname (ama ben bunu sormuyorum)
* Görünüşe göre süper örneklemenin kusursuz çalıştığı iddiaları olağanüstü ve olağanüstü kanıt gerektiriyor. Tamam, süper örnekleme çalışmasının anahtarı , süper örneklemenin kapsam işleme yapmamasıdır. Esasen süper örnekleyici her numuneye bir nokta numunesi olarak davranır. Puan örneği altta yatan alanla ilgili herhangi bir varsayım yapmadığından, gerçekleşmediği yerde alfa karşılaştırmasına neden olmaz.
Cevaplardan birinde açıklandığı gibi tutarlı çalışması için. Tutarlılık için numuneleri tamsayı örnekleme ile işlemek gerekir. Bu bize bir zamanlar ekran boşluğuna dönüştürülen her noktanın eşit koordinatlar için tam olarak aynı çözümü elde etmesini ve hiçbir numunenin piksel kenarlığıyla 2 kez gölgelenmemesini sağlar. Bunu yapmak için bir örnek, örneğin sol taraftaki alt örnek ise bir piksel otunun tam olarak açık olmasını tetiklemeyebilir (bu nedenle tam kenarların> vs <= olarak işlendiğine dair bir kural koyarız). Bir konsol grafik kartı hariç tümü bu şekilde çalışır. Ek verilerin önbelleğe alınmasına ve yakınlarda ekstra test yapılmasına gerek yoktur. Bu çözüm, kapsama dayalı çözümlerden daha kararlı, daha genel ve tutarlıdır .
Algoritma, biraz daha az kod ve biraz daha fazla örnek içeren orijinal ile tamamen aynıdır. Dolayısıyla, kapsama dayalı algoritmadan daha fazla olmasa bile tutarlıdır. Bunu biliyoruz çünkü bu tür yöntemleri neredeyse diğer tüm sinyal işleme alanlarında ve grafik kartlarında kullanıyoruz.
Peki bu yöntemin bir dezavantajı var mı? Sadece saf bir varsayım yaparsanız biraz daha yavaştır. Teorik olarak kapsama rasterleştiricisinden daha hızlı bir asimptotik davranışa sahiptir, bir ışın izleyici gibi, tipik sahnelerde hala sadece eşittir. Ayrıca, evrişim bazlı etkilerin kullanımını daha acı verici hale getirebilir.