Wykład: Programowanie Gier

Wykład był prowadzony w lecie 2008/09.

PomocSpisTreści

  1. Wykład: Programowanie Gier
    1. Galeria projektów
    2. Informacje
    3. Program
    4. Literatura

Galeria projektów

Jeżeli Waszą grę opublikowaliście, i/lub będziecie ją dalej rozwijać: zgłaszajcie mi linki.

Informacje

Egzamin: 27 czerwca (sobota), o godzine 11:15. Zarezerwujcie sobie 2 godziny czasu. Sala: 601 w Instytucie Matematyki obok ii. Zakres materiału na egzaminie: wszystko poza dwoma ostatnimi wykładami (czyli moim dzisiejszym i przyszłym Kornela). Przypominamy że do oceny końcowej (z wykładu) liczy się w 50% egzamin teoretyczny (to coś 27 czerwca) a w 50% ocena projektu końcowego z pracowni.

Prowadzący:

Wymagania: Podstawy grafiki komputerowej (Dlatego semestr letni będzie najlepszy, skoro PGK jest w zimowym), dobra znajomość jakiegoś języka programowania (w grupie Kornela: obowiązującym językiem jest C++). Uwaga: na początku semestru część programu i założeń uległa zmianie, Kornel chce poprowadzić więcej wykładów ogólnie o architekturze gier i bibliotek, nie będzie dokładnego omówienia SDLa (zakładamy że każdy sam może się go nauczyć), w grupie pracowni Kornela obowiązuje C++.

Forma: Podstawą zaliczenia będzie pracownia i projekt końcowy. Zrobimy też (stosunkowo łatwy, obiecujemy :) ) egzamin teoretyczny na koniec (wbrew temu co mówi "[opis przedmiotu]" w zapisach, to było z czasów kiedy chcieliśmy potraktować przedmiot jako kurs). Oficjalnie jest to przedmiot informatyczny (podstawowy) (7 punktów starych, 6 punktów ECTS).

Czas: 2 godziny wykładu i 2 godziny pracowni w tygodniu, czyli standardowo. (Przy czym z pewnością będzie wymagane trochę pracy w domu).

Program

(dostępny także na stronach Kornela)

  1. Wprowadzenie (KKI) (slajdy)

  2. Narzędzia i biblioteki (KKI)

    • pokrótce narzędzia developerskie i czemu należy ich używać (SVN, bugtrackery, doxygen, build tools)
    • kilka słów o Unit Tests, profilingu i logowaniu
    • higiena kodu, code conventions i dobre praktyki programistyczne
    • biblioteki przydatne do programowania gier ( SDL, OpenAL, i inne )

    • biblioteki C++ ogólnego użytku ( STL, std::tr1, boost )
    • z oczywistych wzgledów wykład w ostatniej częsci będzie mocno ukierunkowany na C++
  3. OpenGL, optymalizacje, gl 3.0, powtórka o buforach (MKA) (streszczenie)

    • stany, pipeline, ogólnie jak optymalizować
    • optymalizacja dostarczania wierzchołków do OpenGLa (display lists, vertex arrays, vertex buffers)
    • co to są shadery
    • co i dlaczego jest deprecated w OpenGL 3.0
    • bufory OpenGLa:
      • odbicia na płaszczyźnie (przykład użycia stencil buffora)
      • (jeśli będzie czas:) depth of field, motion blur (klasyczne przykłady użycia accumulation buffora)
  4. Kolizje i portale (MKA) (3h) (streszczenie)

    • podstawy badania kolizji (przykłady, ogólne guidelines pisania funkcji sprawdzających kolizje)
    • kolizje gracza/potworków (z uwzględnieniem wall-sliding, wchodzenia po schodach etc.)
    • frustum culling
    • drzewa podziału przestrzeni (ósemkowe, kd-, i BSP) i BVH (bounding volume hierarchies)
    • modyfikacje aby drzewa podziału przestrzeni były bardziej dynamiczne: loose octrees, hierarchie drzew, dynamic irregular octrees
    • portale
    • (w zasadzie przynależy do wykładu o AI, ale podobne do portali i wypada o nich wspomnieć): ruch potworków w świecie 3D: waypointy/sektory
  5. Dźwięk 3D: OpenAL (MKA) (1h) (streszczenie)

    • podstawowe pojęcia: kontekst, listener, źródła dźwięku, bufory
    • efekty: Doppler, EFX
    • menedżer dźwięków
    • streaming
  6. Architektura (KKI)

    • model, widok, kontroler
    • architektura wysokopoziomowa – komponenty i relacje miedzy nimi
    • architektura komunikacji w systemie (bezpośrednia, event-driven, ... )
    • modele najprostsze – single-thread single player
    • modele wielowątkowe
    • architektura client-server
    • architektura do gier massive-multiplayer
    • architektura komponentów
  7. Architektura - c.d. (KKI)

  8. Zaawansowane teksturowanie (MKA) (streszczenie)

    • sky box
    • anisotropic filtering
    • multi-texturing
    • bump mapping przez proste DOT na multi-texturing
    • render off-screen i to-texture, framebuffer object
    • odbicia przez cube environment maps
    • kompresja tekstur (S3TC)

    • tekstury 3D (volume)
    • format DDS, Direct Draw Surface, popularnego do przechowywania tekstur z kompresją, mipmapami, cube maps, 3D

  9. Cienie (MKA) (streszczenie)

    • shadow volumes
    • shadow mapping
  10. Shadery GLSL (MKA) (streszczenie)

    • język GLSL
    • API OpenGLa do shaderów GLSL
    • dema: proste (toon shading, phong shading, proceduralne tekstury) i fajniejsze (PCF dla shadow maps, reflections with refraction, plastic materials, parallax mapping, volumetric lightmapping, volumetric fog)
  11. Fizyka, animacja

    • Animacja (KKI) (1h)

      • kości
      • interpolacja transformacji
      • interpolacja zbiorów wierzchołków (podział na klatki)
    • Fizyka (MKA) (1h) (streszczenie)

      • ogólnie, zastosowania (rigid/soft body, inne), dlaczego równania różniczkowe
      • przegląd: Box2D, ODE, Bullet, Newton, inne
  12. Języki skryptowe (KKI)

    • powody stosowania jezyków skryptowych
    • przeglad sensownych jezyków na potrzeby gier
    • problemy z jakimi sie boryka przy jezykach skryptowych
    • jak zrobić modowalna gre
    • metody łączenia skryptów z aplikacjami
    • dokładniejsze przyjrzenie sie jezykowi Lua i jego możliwościami integracji z kodem
  13. Sztuczna inteligencja (KKI)

    • dlaczego symulowana głupota jest lepsza niż sztuczna inteligencja
    • przegląd standardowych technik w sztucznej inteligencji na potrzeby gier
    • metody oceny, planowania i podejmowania działań w ujęciu gier
    • kilka bardziej złożonych algorytmów z tego zakresu
  14. Parallax mapping, Precomputed Radiance Transfer (MKA) - aka "zaawansowane shadery" (streszczenie)

  15. TBA (KKI)

Głównie w ramach pracowni będzie też nauka obsługi jakiegoś formatu modeli 3D. Sugestie są różne, Wavefront OBJ jest trywialny ale myślę że na tym kursie będziemy już polecać coś lepszego: VRML / X3D, Collada (podstawy obu formatów można obsłużyć łatwo stosując dowolną bibliotekę do odczytu XML z dowolnego języka programowania).

Literatura

Wymienione poniżej pozycje mogą się przydać do nauczenia, czy też zgłębienia tematu.

Podstawowa

  1. "OpenGL. Programowanie gier", Kevin Hawkins, Dave Astle, Helion 2003

  2. "The OpenGL Programming Guide - The Redbook", ARB

Zaawansowana

  1. "Perełki programowania gier", Tomy 1-6 pod redakcją Mark DeLoura, Helion 2002-2004

  2. "3D Game Engine Design, 2nd edition", David H. Eberly, "Morgan Kaufmann 2007"