CAM · PERSPECTIVERAYS/PX · 1BOUNCES · ∞DENOISER · OFF
Rozdział 1 / Podstawy

Wprowadzenie do renderowania

Zanim zaczniemy pisać kod śledzący promienie, warto zrozumieć, co dzieje się w silniku renderującym, gdy przełączasz viewport z podglądu na tryb finalnego renderu — i czym różni się to od klasycznej rasteryzacji.

TL;DR

Rendering to proces zamiany opisu sceny 3D — geometrii, materiałów, świateł i kamery — na dwuwymiarowy obraz. Od czterech dekad istnieją dwie rodziny podejść do tego problemu, i jako artysta techniczny prawdopodobnie korzystasz z obu, często bez zastanawiania się, co dzieje się pod maską.

Pass: Rasteryzacja vs Ray Tracing

Dwa różne pytania o ten sam piksel

Rasteryzacja odpowiada na pytanie: „który trójkąt zakrywa ten piksel?”. Geometria jest rzutowana na ekran, a bufor głębi (z-buffer) decyduje, co jest bliżej kamery. To podejście jest błyskawiczne i doskonale współpracuje z GPU — ale samo z siebie nic nie wie o świetle odbitym od innych obiektów. Stąd cały arsenał sztuczek: mapy cieni, sondy świetlne (light probes), odbicia w przestrzeni ekranu (SSR), zapieczone lightmapy.

Ray tracing zadaje inne pytanie: „co zobaczyłby promień światła, gdybyśmy wysłali go z kamery przez ten piksel?”. Zamiast pracować tylko na widocznej geometrii, promień może odpytać całą scenę — również to, czego nie widać na ekranie. Dzięki temu odbicia, cienie i załamania wychodzą naturalnie, jako efekt samego algorytmu, a nie dodatkowej sztuczki.

Pipeline.compareStages · 5
RASTERYZACJA RAY TRACING Geometria → trójkąty w screen space Rasteryzacja → który piksel pod trójkątem Z-buffer → co jest bliżej kamery Shading + sztuczki (shadow maps, SSR, probes) Piksel na ekranie Kamera → promień przez piksel Test przecięcia promienia ze sceną Punkt trafienia na powierzchni Promień cienia + promienie odbite Piksel na ekranie
Obie ścieżki kończą się tym samym pikselem — różnica leży w tym, jak dochodzą do jego koloru.
Pass: Mechanika

Jak to działa konceptualnie

Na najbardziej podstawowym poziomie ray tracing robi trzy rzeczy w kółko, dla każdego piksela obrazu:

Ta rekurencja jest kluczowa. Promień odbity, trafiając w kolejną powierzchnię, sam staje się nowym „promieniem pierwotnym” dla tamtego punktu — stąd realistyczne odbicia w odbiciach, które w rasteryzacji trzeba by ręcznie symulować kaskadą sond i cubemap.

Scene.previewCam: persp · fov 50°
CAM VIEWPORT LIGHT promień pierwotny promień cienia promień odbity
Promień pierwotny
Promień cienia
Promień odbity
Kliknij etykietę, żeby wyizolować pojedynczy typ promienia — tak jak izolujesz AOV w kompozycji.
Pass: Kontekst historyczny

Skąd się to wzięło

Idea nie jest nowa. W 1980 roku Turner Whitted opublikował pracę opisującą rekurencyjny ray tracing z odbiciami, cieniami i załamaniami — fundament, na którym stoi cała branża. Sześć lat później James Kajiya sformalizował to w postaci równania renderowania i wprowadził path tracing, czyli losowe próbkowanie metodą Monte Carlo, które dziś stoi za każdym „porządnym” rendererem offline. Ray tracing w czasie rzeczywistym, choć teoretycznie możliwy wcześniej, stał się praktyczny dopiero z pojawieniem się sprzętowej akceleracji — kart GPU z dedykowanymi jednostkami RT, wprowadzonych komercyjnie w 2018 roku.

Pass: Zastosowania

Gdzie to spotkasz w praktyce

Prawdopodobnie już dziś pracujesz z ray tracingiem częściej, niż myślisz:

Jako artysta techniczny rzadko piszesz raytracer od zera — ale gdy w renderze pojawia się szum, „fireflies” albo światło przecieka przez ścianę, to właśnie zrozumienie tego, co robi pojedynczy promień, pozwala zdiagnozować problem szybciej niż grzebanie w presetach.

Słowniczek
Promień pierwotny (primary ray)
Wysyłany z kamery przez piksel obrazu.
Punkt trafienia (hit point)
Miejsce, w którym promień przecina geometrię.
Promień cienia (shadow ray)
Testowy promień od punktu trafienia do źródła światła.
Promień drugorzędny (secondary ray)
Odbicie lub załamanie wysłane rekurencyjnie z punktu trafienia.
Głębokość odbić (bounce depth)
Limit tej rekurencji, ustawiany w silniku renderującym.