W jaki sposób obsługiwane są efekty wolumetryczne w raytracingu?

10

Jak efekty wolumetryczne, takie jak dym, mgła lub chmury, są renderowane przez raytracer? W przeciwieństwie do obiektów stałych, nie mają one dobrze zdefiniowanej powierzchni, z którą można obliczyć przecięcie.

znak
źródło

Odpowiedzi:

11

Przegląd

Pojawienie się w naturze objętości (zwanych także uczestniczącymi mediami) jest spowodowane drobnymi cząsteczkami, takimi jak kurz, kropelki wody lub plankton, które są zawieszone w otaczającym płynie, takim jak powietrze lub woda. Cząstki te są ciałami stałymi, a światło załamuje się lub odbija od tych obiektów, tak jak na normalnej powierzchni. Teoretycznie media uczestniczące mogłyby być obsługiwane przez tradycyjny znacznik promienia z tylko przecięciami powierzchni.

Model statystyczny

Oczywiście sama liczba tych cząstek sprawia, że ​​niemożliwe jest ich indywidualne śledzenie promieniowaniem. Zamiast tego są one aproksymowane za pomocą modelu statystycznego: ponieważ cząstki są bardzo małe, a odległość między cząsteczkami jest znacznie większa niż wielkość cząstek, poszczególne oddziaływania światła z cząsteczkami można modelować jako statystycznie niezależne. Dlatego rozsądnym przybliżeniem jest zastąpienie pojedynczych cząstek ciągłymi wielkościami, które opisują „średnie” oddziaływanie światło-cząstka w tym określonym obszarze w przestrzeni.

W przypadku fizycznego wolumetrycznego transportu światła zastępujemy niepojętą wiele cząstek ciągłym ośrodkiem uczestniczącym, który ma dwie właściwości: współczynnik absorpcji i współczynnik rozproszenia. Współczynniki te są bardzo wygodne do śledzenia promienia, ponieważ pozwalają nam obliczyć prawdopodobieństwo promienia oddziałującego z ośrodkiem - to znaczy prawdopodobieństwo trafienia jednej z cząstek - w funkcji odległości.

Współczynnik absorpcji jest oznaczony . Powiedzmy, że promień światła chce podróżować metrów w uczestniczącym medium; prawdopodobieństwo przejścia przez nie zaabsorbowane - tj. nie uderzenia w jedną z cząstek i pochłonięcia przez nią - wynosi `. Wraz ze wzrostem t widzimy, że prawdopodobieństwo to spada do zera, tzn. Im dłużej podróżujemy przez medium, tym bardziej prawdopodobne jest, że coś uderzy i zostanie pochłonięty. Bardzo podobne rzeczy współczynnika rozproszenia : prawdopodobieństwo, że promień nie w cząstkę i zostanie rozproszony toσzatmi-tσzaσsmi-tσs; to znaczy, im dłużej podróżujemy przez medium, tym bardziej prawdopodobne jest, że uderzymy w cząsteczkę i zostaną rozproszeni w innym kierunku.

Zazwyczaj te dwie wielkości są składane w jeden współczynnik ekstynkcji, . Prawdopodobieństwo przejechania metra przez medium bez interakcji z nim (bez wchłonięcia lub rozproszenia) wynosi wtedy . Z drugiej strony prawdopodobieństwo interakcji z medium po metrach wynosi .σt=σza+σstmi-tσtt1-mi-tσt

Renderowanie z udziałem mediów

Sposób, w jaki jest on wykorzystywany w rendererach opartych na fizyce, jest następujący: Kiedy promień wchodzi do ośrodka, najprawdopodobniej zatrzymujemy go wewnątrz ośrodka i interakcja z cząstką. Ważność próbkowania prawdopodobieństwa interakcji daje odległość ; mówi nam to, że promień przebił metra w ośrodku przed uderzeniem w cząsteczkę, a teraz dzieje się jedna z dwóch rzeczy: albo promień zostaje wchłonięty przez cząsteczkę (z prawdopodobieństwem ), albo rozprasza się (z prawdopodobieństwem ).1-mi-tσtttσzaσtσsσt

Sposób rozpraszania promienia jest opisany przez funkcję fazową i zależy od natury cząstek; funkcja fazy Rayleigha opisuje rozpraszanie z kulistych cząstek mniejszych niż długość fali światła (np. nasza atmosfera); funkcja fazy Mie opisuje rozpraszanie z kulistych cząstek o podobnej wielkości niż długość fali (np. kropelki wody); w grafice zwykle używana jest funkcja fazy Henyeya-Greensteina , pierwotnie stosowana do rozpraszania z pyłu międzygwiezdnego.

Teraz w grafice zwykle nie renderujemy zdjęć nieskończonego medium, ale renderujemy media również w scenie składającej się z twardych powierzchni. W takim przypadku najpierw w pełni śledzimy promień, aż trafi on na następną powierzchnię, całkowicie ignorując uczestniczące medium; daje nam to odległość do następnej powierzchni, . Następnie próbkujemy odległość interakcji w ośrodku, jak opisano wcześniej. Jeśli , promień uderzy w cząsteczkę w drodze do następnej powierzchni i albo ją wchłoniemy, albo rozproszymy. Jeśli , promień przeszedł bez szwanku i jak zwykle oddziałuje z powierzchnią.tM.zaxtt<tM.zaxttM.zax

Perspektywy

Ten post był tylko niewielkim wprowadzeniem do renderowania z udziałem mediów; między innymi całkowicie zignorowałem zmienne przestrzennie współczynniki (potrzebne do chmur, dymu itp.). Notatki Steve'a Marschnera są dobrym źródłem informacji, jeśli jesteś zainteresowany. Ogólnie rzecz biorąc, uczestniczące media są bardzo trudne do wydajnego renderowania i możesz przejść o wiele bardziej wyrafinowane niż to, co tutaj opisałem; dostępne jest mapowanie fotonów wolumetrycznych , wiązki fotonów , aproksymacje dyfuzyjne , próbkowanie ważności połączeń i inne. Interesująca jest także praca nad granulowanymi mediami który opisuje, co zrobić, gdy model statystyczny się rozpadnie, tzn. interakcje cząstek nie są już statystycznie niezależne.

Benedikt Bitterli
źródło
4

Jednym ze sposobów, aby to zrobić - które nie jest dokładnie rozwiązaniem „przejdź do”, ale może dobrze działać, jest znalezienie odległości, przez którą promień przeszedł przez objętość, i użycie integracji funkcji gęstości, aby obliczyć, ile „rzeczy” było trafienie.

Oto link z przykładową implementacją: http://blog.demofox.org/2014/06/22/analytic-fog-density/

Alan Wolfe
źródło
3

Zależy od efektu głośności.

Jednorodne efekty głośności, które nie należą do rozpraszania, można symulować, po prostu obliczając odległości wejścia i wyjścia promienia.

W przeciwnym razie musisz dokonać integracji ścieżki promienia, znanej również jako marsz promienia. Aby uniknąć konieczności strzelania promieniami wtórnymi, rymowanie jest często połączone z pewnego rodzaju pamięcią podręczną, taką jak mapa głębokości, mapy głębokie, mapy cegieł lub chmury wokseli w celu cieniowania światła itp. W ten sposób nie musisz koniecznie maszerować przez całą scenę. Podobne buforowanie jest często wykonywane dla tekstury proceduralnej woluminu.

Możliwe jest również przekształcenie tekstury w prymitywy powierzchniowe, takie jak pudełka, kule lub płaszczyzny, które mają odpowiednią teksturę o miękkich krawędziach. Następnie można użyć normalnych technik renderowania, aby rozwiązać efekt wolumetryczny. Problem polega na tym, że zwykle potrzebujesz wielu prymitywów. Dodatkowo kształt prymitywu może się wydawać zbyt jednolitym próbkowaniem.

joojaa
źródło
Pamiętaj tylko, że możesz także dokonać analitycznej integracji ścieżki promienia, nie musisz używać marszu Ray, jeśli jest to niepożądane.
Alan Wolfe,
@AlanWolfe to jest to, co robisz w jednolitym przypadku, jednak jeśli medium uczestniczy w geometrii, musisz zrobić coś bardziej sprytnego. W każdym razie nie twierdziłem, że to wszystkie metody.
joojaa,
Na pewno dodając do twojej odpowiedzi. Kiedy mówisz, że jednolity przypadek nie jest pewny, co dokładnie masz na myśli, ale w przypadku mgły, nie musi to być jednolita gęstość, tylko funkcja gęstości, którą możesz zintegrować. Czy to masz na myśli mundur?
Alan Wolfe,