Jaki jest obecny najnowocześniejszy algorytm dla pól wysokości z ray tracingu?

16

Przez lata pojawiło się wiele artykułów na temat różnych technik rysowania terenu pola wysokościowego za pomocą raytracera. Niektóre algorytmy marszują sieć bezpośrednio (lub za pomocą kwadratu); inni przekształcają teren w siatkę wielokątów i używają standardowego testu przecięcia trójkąt promienisty. Badania wydają się być kontynuowane w ciągu ostatnich kilku lat i ciężko jest znaleźć artykuły napisane w ostatniej dekadzie, ale równowaga między pamięcią a obliczeniami (zarówno CPU, jak i GPU) wciąż się zmienia.

Jaki algorytm zapewnia obecnie najlepszą wydajność na wysokiej klasy komputerach stacjonarnych? Lub jeśli nie ma jednej odpowiedzi, czym różnią się charakterystyki wydajności obecnych najlepszych algorytmów?

Dan Hulme
źródło
Odbicia w przestrzeni ekranu: utwórz pole wysokości za pomocą bufora głębokości i ramki, prześledź je, aby uzyskać surowe odbicia. Nie znam szczegółów, ale wyobrażam sobie, że Crysis, Killzone, ostatnio Frostbite itp. Zastosują jakąś wyrafinowaną technikę, aby szybko to osiągnąć. Patrzyłeś na to?
David Kuri,
1
@DavidKuri Dzięki, to dobry wskaźnik, jak szybko uzyskać rdzeń marszowy. Powinna być możliwa optymalizacja dla bardziej statycznego pola wysokości, które nie działa tak dobrze na śledzenie miejsca na ekranie, takiego jak wstępne obliczenia mipmap lub min-max czteroosobowy, więc wciąż mam nadzieję na odpowiedź to obejmuje to.
Dan Hulme
Hej, Dan BTW, szukasz rozwiązań dla CPU lub GPU? A renderowanie w czasie rzeczywistym czy nie?
Alan Wolfe,
@AlanWolfe Używam GPU i nie w czasie rzeczywistym (tj. Maksymalna przepustowość, a nie najlepsza jakość obrazu, jaką możesz zarządzać w 16 ms), ale nadal będę głosować ciekawe odpowiedzi, które są szybkie na procesorze lub przede wszystkim dla rendererów interaktywnych.
Dan Hulme
Możesz spróbować utworzyć podpisane pole odległości z mapy wysokości. To w zasadzie tekstura 3D, która przechowuje odległość do następnej powierzchni. Umożliwia to „szybsze podróżowanie promieniem”. Unreal Engine 4 wykorzystuje to do okluzji otoczenia w średnim zakresie, miękkich cieni i cieni w terenie
user1888,

Odpowiedzi:

12

Aby zapoznać się z najnowszym stanem techniki, spójrz na ten artykuł: „Maximum Mipmaps for Fast, Accurate and Scalable Dynamic Height Rendering”, Tevs i in. 2008

Podstawową ideą jest pominięcie dużej ilości miejsca poprzez znajomość maksymalnej wartości na dużych obszarach terenu. Jeśli promień pozostaje powyżej tego, przejdź do następnego dużego obszaru.

Jeśli spojrzysz na rysunek 8, zobaczysz porównanie podstawowych kroków liniowych z maksymalnymi mipmapami. Stopień liniowy daje 200 kroków, które można wykonać w czasie rzeczywistym na nowoczesnym gpus, ale nadal jest on powolny. Max mipmapy robią to samo w około 10 krokach, wszystkie w shaderze.

Rama
źródło
Przyjmuję tę odpowiedź, ponieważ sam artykuł jest dobry, a jego sekcja „Powiązana praca” wydaje się dość obszerna. Nawet jeśli nie użyję tej techniki dokładnie, jestem pewien, że będę w stanie dostosować coś do mojego przypadku użycia na podstawie tego i jego odniesień.
Dan Hulme
Czy znalazłeś jakieś dema z mipmapami Maximum? Dzięki.
raRaRa
Nie czytałem gazety, ale ta „maksymalna mipmapa” brzmi bardzo podobnie do techniki stosowanej do mapowania kroku stożka (która poprawia w stosunku do mapowania okluzji paralaksy poprzez pomijanie dużych obszarów dzięki stożkom).
Julien Guertault
@JulienGuertault Powiedziałbym, że to proste śledzenie HiZ. jest to bezpieczna metoda, aby mieć pewność, że trafisz. Ale niezbyt szybko w porównaniu z niebezpiecznymi metodami, takimi jak wyszukiwanie binarne.
v.oddou
4

Najlepsze, co osobiście widziałem, to rzeczy, które robi Inigo Quillez, które są używane w materiałach demonstracyjnych. Ray Maszeruj po terenie, robiąc większe kroki, im dalej od aparatu dostaniesz się, ponieważ (zwykle) szczegóły mają mniejsze znaczenie na odległość (wyjątek = cienkie ściany!) Używa informacji o penetracji i innych łatwo dostępnych danych do symulacji okluzji otoczenia i innych zaawansowanych technik oświetleniowych.

Oto prezentacja rzeczy w akcji: https://www.youtube.com/watch?v=_YWMGuh15nE

A tutaj jest strona IQ na temat raymarchingu terenu, który jest dość interesującym lekturą: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

BTW, we współczesnych grach technika „odbicia przestrzeni ekranu” często jest tylko marszem promiennym na bufor Z renderowanej sceny. Bufor Z jest tak naprawdę tylko polem wysokości.

Widziałem kilka rozmów na ten temat na siggraph 2014 i chociaż niektórzy ludzie używali podobnych technik jak IQ, niektórzy robili rzeczy nawet nie tak dobrze jak IQ, co było interesujące: P

Alan Wolfe
źródło
1
Algorytm w twoim linku jest bardzo prosty. Wygląda na mniej wyrafinowane niż niektóre dokumenty, które znalazłem w latach dziewięćdziesiątych. Wygląda to na dobry punkt wyjścia, ale mam nadzieję na rozwiązanie o najwyższej wydajności dla systemu produkcyjnego, a nie tylko „mój pierwszy raytracer”.
Dan Hulme
Te rzeczy są używane w kodzie demonstracyjnym i odbiciach przestrzeni ekranu w najbardziej zaawansowanych nowoczesnych grach. Najszybszy kod jest czasem najprostszy. Nie odrzuciłbym tego ze względu na jego prostotę. Ciekawe będzie, czy dostaniesz jakieś inne odpowiedzi.
Alan Wolfe
2
W twojej odpowiedzi brakuje tego, że IQ używa standardowej siatki pól wysokości jako wstępnej domysły, aby rozpocząć porządkowanie rzeczywistego terenu. Najpierw renderuje wersję terenu o niskiej rozdzielczości za pomocą standardowej rasteryzacji, a następnie uruchamia moduł cieniujący piksele nad obrazem, który rozpoczyna rymarchizację na zrasteryzowanej głębokości minus pewien konserwatywny próg. Jest to jedyny sposób, aby rzeczywiście zrobić to w czasie rzeczywistym.
Benedikt Bitterli
Uważam, że tylko część tego, co mówisz, jest prawdą. używa heurystyki opartej na wysokości terenu (wraz z odległością od kamery), aby ustalić, jak daleko promień może przemaszerować, ale o ile słyszałem, nie stosuje rasteryzacji. Oto przykład jego pracy, która nie korzysta z rasteryzacji, ale to nie znaczy, że nie ma implementacji korzystających z rasteryzacji: shadertoy.com/view/MdX3Rr
Alan Wolfe,
Jestem trochę zdezorientowany, że pytanie dotyczy ray tracingu, a ta odpowiedź dotyczy marszu ray. Istnieje zasadnicza różnica między nimi a tym, co mogą osiągnąć.
Julien Guertault,