Karta przedmiotu Podstawy programowania procesorów graficznych realizowanego w ramach projektu PO WER 2017-2019 Wydział Inżynierii Elektrycznej i Komputerowej Kierunek studiów: Informatyka Profil: Ogólnoakademicki Studia stacjonarne Stopień studiów: I 1 Informacje o przedmiocie Nazwa przedmiotu: Podstawy programowania procesorów graficznych Nazwa przedmiotu w języku angielskim: Fundamentals of GPU Programming Semestr: 6 lub 5 2 Rodzaj zajęć, liczba godzin w planie studiów Warsztaty: ykłady/ćwiczenia/laboratoria: 15/0/0 Laboratoria komputerowe/projekty 30/15 CELE PRZEDMIOTU Cel 1. Zapoznanie studentów z zasadami działania GPU oraz podstawowymi technikami programowania GPU. Cel 2. Nabycie umiejętności programowania shader-ów w języku GLSL. Cel 3. Nabycie umiejętności programowania aplikacji 3D z wykorzystaniem języka C++ i biblioteki OpenGL. Cel 4. Nabycie umiejętności programowania GPU pod kątem obliczeń ogólnego przeznaczenia (GPGPU) z wykorzystaniem języka C++ i biblioteki OpenGL. WYMAGANIA WSTĘPNE a. Dobra znajomość języków C i C++. b. Znajomość podstawowych zagadnień z algebry. 1
EFEKTY KSZTAŁCENIA EK1. Wiedza: Student zna podstawy działania działania GPU i podstawowe techniki programowania GPU. EK2. Wiedza: Student zna podstawowe modele oświetlenia wykorzystywane w programowaniu silników graficznych/gier 3D. EK3. Umiejętności: Student potrafi wykorzystać więdzę matematyczną w grafice 3D. EK4. Umiejętności: Student potrafi implementować proste shader-y w języku GLSL. EK5. Umiejętności: Student potrafi implementować proste aplikacje graficzne oraz proste aplikacje używające GPU do obliczeń ogólnego przeznaczenia (GPGPU) w języku C++ z wykorzystaniem biblioteki OpenGL. EK6. Kompetencje społeczne: Student potrafi pracować w zespole. TREŚCI PROGRAMOWE WYKŁAD W1 1.5h Przedstawienie tematyki przedmiotu. Historia GPU i porównanie obecnego sprzętu (pod względem architektury). W2 3.5h Pipeline, Shader -y ( Vertex Shader, Geometry Shader, Fragment Shader ), język GLSL, Uniform Buffer Object (UBO), bufor wierzchołków i indeksów (vertex & index buffer). W3 3h Matematyka w grafice 3D macierze (modelu, widoku, projekcji), transformacje, współrzędne jednorodne. W4 1h Tekstury, jednostki teksturujące, sampler -y. W5 2h Oświetlenie model Phonga i model Blinna-Phonga. W4 4h Obliczenia ogólnego przeznaczenia na GPU (GPGPU) Compute Shader, Shader 2
Storage Buffer Object (SSBO) i pamięć współdzielona (shared memory). PROJEKTY P1 13h Projekt zespołowy. Zaprojektowanie, udokumentowanie i zaimplementowanie aplikacji 3D z wykorzystaniem języka C++, GLSL i bilioteki OpenGL. P2 2h Ocena projektów. Podsumowanie zajęć projektowych. Wnioski końcowe. LABORATORIA KOMPUTEROWE K1 2h Tworzenie pierwszego programu z użyciem OpenGL. K2 2h Rendering 2D implementacja programu renderującego trójkąt ( Vetrtex Shader + Fragment Shader ). K3 2h Rendering 2D implementacja programu renderującego bardziej skomplikowane obiekty (z użyciem bufora wierzchołków, indeksów i UBO ). K4 2h Rendering 2D implementacja różnego rodzaju shader-ów. K5 2h Macierze w grafice 3D implementacja prostych programów demonstrujących zastosowanie wektorów i macierzy w grafice 3D. K6 2h Rendering 3D implementacja prostego programu renderującego scenę 3D. K7 2h Rendering 3D implementacja programu demonstrującego zaawansowane wykorzystanie UBO. K8 2h Rendering 3D implementacja programu renderującego oteksturowane obiekty 3D. 3
K9 6h Rendering 3D implementacja cieniowania Phonga i Blinna-Phonga. K10 2h Obliczenia ogólnego przeznaczenia (GPGPU) tworzenie pierwszego programu z użyciem Compute Shader -a. K11 2h Obliczenia ogólnego przeznaczenia (GPGPU) implementacja programu demonstrującego zaawansowane wykorzystanie SSBO. K12 2h Obliczenia ogólnego przeznaczenia (GPGPU) implementacja shader-ów używających pamięci współdzielonej ( shared memory ). K13 2h Obliczenia ogólnego przeznaczenia implementacja shader-ów używających operacji atomowych. NARZĘDZIA DYDAKTYCZE N1 Wykłady N2 Prezentacje multimedialne N3 Ćwiczenia laboratoryjne N4 Ćwiczenia projektowe N5 Konsultacje N6 Praca w grupach SPOSOBY OCENY Ocena formułująca F1 Ćwiczenia praktyczne F2 Projekt zespołowy F3 Odpowiedź ustna F4 Kolokwium 4
Ocena podsumowująca P1 Laboratorium: na podstawie ocen F1, F3, F4. Szczegółowe kryteria oceny przedstawia prowadzący na pierwszych zajęciach laboratoryjnych. P2 Projekt: na podstawie ocen F2 i F3. Szczegółowe kryteria oceny przedstawia prowadzący na pierwszych zajęciach projektowych. P3 Średnia ocen końcowych z laboratorium i projektu. Warunki dodatkowe brak KRYTERIA OCENY EFEKT KSZTAŁCENIA 1 Student omawia w podstawowym zakresie podstawy działania GPU i podstawowe techniki programowania GPU. Student omawia w rozszerzonym zakresie podstawy działania GPU i podstawowe techniki programowania GPU. Student omawia w pełnym zakresie podstawy działania GPU i podstawowe techniki programowania GPU. EFEKT KSZTAŁCENIA 2 Student charakteryzuje wybrany model oświetlenia wykorzystywany w programowaniu silników graficznych/gier 3D. Student charakteryzuje podstawowe modele oświetlenia wykorzystywane w programowaniu silników graficznych/gier 3D. Student charakteryzuje w pełnym zakresie podstawowe modele oświetlenia wykorzystywane w programowaniu silników graficznych/gier 3D. EFEKT KSZTAŁCENIA 3 Student potrafi w podstawowym zakresie wykorzystać więdzę matematyczną w grafice 3D (głównie rendering macierze obiektu, widoku, projekcji). Student potrafi w rozszerzonym zakresie wykorzystać więdzę matematyczną w grafice 3D (rendering, prosta animacja sceny 3D, itp.). 5
Student potrafi w pełnym zakresie wykorzystać więdzę matematyczną w grafice 3D (rendering, zaawansowana animacja sceny 3D, itp.). EFEKT KSZTAŁCENIA 4 Student potrafi implementować proste shader-y w podstawowym zakresie ( Vertex Shader, Fragment Shader ) w języku GLSL. Student potrafi implementować proste shader-y w rozszerzonym zakresie ( Vertex Shader, Fragment Shader, Compute Shader ) w języku GLSL. Student potrafi implementować proste shader-y w pełnym zakresie ( Vertex Shader, Geometry Shader, Fragment Shader, Compute Shader ) w języku GLSL. EFEKT KSZTAŁCENIA 5 Student potrafi implementować proste aplikacje graficzne w języku C++ z wykorzystaniem biblioteki OpenGL. Student potrafi implementować proste aplikacje graficzne oraz proste aplikacje używające GPU do obliczeń ogólnego przeznaczenia (GPGPU) w języku C++ z wykorzystaniem biblioteki OpenGL. Student potrafi implementować dobrze zoptymalizowane proste aplikacje graficzne oraz dobrze zoptymalizowane proste aplikacje używające GPU do obliczeń ogólnego przeznaczenia (GPGPU) w języku C++ z wykorzystaniem biblioteki OpenGL. EFEKT KSZTAŁCENIA 6 Student wykonuje przydzielony mu fragment zadania, poprawnie i w określonym terminie. Student uczestniczy w dyskusjach na tematy związane z zadaniem, wykonuje przydzielony mu fragment zadania poprawnie i w określonym terminie, oraz omawia rezultat swojej pracy z pozostałymi członkami zespołu. Student inicjiuje dyskusje na tematy związane z zadaniem, aktywnie w nich uczestniczy, wykonuje przydzielony mu fragment zadania poprawnie i w określonym terminie, oraz omawia rezultat swojej pracy z pozostałymi członkami zespołu. WYKAZ LITERATURY Literatura podstawowa 6
1. Dokumentacja online OpenGL: https://www.opengl.org/documentation/current_version/ 2. Dokumentacja online języka GLSL: https://khronos.org/registry/opengl/index_gl.php#apispecs 3. Graham Sellers, Richard S Wright Jr., Nicholas Haemel - "OpenGL Superbible: Comprehensive Tutorial and Reference" (7th Edition). Literatura uzupełniająca 1. Jason Zink, Matt Pettineo, Jack Hoxley - "Practical Rendering and Computation with Direct3D 11". 2. Meyers S. - Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14, -, 2014, O Reilly Media INFORMACJE O NAUCZYCIELACH AKADEMICKICH Osoba odpowiedzialna za kartę : dr inż. Zbigniew Kokosiński ( zk@pk.edu.pl ) Osoby prowadzące przedmiot: mgr Kamil Nowakowski kamil.nowakowski@uj.edu.pl 14. Zatwierdzenie karty przedmiotu do realizacji... (miejscowość, data) (odpowiedzialny za przedmiot) (dziekan)... Przyjmuję do realizacji (data i podpisy osób prowadzących przedmiot) 7