Skip to main content
Jeśli klikniesz link i dokonasz zakupu, możemy otrzymać małą prowizję. Zobacz politykę redakcyjną.

Testujemy ray tracing w Battlefield 5: nowa jakość oprawy w grach?

Przyszłość wygląda obiecująco.

Niedawno zadebiutował Battlefield 5, dzięki któremu w końcu możemy dokładniej przyjrzeć się rewolucji w dziedzinie grafiki - ray tracingowi w czasie rzeczywistym, który jest możliwy dzięki nowej linii GPU od Nvidii, oznaczonej symbolem RTX.

Pod wieloma względami jest to moment przełomowy, związany z fenomenalnym osiągnięciem technologicznym - nie tylko dla kart RTX, które to umożliwiają, ale również dla inżynierów ze studia DICE, którzy poświęcili się temu, by przedstawić ray tracing w całej swojej błyszczącej, odbijającej światło, działającej w czasie rzeczywistym postaci.

Obok rewolucji wizualnej mamy również do czynienia z tym, jak nowości zostały zaimplementowane - jest to dopiero wersja alfa działająca na sprzęcie pierwszej generacji. Ray tracing w czasie rzeczywistym, z perspektywy mocy obliczeniowej, nadal pozostaje ogromnie kosztowną techniką, a wydajności daleko do ideału. Nadchodzą optymalizacje, a po rozmowie z DICE wiemy, jakiego rodzaju strategię przyjmują deweloperzy w celu zwiększenia liczby wyświetlanych klatek na sekundę.

Pod koniec naszej analizy znajdziecie szczegółowy wywiad z inżynierem ds. renderingu w DICE, Yasinem Uludağem, który wraz z Johannesem Deligiannisem pracował nad implementacją ray tracingu w Battlefield 5. Najpierw jednak warto przyjrzeć się materiałom wideo poniżej, by zapoznać się z oprawą gry oraz działaniem i efektami ray tracingu na przestrzeni czterech presetów ustawień: niskich, średnich, wysokich oraz ultra. Obecnie DICE zaleca grę z DXR ustawionym na poziom niski, jednak nawet wtedy efekt wygląda świetnie.

Ustawienia średnie to punkt, w którym najbardziej uwidaczniają się kompromisy dotyczące jakości ray tracingu. Szorstkość materiałów odbijających światło zgodnie z technologią zostaje zwiększona, czego skutkiem są bardziej matowe materiały, a malowane metale oraz powierzchnie drewniane otrzymują odbicia oparte na mapach sześciennych zamiast odbić ray tracingowych. Ogólnie rzecz biorąc, wysoka jakość grafiki nadal zostaje utrzymana, jednak widok broni, która traci kolory i tony pochodzące z odbić najbliższego otoczenia, jest trochę smutny.

DXR Ultra
DXR High
DXR Medium
DXR Low
DXR Off/Ultra
DXR znacząco zmienia chropowatość powierzchni i rozdzielczość odbić, jednak nawet najniższe ustawienia są w stanie przebić ustawiony na ultra standardowy system SSR (Screen-Space Reflections).
DXR Ultra
DXR High
DXR Medium
DXR Low
Poprawki DXR w aspekcie chropowatości potrafią mieć również wpływ na to, czy niektóre materiały w ogóle będą wyświetlane, jak w przypadku pokazanych tu metalowych okienek.
DXR Ultra
DXR High
DXR Medium
DXR Low
Obecnie zasięg działania DXR jest taki sam na każdym poziomie ustawień, podczas gdy maksymalna rozdzielczość odbić zmniejsza się wraz z każdym niższym presetem.
Xbox One X
DXR Off/Ultra
DXR Ultra
Xbox One X w ogóle nie używa SSR, więc porównanie tej wersji z wersją na PC działającej bez RTX jest już ciężkim wyzwaniem. Zauważ, jak wiele niepoprawnych, jasnych odbić zostało poprawionych dzięki SSR. RTX naprawia jeszcze więcej takich błędów.
Xbox One X
DXR Ultra
Ray tracing poprawnie zaciemnia odbicia. Efekt ten ma ogromny wpływ na ogólną jakość obrazu w porównaniu do wersji na Xbox One X.
DXR Ultra
DXR Low
W scenach gdzie przeważają materiały rozpraszające światło, ustawienia jakości DXR mają mały wpływ na jakość obrazu, ale za to ogromny na wydajność gry.
Xbox One X
DXR Off/Ultra
DXR Ultra
Okluzja odbić z SSR na ultra powoduje lepsze rozmieszczenie refleksji, w porównaniu do tych z wersji na Xbox One X. DXR na Ultra dodatkowo poprawia ten efekt.
DXR Low
DXR Off/Ultra
Jakość DXR zależy od sceny oraz konkretnych ustawień. W tej scenie DXR na niskich oferuje 35 FPS w rozdzielczości 4K, podczas gdzie standardowe Ultra (bez DXR) utrzymuje tutaj wartość 75 klatek na sekundę.
DXR Ultra
DXR High
DXR Medium
DXR Low
Wyższe ustawienia DXR zmniejszają chropowatość powierzchni, co z kolei dodaje efekt odbić ray tracingowych nawet na bardziej matowych powierzchniach.

Kolejny cios pochodzi ze strony rozdzielczości refleksji. Battlefield 5 wypuszcza zmienną ilość promieni światła, które zliczane są na podstawie technik binningu i cullingu, natomiast sam ekran zostaje podzielony na „kafelki” o wielkości 16x16 piksela. Jeżeli środowisko wymaga mniejszej ilości promieni, zmniejsza się również rozmiar „kafelka”, ale z drugiej strony, jeśli cały ekran jest wypełniony wodą odbijającą obraz, algorytm nakłada proporcjonalny do rozdzielczości limit.

Ustawienia ultra to 40 procent rozdzielczości, wysokie 31,6 procenta, średnie to 23,3 procenta, a niskie to 15,5 procenta. Tak więc, klarowność odbić zmniejsza się wraz z przejściem na każde niższe ustawienia, ale należy ponownie podkreślić, że nawet niskie ustawienia gwarantują odpowiednie poczucie ray tracingu - najważniejsze powierzchnie, takie jak woda, lustra i polerowane metale, reagują na otaczające je środowiska bez zarzutu.

Dostępne obecnie testy wydajności DXR w Battlefield 5 oferują raczej rozczarowujące wyniki - jednak niedługo ma pojawić się poprawiony kod, który powinien poprawić szereg problemów. Zwłaszcza z uciążliwymi spadkami wydajności. Przykładowo - na razie wszystkie poziomy DXR borykają się z błędem ramki ograniczającej (bounding box), który powoduje, że ray tracing jest jeszcze bardziej obciążający dla sprzętu.

Niektóre „fałszywe” promienie god ray, a nawet pewien rodzaj listowia, również mogą negatywnie wpływać na wydajność gry, wysyłając o wiele więcej promieni, niż jest to w rzeczywistości potrzebne. Ciężko powiedzieć ile wydajności musimy poświęcić uruchamiając DXR, ponieważ obciążenie obliczeniowe zmienia się wraz z zawartością na ekranie - nie istnieje tu jednolita odpowiedź.

Przy użyciu RTX 2080 Ti oraz przy ray tracingu ustawionym na poziom niski, poziomy bazujące głównie na piasku lub śniegu mogą działać w 60 klatkach na sekundę przy rozdzielczości 1620p, podczas gdy mapy bogatsze w odbicia, takie jak Rotterdam, aby działać w 60 klatkach na sekundę, muszą być uruchomione w rozdzielczości 1296p lub niższej. Aby dokonać niezbędnych zmian na wyświetlaczu 4K, użyliśmy wewnętrznego skalera rozdzielczości dostępnego w grze.

Oczywiście poprawa jakości obrazu będzie zależeć od wyświetlanej treści. Jeśli dominuje kurz i kamienie, to przy niskich i średnich ustawieniach ray tracingu efekty będą widocznie jedynie na najbardziej odbijających światło metalach, powierzchni szkła, lub na pojawiających się od czasu do czasu przydrożnych kałużach. Ray tracing przedstawia nam znaczącą różnicę dopiero na wyższych zestawach ustawień, gdzie subtelnie pojawia się nawet na najbardziej matowych materiałach. Mapy takie jak Rotterdam potrafią przedstawić wtedy znaczące różnice - ale ponownie trzeba zaznaczyć, że jest to uzależnione od konkretnej sceny. Jednym z moich ulubionych małych drobiazgów, które są możliwe dzięki ray tracingowi, jest odbicie twarzy postaci w soczewce lunety.

Analiza wideo Battlefield 5 w wersji na PC. Analizujemy kluczowe funkcje wizualne, omawiamy funkcje RTX i porównujemy wersje konsolowe.Zobacz na YouTube

W obecnej sytuacji programiści z DICE nadal uważają, że jest to bardzo wczesny etap rozwoju techniki DXR. Konieczne jest wprowadzenie dalszych optymalizacji, zarówno w zbliżającej się łatce, jak i w bardziej odległej przyszłości, wraz z rozwojem gry nową zawartością. Oczekuje się nawet aktualizacji sterowników Nvidii, które powinny przynieść dodatkowe zwiększenie liczby wyświetlanych klatek na sekundę, poprzez wprowadzenie funkcji równoległego wykonywania obliczeń dla ray tracingu.

Można się również spodziewać większej liczby ustawień DXR, być może z większym naciskiem na zasięg działania efektu czy elementów LOD. Dalsze plany poprawy jakości i wydajności efektu obejmują nawet hybrydowy system renderingu, który będzie wykorzystywać tradycyjne odbicia w przestrzeni ekranu (screen-space reflections) tam, gdzie technika jest dokładna, z użyciem ray tracingu tylko tam, gdzie tradycyjna metoda zawodzi (SSR może wytwarzać odbicia jedynie tych elementów, które są obecnie renderowane na ekranie, a ray tracing odzwierciedla dokładnie wszystkie elementy otoczenia).

Interesujące jest również porównanie różnych wersji gry Battlefield 5 - w szczególności PC w ustawieniach ultra (z włączonym DXR) oraz najlepszej naszym zdaniem wersji konsolowej na Xbox One X. Nie można zaprzeczyć, że wersje na PC mają dużą przewagę nad konsolowymi.

Wydanie na mocniejszy model Xbox One dostarcza w zasadzie doświadczenie równoważne z wersją na PC na średnich ustawieniach, z niektórymi ustawieniami bliższymi do wysokich. W wersji na X nie doświadczymy żadnych odbić w przestrzeni ekranu, więc w tym aspekcie wersja na PC ma już znaczącą przewagę, i to zanim do równania dołączymy DXR. Mimo wszystko gra na konsolach nadal wygląda dobrze, a średnie ustawienia to dobre miejsce aby rozpocząć zabawę, jeżeli posiadasz skromniejszy sprzęt komputerowy.

Ostatecznie jednak to ray tracing jest najważniejszy. Pod wieloma względami debiut tego systemu można porównać do rewolucji renderingu sprzed lat - jak pojawienie się Crysisa czy debiut Quake'a w 1996 roku. To właśnie w tych porównaniach znajdziemy pewne podobieństwa, które pasują jak ulał do tego co widzimy teraz, podczas pierwszej implementacji ray tracingu - najważniejsze jest to, że prawdziwy, pokoleniowy skok w wierności wizualnej zawsze odbywa się kosztem liczby wyświetlanych klatek.

Aby móc wygodnie zagrać w Quake'a i sprostać jego ogromnym wymaganiom sprzętowym, musieliśmy wymieniać procesory, a Crysis miał problemy z utrzymaniem stabilnej liczby 30 klatek na sekundę w rozdzielczości 1024x768 czy 1280x1024 nawet na najmocniejszych ówcześnie procesorach graficznych. Odpowiedź na pytanie w jakim zakresie DICE będzie w stanie poprawić wydajność RTX poznamy w przyszłości, ale minimalna rozdzielczość 1296p na RTX 2080 Ti, która umożliwia grę w 60 klatkach na sekundę jest wyraźną poprawą w stosunku do tego, co widzieliśmy na Gamescomie - a sam deweloper jest dużym optymistą w stosunku do dalszych ulepszeń. Niektóre zostały już ukończone i są gotowe do wdrożenia wraz z następną aktualizacją. Wniosek jest jeden - to początek czegoś naprawdę wyjątkowego.

Wrażenia z Battlefield 5 w wersjach na Xbox One oraz Xbox One X.Zobacz na YouTube

Battlefield 5 DXR Ray Tracing: wywiad technologiczny z DICE

Teraz coś dla prawdziwych zapaleńców. Wraz z pojawieniem się DXR i naszym pierwszym spojrzeniem na grę wideo zawierającą akcelerowany sprzętowo ray tracing w czasie rzeczywistym, przenosimy się na niezbadane wody, omawiając technologie i techniki, których nigdy wcześniej nie widziano w grze komercyjnej.

Już wcześniej temat ten wzbudzał duże zainteresowanie - od czasu wczesnych prac z ray tracingiem, po premierę łatki wprowadzającej DXR do Battlefield 5 i towarzyszącej jej krytyce za spadki wydajności. Chcieliśmy zrozumieć wyzwania, przed którymi stoją programiści, a także to, jak naprawdę działa implementacja ray tracingu oraz przedstawić zza kulis system prac mający na celu poprawę wydajności. Wszystko to zaczyna się od zrozumienia dostępnych presetów ustawień DXR oraz zastosowanych kompromisów.

Digital Foundry: Jakie są rzeczywiste różnice pomiędzy ustawieniami niskimi, średnimi, wysokimi i ultra opcji DXR?

Yasin Uludağ: Obecnie te różnice to:

  • Niskie: ograniczenie gładkości materiału ma współczynnik 0,9, a maksymalna ilość odbitych promieni jest równa maksymalnie 15% rozdzielczości ekranu.
  • Średnie: ograniczenie gładkości materiału ma współczynnik 0,9, a maksymalna ilość odbitych promieni jest równa maksymalnie 23,3% rozdzielczości ekranu.
  • Wysokie: ograniczenie gładkości materiału ma współczynnik 0,5, a maksymalna ilość odbitych promieni jest równa maksymalnie 31,6% rozdzielczości ekranu.
  • Ultra: ograniczenie gładkości materiału ma współczynnik 0,5, a maksymalna ilość odbitych promieni jest równa maksymalnie 40% rozdzielczości ekranu.

Informacja: ustawienia ograniczające dotyczą materiałów i są przypisane do odbić promieni światła w technologii ray tracingu. Materiały są szorstkie (drewno, kamienie) lub gładkie (metal, szkło). W zależności od tego jak są gładkie i błyszczące (lub odwrotnie, jak bardzo są szorstkie), są w stanie odbierać odbicia ray tracingowe. Punkt, w którym odbicia na powierzchni przechodzą z tradycyjnych odbić w przestrzeni ekranu na odbicie kierowane przez ray tracing, jest podyktowany przez wybrane ustawienia progowe.

Ograniczenie gładkości ustawione na 0,9 jest konserwatywne i obejmuje polerowane metale, szkło oraz wodę. Wartość 0,5 obejmuje również powierzchnie, które obserwowane pod konkretnym kątem są lekko błyszczące. „Procent rozdzielczości jako maksymalna liczba odbitych promieni” opisuje maksymalny, całkowity procent, który może zostać przypisany do promienia technologii ray trace w stosunku 1:1 (jeden promień na piksel). Całkowita ilość możliwych promieni idzie w górę kolejno z wyższymi ustawieniami powodując pozornie większą klarowność odbitego obrazu.

Mówię tu o maksymalnej liczbie promieni, ponieważ próbujemy rozprowadzać je ze stałej puli promieni odbijających (w oparciu o ich właściwości odbijających światło), ale w naszej implementacji nigdy nie możemy przekroczyć liczby jednego promienia na piksel. Tak więc, jeśli tylko mały procent ekranu jest w stanie odbić obraz, dajemy wszystkim tym pikselom jeden promień.

Rozprowadzamy promienie tam, gdzie uważamy, że są one niezbędne. Porzucamy te, które nie mogły zmieścić się w ustawionych ograniczeniach. Nigdy też nie przekroczymy maksymalnej liczby promieni, nawet jeśli cały ekran pokryje się odbijającą światło wodą - zamiast tego, ekran dzieli się na mniejsze obszary o rozmiarach 16x16 piksela i zredukowana zostaje rozdzielczość odbicia. Aby było to możliwe, konieczne jest zintegrowanie pełnoekranowego bufora przy użyciu szybkiej pamięci mikroukładu i instrukcji atomowych dla pozostałych części, ponieważ zapewnia to niską zawodność i jest bardzo szybkie.

Są jednak prowadzone wewnętrzne dyskusje na temat potencjalnych zmian dotyczących wszystkich poszczególnych ustawień; moglibyśmy zrobić coś więcej. Pobawić się z elementami LOD i dystansami działania techniki cull, a także być może ustawieniami hybrydowej techniki odbijania obrazów, która nadejdzie w przyszłości. Bardzo dużo myślimy o zmianach i staramy się przy tym myśleć również o osiągnięciu jak najlepszej jakości.

W poprzedniej rozmowie z nami poruszyłeś temat poprawek mających nadejść po targach Gamescom - które znalazły się w obecnej wersji gry?

Yasin Uludağ: Wersja premierowa ma wbudowaną optymalizację binningu, która reorganizuje promienie na „super płytkach” (które są po prostu dużymi płytami 2D na ekranie). Każda z „super płytek” zmienia kolejność promieni w zależności od ich kierunku (binning kątowy).

To bardzo dobre rozwiązanie zarówno dla pamięci podręcznej tekstur oraz instrukcji, ponieważ podobne promienie często trafiają na podobne trójkąty i produkują te same shadery. Poza tym jest to również świetne rozwiązanie dla sprzętu (rdzenia RT), ponieważ promienie podczas szukania najbliższego przecięcia z BHV przyjmują spójne ścieżki.

Inną ciekawą aktualizacją, którą wprowadziliśmy, jest radzenie sobie z wydajnością oświetlenia. Istnieją sposoby na wykorzystanie wbudowanych struktur akceleracji DXR, w których można stworzyć kwerendy w strukturze przyspieszenia DXR za pomocą shader-ów ray-gen , ale woleliśmy wdrożyć te ulepszenia poprzez obliczenia ze względu na czas i idące za tym zwiększenie wydajności.

Połączyliśmy listę świateł i map sześciennych w strukturze GPU, która przypomina siatkę - tak więc istnieje osobna siatka dla świateł nierzucających cienia, świateł które cień rzucają, map sześciennych itp. Chodzi tu o mapy sześcienne, które są zastosowane w odbiciach. Siatka jest również wyrównana względem kamery - jest to szybszy sposób, ponieważ chwyta on najbliższe światło w mgnieniu oka. Bez tego, oświetlenie byłoby powolne, ponieważ musiałoby najpierw „przejść” po wszystkich światłach, aby zagwarantować poprawne wyświetlanie.

Używamy wewnętrznych rozwiązań Nvidii w niemal każdym shaderze obliczeniowym, który ma jakikolwiek związek z technologią ray tracingu. Bez tych rozwiązań nasze shadery działałyby wolniej. Kolejna optymalizacja jest częściowo wystawiona na działanie użytkownika ze względu na wspomniane wcześniej ustawienia jakości. Nazywamy tę optymalizację „ray tracingiem o zmiennym taktowaniu”. Jak wspomniałem wcześniej, ilość promieni jest zależna od płytek wielkości 16x16 piksela, które powinny znajdować się w tym regionie. Może to być zarówno 256 promieni jak i cztery promienie.

Decydującym czynnikiem jest tu współczynnik odbicia BRDF - jak bardzo jest rozproszony, jak bardzo lustrzany, czy powierzchnia znajduje się w cieniu czy w słońcu, jaka jest gładkość odbicia. Zasadniczo staramy się mądrze wytypować miejsce, w którym umieścimy promienie shaderów obliczających oraz ile powinno ich być w danym miejscu. Obecnie pracujemy również nad dalszymi poprawkami tego aspektu. Nie należy jednak tego mylić z cieniowaniem o zmiennym taktowaniu (ang. „variable rate shading”), które ogłosiła niedawno Nvdia.

Zobacz na YouTube

Jakie są dalsze plany dotyczące optymalizacji?

Yasin Uludağ: Jedną z optymalizacji, która jest już wbudowana w BVH jest użycie „nakładających się” obliczeń - czyli wiele shaderów obliczających działających równolegle. Nie należy tego jednak mylić z obliczaniem asynchronicznym czy obliczaniem jednoczesnym.

Możesz uruchomić wiele shaderów obliczeniowych równolegle, ale istnieje bariera wprowadzona przez sterownik, która zapobiega równoległemu działaniu shaderów. Problem ten spowodował, że nie mogliśmy użyć tej optymalizacji w obecnej wersji gry. Ma to jednak zostać naprawione w niedalekiej przyszłości, więc możemy się tu spodziewać dużego skoku wydajności, ponieważ zostaną wyeliminowane punkty synchronizacji oraz momenty bezczynności GPU.

Planujemy również, by budowanie BVH używało jednoczesnego obliczania podczas fazy generowania G-bufora (ang. „G-Buffer”), które umożliwi start ray tracingu znacznie wcześniej w klatce oraz przejście G-bufora. Ślady Ntrace pokazują, że może to się okazać wielce korzystne. Zostanie to przez nas wprowadzone w przyszłości.

Do obecnej wersji gry niemal trafiła inna poprawka - hybrydowy system ray trace/ray march. Tworzy mip-mapę na całej głębokości bufora za pomocą filtra MIN. Oznacza to, że każdy poziom osiąga najbliższą głębokość w regionach 2x2 oraz powtarza to, aż do osiągnięcia najniższej mip-mapy. Ponieważ używa tak zwanego filtra MIN, wiesz, że możesz podczas przechodzenia pominąć cały region na ekranie.

Dzięki temu promień zostaje poddany binningowi i ogromnie przyspiesza hybrydowe przejście promienia, ponieważ promienie są pobieranie z tych samych pikseli, co mip-mapa, co z kolei ma bardzo dobry wpływ na wykorzystanie pamięci podręcznej. Jeżeli twój promień utknie za jakimś przedmiotem, jak przy klasycznych odbiciach w przestrzeni ekranu, system konwertuje promień na promień należący do otoczenia świata, dzięki czemu może kontynuować działanie po awarii. Efektem jest również pewna korzyść jakościowa, ponieważ pomniejsze szczegóły i źdźbła trawy są obecne w odbiciach.

Zoptymalizowaliśmy również funkcję denoisera, dzięki czemu działa on szybciej. Pracujemy również nad optymalizacją naszych przejść obliczeniowych i filtrów, które działają w ramach implementacji ray tracingu.

Z jakimi ograniczeniami (wąskimi gardłami) macie obecnie do czynienia w tej implementacji ray tracingu?

Yasin Uludağ: Na razie znaleźliśmy kilka błędów, które skutecznie uniemożliwiają efektywne wykorzystanie sprzętu, jak na przykład błąd z szaleńczo rozszerzającymi się ramkami ograniczającymi (ang. „bounding box”), który powstaje przez pewną funkcję zaimplementowaną dla rasteryzatora, a która niezbyt dobrze współpracuje z ray tracingiem. Zauważyliśmy to kiedy już było za późno.

Zasadniczo, gdy obiekt ma funkcję włączania i wyłączania pewnych części, wyłączone części zostają obcinane przez nasz system usuwania shaderów obliczeniowych, który został stworzony na potrzeby ray tracingu, w dokładnie taki sam sposób w jaki robiłby to shader wierzchołków (ang. „Vertex Shader”) dla rasteryzatora.

(Pamiętaj, że używamy wykresów dla shaderów i automatycznie przekształcamy każdy pojedynczy shader wierzchołka na shader obliczeniowy, tak samo jak każdy shader piksela przekształcany jest na hit shader, czyli na shader, który jest uruchamiany jeżeli promień światła natrafia na przezroczystą powierzchnię. Jeżeli shader piksela posiada testowanie alfa, możemy również wykonać hit shader, który może wywołać instrukcję IgnoreHit() zamiast instrukcji clip(), którą na pewno wywołałby test alfa). Ten sam problem występuje także w przypadku obiektów, które można zniszczyć, ponieważ elementy te również używają systemu zapadania się wierzchołków.

Zgodnie ze specyfikacjami API, jeśli wierzchołki zapadną się nie na (0, 0, 0), ale na (NaN, NaN, NaN), trójkąt ten zostanie ominięty, ponieważ „nie jest to liczbą”. I właśnie tutaj popełniliśmy błąd, który kosztował nas wiele nerwów. Na szczęście usterka ta została już wyeliminowana, więc możemy spodziewać się bardzo znacznej poprawy wydajności na każdym poziomie.

Kolejny problemem w kodzie startowym jest związany z testowaniem alfa geometrii, takiej jak roślinność. Jeśli wyłączysz każdy przetestowany obiekt, ray tracing gwałtownie przyspiesza, ponieważ ma do czynienia tylko z nieprzezroczystymi powierzchniami. „Nieprzezroczysty ray tracing” działa szybko również dlatego, że binningujemy promienie, ponieważ promienie rozbieżne wciąż mogą być kosztowne sprzętowo. Obecnie szukamy sposobów na optymalizację każdego hit shadera, aby dodatkowo zwiększyć prędkość tego procesu.

Zetknęliśmy się również z błędem, który powodował powstawanie promieni wychodzących z liści i drzew. Wiązało się to z wyżej wymienionym problemem z nadmiernym rozciąganiem się ramek ograniczających, w których promienie próbowały uciec poza ograniczony obszar, w międzyczasie wykonując samodzielne sprawdzenie punktów przecięć z drzewami i liśćmi. Powodowało to duży spadek wydajności. Naprawa tego problemu przyczyniła się do znacznego wzrostu wyświetlanych klatek.

Staramy się również zmniejszyć poziomy LOD dla geometrii użytej w testach alfa, a także chcemy ograniczyć wykorzystanie pamięci przez funkcję shaderów alfa, czyli pobieranie atrybutów wierzchołków (używając do obliczeń naszego assemblera). Podsumowując, jest jeszcze zbyt wcześnie, aby zdecydowanie powiedzieć, w którym dokładnie miejscu występuje „wąskie gardło” na GPU, jako całości. Najpierw musimy naprawić wszystkie błędy i znane nam problemy. Gdy już złożymy wszystkie elementy optymalizacji razem, wtedy będziemy mogli zacząć szukać „wąskich gardeł” na samym GPU i zacząć o nich mówić.

Jak docieracie do źródeł problemów z wydajnością?

Yasin Uludağ: Początkowo nasze testy oprogramowania i testy wydajności sprawiały kłopoty ze względu na opóźnienie aktualizacji RS5 dla Windows. Jednak otrzymaliśmy od Nvidii specjalny shader, który pozwolił nam na zaaplikowanie licznika, który śledził cykle każdego piksela spędzone wewnątrz TraceRay. Pozwoliło to zawęzić miejsca z których pochodziły spadki wydajności, dzięki czemu mogliśmy zmienić od razu główny tryb promieni, zamiast promieni odbicia, w celu sprawdzenia, które obiekty są „jasne”. Zmapowaliśmy wysokie wyniki licznika cykli jako jasne i niskie wyniki licznika cykli jako ciemne, a następnie wprowadziliśmy poprawki dla poszczególnych geometrii. Wtedy drzewa i roślinność wyskoczyły w naszych wynikach jako super-jasne.

Posiadanie tych metryk domyślnie w D3D12 byłoby wielką zaletą. Chcielibyśmy również zobaczyć inne dane i metryki na temat tego, jak „dobry” był REFIT „BVH” - czy BVH uległo pogorszeniu po wielokrotnych odnowieniach (ang. „refit”) i czy musimy je odbudować. Wierzcie mi, biegające dookoła postacie potrafią bardzo szybko się zepsuć.

Gracją w grę, patrząc na jej złożoność i efekty wizualne nie możemy powstrzymać się od wspomnienia innych przełomowych momentów, takich jak premiera Crysisa, Quake'a, czy wprowadzenie shadera pikseli. Trzeba było czasu, aby nowe technologie stały się bardziej wydajne. Czy DXR/RTX podąża podobną ścieżką?

Yasin Uludağ: Zdecydowanie! W miarę upływu czasu będziemy ulepszać nasz ray tracing, ponieważ zarówno my, jak i Nvidia, mamy w zanadrzu garść optymalizacji zarówno ze strony silnika, jak i sterownika, więc jesteśmy jeszcze bardzo daleko od zakończenia prac.

Specjaliści Nvidii i DICE pracują nad wspomnianymi problemami nawet w tej chwili. Od teraz będzie tylko lepiej, bo od czasu wydania gry otrzymaliśmy o wiele więcej danych. Do momentu w którym ludzie będą czytać ten wywiad, wiele ze wspomnianych ulepszeń będzie już zaimplementowanych i ukończonych. Jak to miało miejsce we wspomnianych przez Crysis i Quake - praca nad ray tracingiem i pierwszą grą z używającą tej technologii to prawdziwy zaszczyt.

Bycie częścią tak przełomowego wydarzenia w branży to cudowne uczucie i zrobimy wszystko co możemy, aby zapewnić wam jak najlepsze wrażenia. Nie martwcie się, nasza pasja do ray tracingu jest piekielnie gorąca!

Read this next