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



Podobne dokumenty
Przyspieszanie sprzętowe

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

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

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

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

Wprowadzenie do grafiki maszynowej. Wprowadzenie do historii OpenGL

Grafika komputerowa i wizualizacja

Programowanie procesorów graficznych GPGPU

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

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

Architektura Procesorów Graficznych

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Wykład 4. Rendering (1) Informacje podstawowe

Architektura Komputerów

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

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

CZYM JEST KARTA GRAFICZNA.

Przegląd architektury PlayStation 3

Grafika 3D na przykładzie XNA 3.1

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

HDR. Obrazy o rozszerzonym zakresie dynamiki

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

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

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

Architektura systemów komputerowych Ćwiczenie 3

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

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

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

Wprowadzenie. Karty graficzne możemy podzielić na:

która metoda jest najlepsza

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

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

Bartłomiej Filipek

Elementy składowe karty graficznej

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

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

Problemy programowania gier. mgr Mateusz Rynk

Oświetlenie obiektów 3D

Moc płynąca z kart graficznych

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

1 Temat: Vertex Shader

PRZEWODNIK PO PRZEDMIOCIE

Transformacje obiektów 3D

Techniki animacji komputerowej

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Przetwarzanie obrazów w czasie rzeczywistym za pomocą GPU

Zdjęcia i opis stanowisk laboratoryjnych wykorzystywanych w ramach projektu

Karty graficzne. Dla DSI II

Ogólne informacje. cią pracy, wielkości wyświetlan. cią obrazu, wietlaną rozdzielczości. częstotliwo. wieŝania obrazu.

Systemy graficzne. dr inż. Mariusz Szwoch

Efekty dodatkowe w rasteryzacji

PRZEWODNIK PO PRZEDMIOCIE

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

Architektura Komputerów

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

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

System 32-Bit 1: Microsoft Windows 7 Home Premium 2;, Professional, Ultimate, Enterprise Microsoft Windows 8/8.1, Pro, Enterprise 2;

PROJEKTOWANIE SYSTEMÓW KOMPUTEROWYCH

i3: internet - infrastruktury - innowacje

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

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Graficzny edytor cieniowania

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

Programowanie Procesorów Graficznych

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

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

OpenGL i wprowadzenie do programowania gier

Julia 4D - raytracing

PRZEWODNIK PO PRZEDMIOCIE

Wprowadzenie do QT OpenGL

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

Wyświetlanie terenu. Clipmapy geometrii

Praktyczne zastosowanie grafiki komputerowej

Praca dyplomowa magisterska

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

OpenGL przezroczystość

Elementy do grafiki komputerowej. Wprowadzenie

KARTA KURSU. Grafika komputerowa

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

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

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

Programowanie współbieżne i rozproszone

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Przegląd metod renderingu czasu rzeczywistego dla fotorealistycznych wizualizacji architektonicznych

Wprowadzenie do grafiki komputerowej. W. Alda

Politechnika Poznańska, Instytut Informatyki, SUM-TWO

Wprowadzenie do grafiki maszynowej. Wprowadzenie do wprowadzenia

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

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

GUI - projektowanie interfejsów

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

SYMULACJA OPADÓW ATMOSFERYCZNYCH I POKRYWY ŚNIEŻNEJ W GENERATORZE OBRAZU JASKIER IG

Zaawansowany kurs języka Python

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

INŻYNIERIA OPROGRAMOWANIA

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Transkrypt:

Synteza dźwięku i 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 Programowanie grafiki 2D Dawniej producenci gier musieli sami zajmować się generowaniem grafiki na ekranie komputera. Wprowadzono biblioteki do tworzenia grafiki 2D, będące częścią systemu operacyjnego lub zewnętrzne, np.: GDI, GDI+ (Windows) GTK, Cairo i wiele innych (Linux) rozwiązania uniwersalne (wieloplatformowe) Biblioteki te ułatwiają tworzenie grafiki 2D, ale nie nadają się do grafiki 3D

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 (rendering) obsługa wideo (np. przechwytywanie ramek) Wykonuje obliczenia równoległe

Akceleracja 3D Wsparcie sprzętowe dla grafiki 3D Akceleratory 3D dodatkowe karty graficzne (3dfx Voodoo) Wspólczesne karty graficzne GPU realizuje sprzętowo algorytmy grafiki 3D. Najpopularniejsze układy GPU: GeForce (firmy NVidia), Radeon (firmy ATI/AMD) Programowanie grafiki Obecnie programiści korzystają z gotowych bibliotek programistycznych (SDK). Najpopularniejsze systemy do grafiki 3D: Direct3D (składnik DirectX) Microsoft, systemy Windows OpenGL dostępny dla wielu systemów operacyjnych. Zasadnicza część funkcji DirectX i OpenGL jest implementowana sprzętowo w układach GPU - przyspieszenie tworzenia obrazu, odciążenie CPU.

Programowanie grafiki Warstwy logiczne: aplikacja (np. gra) pisana z użyciem API API system programistyczny (np. DirectX albo OpenGL) procedury niezależne od sprzętu jądro systemu operacyjnego i sterowniki sprzętu tłumaczenia poleceń API na instrukcje dla konkretnego sprzętu sprzęt (np. karta graficzna) realizacja poleceń Direct3D wczesne wersje Początkowe wersje DirectX (do wersji 5.0) zawierały zbiór procedur graficznych (API) do tworzenia grafiki 3D. Możliwości DirectX nie były w tym czasie implementowane sprzętowo w kartach graficznych. 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 Direct3D 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 Direct3D 7.0 (1999) sprzętowa realizacja transform & lighting (przekształcenia i oświetlenie) 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 tekstur cieniowanie inne efekty związane z oświetleniem 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). Przesunięcie tych operacji do GPU stanowiło prawdziwą rewolucję w grafice komputerowej.

DirectX 8 Direct3D 8.0 (2000) Wprowadzenie programowalnych jednostek: vertex shader operuje na wierzchołkach (werteksach) siatki wielokątowej; pixel shader operuje na pikselach obrazu (wyznacza ich barwę). Ponadto sprzętowe algorytmy: bump mapping, texture mapping, efekt mgły Karty graficzne: NVidia GeForce 3, GeForce 4 (sprzętowy antyaliasing); ATI Radeon R200. Potoki renderingu fixed pipeline Fixed 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 zadbać o uruchamianie poszczególnych etapów renderingu można wpływać na położenie i 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) Shader 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 w procesorze graficznym. Inaczej mówiąc, shadery pozwalają programistom pisać programy na GPU. DirectX udostępnia trzy rodzaje shaderów: vertex, pixel, geometry.

Vertex shader Vertex shader program, który wykonuje operacje na siatce wielokątowej modyfikuje parametry werteksów. Każdy werteks można modyfikować niezależnie. Możliwe jest modyfikowanie współrzędnych werteksu (x, y, z), i jego parametrów (barwy, tekstury, wektora normalnego). 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 shader Pixel shader algorytm pozwalający w dowolny sposób modyfikować barwę każdego z pikseli obrazu podczas rasteryzacji. Działanie tych algorytmów jest zwykle powiązane z zastosowaniem modelu oświetlenia podczas renderingu sceny. 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

DirectX 9 Direct3D 9 (2002-2005) udoskonalenia shaderów język programowania shaderów HLSH (high level shader language) modele oświetlenia o wysokiej rozdzielczości tekstury zmiennoprzecinkowe udoskonalenie bufora werteksów (indeksy) 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), optymalizacja algorytmów (np. lepsze filtrowanie tekstur), dodatkowe algorytmy (SLI, antialiasing), zwiększenie liczby potoków renderingu.

DirectX 10 Direct3D 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 koniec z fixed pipeline Dostępny tylko dla Windows Vista/7. 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 pojedynczym trójkącie) dodawanie nowych werteksów usuwanie werteksów sprzętowe zwiększanie rozdzielczości siatki (interpolacja 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 Wydany z systemem Windows 7 (2009) teselizacja zwiększanie liczby werteksów w modelu obiektu wielowątkowy rendering (sterowanie przez wielordzeniowy CPU) compute shaders wykorzystanie shaderów do celów nie związanych z grafiką (Shader model 5.0) 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 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 systemem wieloplatformowym, dla różnych systemów operacyjnych. Jest to tylko specyfikacja zbiór funkcji i opis ich działania. Producenci sprzętu muszą zadbać o poprawną implementację tych funkcji. OpenGL definiuje bibliotekę funkcji (API) niskiego poziomu. Wymaga od programisty podania kolejnych kroków renderingu obrazu. OpenGL ARB (Architecture Review Board) konsorcjum kierujące pracami nad standardem. Programowanie w DirectX i OpenGL Direct3D programowanie za pomocą DirectX API (języki C++, C#, VB, itp.) OpenGL najczęściej korzysta się z pomocniczych bibliotek - nakładek (np. GLU, GLUT, WGL) alternatywne implementacje - np. Mesa3D wsparcie dla większości języków programowania Rozwiązania wieloplatformowe np. SDL Simple DirectMedia Layer

Programowanie shaderów Programowanie jednostek shader (karty graf.) specjalistyczne języki programowania: Cg (NVidia) Direct3D, OpenGL HLSL High Level Shader Language (Microsoft) Direct3D GLSL OpenGL Shading Language (OpenGL ARB) 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 (rendering pipeline lub pixel pipeline) 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: od 4 potoków (np. GeForce 6200) 24 potoki (np. GeForce 7900 XT) najszybsze karty: 240 potoków (GeForce 280 GTX) Modele kart z danej serii mogą się różnić liczbą potoków (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, wykorzystując shadery: początkowo - konieczność oszukiwania (tworzenia sztucznych shaderów) obecnie tworzone są implementacje dla obliczeń równoległych na GPU: NVidia CUDA (GeForce) ATI Stream (Radeon) OpenCL (otwarta specyfikacja) DirectCompute (Microsoft, DirectX) Game engine Game engine ( silnik gry ) część oprogramowania wykorzystywana do tworzenia gry. Obejmuje m.in.: rendering, modele fizyczne, 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 przejmowania się prawami 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

Havok Physics Havok inny model fizyczny (physics engine) wykorzystywany we współczesnych grach opracowany przez firmę Havok, obecnie własność firmy Intel, wykorzystywany w wielu grach, dostępny na wielu platformach (PC, konsole, itp.) gra Second Life model uruchamiany na serwerach, nie na komputerach graczy może współpracować z innymi modułami Havok, np. modelem zachowania się postaci zarzucono implementację na GPU