Opengl ES, XNA, Directx for WP8) Plan
Total Page:16
File Type:pdf, Size:1020Kb
Mobilne akceleratory grafiki Kamil Trzciński, 2013 O mnie Kamil Trzciński http://ayufan.eu / [email protected] ● Od 14 lat zajmuję się programowaniem (C/C++, Java, C#, Python, PHP, itd.) ● Od 10 lat zajmuję się programowaniem grafiki (OpenGL, DirectX 9/10/11, Ray-Tracing) ● Od 6 lat zajmuję się branżą mobilną (SymbianOS, Android, iOS) ● Od 2 lat zajmuję się mobilną grafiką (OpenGL ES, XNA, DirectX for WP8) Plan ● Bardzo krótko o historii ● Mobilne układy graficzne ● API ● Programowalne jednostki cieniowania ● Optymalizacja ● Silniki graficzne oraz silniki gier Wstęp Grafika komputerowa to dziedzina informatyki zajmująca się wykorzystaniem technik komputerowych do celów wizualizacji artystycznej oraz wizualizacji rzeczywistości. Bardzo często grafika komputerowa jest kojarzona z urządzeniem wspomagającym jej generowanie - kartą graficzną, odpowiedzialna za renderowanie grafiki oraz jej konwersję na sygnał zrozumiały dla wyświetlacza 1. Historia Historia Historia kart graficznych sięga wczesnych lat 80-tych ubiegłego wieku. Pierwsze karty graficzne potrafiły jedynie wyświetlać znaki alfabetu łacińskiego ze zdefiniowanego w pamięci generatora znaków, tzw. trybu tekstowego. W późniejszym okresie pojawiły się układy, wykonujące tzw. operacje BitBLT, pozwalające na nałożenie na siebie 2 różnych bitmap w postaci rastrowej. Historia Historia #2 ● Wraz z nadejściem systemu operacyjnego Microsoft Windows 3.0 wzrosło zapotrzebowanie na przetwarzanie grafiki rastrowej dużej rozdzielczości. ● Powstaje interfejs GDI odpowiedzialny za programowanie operacji związanych z grafiką. ● Krótko po tym powstały pierwsze akceleratory 2D wyprodukowane przez firmę S3. Wydarzenie to zapoczątkowało erę graficznych akceleratorów grafiki. Historia #3 ● 1996 – wprowadzenie chipsetu Voodoo Graphics przez firmę 3dfx, dodatkowej karty rozszerzeń pełniącej funkcję akceleratora grafiki 3D. ● Powstają biblioteki umożliwiające tworzenie trójwymiarowych wizualizacji: Direct3D oraz OpenGL. Historia #3 Historia #4 ● 1999/2000 – DirectX 7.0 dodaje obsługę: T&L (ang. transformation and lighting) ● Jednostka T&L zdejmowała z programisty i CPU konieczność wyliczania współrzędnych wielokątów względem kamery, a następnie obliczanie wypadkowego koloru pikseli należących do tych wielokątów, przy jednoczesnym uwzględnieniu umiejscowienia źródeł światła ● Mniejwięcej od tego momentu akceleratory graficzne zaczeły być nazywane: GPU (ang. graphics processing unit). Historia #4 Historia #5 ● Powstaje specyfikacja Shader Model 1.0/1.1 zgodna z Direct3D 8.0. ● NVIDIA GeForce 3 – pierwsza programowalna karta graficzna. ● Karta ta udostępniała możliwość napisania krótkiego programu pozwalającego na rmodyfikację pozycji, wypadkowego koloru wierzchołka czy współrzędnych tekstury przekazywanych do rasteryzera. Obliczenia przeprowadzane były przez specjalne jednostki cieniujące zw. Vertex i Pixel Shaderem. Historia #6 ● DirectX 9.0 przynosi powstanie wysokopoziomowych języków programowania: HLSL oraz Cg wykorzystujących składnię języka C. Wprowadza Shader Model 2.0. ● DirectX 9.0c do dnia dzisiejszego jest jednym z najczęściej stosowanych interfejsów graficznym. Zaimplementowany w nim Shader Model 3.0 praktycznie nie ma ograniczeń na długość programów cieniujących (programy są na tyle długie, że wystarczają do znacznej większości aktualnych zastosowań). Historia #7 ● DirectX 10.0 oraz Shader Model 4.0 ● Najważniejsza zmianą jest wprowadzenie tzw. Geometry Shaders czyli jednostek pozwalających na przetwarzanie geometrii. Wcześniejsze wersje shaderów umożliwiały przetwarzanie wierzchołków oraz pikseli, natomiast nie pozwalały na modyfikację siatki obiektów. Wprowadzenie Geometry Shaders umożliwiło dodawanie lub usuwanie całych trójkątów z potoku renderingu. Historia #8 ● To jest też moment pojawienia się GPGPU (ang. General-purpose graphics processing unit) ● nVidia udostępnia autorskie oprogramowanie umożliwiające wykorzystanie procesorów strumieniowych zamontowanych w kartach graficznych o nazwie CUDA szybko zdobyło popularność szczególnie w zastosowaniach matematycznych czy kryptografii, gdzie procesory ogólnego przeznaczenia nie są najszybsze. Historia #8 Historia #9 DirectX 11 - Shader Model 5.0 ● Wprowadza sprzętową obsługę teselacji (Domain i Hull Shaders) ● Wprowadza obsługę Compute Shader (odpowiednik CUDA) ● Systematyzuje obsługę dla starszych wersji API (feature levels) Urządzenia mobilne ● Jednym z czynników, które przyczyniły się do znaczącego wzrostu popularności urządzeń mobilnych była widoczna poprawa jakości wyświetlaczy graficznych. ● Pierwsze urządzanie cechowały się wyświetlaczami monochromatycznymi o rozdzielczości 4k pikseli. ● Obecnym standardem dla telefonów są wyświetlacze o rozdzielczości 1M-2Mpx (FullHD), a dla tabletów 2M-3Mpx (Retina). Urządzenia mobilne #2 ● Obecne urządzenia cechują się mocą obliczeniową porównywalną z komputerami klasy PC sprzed 5 lat. Różnica jest natomiast w wielkości i poborze mocy. Najwydajniejsze obecnie urządzenia potrafią podczas intensywnego korzystania wytrzymać po 10-12 godzin. ● To ciągłe współzawodnictwo między producentami wymusza wprowadzanie nowych i szybszych technologii oraz dalszą miniaturyzacją układów scalonych. Urządzenia mobilne #3 ● Najnowsze dane pokazują, że wartość rynku gier mobilnych wynosiła 7,8 miliarda $ w 2012. W 2016 powinna osiągnąć co najmniej 18,3 miliarda $ (http://www.gamesindustry.biz/articles/2012-11-28-the- state-of-mobile-game-development) ● Większość przychodów pochodzi lub będzie pochodzić ze sprzedaży gier oraz dodatków (DLC, IAP). ● Obecnie użytkownicy tabletów spędzają 67% czasu na graniu w mobilne gry. W przypadku telefonów jest to 39%. Przewiduje się powolną erozję popularności konsol do gier na rzecz właśnie urządzeń mobilnych, smartfonów i tabletów 2. Mobilne układy graficzne Hardware Praktycznie wszystkie obecnie produkowane urządzenia zbudowane są w technologii SoC (ang. System-on-a-chip). Głównymi dostawcami są: ● PowerVR (Imagination Technologies Group) ● ARM Holdings ● Qualcomm ● NVIDIA PowerVR ● PowerVR jest dywizją Imagination Technologies będącej twórcą rozwiązań sprzętowych i programowych przeznaczonych do renderingu 2D i 3D. ● Układy PowerVR są z powodzeniem wykorzystywane w urządzeniach firmy Apple: wszystkie wersje iPada, iPhone 4S i 5 oraz w niektórych urządzeniach innych producentów, np.: Samsung. ● PowerVR wykorzystuje do wizualizacji grafiki 3D metodę zwaną odroczonym kafelkowym mechanizemem renderingu (TBDR). PowerVR #2 ● Obraz jest renderowany dopiero w momencie, gdy wszystkie renderowane poligony zostaną przesłane dla danej ramki. ● Kosztowne operacje, tj.: teksturowanie i cieniowanie pikseli są odroczone do momentu, gdy będzie znana widoczność wszystkich pikseli renderowanego obrazu. ● Obraz następnie jest dzielony na kafle o rozmiarze 32x32 piksele. Do każdego kafla przypisana jest lista wpływających na wynikowy obraz trójkątów. Rendering wykorzystuje technikę podobną do rzucania promieniami (ang. ray-casting). PowerVR #3 ● Jest to jedyny akcelerator wykorzystujący TBDR. ● Podejście to umożliwia renderingu przezroczystych trójkątów niezależnie od kolejności w której były przetwarzane. ● Większość obecnie dostępnych układów obsługuje najważniejsze API programistyczne, tj.: OpenGL ES 1.1, 2.0, 2.1, DirectX 9, 10.1 oraz OpenCL PowerVR #4 PowerVR #5 ARM Mali ● Mali jest akceleratorem graficznym (GPU), produktem firmy ARM. ● Firma ARM jest projektantem większości dostępnych na rynku układów ARM (m.in. nowych Cortex-A8, A9 i A15) oraz popularnych układów graficznych dla urządzeń mobilnych Mali, znanych chociażby z Samsungów Galaxy S II, Galaxy S III czy Galaxy Note. ● Z powodzeniem wykorzystywany w wielu minikomputerach: Hackberry A10, Cubieboard ● W zależności od wersji układy mają do 8 rdzeni GPU. ARM Mali #2 ● Wszystkie starsze układy (do Mali-450) obsługują OpenGL ES 1.1, 2.0 oraz OpenVG 1.1 ● Nowsze nawet OpenGL ES 3.0, OpenCL 1.1 oraz DirectX 11 ● Obsługa tekstur oraz ekranów o rodzielczościach 4096x4096 ● Obsługa FSAA (full scene anti- aliasing) oraz SSAA (super sampling anti-aliasing) Qualcomm Adreno ● Wcześniej Imageon, własność ATI. Marka została sprzedana Qualcommowi w 2008, który następnie zmienij jej nazwę na Adreno (anagram Radeon) ● Wykorzystywane w wielu urządzeniach różnych producentów: Samsung, HTC, LG ● Obsługuje OpenGL ES 1.1, 2.0 (Adreno 320 - 3.0), Direct3D FL 9.3, OpenCL 1.2, OpenVG 1.1 Qualcomm Adreno #2 NVIDIA Tegra ● SoC w skład, którego wchodzi układ GeForce ULP (ultra low power). ● Drugi po Mali-400 akcelerator niewykorzystujący zunifikowanych jednostek cieniujących. ● Zapowiedziana Tegra 4 ma być 6x szybsza niż Tegra 3 oraz 20x szybsza niż Tegra 2. NVIDIA Tegra #3 NVIDIA Tegra #2 NVIDIA Tegra #4 NVIDIA Tegra #4 Rozszerzenia: ● Early-Z support ● Integrated Pixel Shader and Blending Unit ● Coverage sampling anti-aliasing (CSAA) ● Advanced Anisotropic Filtering (AF) Wydajność ● Na wydajność ma wpływ nie tylko stosowany układ, ale może przede wszystkim rozdzielczość ekranu. 3. API application programming interface API DirectX - jest to zestaw funkcji API spomagających generowanie grafiki (dwu- i trójwymiarowej), dźwięku oraz innych zadań związanych zwykle z grami i innymi aplikacjami multimedialnymi. Dostępny na urządzeniach z systemem operacyjnym Windows. OpenGL ES - jest to specyfikacja uniwersalnego API do generowania grafiki oparta o specyfikację OpenGL. Dostępna na prawie wszystkich platformach. OpenVG - jest to specyfikacja API do akceleracji grafiki wektorowej. OpenCL - jest to zestaw funkcji wspomagających pisanie aplikacji działających na różnego rodzaju jednostkach