2016-06-25 30 views
14

Po wykonaniu pewnych badań dotyczących rasteryzacji i ray tracing. Odkryłem, że nie ma zbyt wielu informacji na temat działania procesorów w śledzeniu ray-tracingu dostępnym w Internecie. Natknąłem się na artykuł o Pixarze i o tym, jak renderowali Cars 2 na CPU. Zajęło to 11,5 godziny na klatkę. Czy GPU nie renderowałoby tego szybciej z tą samą jakością obrazu? 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/ Cheers, SamDlaczego używamy procesorów do śledzenia promieni zamiast układów GPU?

+0

może nie dbają o prędkość na tym etapie. – kangshiyin

+2

proszę podać linki do artykułów, do których odnosisz się, zadając to pytanie, poprzez edycję OP. – MWiesner

+0

https://en.wikipedia.org/wiki/Ray-tracing_hardware i każdy artykuł na temat raytracing vs rasteryzacji wyjaśni dlaczego. – pvg

Odpowiedz

37

Jestem jednym z architektów oprogramowania renderowania w dużej VFX i animowane studio funkcja z własnego renderera (nie Pixar, choć niegdyś architekt oprogramowania renderowania tam dobrze, dawno, dawno temu).

Prawie wszystkie wysokiej jakości renderowanie filmów (we wszystkich dużych studiach, ze wszystkimi większymi renderers) jest tylko procesorem. Istnieje wiele powodów, dla których tak się dzieje. W przypadkowej kolejności, niektóre z nich naprawdę przekonujące, aby dać Ci smak zagadnień: Tylko

  • GPU go szybko, kiedy wszystko jest w pamięci. Największe karty GPU mają, co najmniej 12 GB, i muszą posiadać wszystko, co. Cóż, rutynowo renderujemy sceny z 30 GB geometrii, a te odnoszą się do 1TB lub więcej tekstury. Nie można załadować tego do pamięci GPU, jest to dosłownie o 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 przeciętnymi) scenami. (W przypadku procesorów renderujących procesory, możemy w każdej chwili wymieniać elementy z dysku, gdy GPU nie jest dobre.)

  • Nie wierz, że szum, śledzenie promienia za pomocą procesorów graficznych nie jest oczywistym zwycięstwem nad procesorem. Procesory graficzne są świetne w wysoce spójnej pracy (robią to samo z dużą ilością danych jednocześnie). Śledzenie promieni jest bardzo niespójne (każdy promień może iść w innym kierunku, przecinać różne obiekty, odcień różnych materiałów, uzyskiwać dostęp do różnych tekstur), a więc ten wzorzec dostępu bardzo obniża wydajność GPU. Niedawno śledzenie wiązki GPU mogło być zgodne z najlepszym algorytmem ray tracing opartym na procesorze, a mimo że go przekroczyło, to nie za dużo, za mało, by wyrzucić cały stary kod i zacząć od nowa z wadliwym kodem dla GPU . A największe i najdroższe są te, w których procesory graficzne są tylko nieznacznie szybsze. Dużo szybciej na łatwych scenach nie jest dla nas tak ważne.

  • Jeśli masz kod hartowanego w procesie produkcyjnym od 50 lub 100 lat, w swoim rendererze opartym na procesorze, po prostu nie wyrzucaj go i nie zaczynaj od nowa, aby uzyskać dwukrotne przyspieszenie. Wysiłek programistyczny, stabilność itd. Jest ważniejszy i ma większy wpływ na koszty.

  • Podobnie, jeśli Twoje studio ma inwestycję w centrum danych mieszczące 20 000 rdzeni procesora, wszystko to w najmniejszej, najbardziej energooszczędnej i wydajnej obudowie, to także kosztowna inwestycja, której nie rzucasz z dala. Zastąpienie ich nowymi maszynami zawierającymi najlepsze układy GPU znacznie zwiększa koszt farmy renderowania, a są one większe i produkują więcej ciepła, więc dosłownie może nie pasować do twojego budynku.

  • Prawo Amdahla: Rzeczywiste "renderowanie" jako takie jest tylko jednym z etapów generowania scen, a procesory graficzne nie pomagają mu. Załóżmy, że pełne wygenerowanie i wyeksportowanie sceny do mechanizmu renderowania zajmuje 1 godzinę, a do renderowania 9 godzin, a z tego 9 godzin godzina czyta teksturę, woluminy i inne dane z dysku. Tak więc na 10 godzin, w których użytkownik odczuwa renderowanie (przycisk, aż gotowy obraz jest gotowy), 8 godzin jest potencjalnie przyspieszone dzięki układom GPU. Tak więc, nawet jeśli procesor graficzny był 10 razy szybszy niż procesor dla tej części, przechodzimy od 10 godzin do 1 + 1 + 0,8 = prawie 3 godziny. Więc 10x przyspieszenie GPU przekłada się tylko na 3-krotny rzeczywisty zysk. Jeśli procesor GPU był 1,000,000x szybszy niż procesor do śledzenia promieni, wciąż masz 1 + 1 + malutki, który jest tylko 5-krotnym przyspieszeniem.

Co różni się od gier? Dlaczego układy GPU są dobre do gier, ale nie do filmów?

Przede wszystkim, kiedy tworzysz grę, pamiętaj, że musi ona być renderowana w czasie rzeczywistym - oznacza to, że najważniejszym ograniczeniem jest 60 Hz (lub czymkolwiek) liczba klatek na sekundę, a ty poświęcasz jakość lub funkcje tam, gdzie to konieczne, aby osiągnąć to. W przeciwieństwie do filmu, nierozerwalny przymus sprawia, że ​​reżyser i kierownik VFX są zadowoleni z jakości i wyglądu, jaki chce i jak długo to zajmuje (do pewnego stopnia) wtórnego.

Ponadto, w grze renderujesz klatkę po klatce po klatce, na żywo przed każdym użytkownikiem. Ale z filmem skutecznie renderujesz RAZ, a to, co dostarczane jest do kin to plik filmowy - więc kinomaniści nigdy nie będą wiedzieć ani nie dbają o to, czy zajęło Ci to 10 godzin na klatkę, ale zauważą, że nie wygląda dobrze. Z drugiej strony jest mniej kary nałożonej na te renderowania, które trwają długo, o ile wyglądają fantastycznie.

W grze nie wiesz, jakie ramki będą renderowane, ponieważ gracz może wędrować po całym świecie, wyświetlać z dowolnego miejsca. Nie możesz i nie powinieneś starać się, aby wszystko było perfekcyjne, po prostu chcesz, żeby było wystarczająco dobre przez cały czas. Ale w przypadku filmu wszystkie ujęcia są wykonywane ręcznie! Ogromna ilość czasu spędzanego przez człowieka to komponowanie, animowanie, oświetlenie i komponowanie każdego ujęcia, a następnie renderowanie go tylko raz. Pomyśl o ekonomii - po 10 dniach kalendarza (i wynagrodzenia) poszedł w oświetlenie i skomponowanie ujęcia w prawo, przewaga renderowania go w ciągu godziny (lub nawet minuty) w porównaniu z nocą, jest dość mała, a nie warta każda ofiara jakości lub osiągalna złożoność obrazu.

+1

Dziękuję bardzo! Co za zuch. – oodle600

+1

/me kłania się z podziwem: p – Alnitak

+1

Moje dynamiczne śledzenie stylu w czasie rzeczywistym jest znacznie szybsze na GPU niż na CPU https://www.youtube.com/watch?v=GErl-poxmNE. To było na GTX 580, który pojawił się sześć lat temu. –