Işın izleme / yol izlemede, görüntüyü kenar yumuşatmanın en basit yollarından biri piksel değerlerini süper örneklemek ve sonuçları ortalamaktır. IE. her örneği pikselin ortasından çekmek yerine, örnekleri bir miktar dengelersiniz.
İnternette arama yaparken, bunu yapmak için iki farklı yöntem buldum:
- İstediğiniz gibi numune oluşturun ve sonucu bir filtreyle tartın
- Bir örnek PBRT
- Bir filtrenin şekline eşit dağılımlı örnekler üretin
- İki örneklerdir smallpt ve Benedikt Bitterli 'ın Tungsten Renderer
Üret ve Tart
Temel süreç:
- İstediğiniz gibi örnekler oluşturun (rastgele, tabakalı, düşük tutarsızlık dizileri vb.)
- Kamera örneğini iki örnek (x ve y) kullanarak ofsetleyin
- Işını ray ile render
- Bir filtre işlevini ve piksel merkezine referans olarak örneğin mesafesini kullanarak bir ağırlık hesaplayın. Örneğin, Kutu Filtresi, Çadır Filtresi, Gauss Filtresi vb.)
- Renderden renge ağırlık uygulayın
Bir filtre şeklinde üretin
Temel dayanak, bir filtrenin şekline göre dağıtılan örnekleri oluşturmak için Ters Dönüşüm Örneklemesi kullanmaktır . Örneğin, bir Gauss şeklinde dağıtılan örneklerin histogramı şöyle olacaktır:
Bu ya tam olarak ya da işlevi ayrı bir pdf / cdf'ye bölmek suretiyle yapılabilir. smallpt , bir çadır filtresinin tam ters cdf'sini kullanır. Binning yöntemi örnekleri burada bulunabilir
Sorular
Her yöntemin artıları ve eksileri nelerdir? Ve neden birini diğerinin üzerinde kullanasın ki? Birkaç şey düşünebilirim:
Generate and Weigh en sağlam gibi görünerek, herhangi bir örnekleme yönteminin herhangi bir filtreyle kombinasyonuna izin verir. Ancak, ImageBuffer'daki ağırlıkları izlemenizi ve ardından son bir çözümü gerçekleştirmenizi gerektirir.
Bir Filtre Şeklinde Oluştur, yalnızca pozitif filtre şekillerini (örn. Mitchell, Catmull Rom veya Lanczos yok) destekleyebilir, çünkü negatif bir pdf'niz olamaz. Ancak, yukarıda belirtildiği gibi, uygulamak daha kolaydır, çünkü herhangi bir ağırlığı izlemenize gerek yoktur.
Yine de, sonuçta, yöntem 2'yi yöntem 1'in basitleştirilmesi olarak düşünebilirsiniz, çünkü esasen kapalı bir Kutu Filtresi ağırlığı kullanıyor.