Cycles Render Engine, czyli GPU Rendering w Blenderze

Autorzy: Rafał Cypcer


Blender, GPU, Rendering, Cycles


W grudniu 2011 roku Blender Foundation upubliczniło wersję 2.61 Blendera, którego głównym celem było wprowadzenie nowego silnika renderującego – Cycles. Wydarzenie to wzbudziło entuzjazm wśród środowiska grafików, ponieważ Cycles potrafi wykorzystać potencjał GPU (Graphics Processing Unit) kart graficznych skracając znacznie czas renderingu, który do tej pory był liczony za pomocą procesora (CPU – Central Processing Unit). Dzięki tej funkcjonalności Blender jest w stanie coraz skuteczniej konkurować z komercyjnym oprogramowaniem do grafiki 3D takim jak np. 3ds Max i Maya.

Wprowadzenie

Od początku tworzenia oprogramowania do grafiki 3D proces renderingu był liczony (jak znakomita większość operacji w komputerze) za pomocą procesora. Jednak z biegiem lat oprogramowanie tego typu zaczęło się rozrastać i stawać się coraz bardziej wymagające obliczeniowo. Producenci procesorów odpowiadali na te potrzeby tworząc coraz szybsze procesory poprzez podnoszenie ich częstotliwości, dodawaniu i ulepszaniu instrukcji, ulepszaniu architektur. Jednak te zmiany nie prowadzały drastycznych przyrostów wydajności. Rozpowszechniły się procesory wielordzeniowe i wielowątkowe, lecz dla grafików do ciągle za mało. Czas renderingu jednej klatki na takich procesorach przy większej produkcji potrafi trwać kilkadziesiąt godzin. Zaczęto szukać innego sposobu obliczeń, a że procesor posiada również karta graficzna, lecz wykonuje inne instrukcje, to programiści rozpoczęli prace nad silnikami renderującymi za pomocą GPU. Efekt tych prac jest zadowalający. Dzisiejsze karty graficzne posiadają od kilkudziesięciu do kilkutysięcy rdzeni graficznych, które można wykorzystać do renderingu. Co prawda 1 rdzeń CPU nie jest równy 1 rdzeniowi GPU (na korzyść CPU) to trzeba zauważyć trzy ważne kwestie. Pierwsza to taka, że obecne CPU potrafią równolegle pracować na maksymalnie 12 wątkach, zaś karty graficzne mogą się szczycić ponad 1500 procesorami strumieniowymi. To znaczna różnica. Kwestia druga to taka, iż karty graficzne można łączyć ze sobą (SLI/Crossfire X) i mamy tyle razy więcej procesorów ile obsługuje płyta główna. Z procesorami nie jest tak łatwo. Kwestia trzecia to taka, że jeśli obserwujemy rozwój CPU i GPU to łatwo zauważyć, że przy rozwoju GPU średnio co 2 generacje widzimy wzrost liczby procesorów strumieniowych powiększony 2-krotnie (w zależności od architektur). Przy procesorach co dwie architektury nie mamy dwa razy więcej rdzeni, ani dwa razy szybszych procesorów. Poza tym producenci kart graficznych częściej wypuszczają nowe generacje swoich produktów niż producenci procesorów. Jak widzimy inwestycja w karty graficzne wygląda znacznie atrakcyjniej i śmiało można stwierdzić, że jest bardziej przyszłościowa jeśli chodzi o obliczenia równoległe.

 

Technologie umożliwiające obliczenia GPU

Obecnie mamy dwie konkurencyjne technologie: OpenCL i CUDA.

 

OpenCL (Open Computing Language) to framework wspomagający pisanie aplikacji działających na heterogenicznych platformach składających się z różnego rodzaju jednostek obliczeniowych (m.in. CPU, GPU). Jego zaletą jest to, że dostępny jest dla różnych producentów (nVidia, AMD, Intel).

 

CUDA (Compute Unified Device Architecture) to opracowana przez firmę nVidia uniwersalna architektura procesorów wielordzeniowych (głównie kart graficznych) umożliwiająca wykorzystanie ich mocy obliczeniowej do rozwiązywania ogólnych problemów numerycznych w sposób wydajniejszy niż w tradycyjnych, sekwencyjnych procesorach ogólnego zastosowania. Ograniczeniem CUDA jest to, że trzeba mieć kartę nVidii by korzystać z CUDA. Jest to technologia zamknięta, ale bardzo popularna.

 

Teraz rodzi się pytanie co lepsze? Odpowiedź na to pytanie jest standardowa: zależy do czego. Jeśli chodzi o Blendera to niebawem się przekonamy jak to wygląda obecnie w praktyce.

 

Co nam jest potrzebne?

Musimy posiadać odpowiednią kartę graficzną. Co to znaczy odpowiednią? Odpowiednia to taka, która wspiera OpenCL w wersji 1.1 lub CUDA. W przypadku posiadaczy użytkowników AMD/Ati dotyczy do kart serii HD 5xxx i powyżej, zaś w przypadku użytkowników nVidia serii 8xxx i powyżej. Użytkownikom Intela o architekturze Ivy Bridge obliczenia GPU powinny według specyfikacji działać jeśli jednak nie zadziałają to niestety mają na razie pecha i muszą poczekać na lepsze wsparcie deweloperów Blendera i Intela. Jeśli powyższe wymagania mamy spełnione warto zatroszczyć się o aktualne wersje sterowników. Gdy sterowniki mamy przygotowane to czas na pobranie Blendera w najnowszej dostępnej wersji na stronie www.blender.org. W przykładzie będzie wykorzystana wersja 2.63.

 

Platforma testowa

Procesor: AMD Athlon X2 5000+ 2.6 GHz

RAM: 4 GB DDR2 800 MHz

Płyta główna: Gigabyte GA-MA78G-DS3H

Karta graficzna: GeForce GT 440 1GB GDDR5

Dysk: Seagate Barracuda ST1000DM003

System operacyjny: Windows 7 Professional SP1 64-bit

 

Jak widać sprzęt testowy jest dość leciwy i na obecne czasy nie jest demonem prędkości jednak na codzienne korzystanie z Blendera spisuje się dobrze. Na słowo komentarza zasługuje karta graficzna. Posiada 96 procesorów strumieniowych i szybką pamięć GDDR5. Za około 290 zł możemy pozwolić sobie na zakup nowej takiej karty, zaś używana kosztować nas może około 200 zł.

 

Zaczynamy

Uruchamiamy Blendera. Domyślnie jest wyłączone renderowanie GPU zatem je uruchomimy. W menu File edytora 3D View klikamy User Preferences... lub wciskamy kombinację Ctrl + Alt + U. W nowootwartym oknie przechodzimy do zakładki System po czym odnajdujemy sekcję Compute Device.

1

Wspomniana sekcja pozwala na wybranie 3 opcji z RadioButtonów: None (oznacza, że nie wykorzystujemy karty graficznej tylko procesor), OpenCL (oznacza, że wybieramy z listy dostępną kartę graficzną) i CUDA (ta opcja jest dostępna tylko dla posiadaczy nVidii). Obecnie Blender wspiera obliczenia CUDA i nie powinny sprawiać żadnego problemu. OpenCL jest w trakcie implementacji (faza Experimental) i może powodować zwieszanie Blendera lub zwracać jako rezultat czarny render.

 

Wybierzmy teraz z listy Engine silnik Cycles Render. Znajduje się on u góry edytora 3D View.

2

Na stronie http://www.blender.org/development/release-logs/blender-261/blender-261-demo-files/ znajdują się pliki demonstracyjne umożliwiające testowanie silnika Cycles, dokładnie chodzi o plik http://ftp.nluug.nl/pub/graphics/blender/demo/test/demos261-1.zip. Rozpakujmy ten plik, po czym z menu File → Open odnajdujemy plik o nazwie BMW-MikePan.blend. Powinniśmy widzieć widok projektu jak poniżej.

3

Po prawej stronie znajduje się edytor Properties z panelem Render. Jeśli mamy kartę nVidia i ustawiliśmy w User Preferences opcję CUDA to panel Render wygląda jak poniżej.

4

Warto na początek zmienić w panelu Integrator wartość kontrolki Render z 512 na np. 15. Wynik renderu będzie kiepski, ale w tym przypadku chodzi nam o test, a nie o jakość. Klikamy na przycisk  Image, który rozpoczyna proces renderowania. Widzimy, że Cycles tworzy render w taki sposób jakby z każdym cyklem rzucał ziarna kolorów i każdy następny cykl polepsza rezultat obrazu. Wartość 15 da nam poniższy plik wynikowy.

5

Obraz, który otrzymaliśmy jest w rozdzielczości FullHD. Na karcie GeForce GT 440 uzyskałem powyższy render w czasie 1 minuty 38.68 sekundy. To przyzwoity wynik zważywszy na to, że na testowanym procesorze ten sam render zajął aż 7 minut 50.26 sekundy. Ciekawe ile czasu zajął by rendering tego samochodu na karcie GeForce GTX 680 (posiadającym 1536 procesorów strumieniowych, czyli karta o 16 razy potężniejszym układzie graficznym niż testowana). Spójdzmy jeszcze jak wygląda render o 100 cyklach.

6

Jak widzimy przy wartości Render 100 już nie jest tak źle jak przy 15, a czas wyniósł 7 minut 00.26  sekundy. Plik demos261-1.zip zawiera więcej plików do testowania silnika Cycles to czego gorąco zachęcam.

 

Co z OpenCL?

Obecnie niestety OpenCL w Blenderze nie działa jak należy wobec czego rodzi się wniosek, że CUDA jest lepsza od OpenCL. Obecnie w Blenderze tak. Ale nie warto na tym etapie skreślać OpenCL. Jest jeszcze w ciągłej fazie rozwoju i za kilka wydań Blendera powinien być oficjalnie wspierany. To sprawi, że posiadacze kart AMD/Ati nie będą pokrzywdzeni, a i posiadacze nVidii też na tym zyskają jeśli OpenCL okaże się szybszy od CUDA.

 

Podsumowanie

W powyższym artykule zobaczyliśmy jakie warunki trzeba spełnić, by renderować poprzez GPU, jak je włączyć i jakie efekty niosą dane ustawienia, jak działają obliczenia GPU w renderowaniu silnika Cycles i jakie są ich efekty. Wiedza ta pokazuje jak wiele otrzymujemy praktycznie za darmo. Kosztem jaki musimy włożyć jest czas, który musimy poświęcić na naukę i testy. Jednak jak Czytelnik mógł się przekonać gra jest warta przysłowiowej świeczki.

Liczba ocen: 14 | Średnia ocen: 4.78

Czytaj także

 

Skomentuj

Twój komentarz
Dodaj

Komentarze

demon 07-09-2012
Dzięki wielkie.

Nasz Fanpage

Popularne treści

  • .NET  
  • 3D  
  • 8  
  • ActiveDirectory  
  • AJAX  
  • amazon web services  
  • Android  
  • Android Market  
  • AngularJS  
  • Animacja  
  • API  
  • aplikacje  
  • Aplikacje wielojęzyczne  
  • asembler  
  • ASHX  
  • ASP.NET  
  • ASP.NET MVC  
  • assembler  
  • Automated Installation Kit  
  • Azure  
  • bezpieczeństwo  
  • bing  
  • Blender  
  • C#  
  • certyfikat  
  • chmura  
  • cloud computing  
  • cmd  
  • Cmdlet  
  • Cmdlet’ów  
  • core  
  • CSS  
  • Cycles  
  • developer  
  • Entity Framework  
  • Expression Blend  
  • fitl  
  • google  
  • google app engine  
  • googlemaps  
  • GPU  
  • Grafika  
  • GroupPolicy  
  • hamachi  
  • hyperv  
  • hyper-v  
  • IaaS  
  • ImageX  
  • instalacja aplikacji  
  • interface  
  • interfejs  
  • Iron Speed  
  • java  
  • JavaScript  
  • jQuery  
  • Kinect  
  • Knockout  
  • kolokacja  
  • konsola  
  • LINQ  
  • LINQ to SQL  
  • Linux  
  • MakeCert  
  • maps  
  • microsoft  
  • mobile  
  • moduły  
  • MVC  
  • mySQL  
  • OpenSource  
  • openstreet  
  • openvpn  
  • PaaS  
  • partycja  
  • PHP  
  • pliki apk  
  • pon  
  • powershell  
  • preview  
  • programowanie  
  • przeglądarka  
  • przetwarzanie w chmurze  
  • przewodnik  
  • Qt  
  • RAD  
  • Rendering  
  • SaaS  
  • script  
  • SDK  
  • server  
  • serwer  
  • Skalowanie  
  • SQL  
  • Systemy operacyjne  
  • światłowody  
  • Światłowód  
  • Template  
  • ubuntu  
  • virtual  
  • Visual Studio  
  • vpn  
  • WAIK  
  • WCF  
  • WebAdministration  
  • WebApi  
  • Windows  
  • windows azure  
  • Windows PE  
  • Windows Phone  
  • WinFroms  
  • wirtualizacja  
  • WPF  
  • XAML  
  • zdalny  
  • zdjęcia  
Komu polecasz tą stronę? (email)
Poleca (twoje imie/pseudonim)
Treść (opcjonalnie) Do Twojej treści zostanie dodany link polecanej strony
POLECAM