Jak działa ray tracing
Podstawowa idea ray tracingu jest zwodniczo prosta: dla każdego piksela wypuść promień z kamery w scenę, znajdź najbliższe przecięcie i wycieniuj ten punkt, wysyłając promienie cienia w stronę źródeł światła. Powtórz to dla promieni odbicia i załamania, a otrzymasz fizycznie poprawne obrazy. Jedyne wejścia fizyczne to prawo odbicia (θ_r = θ_i) i prawo Snella (n₁ sin θ₁ = n₂ sin θ₂).
Nowoczesne ray tracery i path tracery na GPU (NVIDIA RTX, ray tracing w Apple Metal) robią dokładnie to samo z prędkością miliardów promieni na sekundę. Symulacje na tej stronie działają całkowicie w przeglądarce — część w JavaScript, część w shaderach fragmentów GLSL — dzięki czemu możesz modyfikować scenę i widzieć fizyczne zachowanie światła w czasie rzeczywistym.
Prawo Snella: n₁ sin θ₁ = n₂ sin θ₂
Kąt krytyczny (TIR): θ_c = arcsin(n₂/n₁) (n₁ >
n₂)
Współczynnik odbicia Fresnela (polaryzacja s):
r_s = (n₁ cos θ₁ − n₂ cos θ₂) / (n₁ cos θ₁ + n₂ cos θ₂)
Współczynnik odbicia Fresnela (polaryzacja p):
r_p = (n₂ cos θ₁ − n₁ cos θ₂) / (n₂ cos θ₁ + n₁ cos θ₂)
Odbicie R = |r|², transmisja T = 1 − R
Przybliżenie Schlicka: R(θ) ≈ R₀ + (1−R₀)(1−cos θ)⁵
Optyka atmosferyczna i rozpraszanie
Niebo jest niebieskie, a zachody słońca czerwone z powodu rozpraszania Rayleigha: natężenie światła rozpraszanego przez cząsteczki gazu jest proporcjonalne do λ⁻⁴, więc niebieskie fotony o krótkiej długości fali rozpraszają się ~5,5 razy silniej niż czerwone. O zachodzie słońca światło słoneczne przechodzi przez ~38 razy więcej atmosfery, tracąc barwę niebieską i pozostawiając czerwień i pomarańcz. To nie są efekty specjalne — wynikają bezpośrednio z przekroju czynnego rozpraszania elektromagnetycznego cząsteczek dużo mniejszych niż długość fali.
Ray marching SDF a klasyczny ray tracing: W klasycznym ray tracingu piszesz analityczne funkcje przecięcia dla każdego prymitywu. Ray marching SDF zastępuje to wszystko jedną funkcją odległości: promień posuwa się o minimalną odległość do dowolnej powierzchni, co gwarantuje brak przekroczenia. Zyskujesz darmowe płynne łączenie (smooth-min), nieskończony poziom detali i trywialne deformacje — ale SDF musi być ciągłe w sensie Lipschitza (moduł gradientu ≤ 1), aby sphere tracing był zbieżny.