GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu



Podobne dokumenty
GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

Przyspieszanie sprzętowe

Karty graficzne możemy podzielić na:

Plan wykładu. Akcelerator 3D Potok graficzny

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Grafika komputerowa i wizualizacja

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

Programowanie procesorów graficznych GPGPU

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Wprowadzenie do grafiki maszynowej. Wprowadzenie do historii OpenGL

Karty graficzne: budowa, zasada działania, standardy, parametry, dodatkowe funkcje

Architektura Procesorów Graficznych

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

Transformacje obiektów 3D

Przegląd architektury PlayStation 3

Grafika 3D na przykładzie XNA 3.1

HDR. Obrazy o rozszerzonym zakresie dynamiki

Wykład 4. Rendering (1) Informacje podstawowe

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Architektura Komputerów

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

Architektura systemów komputerowych Ćwiczenie 3

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Programowanie Procesorów Graficznych

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Opis efektów kształcenia dla modułu zajęć

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

PORÓWNANIE WYDAJNOŚCI JĘZYKÓW CIENIOWANIA CG I HLSL

Oświetlenie obiektów 3D

Efekty dodatkowe w rasteryzacji

Wprowadzenie. Karty graficzne możemy podzielić na:

Synteza i obróbka obrazu. Grafika komputerowa ROZWIĄZANIA SPRZĘTOWE I PROGRAMISTYCZNE

Elementy składowe karty graficznej

PRZEWODNIK PO PRZEDMIOCIE

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Problemy programowania gier. mgr Mateusz Rynk

1 Temat: Vertex Shader

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

CZYM JEST KARTA GRAFICZNA.

Synteza i obróbka obrazu HDR. Obrazy o rozszerzonym zakresie dynamiki

Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje!

Bartłomiej Filipek

OpenGL i wprowadzenie do programowania gier

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Karta graficzna. Karta graficzna przyjmuje. rozszerzeń montowanej w magistrali wejścia/wyjścia na płycie głównej. Opcjonalnie układ graficzny

Julia 4D - raytracing

i3: internet - infrastruktury - innowacje

Moc płynąca z kart graficznych

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

GRAFIKA KOMPUTEROWA. Plan wykładu. 1. Początki grafiki komputerowej. 2. Grafika komputerowa a dziedziny pokrewne. 3. Omówienie programu przedmiotu

Wprowadzenie do grafiki komputerowej. W. Alda

GRY KOMPUTEROWE 3D OpenGL DirectX Ogre3D Crystal Space ClanLib Irrlicht SDL Ardor3D jmonkey Engine GRY KOMPUTEROWE 2D ORX Troll2D

PROJEKTOWANIE SYSTEMÓW KOMPUTEROWYCH

Przegląd architektur kart. Sławomir Król

1. Prymitywy graficzne

PRZEWODNIK PO PRZEDMIOCIE

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

która metoda jest najlepsza

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Graficzny edytor cieniowania

Przetwarzanie obrazów w czasie rzeczywistym za pomocą GPU

Techniki animacji komputerowej

Tworzenie gier na urządzenia mobilne

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010 KOMPUTEROWA

Wprowadzenie do QT OpenGL

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

Przegląd metod renderingu czasu rzeczywistego dla fotorealistycznych wizualizacji architektonicznych

GPGPU General-Purpose computing on the GPU. Piotr Stańczyk

INŻYNIERIA OPROGRAMOWANIA

Architektura Komputerów

Jak wybrać akcelerator 3D dedykowany aplikacjom typu MCAD?

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Praktyczne zastosowanie grafiki komputerowej

Filtrowanie tekstur. Kinga Laurowska

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Scena 3D. Cieniowanie (ang. Shading) Scena 3D - Materia" Obliczenie koloru powierzchni (ang. Lighting)

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Podręcznik użytkownika PCI-x Karta przechwytująca 4xHDMI

GUI - projektowanie interfejsów

Elementy do grafiki komputerowej. Wprowadzenie

Praca dyplomowa magisterska

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

Wykład 5. Rendering (2) Geometria

Projektowanie aplikacji graficznych. dr inż. Jarosław Zubrzycki

Tworzenie gier na urządzenia mobilne

Wyświetlanie terenu. Clipmapy geometrii

Gry Komputerowe - laboratorium 0

Karty graficzne. Dla DSI II

Tesla. Architektura Fermi

Systemy graficzne. dr inż. Mariusz Szwoch

Analiza moż liwości i porównanie nowych ję zyków do programowania grafiki

Wykład V. Karta graficzna. Studia stacjonarne Pedagogika Budowa i zasada działania komputera

Transkrypt:

Synteza i obróbka obrazu GRAFIKA KOMPUTEROWA Rozwiązania sprzętowe i programowe Przyspieszanie sprzętowe Generowanie obrazu 3D wymaga złożonych obliczeń, szczególnie jeżeli chodzi o generowanie płynnej animacji w grach komputerowych, w czasie rzeczywistym. Główny procesor komputera nie jest w stanie nadążyć z generowaniem obrazu (zwłaszcza gdy zajmuje się np. obsługą zdarzeń w grze). Większość operacji została przeniesiona na procesor karty graficznej (GPU).

Przyspieszanie sprzętowe Przyspieszanie sprzętowe grafiki (hardware accelerated graphics) procesor główny (CPU) przesyła wywołanie funkcji graficznej do układu na karcie graficznej procesor na karcie graficznej wykonuje sprzętowo operacje tworzenia obrazu, bez udziału CPU implementacja sprzętowa procedur graficznych pozwala zwiększyć szybkość tworzenia grafiki i odciąża CPU Podwójne buforowanie Podwójne buforowanie (double buffering) Tworzenie grafiki bezpośrednio na ekranie powoduje zniekształcenia (np. migotanie) z powodu stałego odświeżania ekranu. Podwójne buforowanie: dodatkowy obszar (bufor) pamięci, tworzenie grafiki w tym buforze, przeniesienie zawartości całego bufora na ekran w jednym kroku implementacja sprzętowa przyspieszenie można użyć dwóch przełączanych buforów

Bit blit (BitBLT) Bit blit to jedna z pierwszych operacji, które zaimplementowano sprzętowo w układach graficznych. Pozwala szybko kopiować obrazy (bitmapy) do pamięci ekranu. Klasyczne gry 2D: stałe tło (zapisane w pamięci), ruchomy obiekt (sprite) i jego maska Narysowanie obiektu na tle: połączenie maski i tła operacja OR połączenie wyniku ze spritem op. AND Blitting jest robiony sprzętowo przyspieszenie. Bit blit (BitBLT) Ilustracja blittingu: AND = OR =

Przyspieszanie grafiki 2D Przyspieszanie sprzętowe grafiki w kartach graficznych PC: wprowadzone w latach 90. sprzętowa implementacja rysowania prymitywów 2D, np. prostokątów przyspieszało rysowanie np. okienek w systemie operacyjnym (windows accelerators) w chwili pojawienia się gier 3D przyspieszanie sprzętowe tego typu okazało się niewystarczające Karty graficzne Składniki karty graficznej: GPU procesor graficzny Video BIOS (firmware) Pamięć RAM (GDDR) bufor obrazu bufor wierzchołków (vertex buffer) bufor tekstur (texture buffer) bufor głębokości (z-buffer) pamięć programów (shaderów) Przetworniki, zasilanie, chłodzenie, itp.

Procesory GPU GPU Graphics Processing Unit Wyspecjalizowany procesor graficzny znajdujący się np. na kartach graficznych komputerów PC. Realizuje sprzętowo operacje związane z obrazem: przyspieszanie grafiki 2D (płaskie prymitywy) tworzenie grafiki 3D (rasteryzacja scen 3D) obsługa wideo (np. przechwytywanie ramek) Wykonuje obliczenia równoległe Akceleracja 3D Wsparcie sprzętowe dla grafiki 3D Dawne karty graficzne: tylko wyświetlanie obrazu, grafika tworzona na CPU Akceleratory 3D dodatkowe karty graficzne (3dfx Voodoo) Obecne karty graficzne GPU realizuje sprzętowo algorytmy grafiki 3D. Dwa najpopularniejsze typy kart GPU: GeForce (firmy NVidia), Radeon (firmy AMD, dawniej ATI)

Programowanie grafiki Warstwy logiczne: aplikacja (np. gra) API interfejs programistyczny procedury niezależne od sprzętu sterowniki karty graficznej tłumaczenia poleceń API na instrukcje dla konkretnego sprzętu (GPU) system operacyjny oprogramowanie (firmware) karty graficznej sprzętowa realizacja poleceń dotyczących tworzenia grafiki Programowanie grafiki - interfejsy Obecnie programiści korzystają z gotowych interfejsów programistycznych (API). Najpopularniejsze systemy do grafiki 3D: DirectX Microsoft (system Windows) OpenGL otwarty standard (Linux, ios, Windows, systemy mobilne) Interfejsy DirectX i OpenGL pozwalają programistom na uruchamianie procedur zaimplementowanych sprzętowo w układach GPU do tworzenia grafiki 3D.

DirectX wczesne wersje Początkowe wersje DirectX (do wersji 5.0) zawierały zbiór procedur graficznych (API) do tworzenia grafiki 3D. Większość operacji dot. tworzenia obrazu była wykonywana przez CPU. Możliwości sprzętowe ówczesnych GPU: obsługa siatek wielokątowych, filtrowanie tekstur, mipmapping bufor głębokości (z buffer) i pamięć tekstur Karty: NVidia Riva 128; ATI Rage DirectX 6 DirectX 6.0 (1998) optymalizacja potoku przetwarzania, obsługa wielu tekstur (multitexture), bufor maski (stencil buffer), kompresja tekstur (S3 lub DXTC) W kartach graficznych: obsługa obrazów 32-bitowych, 24-bitowy bufor głębokości, filtracja trójliniowa tekstur. Karty: NVidia Riva TNT, TNT2; ATI Rage 128.

DirectX 7 DirectX 7.0 (1999) sprzętowa realizacja transform & lighting (przekształcenia i oświetlenie, T&L) format tekstur.dds sprzętowy bufor pamięci wierzchołków lepsza obsługa tekstur (multitextures) Karty graficzne: NVidia GeForce 256, Geforce 2; ATI Radeon R100 Transform and Lighting Transform & Lighting (T&L) zbiór operacji dotyczących: przekształcania modelu 3D (transform) przekształcenia siatki, konwersja współrzędnych do widoku 2D oświetlenia sceny nakładanie, próbkowanie, filtracja tekstur cieniowanie

Transform, Lighting & Clipping Transform, Lighting & Clipping (TLC) - rozszerzenie T&L o obcinanie widoku (clipping) do obszaru widocznego na ekranie, w tym również usuwanie niewidocznych powierzchni. Przed Direct3D 7.0 operacje TLC musiał wykonywać procesor główny (CPU). Przeniesienie tych operacji na GPU stanowiło prawdziwą rewolucję w grafice komputerowej. DirectX 8 DirectX 8.0 (2000) Druga poważna rewolucja w rozwoju systemu: wprowadzenie programowalnego potoku przetwarzania, wprowadzenie shaderów umożliwiających realizację tego potoku. Ponadto sprzętowe algorytmy: bump mapping, texture mapping, mgła, sprzętowy antyaliasing. Karty graficzne: NVidia GeForce 3, GeForce 4; ATI Radeon R200.

Ustalony potok renderingu Fixed function pipeline (potok ustalony) ustalony ciąg operacji, programista podaje tylko ich parametry transformacje modeli 3D opisywane macierzami, trudno przekształcać pojedyncze werteksy oświetlenie obliczane na podstawie parametrów zapisanych w modelu trudno coś zmodyfikować aby uzyskać efekty specjalne łatwe programowanie, ograniczone możliwości wykorzystywany w DirectX do wersji 9 włącznie Potoki renderingu programmable pipeline Programmable pipeline (potok programowalny) programista musi sam zaimplementować istotne etapy renderingu można wpływać na parametry werteksów oraz barwę pikseli za pomocą programów nazywanych shaderami trudniejsze programowanie, znacznie większe możliwości wprowadzone częściowo w DirectX 8, znacznie rozwinięte w DirectX 10 (gdzie jest jedyną możliwością programowania grafiki)

Shadery Shader program, za pomocą którego programista wpływa na przebieg renderingu obrazu 3D. Uruchamiany na procesorze GPU. Shadery pozwalają programiście kontrolować potok renderingu. DirectX udostępnia trzy rodzaje shaderów: vertex, pixel, geometry. Vertex shader Vertex shader program, który jest wywoływany jeden raz dla każdego wierzchołka siatki trójkątowej obiektu. Podstawowym zadaniem jest konwersja współrzędnych wierzchołka w ukł. wsp. modelu na współrzędne widoku 2D (po rzutowaniu). Programista sam decyduje jakie parametry wejściowe i jakie inne wartości wyjściowe są używane w programie. Algorytm jest realizowany sprzętowo, przy użyciu jednostki vertex processor.

Vertex shader Jednostki vertex shader umożliwiają uzyskiwanie różnorodnych efektów, m.in. zniekształceń obiektów (np. uszkodzeń), ruchu powierzchni wody, mimiki twarzy, itp. Pixel (fragment) shader Pixel shader (w OpenGL: fragment shader) program uruchamiany jeden raz dla każdego piksela obrazu. Pozwala ustalić i w dowolny sposób modyfikować barwę każdego z pikseli obrazu. Najczęściej dokonuje operacji związanych z oświetleniem sceny (cieniowanie, teksturowanie). Algorytmy są realizowane sprzętowo, przy użyciu jednostki pixel processor, który zwykle musi wykonać znacznie więcej obliczeń niż jednostka vertex processor.

Pixel shader Zastosowanie jednostek pixel shader pozwala uzyskać efekty związane z oświetleniem, takie jak: chropowatość powierzchni (bump mapping), fale na wodzie, Pixel shader odbicia w wodzie, cienie, efekty eksplozji, tonowanie barwy Normalny Shadery elementarne przykłady 1. Cieniowanie Gourouda vertex s.: obliczenie oświetlenia w wierzchołkach, rzutowanie współrzędnych rasteryzer: interpolacja barwy pixel s.: zastosowanie interpolowanej barwy 2. Cieniowanie Phonga vertex s.: skopiowanie wektora normalnego, rzutowanie współrzędnych rasteryzer: interpolacja wektora normalnego pixel s.: obliczenie oświetlenia w danym punkcie, zastosowanie obliczonej barwy

DirectX 9 DirectX 9 (2002-2005) udoskonalenia shaderów język programowania shaderów HLSH (high level shader language) modele oświetlenia HDR tekstury zmiennoprzecinkowe indeksowanie bufora werteksów efekty Aero w Windows Vista Karty: NVidia GeForce FX (5), 6, 7, 8; ATI Radeon R300; R420; R520 Udoskonalenia kart graficznych Różnice pomiędzy kartami graficznymi kolejnych serii (np. GeForce FX, 6, 7, 8): większa częstotliwość procesora, więcej pamięci, nowsze jednostki shader (shader model) dodane nowe funkcje implementowane sprzętowo, optymalizacja algorytmów (np. lepsze filtrowanie tekstur), dodatkowe algorytmy (SLI, antialiasing), zwiększenie liczby potoków renderingu.

DirectX 10 DirectX 10 (2007), 10.1 (2008) geometry shader zintegrowane trzy rodzaje shaderów macierze tekstur (podmiana tekstur przez GPU) udoskonalenia jednostek shader, języka programowania i innych czynników likwidacja potoku ustalonego Karty: NVidia GeForce 8, 9 GTX200; ATI Radeon R600, R700 (np. HD 4890) Geometry shader Geometry shader pozwala modyfikować siatkę wielokątową obiektu: operuje na grupach werteksów (np. na całych trójkątach siatki) dodawanie nowych werteksów usuwanie werteksów zwiększanie rozdzielczości siatki wykorzystanie np. do tworzenia cieni (shadow volume) i mapowania tekstur w technice cube mapping.

Geometry shader Przykład wykorzystania G.S. Unified Shader Architecture Do tej pory trzeba było programować oddzielnie każdy z typów shadera, nieraz przy użyciu różnych narzędzi programistycznych. Unified Shader Architecture wprowadzona w DirectX 10 zintegrowana jednostka 3 w 1 : vertex, pixel i geometry shader, działająca w trybie zmiennoprzecinkowym. Pozwala programować wszystkie shadery w jednakowy sposób. Stosuje się również termin Shader Model 4.0. Obsługa również z poziomu OpenGL.

DirectX 11 DirectX 11 (2009) (Shader model 5.0) teselizacja zwiększanie liczby werteksów w modelu obiektu wielowątkowy rendering (sterowanie przez wielordzeniowy CPU) compute shaders wykorzystanie GPU do obliczeń matematycznych, np. systemy cząsteczkowe, modele fizyczne Karty: NVidia Geforce 300/400/500 (np. GTX480), ATI Radeon HD5000, HD6000 (np. HD 5900) Potok renderingu w Direct3D 10/11 Input Assembler - dostarcza dane Vertex shader - transformacje wierzchołków siatki (werteksów) Geometry shader - przetwarzanie prymitywów (grup werteksów) Stream output - zachowanie stanów pośrednich w pamięci Rasterizer konwersja werteksów na piksele, przycinanie, interpolacja Pixel shader - operacje na pikselach obrazu 2D (modyfikacje barwy) Output merger - łączy wyniki działania różnych procedur w obraz końcowy

OpenGL OpenGL jest wieloplatformową specyfikacją procedur graficznych dla różnych systemów operacyjnych. OpenGL definiuje bibliotekę funkcji (API) niskiego poziomu. Jest to tylko specyfikacja zbiór funkcji i opis ich działania. Producenci sprzętu muszą zadbać o implementację tych funkcji w sterownikach sprzętu. Producenci mogą dodawać własne funkcje w formie rozszerzeń (extensions). OpenGL ES wersja dla urządzeń mobilnych. Programowanie w OpenGL Programowanie w polularnych językach: C, C++, Java, Python. Funkcje są niskopoziomowe, więc używa się zwykle bibliotek pomocniczych: GLUT, GLFW obsługa okien programu i urządzeń wejściowych GLmath biblioteka operacji matematycznych GLEW obsługa rozszerzeń systemu Rozwiązania wieloplatformowe - nakładki np. SDL Simple DirectMedia Layer

Programowanie shaderów Programowanie jednostek shader specjalistyczne języki programowania: HLSL High Level Shader Language (Microsoft) Direct3D GLSL OpenGL Shading Language Cg (NVidia) Direct3D, OpenGL Można również stosować asembler. Program główny (dla CPU) pisany jest w wybranym języku programowania, natomiast programowanie GPU - w jednym z ww. języków. Przetwarzanie równoległe Pojedynczy potok renderingu jest w stanie obliczyć kolor tylko jednego piksela obrazu w danej chwili. Zwiększenie liczby potoków pozwala obliczać kilka pikseli obrazu jednocześnie. Współczesne karty graficzne mają architekturę równoległą. Oznacza to możliwość jednoczesnego uruchamiania danego programu shadera dla wielu (kilkuset) wierzchołków i pikseli. Modele kart z danej serii mogą się różnić liczbą jednostek rónoległych (np. GeForce GS, GT, GTX).

Obliczenia równoległe na GPU (GPGPU) Moc GPU można wykorzystać nie tylko do grafiki, ale również do przyspieszania obliczeń równoległych nie związanych z grafiką: CUDA (NVidia, tylko układy GeForce) OpenCL (otwarta specyfikacja, wieloplatformowa) DirectCompute (Microsoft, DirectX) C++Amp (Microsoft, tylko Windows) LuxRender przykład programu do renderingu oświetlenia globalnego, wykorzystującego OpenCL do obliczeń na GPU. Game engine Game engine ( silnik gry ) część oprogramowania wykorzystywana do tworzenia gry. Obejmuje m.in.: rendering obrazu 3D, modele fizyczne, modele animacji (np. szkieletowej), modele sztucznej inteligencji, skrypty, obsługę dźwięku i muzyki, interfejs użytkownika

Modele fizyczne Model fizyczny (physics engine) służy do realistycznego odwzorowania praw fizyki w grach. Modele fizyczne w grach są z konieczności uproszczone (praca w czasie rzeczywistym). Zwykle wykorzystuje się uproszczone siatki wielokątowe obiektów do wykrywania zderzeń i modyfikowania struktury obiektów. Model fizyczny zwalnia programistę od samodzielnego implementowania praw fizyki w komputerowym świecie. PhysX PhysX model fizyczny opracowany przez firmę Ageia, obecnie własność firmy NVidia. Implementacja: sprzętowo specjalistyczny procesor PPU (Physics Processing Unit) już nie stosowany na procesorze GPU (w ramach CUDA) programowo (realizowane przez CPU). Typowe efekty: eksplozje, odłamki obiektów efekt cienkiego materiału dym i mgła, reakcja na ruch postaci

Inne modele fizyczne i animacji Często używane modele na licencji open source: Bullet (dynamika brył sztywnych i elastycznych, detekcja kolizji, ograniczenia) Irrlicht (animacje szkieletowe i morph target, systemy cząsteczkowe, wiele efektów renderingu obrazu) Ogre (podobne funkcje jw.)