Algorytmy grafiki komputerowej czasu rzeczywistego
Informatyka S2 - 2016/2017

Wykłady

  1. Programowalny potok renderowania. Buforowanie geometrii (VBO, IBO, VAO). 2016-10-24

    Wykład 1 - Prezentacja w formacie PDF

  2. Teksturowanie. Bufor klatki (FBO). Efekty post-processing (bloom). 2016-11-14

    Wykład 2 - Prezentacja w formacie PDF

  3. Deferred shading. Pętla główna i jej implementacje. Debugowanie i analiza wydajności. 2016-11-28

    Wykład 3 - Prezentacja w formacie PDF

Materiały na zajęcia laboratoryjne

  1. Wizualizacja mapy wysokości
    VBO, IBO, shadery, multi-texturing

    Oczekiwany rezultat

    Celem zadania jest napisanie programu wizualizującego mapę wysokości podaną w formie bitmapy. Należy wykorzystać współczesne techniki oferowane przez OpenGL, tj. VBO, IBO oraz shadery.

    Sugerowane kolejne etapy

    1. Odczyt wysokości z bitmapy
    2. Stworzenie VBO zawierającego wierzchołki i ich wizualizacja w postaci chmury punktów (prymityw GL_POINTS)
    3. Stworzenie IBO pozwalającego na wyrenderowanie powierzchni jako TRIANGLE_STRIP
    4. Napisanie shadera kolorującego fragmenty zależnie od wysokości
    5. Obliczenie wektorów normalnych i ich zapis do VBO
    6. Implementacja modelu oświetlenia i cieniowania
    7. Teksturowanie
    8. Multiteksturowanie z użyciem TEXTURE_ARRAY

    Dla ambitnych

    • Technika Level Of Detail (LOD), gdzie liczba wierzchołków zależna jest od odległości od kamery. Najwygodniej jest podzielić mapę na kafelki, a następnie dla każdego z nich określać z jaką szczegółowością powinien być odwzorowany (np. zależnie od odległości od kamery). Do pominięcia wierzchołków można też spróbować użyć Geometry Shader.
    • Wizualizacja mapy wysokości oparta o rzadką siatkę i tessellation shader, który dzieli tę siatkę z gęstością zależnią od odgległości od kamery (LOD). Mapa wysokości odczytywana będzie dopiero w shaderach, więc musi zostać przekazana do karty graficznej jako tekstura. Warto w niej zawrzeć wyliczone wektory normalne.

    Materiały

    • Kody źódłowe prostego programu opartego o GLFW, korzystającego z OpenGL 3.3: VS2015, VS2012, VS2010
      Jest to dobry punkt wyjścia dla rozwiązania całego zadania.
    • glGame4
      Kody źródłowe projektu glGame dr. Matiuka - również dobry początek.
    • Program będący oczekiwanym rezultatem
      Zawiera przykładowe mapy wysokości i tekstury.
      Sposób użycia:
      AGKCR.exe [sciezka_do_mapy [skalowanie_poziomie [skalowanie_pionowe]]]
      np.: AGKCR.exe Maps\Canyon_512.bmp 1 20
      sprawi, że mapa zostanie wyświetlona przyjmując że każdy 1px to jedna jednostka OpenGL, a wartość 255 z bitmapy to 20 jednostek w pionie.
    • OpenGL Wiki, OpenGL 4.5 Reference
    • LOD z użyciem teselacji
  2. Efekty post-processing
    FBO, shadery, HDR, blur, bloom

    Oczekiwany rezultat

    Celem zadania jest implementacja efektu Bloom w oparciu o FBO z wieloma color attachments i rozmycie gaussowskie wykonywane dwuetapowo z użyciem programowalnego potoku renderowania.

    Sugerowane kolejne etapy

    1. Utworzenie zmiennoprzecinkowego FBO, wyrenderowanie do niego sceny
    2. Wyrenderowanie zawartości FBO za pomocą full-screen quada
    3. Zwiększenie intensywności oświetlenia poza zakres 0.0-1.0, prosty tonemapping
    4. Dodanie drugiego color attachment do głównego FBO i zapisanie w nim tylko jasnych fragmentów
    5. Addytywny blending w celu połączenia wartości z obu color attachments
    6. Zaimplementowanie dwuetapowego rozmycia Gaussowskiego dla color attachment zawierającego jasne fragmenty
    7. Dobór parametrów zaimplementowanego rozwiązania dla uzyskania najlepszego rezultatu

    Dla ambitnych

    • Anti-aliasing - wykorzystanie anti-aliasingu w potoku renderowania opartym o FBO
    • Volumetric light scattering (tzw. light shafts)

    Materiały

  3. Deferred shading

    Oczekiwany rezultat

    Oczekiwany rezultat

    Celem zadania jest wykorzystanie techniki deferred shading w celu wykonania obliczeń związanych z oświetleniem dopiero po wyrenderowaniu geometrii. Dzięki temu możliwe będzie znaczne przyspieszenie symulacji wielu dynamicznych źródeł światła.

    Sugerowane kolejne etapy

    1. Utworzenie FBO pełniącego rolę G-Buffera
    2. Wyrenderowanie do G-Buffera niezbędnych danych (pozycja, wektory normalne, albedo, ew. specular)
    3. Przygotowanie deferred pass, a więc dodatkowego przebiegu z shaderem wykorzystującym wartości odczytane z tekstur G-Buffera
    4. Wizualizacja zawartości G-Buffera (czy pozycje, wektory normalne, albedo mają sensowne wartości?)
    5. Implementacja modelu oświetlenia w deferred pass
    6. Utworzenie kolekcji źródeł światła - tablica pozycji oraz kolorów, ewentualnie wektory ruchu w celu ich animacji
    7. Powiązanie z efektem bloom (może wymagać dodatkowego przebiegu i/lub blitowania zawartości FBO)

    Dla ambitnych

    • Light volumes - źródła światła renderowane jako dodatkowa geometria o kształcie zgodnym z ich zasięgiem
    • Tiled shading - podział przestrzeni ekranu na kafelki i indywidualne listy świateł dla każdego z kafelków
    • Cykl dnia-nocy - przemieszczające się słońce zachodzące za horyzont, księżyc, zmiana koloru światła w ciągu dnia
    • Atmospheric scattering - symulacja koloru nieba

    Materiały

Kontakt

dr inż. Bartosz Bazyluk
bartosz@bazyluk.net

Przewiń do...