Dlaczego używamy procesorów ray tracingu zamiast GPU?

Po przeprowadzeniu badań nad rasteryzacją i ray tracingiem. Odkryłem, że nie ma zbyt wielu informacji na temat tego, jak działają Procesory ray-tracing dostępne w Internecie. Natknąłem się na artykuł o Pixarze i tym, jak pre-renderowali Samochody 2 na procesorze. Zajęło im to 11,5 godziny na klatkę. Czy procesor graficzny nie renderowałby tego szybciej z tym samym obrazem jakość? http://gizmodo.com/5813587/12500-cpu-cores-were-required-to-render-cars-2 https://www.engadget.com/2014/10/18/disney-big-hero-6/ http://www.firstshowing.net/2009/michael-bay-presents-transformers-2-facts-and-figures/ Zdrówko, Sam

Author: oodle600, 2016-06-25

1 answers

Jestem jednym z architektów oprogramowania renderującego w dużym studiu VFX i animacji z zastrzeżonym rendererem (nie Pixar, choć kiedyś byłem tam architektem oprogramowania renderującego, Dawno, dawno temu).

Prawie wszystkie wysokiej jakości rendery do filmów (we wszystkich dużych studiach, ze wszystkimi głównymi rendererami) są tylko CPU. Istnieje wiele powodów, dla których tak jest. W żadnej konkretnej kolejności, niektóre z naprawdę przekonujących, aby dać ci smak zagadnienia:

  • Procesory GPU działają szybko tylko wtedy, gdy wszystko jest w pamięci. Największe karty GPU mają jakieś 12GB i muszą pomieścić Wszystko . Cóż, rutynowo renderujemy sceny z 30GB geometrii i tym odniesieniem 1TB lub więcej tekstury. Nie mogę załadować tego do pamięci GPU, to dosłownie dwa rzędy wielkości za duże. Więc GPU po prostu nie są w stanie poradzić sobie z naszymi największymi (lub nawet średnimi) scenami. (Dzięki rendererom CPU możemy przeglądać rzeczy z dysku, Kiedy tylko potrzebujemy. GPU nie są w tym dobrzy.)

  • Nie wierz hype, ray tracing z GPU nie jest oczywiste zwycięstwo nad CPU. GPU są świetne w bardzo spójnej pracy (robi to samo z dużą ilością danych na raz). Ray tracing jest bardzo niespójny (każdy promień może iść w innym kierunku, przecinać różne obiekty, zacieniać różne materiały, uzyskiwać dostęp do różnych tekstur), a więc ten wzór dostępu bardzo poważnie pogarsza wydajność GPU. Dopiero niedawno GPU ray tracing może dorównać najlepszym Kod ray tracingu oparty na procesorze, i mimo, że go przekroczył, nie jest zbyt wiele, nie wystarczy, aby wyrzucić cały stary kod i zacząć od nowa z błędnym delikatnym kodem dla GPU. A największe, Najdroższe sceny to te, w których GPU są tylko nieznacznie szybsze. Bycie o wiele szybszym na łatwych scenach nie jest dla nas naprawdę ważne.

  • Jeśli w rendererze opartym na procesorze masz 50 lub 100 man lat utwardzonego kodu, po prostu go nie wyrzucasz i nie zaczynasz od nowa, aby uzyskaj 2x speedup. Wysiłek w zakresie inżynierii oprogramowania, stabilność itp. są ważniejsze i stanowią większy czynnik kosztowy.

  • Podobnie, jeśli Twoje studio zainwestuje w centrum danych mieszczące 20 000 rdzeni CPU, a wszystko to w najmniejszej, najbardziej energooszczędnej i efektywnej Cieplnie obudowie, której możesz użyć, jest to również inwestycja o niskim koszcie, której nie możesz po prostu wyrzucić. Zastąpienie ich nowymi maszynami z najwyższej klasy procesorami graficznymi znacznie zwiększa koszt farmy renderowania, a także zwiększa wydajność i wydajność więcej ciepła, więc dosłownie może nie pasować do Twojego budynku.

  • Prawo Amdahla: rzeczywiste "renderowanie" jako takie jest tylko jednym etapem generowania scen, a GPU w tym nie pomagają. Załóżmy, że pełne wygenerowanie i wyeksportowanie sceny do renderera zajmuje 1 godzinę, a "renderowanie" zajmuje 9 godzin, a z tych 9 godzin godzinę odczytu tekstur, woluminów i innych danych z dysku. Więc z łącznych 10 godzin, jak użytkownik doświadcza renderowania (naciśnij przycisk, aż ostateczny obraz jest gotowy), 8 godzin jest potencjalnie przyspieszone z GPU. Tak więc, nawet jeśli GPU był 10x tak szybki jak CPU dla tej części, przechodzisz od 10 godzin do 1+1+0.8 = prawie 3 godziny. Tak więc 10-krotne przyspieszenie GPU przekłada się tylko na 3-krotne rzeczywiste wzmocnienie. Jeśli GPU był 1 000 000 x szybszy niż CPU dla ray tracingu, nadal masz 1+1+tiny, co jest tylko 5-krotnym przyspieszeniem.

Ale co się różni w grach? Dlaczego GPU są dobre dla gier, a nie filmów?

Po pierwsze, kiedy tworzysz grę, pamiętaj, że musi ona renderować w w czasie rzeczywistym-oznacza to, że Twoim najważniejszym ograniczeniem jest częstotliwość klatek 60Hz (lub cokolwiek innego), a poświęcasz jakość lub funkcje tam, gdzie jest to konieczne, aby to osiągnąć. W przeciwieństwie do filmu, niezniszczalne ograniczenie sprawia, że reżyser i supervisor VFX są zadowoleni z jakości i wyglądu, jakiego chce, a to, ile czasu zajmuje uzyskanie tego, jest (w pewnym stopniu) drugorzędne.

Ponadto, w grze, renderujesz klatka po klatce za klatką, na żywo przed każdym użytkownikiem. Ale z filmem, ty efektywnie renderuje się raz, a to, co jest dostarczane do kin, to plik filmowy . więc widzowie nigdy nie dowiedzą się i nie przejmą się, czy zajęło ci to 10 godzin na klatkę, ale zauważą, jeśli nie wygląda to dobrze. Więc znowu, jest mniej kary dla tych renderów trwa długo, o ile wyglądają fantastycznie.

W grze nie wiesz, jakie klatki chcesz renderować, ponieważ gracz może wędrować po całym świecie, oglądać z dowolnego miejsca. Nie możesz i nie powinieneś starać się, aby wszystko było idealne, po prostu chcesz, aby było wystarczająco dobre przez cały czas. Ale jak na film, ujęcia są wykonane ręcznie! Ogromna ilość ludzkiego czasu przeznaczana jest na komponowanie, animowanie, oświetlenie i komponowanie każdego ujęcia, a następnie wystarczy renderować go tylko raz. Pomyśl o ekonomii - po 10 dniach kalendarza (i pensji) poszło na oświetlenie i skomponowanie ujęcia w sam raz, zaletą renderowania go w godzinę (a nawet minutę) w porównaniu z nocą, jest dość mały i nie wart poświęcenia jakości lub osiągalnej złożoności obrazu.

 64
Author: Larry Gritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-26 00:25:58