Raymarch gölgelendiricileri nasıl çalışır?


49

Burada bulunan shadertoy.com'da bulunan gölgelendiricilere bakıyorum ve havalı olanların çoğunda ortak ses ve gürültü sızıntısı var. Kaynak kodunu hiç anlamıyorum ama gerçekten istiyorum. Bu gölgelendiriciler nasıl çalışır ve raymarch algoritması nasıl çalışır? Her yeri aradım ve konuyla ilgili hiçbir şey bulamadım.

Teşekkürler


6
Iñigo Quilez bu konuda mükemmel dersler yazdı. Bkz iquilezles.org/www/articles/raymarchingdf/raymarchingdf.htm , iquilezles.org/www/material/nvscene2008/nvscene2008.htm ve iquilezles.org/www/articles/distfunctions/distfunctions.htm . Bu serin gölgelendiriciler sadece herhangi bir ışın taraması değil aynı zamanda küre izleme olarak da adlandırılan ışın uzaklığı alanlarıdır.
msn

Genel olarak ışın yürüyüşü veya GPU'da ışın yürüyüşü hakkında mı soruyorsunuz?
concept3d

@Milo Sorunuzu netleştirebilir misiniz? Bu algoritmaların harika demolarda gördüğünüz görüntüleri oluşturmak için nasıl kullanıldığını mı soruyorsunuz? Işın yürüyüşünün nasıl çalıştığını mı soruyorsun? Parça / piksel gölgelendiricilerdeki (yani etkin uygulama) ışın geçişinin nasıl çalıştığını mı soruyorsunuz?
TravisG

Yanıtlar:


79

Işınlama ile zıtlıkla bunu anlamak muhtemelen en kolay olanıdır.

Raytracing ile ilkel hale getirmek için, ilkel ve giriş ışını verilirse, o ışının tam olarak nerede olduğunu ilkelde gösteren bir işleve ihtiyacınız vardır. Ardından, ışını ilgili tüm ilkel maddelere karşı test edebilir ve en yakın kavşağı seçebilirsiniz. İşlemciler bu konuda iyidir.

Işınlama ile, böyle basit bir ışın kavşak işlevi yok. Işın üzerinde bir nokta verildiğinde, noktanın yüzeye ne kadar yakın olduğunu tahmin edebilirsiniz, ancak yüzeye çarpmak için o ışını ne kadar uzatmanız gerektiğini tam olarak bilmiyorsunuz.

Yani, her seferinde bir adım "yürürsün":

  1. Işının "başlangıcında" başlayın - sahne oluşturma için yakın düzlem veya sahnedeki tek bir nesne varsa sınırlama hacmiyle kesişme. (Aşağıdaki şemada P0)

  2. Yüzeye ne kadar yakın olduğunuzu tahmin etmek için mesafe fonksiyonunuzu değerlendirin. (Şemadaki en büyük daire)

  3. Tahmininize göre ışın boyunca ilerleyin. Hareket, muhafazakar bir şekilde kısa olmalıdır, bu yüzden hiçbir yerde yüzeyinde tünellemeyeceğinize eminiz.

  4. Şimdi yeni bir noktaya sahipsiniz (aşağıda P1) - yeni bir tahmin alın ve tekrarlayın.

  5. Yüzeye eşik mesafeye ulaşana veya maksimum adım sayınıza ulaşana kadar tahminler almaya ve adım atmaya devam edin. (Aşağıdaki P4)

  6. Artık yüzeyin derinliğine sahipsiniz ve yakındaki örneklerden normal / ortam tıkanması gibi şeyleri çıkarabilir ve bu verileri pikseli aydınlatmak ve renklendirmek için kullanabilirsiniz.

Bir ışının P0'dan kesişimine doğru yürümesi

GPU Gems 2, bölüm 8'den örnek şema

Her ışın bağımsız olduğundan ve (genellikle) her adımda yalnızca yerel bilgileri kullandığından, GPU'larda paralelleştirme için olgunlaşır. Genellikle ekranda sadece iki üçgen çizilir. Bunları rasterleştirdikten sonra, fragman gölgelendiricisine iletilen her piksel tek bir ışını temsil eder. Parça gölgelendirici, yüzeye ulaşana kadar bu ışını yürüterek sonucu döndürür (genellikle tek bir tam ekran geçişinde tekstüre ve gölgelendirme için derinlik değeri).

Kesin adımlar, elde etmeye çalıştığınız özel etkiye çok bağlıdır. Raymarching teknikleri ile kullanılır ...

  • Geleneksel rasterleştirilmiş geometride yüzey yer değiştirmesini simüle etmek için yükseklik alanları (paralaks oklüzyon haritalaması)
  • ekran yansıması gibi şeyler için sahne derinliği tamponları
  • 3B örneklenmiş veri kümelerini görselleştirmek için hacimli dokular (genellikle bilimsel / tıbbi)
  • fraktallar gibi şeyler yapmak için kapalı fonksiyonlar
  • Iñigo Quilez'in çalışmasında olduğu gibi işlemsel mesafe alanları (yukarıdaki açıklamalarda msell'den büyük bağlantılar).

Raymarching, Wikipedia'dan bu örnekte olduğu gibi hacimsel yarı saydamlığı sağlamak için her adımda (genellikle her seferinde bir mesafe tahmin etmek yerine sabit adımlar kullanarak) harmanlamada da kullanılır .

Yarı saydam bir hacim dokusunun ışınlanması

Bu, ayrıntılı bulutları gerçek zamanlı olarak göstermenin popüler bir yolu haline geldi .

Binanın pencerelerinin arkasındaki iç oda detayını simüle etmenin bir yolu olan İç Haritalama bile , ışının pencereye girdiği noktadan en yakın duvara, zemine / tavana veya mobilya düzlemine adım attığı bir raymarching şekli olarak düşünülebilir.

İlgilendiğiniz belirli bir ışın izleme efekti varsa, belirli örneklerle yeni bir soru sorarak muhtemelen daha ayrıntılı yanıtlar alabilirsiniz. Bir aile olarak, teknik kısa bir cevapta her şeyi kapsayamayacak kadar çeşitlidir. ;) Umarım bu, bu gölgelendiricilerde kaputun altında neler olduğunu anlamanız için bir çerçeve sunar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.