Techniki post-processingu w OpenGL

Prowadzący

Piotr Dulikowski <piodul [at] op [dot] pl>

Opis

Post-processing to określenie na różnego rodzaju metody uatrakcyjnienia gotowego obrazu. Są one często wykorzystywane w aplikacjach 3D do zastosowania efektów wymagających informacji o całym obrazie, np. kreskówkowe obwódki czy rozmycie. Na dodatek nie potrzebują informacji o geometrii sceny, przez co można je wdrożyć do gotowego silnika graficznego z minimalnym wysiłkiem. Na tych warsztatach pokażę kilka ciekawych efektów tego typu wykorzystywanych w nowoczesnych grach komputerowych.

Program zajęć


Dzień 1: Podstawy

Omówię, jak się używa framebuffer-ów w OpenGL-u. Rozszerzymy nasze programy o prosty mechanizm post-fx.

Dzień 2-3: The real stuff

Nauczymy się i naklepiemy bardziej zaawansowane efekty:

(Zrobimy, ile zdążymy; w razie nadmiaru czasu mogę zaproponować coś jeszcze)

Wymagania

Zadania

Zadanie nr 1

Napisz aplikację, która wczyta zadany obrazek z pliku do tekstury, przekształci go za pomocą fragment shadera i narysuje. Chciałbym, aby w Twoim programie znalazły się następujące efekty:

Ścieżkę do zadanego obrazka powinno się dać podać jako argument w linii poleceń. Nie musisz dbać o zachowanie proporcji przy wyświetlaniu obrazka. Powinno dać się przełączać pomiędzy efektami za pomocą klawiatury.

Zadanie nr 2

Napisz program, który wczyta zadany model 3D i wyświetli go. Model zapisany będzie w pliku tekstowym, w uproszczonej wersji formatu OBJ. Możesz założyć, że plik jest w poprawnym formacie.

Format modelu

Każda linijka zaczyna się od nazwy definicji - v, vn bądź f. Każda linijka zaczynająca się od innego ciągu znaków powinna być zignorowana.
Po nazwie jest odstęp, a dalej - argumenty:

v

v x y z

Definiuje pozycję wierzchołka (x, y, z - liczby zmiennoprzecinkowe).
vn

vn x y z

Definiuje wektor normalny (prostopadły) do powierzchni - (x, y, z - liczby zmiennoprzecinkowe).
f

f v1//vn1 v2//vn2 v3//vn3

Definiuje trójkąt. Każdy jego wierzchołek opisany jest przez dwie nieujemne liczby całkowite:

UWAGA: Numery definicji liczone są od jedynki!

Przykładowy plik

v 0.0 0.0 0.0


v 1.0 0.0 0.0


v 0.0 1.0 0.0


v 1.0 1.0 0.0


vn 0.0 0.0 1.0


f 1//1 2//1 3//1


f 4//1 2//1 3//1

Powyższy fragment opisuje model złożony z dwóch trójkątów o wierzchołkach o współrzędnych:

Każdy z tych wierzchołków ma ten sam wektor normalny - (0, 0, 1).

Swój program można testować na czajniczku z Utah, bądź stanfordzkim króliku.
Tego typu model można również łatwo stworzyć samemu w Blenderze (eksportując do OBJ zaznacz w opcjach wyłącznie Include Normals i Triangulate Faces)
Model powinien być oświetlony przez jedno kierunkowe źródło światła. Model powinien dać się obracać, i ewentualnie skalować.

 

Dodatkowe informacje

 

Na zajęciach każdy powinien mieć przygotowany program rysujący jakąś prostą scenę/model 3D, który będziemy rozszerzać. Jeżeli nie pisałeś(aś) wcześniej czegoś takiego, możesz wykorzystać aplikację z zadania kwalifikacyjnego, lecz zachęcam do uprzedniej zabawy z OpenGL-em w celu lepszego zapoznania się z biblioteką.
W razie pytań - śmiało pisz na maila.


Przydatne materiały:

Polecam następujące biblioteki (ich użycie nie jest, oczywiście, wymagane):