VARIANCE · reduceNEE · every bounceMIS · balance/powerEXT OF · R.15–16
Dodatek B / Głębiej: Próbkowanie
Importance sampling i redukcja wariancji
Rozdział 15 dał Ci poprawny, ale naiwny estymator Monte Carlo. Te trzy techniki — importance sampling, next event estimation i multiple importance sampling — to różnica między szumiącym renderem po minucie i czystym po minucie. Żadna z nich nie zmienia wyniku; każda zmienia, jak szybko do niego dojdziesz.
TL;DR
Wariancja między próbkami — nie sama losowość — jest źródłem szumu; próbkowanie proporcjonalne do wkładu (importance sampling) ją redukuje.
Next event estimation: w każdym punkcie odbicia wyślij też promień cienia bezpośrednio do światła, nie tylko licz na przypadkowe trafienie.
Multiple importance sampling: użyj obu strategii naraz z wagami sumującymi się do 1 — dowód poniżej pokazuje, że to zawsze daje nieobciążony wynik, a symulacja liczbowa pokazuje, że unika katastrofalnej wariancji, na którą trafia każda pojedyncza strategia w niewłaściwym dla niej scenariuszu.
Pass: Wariancja
Czemu niektóre próbki „liczą się” bardziej
Estymator z Rozdziału 15, L ≈ f·L_i·(N·L)/pdf, jest statystycznie poprawny przy próbkowaniu jednorodnym po hemisferze. Problem: jeśli f·L_i·cosθ jest silnie skoncentrowane (mały, jasny reflektor; wąski, wysoki-shininess lob specular z Rozdziału 11), większość jednorodnych próbek wypada tam, gdzie wkład jest bliski zeru, a od czasu do czasu jedna wypada w sam szczyt i wnosi ogromną wartość. Ta nierówność między próbkami — wariancja — to właśnie szum, który widzisz na ekranie.
Uniform.vs.importancesame hemisphere
Ta sama liczba próbek — po lewej rozrzucone równo, po prawej skupione tam, gdzie i tak wnoszą najwięcej.
Pass: NEE
Next event estimation: nie czekaj na przypadek
Czysty path tracing z Rozdziału 15 liczy na to, że losowa ścieżka przypadkiem trafi w światło — dla małych, jasnych świateł to ten sam problem „igły w stogu siana” z Rozdziału 16. Next event estimation naprawia to najprostszym możliwym sposobem: w każdym punkcie odbicia, obok kontynuowania ścieżki próbką BRDF, wysyłasz też promień cienia (Rozdział 6) prosto do wylosowanego światła i dodajesz jego wkład bezpośrednio.
NEE.every.bounceshadow ray + brdf sample
Dwie techniki w każdym punkcie: kontynuacja ścieżki i bezpośrednia „próba” trafienia w światło.
Pass: MIS — dowód
Multiple importance sampling: dowód, nie tylko przepis
NEE świetnie radzi sobie z małymi, jasnymi światłami, ale słabo z bardzo błyszczącymi powierzchniami widzianymi pod dużym, rozmytym światłem — próbkowanie BRDF trafia tam lepiej. Żadna strategia nie jest zawsze najlepsza. MIS łączy próbki z obu strategii wagami — ale dlaczego to wciąż daje poprawny wynik, a nie tylko „rozsądny kompromis”? Dowód jest krótki i wart przejścia krok po kroku.
F = Σᵢ wᵢ(xᵢ)·f(xᵢ)/pᵢ(xᵢ), xᵢ ~ pᵢ pod warunkiem: Σᵢ wᵢ(x) = 1 dla każdego x, gdzie choć jedno pᵢ(x)>0jedna próbka z każdej z n strategii; warunek na wagi jest jedynym wymogiem — nic więcej nie jest potrzebne do nieobciążoności
Dowód nieobciążoności — 5 linii
E[F] = Σᵢ E[wᵢ(Xᵢ)·f(Xᵢ)/pᵢ(Xᵢ)], gdzie Xᵢ~pᵢ
= Σᵢ ∫ wᵢ(x)·f(x)/pᵢ(x) · pᵢ(x) dx (definicja wartości oczekiwanej po pᵢ)
E[F] = I — nieobciążone dla KAŻDEGO wyboru wag spełniającego Σwᵢ(x)=1, nie tylko dla heurystyki potęgowej.
To znaczy, że wybór między heurystyką balansową (β=1) i potęgową (β=2, Rozdział wcześniejszy) nigdy nie wpływa na obciążenie — wpływa tylko na wariancję. To dwa różne pytania, często mylone.
Pass: MIS — symulacja
Dlaczego to działa: dwa scenariusze, trzy strategie
Dowód mówi „nieobciążone”, nie „lepsze”. Żeby zobaczyć realną korzyść, trzeba dwóch scenariuszy, w których każda pojedyncza strategia jest dobra w jednym, a katastrofalna w drugim — dokładnie sytuacja małego jasnego światła kontra dużego, rozmytego, z Rozdziału 16.
Ustawienie: dwie strategie, p1(x)=5x⁴ i p2(x)=1 (jednorodna), na [0,1]
Scenariusz A: f(x)=x⁸ (silnie skupione przy x=1 — jak małe, jasne światło). Prawdziwa całka I=1/9≈0,1111.
Scenariusz B: f(x)=1 (płaskie — jak duże, rozmyte światło widziane pod szerokim kątem). Prawdziwa całka I=1,0.
p1 jest „dobre” dla A (podobny kształt do f), p2 jest „dobre” dla B (idealnie płaskie, jak f w tym scenariuszu).
Wynik symulacji — 20 000 powtórzeń, wariancja estymatora
Scenariusz A (f=x⁸): p1-only var=0,00152 · p2-only var=0,02370 (15,6× gorzej niż p1) · MIS var=0,00361
Scenariusz B (f=1): p1-only var=354,24 (katastrofa) · p2-only var=≈0 (idealne trafienie) · MIS var=0,14725
MIS nigdy nie jest najlepsze — ale nigdy nie jest katastrofalne. To jest cała korzyść.
p1 samo w scenariuszu B jest 2400× gorsze niż MIS. Gdybyś nie wiedział z góry, w którym scenariuszu jesteś — a w realnej scenie nigdy nie wiesz — MIS jest jedynym bezpiecznym wyborem.
Variance.comparisonlog scale — real simulation
Skala logarytmiczna (bo różnice są rzędu tysięcy) — fioletowy słupek MIS nigdy nie jest ekstremalny.
Z praktyki
To nie jest zaawansowany przełącznik — to domyślne zachowanie Arnolda, RenderMana, Cyclesa, V-Raya i Redshifta. Ustawienia „Light Samples” / „Diffuse Samples” / „Specular Samples” w tych silnikach dosłownie kontrolują, ile próbek NEE i BRDF dostaje każda strategia, zanim MIS je połączy.
Słowniczek
Wariancja
Rozrzut wartości między próbkami; źródło widocznego szumu.
Importance sampling
Próbkowanie proporcjonalne do wielkości wkładu do wyniku.
Next event estimation (NEE)
Bezpośredni promień cienia do światła w każdym punkcie odbicia.
Multiple importance sampling (MIS)
Ważone połączenie kilku strategii próbkowania w jednym punkcie.
Heurystyka potęgowa / balansowa
Dwa konkretne, poprawne wybory wag MIS — różnią się wariancją, nie obciążeniem.
Warunek unormowania wag
Σᵢwᵢ(x)=1 — jedyny wymóg, żeby estymator MIS był nieobciążony.
Co dalej
Dodatek C rozwija Rozdział 13: jak faktycznie zbudować dobre BVH — Surface Area Heuristic i alternatywy dla GPU i geometrii animowanej.