Gry komputerowe
Informatyka N1 - 2017/2018

Terminy

Konsultacje: 2018-06-21 (czwartek), godz. 16.15, sala 300 WI2

Wykłady

  1. Wprowadzenie. Synteza trójwymiarowej grafiki czasu rzeczywistego. OpenGL. Transformacje geometryczne.

    Wykład 1 - Prezentacja w formacie PDF

  2. Techniki wyświetlania obrazu i ich zastosowanie w grach. Kamera w scenie 3D. Implementacja interaktywnej kamery pierwszoosobowej.

    Wykład 2 - Prezentacja w formacie PDF

  3. Oświetlenie. Potok renderowania. Techniki oświetlenia i cieniowania.

    Wykład 3 - Prezentacja w formacie PDF

  4. Zaawansowane oświetlenie. Definiowanie geometrii. Backface culling. Renderowanie mapy wysokości.

    Wykład 4 - Prezentacja w formacie PDF

  5. Tekstury. Pojęcie tekstury, potok teksturowania, zastosowania.

    Wykład 5 - Prezentacja w formacie PDF

  6. Scena i kolizje. Organizacja sceny. Techniki optymalizacji renderowania. Wykrywanie i reakcja na kolizje.

    Wykład 6 - Prezentacja w formacie PDF

Materiały na zajęcia projektowe

  1. Zajęcia projektowe 1
    Transformacje geometryczne

    Na zajęciach omówione zostaną podstawy użycia OpenGL. Zbudowana zostanie prosta, złożona z kilku brył scena.

    Sposoby programowania grafiki z użyciem OpenGL które będą wykorzystywane na zajęciach nie odpowiadają współczesnemu podejściu. Jest to celowe i ma charakter edukacyjny - tzw. immediate mode i fixed pipeline, choć archaiczne, są dużo łatwiejsze do zrozumienia i pozwalają na bardziej bezstresowe zrobienie pierwszych kroków w dziedzinie grafiki komputerowej czasu rzeczywistego.

    Zainteresowanych podejściem współczesnym odsyłam do dokumentacji nowego OpenGL (wersja 3.2 i nowsze) i np. do bardzo dobrej książki Real-Time Rendering. Third edition. Akenine-Muellera, Hainesa i Hoffmana.

    Zadanie nr 1

    Zadaniem do wykonania na pierwszych laboratoriach jest utworzenie animowanego "pajacyka" składającego się z kilku prostych brył. Sugerowane jest posłużenie się załączonym projektem, jako punktem wyjściowym.

    Poniżej przedstawiono oczekiwany wygląd wykonanego zadania, w dwóch wersjach zależnych od ambicji wykonującego:

    Materiały

    Układ współrzędnych w OpenGL

    Rysunek, który jest często bardzo pomocny dla poprawnego wyobrażenia sobie struktury sceny:

    Układ współrzędnych w OpenGL

  2. Zajęcia projektowe 2
    Kamera FPP, obsługa wejścia z klawiatury

    Zajęcia będą obejmowały zagadnienie kontroli kamery pierwszoosobowej (FPP - First-Person Perspective). Poruszone zostaną kwestie związane z podstawową obsługą wejścia od użytkownika.

    Zadanie nr 2

    Zadaniem jest zaimplementowanie działania interaktywnej kamery pierwszoosobowej.

    • Wesja podstawowa
      • Kontrola ruchu za pomocą klawiatury: ruch do przodu, do tyłu, na boki
      • Kontrola obrotu wokół jednej osi za pomocą klawiatury
      • Wykorzystanie gluLookAt(...)
      • Poprawna obsługa repetycji klawiszy
      • Mile widziana inercja - ruch kamery nie zatrzymujący się natychmiastowo, ale płynnie wygasający

      Lab2 - Wersja podstawowa (Youtube)

    • Wesja zaawansowana

      To co wersja podstawowa, a także:

      • obrót wokół dwóch osi (przydadzą się współrzędne sferyczne)
      • obrót kontrolowany z użyciem myszy (przydatne: glutWarpPointer(x, y), glutSetCursor(GLUT_CURSOR_NONE), glutPassiveMotionFunc(f))

      Lab2 - Wersja zaawansowana (Youtube)

    Materiały

  3. Zajęcia projektowe 3
    Oświetlenie

    Celem zajęć jest poznanie podstawowych technik cieniowania z użyciem nieprogramowalnego potoku renderowania OpenGL (fixed pipeline).

    Fixed pipeline pozwala jedynie na uzyskanie cieniowania płaskiego per face lub gładkiego per vertex, gdzie dla drugiego z nich wynik jest obliczany dla każdego wierzchołka, po czym jest on interpolowany pomiędzy tymi wierzchołkami. Jest to tzw. cieniowanie Gouraud. Daje to kiepskie efekty wizualne szczególnie dla komponentu specular.

    Współcześnie standardem jest stosowanie lepszego jakościowo cieniowania per fragment (per pixel), a więc obliczanie koloru na podstawie modelu oświetlenia dla każdego fragmentu osobno, po uprzedniej interpolacji wektora normalnego. Ten rodzaj cieniowania, nazywany cieniowaniem Phonga (lub z małym uproszczeniem Phonga-Blinna), można jednak uzyskać tylko korzystając z programowalnego potoku renderowania, w oparciu o własne programy cieniujące wykonywane na karcie graficznej, tzw. shadery które wykraczają poza materiał przerabiany na laboratoriach w ramach tego przedmiotu (jednak gorąco zachęcam do zapoznania się z tą techniką).

    Zadanie nr 3

    Zadaniem jest umieszczenie na scenie różnych, zmieniających się źródeł światła.

    • Wesja podstawowa
      • Dwa źródła światła: directional i pointlight
      • Wykorzystanie komponentów ambient/diffuse
      • Wygaszanie światła (attenuation)
      • Kontrola położenia źródła światła - poddanie jego pozycji transformacjom geometrycznym, np. związanie jednego ze źródeł z położeniem gracza
      • Zmienność źródeł światła (np. zmiana koloru, jasności, kierunku, wygaszania)
      • Mile widziane zastosowanie w bardziej złożonym środowisku - jak w przykładzie

      Lab3 - Wersja podstawowa (Youtube)

    • Wesja zaawansowana

      To co wersja podstawowa, a także:

      • Świadome użycie komponentu specular
      • Światło typu spotlight
      • Przemyślane użycie światła dla celów estetycznych

      Lab3 - Wersja zaawansowana (Youtube)

    Materiały

  4. Zajęcia projektowe 4
    Definicja własnej geometrii

    Podczas zajęć omówione zostaną sposoby definiowania własnych brył z użyciem OpenGL i tzw. immediate mode. Choć zaawansowaną geometrię zazwyczaj modeluje się za pomocą specjalistycznego oprogramowania (np. Blender), następnie jedynie importując gotowy model, to wiedza o podstawach i wyobraźnia przestrzenna są mimo wszystko niezmiernie przydatne. Dlatego te zajęcia będą dotyczyły opisywania kształtów "ręcznie".

    Zadanie nr 4

    Zadaniem jest umieszczenie na scenie własnej, nieskomplikowanej, poprawnie oświetlonej bryły.

    • Wesja podstawowa
      • Własna bryła zawierająca zarówno krawędzie "ostre", jak i "gładkie"
      • Poprawnie zdefiniowane wektory normalne, pozwalające na poprawne oświetlenie bryły
      • Poprawne rysowanie bryły przy włączonym cullingu
      • Wstawienie wielu instancji bryły na scenie, posługując się transformacjami

      Lab4 - Przykładowa wersja podstawowa (Youtube)

    • Wesja zaawansowana

      To co wersja podstawowa, a także:

      • Niezależny ruch części bryły
      • Wstawianie wielu instancji w sposób efektywny, tj. bez każdorazowego przekazywania współrzędnych wierzchołków (np. przy użyciu Display List, Vertex Array, VBO)

      Lab4 - Przykładowa wersja zaawansowana (Youtube)

    Materiały

  5. Zajęcia projektowe 5
    Teksturowanie, import modeli

    Zadanie nr 5

    Zadaniem jest oteksturowanie niestandardowej bryły z użyciem dopasowanej do jej geometrii tekstury (najlepiej własnej).

    • Wesja podstawowa
      • Nałożenie niestandardowej tekstury na niestandardową bryłę
      • Tekstura musi być czymś więcej, niż jednolitym wzorem - chodzi o to, by była dopasowana do bryły, np. poprzez umieszczenie na niej elementów w świadomy sposób odpowiadających kształtowi. Tak, by nie było wątpliwości że współrzędne tekstury zostały dobrane celowo
      • Technika filtracji tekstury ma zostać wybrana w sposób świadomy

      Lab5 - Przykładowa wersja podstawowa (Youtube)

    • Wesja zaawansowana

      To co wersja podstawowa, a także:

      • Kilka poprawnie oteksturowanych brył/obiektów o skomplikowanej formie, np. zamodelowanych wcześniej w Blenderze
      • Mile widziany teren, skybox/skydome, mgła, etc.

      Lab5 - Przykładowa wersja zaawansowana (Youtube)

    Materiały

Kontakt

dr inż. Bartosz Bazyluk
bartosz@bazyluk.net

Przewiń do...