Jacek Matulewski, Tomasz Dziubak Grafika 3D na przykładzie XNA 3.1 ITA-106 Wersja 1.02 (XNA 3.1, PS 2.0) Toruo, listopad 2010
2010 Jacek Matulewski, Tomasz Dziubak. Autor udziela prawa do bezpłatnego kopiowania i dystrybuowania wśród pracowników uczelni oraz studentów objętych programem ITAcademy. Wszelkie informacje dotyczące programu można uzyskad: pledu@microsoft.com. Wszystkie inne nazwy firm i producentów wymienione w niniejszym dokumencie mogą byd znakami towarowymi zarejestrowanymi przez ich właścicieli. Inne produkty i nazwy firm używane w treści mogą byd nazwami zastrzeżonymi przez ich właścicieli. Kontakt z autorami: Jacek Matulewski, e-mail: jacek@fizyka.umk.pl, WWW: http://www.fizyka.umk.pl/~jacek Tomasz Dziubak, e-mail: tomek@fizyka.umk.pl Adres do korespondencji: Jacek Matulewski Instytut Fizyki, Uniwersytet Mikołaja Kopernika w Toruniu ul. Grudziądzka 5 87-100 Toruo Strona i-2
Spis treści I. Podstawy grafiki 3D 1. Podstawowe koncepcje grafiki 3D (podstawy teoretyczne) 2. Komponenty gry 3. Oświetlenie 4. Odwzorowywanie tekstur 5. Dźwięk w XNA 3.0. Komponenty wizualne 6. Gra, czyli sterowana animacja (kontrolery gier) 7. Projekt gry Light Cycles 8. Modelowanie rzeczywistości, czyli o fizyce w grach 9. Wczytywanie i rysowanie gotowych modeli 10. Kolokwium 1 II. Programowanie karty graficznej (shadery) 11. Tworzenie efektów. Pixel Shader i Vertex Shader 12. Implementacja oświetlenia w HLSL 13. Teksturowanie w HLSL 14. Odwzorowywanie cieni (shadow mapping) 15. Kolokwium 2 Dodatki A. Dystrybucja gier B. Blob C. Futro D. Krzywe i płaszczyzny Béziera Strona i-3
Wprowadzenie Informacje o kursie Opis kursu Kurs zawiera informacje dotyczące tworzenia programów korzystających z grafiki trójwymiarowej czasu rzeczywistego, w szczególności gier. Narzędziem wykorzystywanym do tworzenia grafiki jest Microsoft XNA. Wspomniane są również inne zagadnienia związane z grami, a mianowicie odtwarzanie dźwięku, obsługa kontrolerów gier (gamepad, myszka, klawiatura) oraz elementy grafiki 2D. Kurs rozpoczynamy od zagadnieo zasadniczych dla grafiki trójwymiarowej, a więc tworzenia brył, oświetlenia i teksturowania. Omawiane są również kwestie techniczne związane z tworzeniem gier w XNA i C#, a mianowicie tworzenie komponentów gier, czy posługiwanie się modelami. Następnie zajmiemy się obsługą jednostek programowalnych kart graficznych tj. shaderami. W jego ramach m.in. budowany jest program w języku HLSL, który wykorzystuje model Phonga oświetlenia, realizuje teksturowanie oraz generowanie cieni metodą shadow mapping. Cel kursu Celem kursu jest przedstawienie zagadnieo związanych z tworzeniem aplikacji korzystających z grafiki 3D w XNA, dzięki czemu będziesz w stanie samodzielnie tworzyd gry. Uzyskane kompetencje Po zrealizowaniu kursu będziesz: Zakres tematyczny kursu budowad obiekty trójwymiarowe oraz obracad i przesuwad je w przestrzeni użyd koloru użyd oświetlenia do cieniowania obiektów trójwymiarowych użyd tekstur korzystad z komponentów gier do sprawnego zarządzania kodem używad dźwięku i efektów dźwiękowych w XNA używad gamepada, myszki i klawiatury do wpływania na stan gry potrafił używad podstawowych zasad fizyki klasycznej do modelowania zachowania obiektów programowad karty graficzne w języku HLSL Wymagania wstępne Do zrealizowania tego kursu powinieneś posiadad: wiedzę z zakresu programowania obiektowego w języku C#, którą obejmują kursy ITA-104 Wprowadzenie do programowania i ITA-105 Programowanie obiektowe Opis modułów W Tab. 1 przedstawiony został opis modułów, zawierający podział na zajęcia. Każde zajęcie jest zaplanowane na 90 minut. Wykładowca może dostosowad harmonogram do swoich potrzeb. Strona i-4
Tab. 1 Zakres tematyczny modułów Numer moduł Tytuł Moduł 1 Podstawowe koncepcje grafiki 3D (podstawy teoretyczne) Moduł 2 Komponenty gry Moduł 3 Oświetlenie Moduł 4 Odwzorowywanie tekstur Moduł 5 Dźwięk w XNA 3.0. Komponenty wizualne Moduł 6 Gra, czyli sterowana animacja Moduł 7 Projekt gry Light Cycles Moduł 8 Modelowanie rzeczywistości, czyli fizyka w grach Opis VS/XNA GS. Projekt gry. Werteksy. Prymitywy. Nawijanie. Kolor. Przekształcenia w przestrzeni 3D. Rzutowanie perspektywiczne i izometryczne. Ustawienie kamery. Animacja. Antyaliasing. Bufor werteksów i dynamiczny bufor werteksów. Ustawienia okna gry. Projektowanie komponentów. Metody Update i Draw komponentu. Rejestracja instancji komponentu. Komunikacja za pośrednictwem usług gier. Definiowanie formatów werteksów. Wektory normalne. Oświetlenie domyślne. Typy światła. Mieszanie kolorów (przezroczystośd, mgła). Rzutowanie cieni. Współrzędne teksturowania. Wczytywanie i nakładanie tekstur. Zawijanie. Mipmapy. Skybox. Detekcja możliwości karty graficznej w zakresie teksturowania. Klasa MediaPlayer (odtwarzanie dźwięku z plików skompresowanych, kontrola głośności, transformata Fouriera natężenia dźwięku). XACT (przygotowanie paczek dźwiękowych, odtwarzanie paczek, odtwarzanie w pętli, miksowanie, efekty 3D). Klawiatura (wykrycie przytrzymania i naciśnięcia klawiszy). Mysz (odczytywanie pozycji kursora, rzutowanie na przestrzeo 3D, detekcja naciśnięcia przycisków myszy, obsługa rolki). Gamepad (thumbstick, spusty, wibracje). Projektowanie gier 2D.). Projekt prostej gry korzystającej z gamepada lub klawiatury (bez oświetlenia i teksturownia). Korzystanie z kolejki. Proste AI. Użycie dźwięku. Równanie Newtona. Siły sprężyste z tłumieniem. Siły kontaktowe. Metody Eulera i Verleta. Kolizje kul. Strona i-5
Moduł 9 Korzystanie z gotowych modeli i modelowanie terenu za pomocą map wysokości Moduł 11 Tworzenie efektów. Pixel Shader i Vertex Shader Moduł 12 Implementacja oświetlenia w HLSL Moduł 13 Teksturowanie w HLSL Moduł 14 Odwzorowywanie cieni (shadow mapping) Dodatek A Dystrybucja gier Dodatek B Blob Dodatek C Futro Dodatek D Krzywe i powierzchnie Béziera W tym module dowiesz się, jak w projekcie Microsoft XNA Game Studio 3.0 wczytad oraz wyświetlid trójwymiarowe modele zapisane w plikach, w formatach *.fbx lub *.x (formaty plików wprowadzone zostały odpowiednio przez firmę Autodesk oraz Microsoft). Dodatkowo zapoznasz się z techniką generowania terenu na podstawie tzw. mapy wysokości (heightmap) oraz techniką uśredniania normalnych. W tym module znajdziesz informacje dotyczące programowania jednostek Pixel i Vertex Shader znajdujących się na współczesnych kartach graficznych. Poznasz język HLSL umożliwiający oprogramowanie tychże jednostek. Zapoznasz się także ze środowiskiem programistycznym FX Composer przeznaczonym do szybkiego tworzenia efektów graficznych w czasie rzeczywistym. W tym module znajdziesz informacje dotyczące oświetlenia oraz jego modeli, których poznanie jest niezbędne w przygotowywaniu różnego typu efektów specjalnych. Opisują one zarówno kolor jak i przestrzenny rozkład odbijanego światła. Każdy model powinien byd na tyle prosty aby wyznaczanie oświetlenia przy jego pomocy było jak najszybsze. W tym module znajdziesz informacje na temat wykorzystania tekstur w efektach graficznych. Poznasz metod tworzenia bardziej wyrafinowanych efektów niż poznane w poprzednich modułach (multiteksturing, bump-mapping). W module będzie także pokazany sposób ich implementacji w języku HLSL. Moduł opisuje także sposób wykorzystania efektów w projekcie XNA. Przygotowanie i użycie mapy głębi. Pozaekranowy cel renderowania. Dystrybucja gier do komputerów PC z systemem Windows. Uruchamianie gier na konsoli Xbox 360. Interfejs Guide. Konstrukcja i rysowanie bloba Generowanie tekstury wyznaczającej położenie kępek futra. Renderowanie warstw. Ruch futra. Tworzenie parametrycznych krzywych wielomianowych Strona i-6