Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe
Czym są tekstury? Tekstury są tablicowymi strukturami danych o wymiarze od 1 do 3, których elementami są tzw. teksele. - wyróżniamy tekstury 1-, 2-, 3- i 4-kanałowe (teksle reprezentują, odpowiednio, wektory 1-,..., 4-wymiarowe); - z teksturą skojarzony jest ortogonalny ukł. wsp., którego osie w kolejnych wymiarach oznaczane są zwykle jako UVW (czasem jako STR); - nominalne wartości współrzędnych tekstury należą do zakresu [0,1] sposób interpretowania wartości spoza tego zakresu zależy od określonego trybu adresowania tekstury (np. tryb wrap służący do powielania tekstury); - zawartość tekstury odczytywana jest za pośrednictwem współrzędnych tekstury, przy czym przy odczycie dodatkowo stosowana jest określona funkcja filtru, która zwraca wartość na podstawie uśrednienia wartości tekseli otaczających odczytywany punkt; - oryginalna tekstura często przechowywana jest wewnętrznie w postaci ciągu tzw. mipmap, którego kolejnymi elementami są tekstury o malejącej dwukrotnie rozdzielczości.
Materiały mogą wykorzystywać tekstury (na zasadach algorytm-struktura danych) i zwykle to robią, ale w ogólnym przypadku nie jest to konieczne. Klasyczna rola materiału polega na określaniu barwy punktu powierzchni pod wpływem padającego na tę powierzchnię światła (rozwiązanie tzw. równania oświetlenia). Dodatkowo materiały mogą: Czym są materiały? Materiały są algorytmami, które określają sposób prezentowania się obiektu geometrycznego w scenie (materiał jest niczym ubiór zakładany na niewidzialnego ducha, tak aby duch stał się widoczny). We współczesnych grach materiały implementowane są zwykle przy wykorzystania shaderów, które są programami wykonywanymi przez kartę graficzną. - same emitować światło, - być zmienne w czasie, - nie uwidaczniać całej geometrii ( dziury w ubranku dla ducha ), - modyfikować orientację i położenie geometrii w scenie w zależności od pewnych parametrów (np. orientować geometrię prostokąta, tak aby był zawsze zwrócony w stronę kamery - billboardy), - a nawet modyfikować samą geometrię, na którą materiał założono.
Rozproszone i zwierciadlane odbicie światła
Model oświetlenia Phonga [r 1, g 1, b 1, a 1 ] [r 2, g 2, b 2, a 2 ] = [r 1 r 2, g 1 g 2, b 1 b 2, a 1 a 2 ] C M L ambient ambient gdzie: ( i ) M diffuse Ldiffuse M L specular specular max{ DN,0} (max{ UR,0}) power R D 2( ND) N
Barwa finalna gdzie: C final M emissive num_ lights i1 C (i) - tłumienie światła względem odległości (światła: punktowe i stożkowe) a 0 a d a 1 a i - współczynniki tłumienia, d odległość źródła światła od oświetlanego punktu powierzchni 2 d 2 (i) - współczynnik tłumienia kątowego (stożkowe źródła światła)
Przekształcenia w potoku graficznym Model space World trans. View trans. Projection space World space Perspective divide Projection trans. Viewport trans. View space Screen space Normalized Device Coordinates (Post-projection space) x i y [-1, 1] z [0, 1] (DirectX) z [-1, 1] (OpenGL)
Inne układy współrzędnych w CG Tangent space Przestrzenie styczne (TNB) określone w wierzchołkach powierzchni... i w dowolnym punkcie powierzchni (zwykle poprzez interpolację tych pierwszych i następnie ortogonalizację) Podstawowe wykorzystanie przestrzeni stycznych ma miejsce w mapowaniu nierówności (bump mapping) techniką mapowania normalnych (normal mapping). Wówczas wszystkie wektory wykorzystywane do obliczania równania oświetlenia w cieniowanym punkcie sprowadzane są do przestrzeni stycznej w tym punkcie. Ponieważ zwykle mapowanie normalnych jest jednym ze składników materiałów, wiele systemów materiałów w silnikach gier (w tym UDK) domyślnie dokonuje obliczeń związanych z oświetlaniem danego punktu powierzchni we współrzędnych stycznych w tym punkcie.
Inne układy współrzędnych w CG (cd.) Light space Scena widziana przez obserwatora Scena widziana przez światło Obraz odległości obiektów od źródła światła (mapa głębokości) Przestrzeń światła jest ortogonalnym układem wsp. związanym z danym źródłem światła. Układ ten jest analogiem układu wsp. kamery i służy do określania sposobu postrzegania świata przez źródło światła. Podstawowe wykorzystanie tego układu ma miejsce w metodach wyznaczania cieni bazujących na technikach mapowania cieni (shadow mapping).
Programowalny potok graficzny shader model 3.0 (OpenGL 2.0, DirectX 9.0) Program shadera wierzchołków wykonywany jest PRZED procesem rasteryzacji, oddzielnie dla każdego wierzchołka z napływającego do potoku graficznego strumienia wierzchołków. - jego zadaniem jest dokonywanie operacji na wierzchołkach, w szczególności odpowiednie przekształcanie ich współrzędnych. Program shadera fragmentów/pikseli wykonywany jest PO procesie rasteryzacji, oddzielnie dla każdego fragmentu. - jego rola polega na wyznaczeniu barwy fragmentu (np. na podstawie danych pobranych z tekstur i obliczeń związanych z oświetleniem), który następnie kierowany jest do bufora ramki.
Vertex shader i fragment shader - przykłady
Mieszanie alfa (-blending) ma na celu wyznaczenie nowej wartości barwy piksela w buforze kolorów na podstawie bieżącej barwy piksela w buforze kolorów (destination color) i barwy fragmentu (source color) po jego przetworzeniu przez shader fragmentów. Ogólne równanie mieszania alfa: gdzie: Mieszanie alfa C dst = C src F src C dst F dst C src = (r s, g s, b s, a s ) barwa aktualnie przetwarzanego fragmentu; C dsc = (r d, g d, b d, a d ) aktualna barwa piksela w buforze kolorów; F src i F dsc ustalone współczynniki mieszania będące predefiniowanymi funkcjami wektorowymi 4d; - operacja mnożenia wektorów 4d po składowych; - ustalona operacja dodawania wektorów 4d. Współczynniki mieszania F src i F dsc można m.in. ustalić jako: 0, 1, (a s, a s, a s, a s ), 1 (a s, a s, a s, a s ), (a d, a d, a d, a d ), 1 (a d, a d, a d, a d ), C src, 1 C src, C dst,1 C dst. Operację można ustalić jako: dodawanie, odejmowanie, odwrócone odejmowanie (tj. Dst Src), maksimum lub minimum (po składowych wektorów).
Test alfa Test alfa umożliwia odrzucenie fragmentu z dalszego przetwarzania na podstawie porównania związanej z tym fragmentem składowej alfa z zadaną wartością referencyjną ref: IF alfa ref THEN accept fragment ELSE reject fragment gdzie oznacza relację porównania (np.: <, >,,, ==,!=). Test alfa wykorzystuje się na ogół do udawania złożonej geometrii poprzez nakładanie na wielokąty tekstur maskujących z odpowiednio zdefiniowanymi wartościami alfa tekseli i odrzucaniu fragmentów nieprzechodzących testu. rzeczywista geometria efekt końcowy Test alfa
Edytor materiałów w UDK (prawie) Najprostszy materiał
Następny wykład: Materiały przykłady wykorzystania edytora materiałów UDK