Spójne śledzenie promieni: kolejna ewolucja w ray tracingu

Spójne śledzenie promieni

Ray Tracing niewątpliwie stał się przyszłością renderowania w czasie rzeczywistym, zwłaszcza gdy rasteryzacja nie może rozwiązać pewnych problemów wizualnych i nie daje więcej niż sama. Ale jego implementacja nie jest łatwa, a wydajność nie jest idealna nawet w przypadku najbardziej zaawansowanych procesorów graficznych. I tu pojawia się kolejny krok, spójne śledzenie promieni. Do czego się przyczynia, dlaczego jest to konieczne i na czym polega?

Ray Tracing używany w dzisiejszych grach jest tym, co nazywamy renderowaniem hybrydowym, w którym spójna część sceny jest renderowana za pomocą algorytmu rasteryzacji, a niespójna część sceny jest renderowana za pomocą śledzenia promieni, więc pomimo tego, co mówią marketing różnych firm, era, w której gry są renderowane wyłącznie za pomocą ray tracingu, nie nadeszła.

Światło bezpośrednie vs pośrednie

Aby uczynić to stwierdzenie bardziej zrozumiałym, powiedzmy, że scena jest renderowana przy użyciu rasteryzacji całkowicie ignorującej oświetlenie pośrednie, które powstaje, gdy źródło światła pada na obiekt i odbija światło w nowych kierunkach.

Kontroluj Rasterización Ray Tracing

Ray Tracing renderuje niespójne elementy sceny dokładniej, szybciej i wydajniej niż rasteryzacja, ale istnieje powiązany problem z wydajnością podczas renderowania niespójnej części sceny, który sprawia, że ​​koszt obliczeniowy jest bardzo wysoki, jeśli chodzi o stosowanie śledzenia promieni, a to jest właśnie następne duże wyzwanie dla firm takich jak NVIDIA i AMD, optymalizując wydajność niespójnej części sceny w ray tracingu.

Spójne śledzenie promieni i niespójne śledzenie promieni

Spójne Niespójne Promienie

Odłóżmy na chwilę na bok renderowanie hybrydowe używane w grach i zwróćmy uwagę na czysty Ray Tracing, w którym promienie można oceniać na dwa różne sposoby.

  • W czystym ray tracingu spójne promienie są uważane za te, które wychodzą z kamery i podążają ścieżką widoku ściętego sceny, promienie te nazywane są spójnymi, ale nie są używane w renderowaniu hybrydowym.
  • Niespójne promienie to te, które powstają w wyniku uderzenia promienia światła w obiekt.
  • Spójne promienie to te, które pochodzą z pierwotnego źródła światła, to znaczy nie zostały wygenerowane przez uderzenie poprzedniego promienia w obiekt.

Na poziomie wizualnym, jeśli mówimy tylko o oświetleniu bezpośrednim, nie ma różnicy w jakości wizualnej w renderowaniu sceny z tylko bezpośrednim oświetleniem między rasteryzacją a ray tracingiem, dodaj to do faktu, że wszystkie silniki gier działają przez raster, a zrozumiesz przyczynę dlaczego śledzenie promieni nie jest używane podczas renderowania spójnej części sceny.

Wydajność niespójnej części Ray Tracing na GPU

Problem polega na tym, że chociaż śledzenie promieni jest znacznie lepsze w renderowaniu niespójnej części sceny niż rasteryzacja, istnieje problem, że promienie niespójne mają znacznie mniejszą wydajność niż obliczanie spójnych promieni sceny.

Przyczyną tej dysproporcji w wydajności jest fakt, że nie wszystkie informacje o scenie nie znajdują się w pliku GPU cache, do którego uzyskują dostęp jednostki przecięcia wiązek, przy niespójnych wiązkach nie wpływają one na ten sam obszar sceny, a zatem nie wpływają na ten sam shader, co powoduje zatrzymanie ogromnej liczby wątków w GPU, powodując spadki wydajności.

Kino Pixar o śledzeniu ray .

Jest to problem, który w branży filmowej rozwiązują za pomocą algorytmów przegrupowania promieni, ale mogą to łatwo zrobić, ponieważ znają z wyprzedzeniem położenie kamery i dlatego mogą przekształcić wszystkie niespójne promienie sceny na promienie. spójne dzięki algorytmowi porządkowania.

Ale jeśli chodzi o renderowanie filmu, który mają cały czas na świecie, nie muszą wyświetlać obrazu co kilka milisekund, a algorytmy sortowania są bardziej, aby zaoszczędzić czas, a tym samym koszt ich potężnych farm renderujących, ale , Sytuacja w grach wideo jest inna.

Cyberpunkowy ray tracing

Ale w grze wideo, w której każda klatka jest wyjątkowa, nie można tego zrobić, co więcej, wymagałoby to bardzo wydajnego sprzętu, aby zamówienie promieni sceny nie wpłynęło na jej wysoką liczbę klatek na sekundę, więc jest to teraz kolejne wielkie wyzwanie. być rozwiązane przez producentów GPU i jest to kluczowy element, jeśli Ray Tracing nie ma stać w miejscu pod względem wydajności.

Obecne procesory graficzne nie są przeznaczone do niespójnego śledzenia promieni

VRAM

Procesory graficzne, których używamy w naszych komputerach, zostały zaprojektowane do rasteryzacji, która jest wykorzystywanym algorytmem renderowania, który bardzo dobrze korzysta z przestrzennej i czasowej lokalizacji dostępów do pamięci.

Większość pracy, jaką GPU musi wykonać podczas rasteryzacji, ma tę cechę, że podczas stosowania programu cieniującego, szczególnie podczas Pixel Shader, dane pikseli i trójkątów, które przetwarza, są udostępniane najbliższym sąsiadom. Na scenie.

Istnieje więc wiele możliwości, że jeśli GPU uzyskuje dostęp do danych dla grupy trójkątów i pikseli i zbiera wszystkie pobliskie w pamięci do pamięci podręcznych, to będzie już miał dane dla sąsiednich pikseli i trójkątów. Dlatego zmiany muszą zostać wprowadzone, aby wykorzystać tę wspólną cechę wszystkich procesorów graficznych.

Struktura danych przestrzennych

Estucturas Datos Espacial

Aby przyspieszyć śledzenie promieni, wystarczy zbudować strukturę danych przestrzennych, która jest niczym innym, jak uporządkowaną mapą położenia obiektów na scenie.

Scena jest przekształcana w rodzaj sześcianu z kilkoma podpodziałami, które wskazują, gdzie znajdują się obiekty, spośród których istnieją dwa rodzaje:

  • Scena jest podzielona przestrzenią na regularne bloki.
  • Scena jest podzielona na te części, w których występuje geometria lub elementy.

W grach ten drugi typ został wybrany poprzez przyjęcie BVH, zwłaszcza ze względu na fakt, że NVIDIA ma dedykowany sprzęt w swoich procesorach graficznych do szybkiego poruszania się po tej strukturze danych drzewa, ale istnieją dwa typy BVH:

  • Statyczne BVH muszą zostać ponownie odbudowane po zmodyfikowaniu dowolnego obiektu w scenie, jednak po ich zbudowaniu przyspieszają czas renderowania sceny.
  • Dynamiczne BVH pozwalają na indywidualne aktualizowanie obiektów w taki sposób, że przy przebudowie BVH czas na to jest znacznie krótszy, ale w zamian wydłuża się czas kolejnego renderowania.

A jakie to ważne? Jeśli chcemy uporządkować promienie zgodnie z ich trajektorią w scenie, musimy najpierw mieć mapę tej samej sceny, która pozwoli nam zapisać trajektorię promieni.

Mapowanie toru promieni

Kontrola śledzenia promieni

Jednym z rozwiązań jest sprawienie, by promienie przeszły przed sceną bez jej modyfikowania, aby wiedzieć, które obiekty będą wpływać na różne promienie, a które promienie będą przechodzić przez scenę. Po zakończeniu trasy wstępnej różne promienie, które wpływają w szczególności na część sceny, są przechowywane w buforze pamięci, chociaż nie są ze sobą powiązane.

Chociaż nie ma bezpośredniego związku między różnymi promieniami tego samego miejsca, istnieje związek przestrzenny, który pomaga wykorzystać wspólną architekturę wszystkich procesorów graficznych podczas renderowania sceny z promieniami niespójnymi. Chodzi o to, aby wstępnie renderować scenę, ale bez obliczania shaderów, które zmieniają wartości kolorów różnych obiektów podczas renderowania sceny, jesteśmy po prostu zainteresowani wiedzą, na które części sceny wpłynie każdy z promieni.

Promienie poprzedzające scenę

Rayus Rebotando Espacio

Promienie, które przecinają scenę, wykonają tylko shader, Ray Generation Shader, który wskazuje, że ten obiekt na scenie ma zdolność generowania pośredniego promienia światła, ponieważ same promienie mają ze sobą serię parametry, aby zapobiec ich wiecznemu podskakiwaniu jak piłeczki ping pongowe po całej scenie.

W tym celu konieczne jest umieszczenie szeregu parametrów związanych z promieniami i obiektami, które byłyby następujące:

  • Stała, która jest liczbą odbić, które promień może wykonać w scenie, po wykonaniu takiej liczby odbić niezależnie od innych warunków, wspomniany promień przestaje się odbijać.
  • Stała w każdym materiale, czyli stała załamania światła, która wynosi od 0 do 1, przy każdym przecięciu wartość energii promienia jest mnożona przez stałą załamania, a gdy promień osiąga wystarczająco niski poziom energii, jest odrzucany.

Spójne śledzenie promieni

Dzięki temu możemy już wstępnie sprawić, by promienie odbijały się od sceny, co pomaga uporządkować dane, ponieważ dzięki temu możemy wiedzieć, na które części sceny wpłyną różne promienie. Co znacznie przyspieszy wydajność, ale wymaga to dwóch zmian sprzętowych.

Wbudowana pamięć do przechowywania struktury danych przestrzennych

SRAM 3DIC

Pozostaje teraz możliwość przechowywania całej struktury danych przestrzennych w pamięci możliwie najbliżej procesora, a także danych przed trasą, ale ta struktura danych nie może być przechowywana w ograniczonych pamięciach podręcznych o wielkości kilku megabajtów. , ani Infinity Caché, pomimo swoich 128 MB, nie byłby w stanie przechowywać takiej ilości danych.

Potrzebne jest znalezienie sposobu na umieszczenie jak największej ilości pamięci w pobliżu GPU, która służy do przechowywania całej struktury danych przestrzennych, pamięć ta nie byłaby cache'em i nie byłaby częścią hierarchii pamięci procesora, służyłby po prostu do przechowywania wewnątrz całej struktury danych przestrzennych.

Jednym ze sposobów na osiągnięcie tego byłoby użycie pamięci SRAM podłączonej pionowo do GPU, ale implementacja tej pamięci może wiązać się z dodatkowymi dodatkami wykorzystującymi jej przyszłą implementację w GPU. Chociaż istnieją inne sposoby, aby to zrobić, mogą to nawet zrobić w postaci nowej pamięci podręcznej ostatniego poziomu o dużej gęstości.

Kolejne ustalone jednostki funkcyjne

HPC procesora graficznego .

Będą dwa, które będą miały kluczowe znaczenie dla zwiększenia wydajności:

  • Pierwsza z nich będzie odpowiedzialna za generowanie struktury danych przestrzennych poprzez położenie geometrii w scenie.
  • Drugą rzeczą, którą zrobisz, jest zanotowanie, gdzie każdy promień trafia podczas trasy, zanim zastosujesz Ray Tracing.

Obie jednostki wykorzystają ogromną wbudowaną pamięć, którą będą zawierać GPU, do przechowywania struktury danych przestrzennych sceny. Dzięki nim zobaczymy duży wzrost wydajności, jeśli chodzi o Ray Tracing.

Kreator PowerVR

Jednostki te można już znaleźć w rozwiązaniach sprzętowych, takich jak Wizard's PowerVR w postaci Scene Hierarchy Generator i Coherency Engine, ich użyteczność została więcej niż zademonstrowana, ale nie w ekstremalnie złożonych środowiskach, w których konieczne będzie wdrożenie wbudowanej pamięci.