artykuły

Ray tracing w Minecraft, sprawdzamy technikę Hierarchical Voxel Tracing

Co wspólnego z nową generacją konsol ma Minecraft i ray tracing?

19
2 kwietnia 2020, 14:01 Piotr Gołąb

Ray tracing aktualnie kojarzy się z produktami firmy Nvidia, bo tylko karty z serii GeForce RTX mają dedykowane do obliczeń grafiki tworzonej przy użyciu ray tracingu rdzenie. Nie oznacza to, że jest to jedyne możliwe podejście. Nowe konsole również będą wspierały ray tracing, niekoniecznie jednak przy użyciu tej samej techniki co karty firmy Nvidia. W tym artykule przybliżymy działanie algorytmu Hierarchical Voxel Tracing, który jest podstawą akceleracji techniki śledzenia promieni w nadchodzących konsolach. A wszystko to na podstawie dodatku do gry Minecraft.

Spis treści

Śledzenie promieni w coraz większej liczbie gier staje się faktem, wydaje się, że jest to technika, która zagości na stałe w nowych silnikach graficznych i wychodzących tytułach. Nawet nadchodząca generacja konsole będzie mieć sprzętowe wsparcie dla ray tracingu. Realizowane będzie to za pomocą specjalnych jednostek obliczeniowych, dedykowanych do obliczeń techniki śledzenia promieni. Pod względem funkcjonalności będą praktycznie identyczne w stosunku do tych, jakie obecnie są wykorzystywane w kartach graficznych firmy Nvidia. Również będą wykonywać dwie funkcje: obliczanie miejsca przecięcia się promienia światła z powierzchnią (obiektem) na scenie 3D oraz akcelerację obliczeń przemieszczania się samego promienia od obserwatora (kamery, która jest oczami gracza w świecie gry) w głąb sceny 3D i zawężanie obiektów wchodzących w interakcję z pojedynczym promieniem światła.

Liczba obliczeń w przypadku śledzenia promieni jest bardzo duża i to ona głównie decyduje o zapotrzebowaniu na moc obliczeniową. W przypadku najpopularniejszej rozdzielczości 1920 × 1080 pikseli z kamery wystrzeliwane jest 2 miliony promieni, po jednym na każdy piksel, który jest wyświetlany na scenie. Przy czym musimy zdawać sobie sprawę, że pojedynczy promień na piksel to minimalna wartość, jaką możemy przyjąć renderując obraz z wykorzystaniem techniki śledzenia promieni. Im jest ona większa, tym odzwierciedlenie naturalnego oświetlenia będzie wierniejsze (w tym, odbić w powierzchniach refleksyjnych i cieni), ale wyższe będą też wymagania. Niestety możliwości obecnie produkowanych kart graficznych nadal nie są duże w stosunku do wymagań tej techniki, dlatego we wszystkich dostępnych grach korzystających z techniki śledzenia promieni zaimplementowane jest  próbkowanie jednego promienia na piksel.

Czy są sposoby na optymalizację techniki śledzenia promieni?

Na ratunek przychodzą nam algorytmy BVH (ang. Bound Volume Hierarchy, w języku polskim: drzewo brył ograniczających) przyspieszające wykonywanie operacji podczas generowania promieni techniką ray tracingu. Drzewo BVH to struktura danych do przechowywania i szybkiego wykonywania zapytań dotyczących obiektów w przestrzeni trójwymiarowej. Drzewo BVH najczęściej ma postać zrównoważonego przestrzennie drzewa binarnego, aczkolwiek zdarzają się drzewa o rozwidleniach 4-, 8- czy 16-gałęziowych od pojedynczego punktu zbiorczego.

Obiekty znajdujące się na scenie 3D ograniczane są przez prostsze bryły - najczęściej prostopadłościany ze ścianami równoległymi do osi współrzędnych (ang. bounding box) lub kule.

Schemat przedstawia prostą strukturę BVH, gdzie na obiekty nałożone są bryły brzegowe w postaci prostopadłościanów i kuli. Tego rodzaju strukturę wykorzystuje w dużej mierze Nvidia w swoich kartach graficznych z rodziny RTX, aczkolwiek nie znamy wszystkich detali dotyczących ich akceleracji.

Jak najprościej odczytać taką strukturę. Zakładamy, że promień światła wystrzelony w scenę 3D trafia w grupę obiektów A, a następnie porusza się dalej i trafia w fioletowy stożek w grupie B. W tym przypadku obliczane są tylko interakcje pojedynczego promienia dla obiektów znajdujących się w grupie B. Grupa C, nie jest brana pod uwagę w obliczaniu ścieżki dla tego promienia. Nie są tracone na nią obliczenia.

Rodzaje drzew BVH:

  • Drzewo BSP - najczęściej jest wykorzystywane przy akceleracji RT w statycznych scenach, gdzie nie zachodzą dynamiczne zmiany otoczenia.
  • Drzewo KD - też jest wykorzystywane do akceleracji RT, ale złożoność obliczeń, dla scen dynamicznych, gdzie nagle na scenie 3D pojawia się obiekt, jest duża. Trzeba od nowa generować całą strukturę drzewa KD dla każdej zmiany na scenie 3D. Algorytm ten jest bardzo wydajny dla scen statycznych
  • R-drzewo - to rodzaj zbalansowanej struktury danych, bardzo dobrze radzi ona sobie z szukaniem obiektów w wielowymiarowej przestrzeni, w śledzeniu promieni wykorzystywana jest raczej rzadko.
  • Drzewo ósemkowe - jest to najczęściej wykorzystywana metoda akceleracji śledzenia promieni w grafice komputerowej, dlatego też tematem przewodnim tego artykułu. 

Drzewo ósemkowe i Hierarchical Voxel Tracing

Drzewo ósemkowe (ang. octree) - ta struktura danych stosowana jest w grafice komputerowej do przestrzennego podziału trójwymiarowej przestrzeni na mniejsze, regularne części. Budowanie drzewa ósemkowego polega na otoczeniu całości sceny 3D sześcianem, który w dalszej kolejności jest dzielony na osiem kolejnych sześcianów, każdy następny sześcian jest znowu dzielony na kolejne osiem części. Cały ten proces jest rekurencyjny, tzn. potrafi odwoływać się do samego siebie, czyli korzystać z wcześniej pozyskanych danych.

Z lewej strony schematu znajduje się rekursywny podział sześciany, a po prawej drzewo ósemkowe odpowiadające podziałom.

Skoro drzewo ósemkowe mamy omówione to pora zająć się hierarchical voxel tracing. Po pierwsze musimy wyjaśnić sobie, co to jest voxel. Starsi gracze na pewno pamiętają takie gry jak Outcast czy symulator lotu Comanche. Były to jedne z pierwszych gier, które do tworzenia grafiki wykorzystywały voxele. Czym w takim razie jest voxel? Mówiąc najprościej, jest to trójwymiarowy piksel, który poza osiami x, y ma jeszcze oś z. Dodatkowo jego wszystkie boki są równe. Jest to więc sześcian równoboczny, który jest podstawą akceleracji drzewa ósemkowego. Taki pojedynczy voxel w drzewie ósemkowym może określać, czy w danym obszarze trójwymiarowym doszło do zderzenia się promienia światła z powierzchnią, czy nie. Mówiąc najprościej, pojedynczy voxel jest strukturą kończącą (liściem) dla poszczególnych gałęzi drzewa ósemkowego. Dzięki temu bardzo łatwo jest określić, z jakimi elementami sceny może dojść do interakcji dla pojedynczego promienia światła w danej gałęzi drzewa ósemkowego. Z nieoficjalnych źródeł dowiedzieliśmy się, że ten rodzaj akceleracji śledzenia promieni ma być wykorzystywany w konsolach przyszłej generacji.

Minecraft - śledzenie promieni z wykorzystaniem Hierarchical Voxel Tracing

Hierarchical Voxel Tracing zostało zaimplementowane w grze Minecraft przez grupę pasjonatów ze studia Continuum Graphics LLC, zapewne w celu zebrania doświadczenia, eksperymentu. Zdecydowali się oni na pełną implementację techniki śledzenia promieni w dodatku do Minecraft, całe oświetlenie w grze liczone jest w czasie rzeczywistym, w tym oświetlenie globalne, cienie czy odbicia od powierzchni refleksyjnych. Przy czym odbić nie uwzględniamy w naszym porównaniu, ponieważ musielibyśmy zainstalować dodatkową modyfikację nadającą właściwości fizyczne materiałom użytym w grze. Jednym słowem musielibyśmy użyć materiałów PBR, o nich napiszemy przy innej okazji, bo temat jest dosyć rozległy.

Strona:
RyszawyZobacz profil
Poziom ostrzeżenia: 0%
Ryszawy2020.04.02, 14:56
15#1
Hmm.. nie żebym się wymądrzał, ale od dłuższego czasu w Minecrafcie dostępny jest Path Tracing (SEUS PTGI) i też jest oparty na voxelach. Działa z przyzwoitą prędkością prawie na każdej nowszej karcie, nie to co ta wczesna alfa od Continuum.
Może by tak małe porównanie tych dwóch shaderów, Continuum RT vs SEUS PTGI? A nie klepanie, że bez rdzeni RT to nawet nie podchodź i że 30 klatek na 2080Ti w Full HD to spodziewany wynik i to chyba bez tekstur PBR. Tam są do policzenia tylko sześciany z teksturami 16x16 pixeli.
Edytowane przez autora (2020.04.02, 15:04)
KinexityZobacz profil
Poziom ostrzeżenia: 0%
Kinexity2020.04.02, 15:10
SEUS PTGI wygląda lepiej i ma lepszą wydajność (30 fps 1080p wszystko max - z trudem ale wystarcza 1070 laptop).
DeniryerZobacz profil
Poziom ostrzeżenia: 0%
Deniryer2020.04.02, 15:24
Co Continuum RT ma wspólnego z konsolami? Nic, bo to Ray Tracing, a nie Path Tracing, który obciąża mocnej sprzęt.

Sam opis zacny, ale porównywanie alfy, do produktu, który de facto nie istnieje nie ma sensu...
Jak NV wyda w końcu Minecratfa po roku (19 sierpnia zostało oficjalne zaprezentowane po raz pierwszy) roku to wtedy będzie co porównywać.

Btw. Jak wyżej wspomnieli panowie SEUS PTGI działa lepiej (przed chwilą sprawdziłem na GTX1070), ma mniej przekłamań i artefaktów i jest bliższy RT od NV niż obecna alfa od Continuum.
szymcio30Zobacz profil
Poziom ostrzeżenia: 0%
szymcio302020.04.02, 16:19
Czyli śledzenie promieni pokazane na demie Minecraft DXR on Xbox Series X pokazuje jego moc lub nie moc skoro działa na równi z 2080Ti. Bez śledzenia promieni nie jeden dzieciak ograł Minecraft na tablecie za kilka stów i to najbardziej szokuje jak RT wpływa na wydajność wręcz masakruje współczesne GPU
RdzaweOkoZobacz profil
Poziom ostrzeżenia: 0%
RdzaweOko2020.04.02, 17:07
raytracing off 2594/999 fps
raytracing on 67/64 fps
to dopiero ustawienia uber ;D
NamonakiZobacz profil
Poziom ostrzeżenia: 0%
Namonaki2020.04.02, 17:30
Octree to nie jest drzewo obiektów zgrupowanych po maksymalnie 8 elementów i dopiero większe grupy są kolejny raz dzielone?
StilgarusZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjiStilgarus2020.04.02, 21:50
1. Z SEUS PTGI, osobiście korzystałem przez chwilę i efekty w SEUS były niższej jakości niż w Continuum. W dużym skrócie to też był ray tracing, ale np, odbicia były robione, techniką screen space. Były jeszcze inne różnice, ale teraz nie przypomnę ich sobie tak szybko. Różnica w wydajności na korzyść SEUS to było raptem 20%, jak używałem wersji E6 (było to kilka miesięcy temu) , z tego co pamiętam teraz, jest chyba wersja E11 lub nowsza.

2. Path Tracing to metoda realizowania Ray Tracingu. Aktualnie we wszystkich grach z ray tracingiem, używamy path tracingu.

3. Wydajność ray tracingu na nowym Xboxie, to jest na razie zagadka, bo nie wiemy, ile dokładnie jednostek obliczeniowych RT, będzie dostępne w tej konsoli. Dzięki zastosowaniu algorytmów przyspieszania ray tracingu takich jak właśnie hierarchical voxel tracing, jest w ogóle możliwe wyświetlanie w miarę płynnej animacji, a nie czekanie po kilka minut na pojedynczą klatkę. Ray tracing to na tę chwilę najbardziej zasobożerna technika i jesteśmy na samym początku jej wdrażania do pecetów i konsol.

4. W octree każda gałąź zawsze dzielona jest na osiem części, stąd nazwa. Jak widać ze schematu na pierwszej stronie, z pnia od razu wychodzi osiem gałęzi, w octree nie możemy podzielić gałęzi na mniejszą lub większą liczbę części, tylko na osiem. Dokładnie na tej samej zasadzie działa drzewo czwórkowe, każda gałąź dzielona jest od razu na cztery, ale tego algorytmu używa się głównie w grafice 2D.
RyszawyZobacz profil
Poziom ostrzeżenia: 0%
Ryszawy2020.04.02, 23:14
Mam zainstalowaną wersję SEUS PTGI E12 i Optifine, na wygenerowanej mapie, dużo drzew, z teksturami 16x16 (defultowe), 75 klatek na RTX 2070 Super w Full HD przy 12 chunkach. Jak zmienię na paczkę tekstur 1K PBR, 55 klatek w tym samym miejscu.

SSR i jakaś froma AO wykorzystywana jest do liczenia odbić i oświetlenia tych obiektów, które nie są sześcianami , tylko sześcienne bloki w PTGI są liczone z path tracingiem, plus kilka innych dopisanych przez autora do shadera, jak schody czy ogrodzenia.

Tak naprawdę, drogi autorze, to było by miło, zobaczyć takie porównanie, na przykład jakości oświetlenia, między tymi dwoma shaderami :)

Bo tak naprawdę, Minecraft to druga gra po Quake II, która w pełni wykorzystuje możliwości Ray Tracingu i to bez słynnych rdzeni RT.

Kilka screenów z PTGI
https://imgur.com/gallery/RFQ9Zzk
https://imgur.com/gallery/VF7zTi0
Edytowane przez autora (2020.04.02, 23:32)
StilgarusZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjiStilgarus2020.04.03, 01:37
Ryszawy @ 2020.04.02 23:14  Post: 1238775
Mam zainstalowaną wersję SEUS PTGI E12 i Optifine, na wygenerowanej mapie, dużo drzew, z teksturami 16x16 (defultowe), 75 klatek na RTX 2070 Super w Full HD przy 12 chunkach. Jak zmienię na paczkę tekstur 1K PBR, 55 klatek w tym samym miejscu.

SSR i jakaś froma AO wykorzystywana jest do liczenia odbić i oświetlenia tych obiektów, które nie są sześcianami , tylko sześcienne bloki w PTGI są liczone z path tracingiem, plus kilka innych dopisanych przez autora do shadera, jak schody czy ogrodzenia.

Tak naprawdę, drogi autorze, to było by miło, zobaczyć takie porównanie, na przykład jakości oświetlenia, między tymi dwoma shaderami :)

Bo tak naprawdę, Minecraft to druga gra po Quake II, która w pełni wykorzystuje możliwości Ray Tracingu i to bez słynnych rdzeni RT.

Kilka screenów z PTGI
https://imgur.com/gallery/RFQ9Zzk
https://imgur.com/gallery/VF7zTi0
Zamierzałem, tę wersję Continuum RT porównać z Minecraftem RTX Nvidii jak się pojawi, niestety nie mam najnowszej wersji SEUS do porównania. Przy kolejnym porównaniu, postaram się zdobyć wersję SEUS i wtedy zrobić kolejne porównanie, najlepiej z Minecraftem RTX :)
BILI82Zobacz profil
Poziom ostrzeżenia: 0%
BILI822020.04.03, 07:50
Szkoda ze to wszystko jest platnymi dodatkami czyli kup karte za kupe kasy a do tego kup pakiety co ludzie robia do rtx.... fuuu trzymam sie od takiego podejscia z dala
Zaloguj się, by móc komentować
1