okladka

Wyczerpujący przegląd nowoczesnych technik
tworzenia gier komputerowych

  • Zaawansowane algorytmy sztucznej inteligencji
  • Realistyczne odwzorowywanie zjawisk fizycznych, efektów dźwiękowych i oświetlenia
  • Języki skryptowe i sterowanie danymi
  • Techniki zabezpieczania gier w wersji beta

Przemysł gier komputerowych jest jedną z najszybciej rozwijających się branż informatyki. Gry, które jeszcze niedawno zapierały dech w piersiach, dziś wydają się proste i mało realistyczne. Współczesne symulatory i "strzelanki" to arcydzieła, których produkcja angażuje środki porównywalne z budżetami hollywoodzkich superprodukcji. Rosnące w ogromnym tempie możliwości komputerów i konsoli wpływają jednak nie tylko na jakość gier, ale także na proces ich tworzenia i wykorzystywane podczas niego narzędzia. Programiści tworzący gry implementują zaawansowane algorytmy sztucznej inteligencji, wykorzystują niezwykłe możliwości układów wyświetlających grafikę i skomplikowany aparat matematyczny.

Książka "Perełki programowania gier. Vademecum profesjonalisty. Tom 6" to doskonałe kompendium wiedzy dla wszystkich, którzy tworzą gry komputerowe lub zamierzają to robić. W każdym rozdziale, napisanym przez cenionego eksperta z tej branży, znajdziesz niezbędne informacje dotyczące różnych aspektów pisania gier. Przeczytasz o sztucznej inteligencji, symulacji zjawisk fizycznych oraz odwzorowywaniu oświetlenia i dźwięków. Poznasz nowoczesne techniki programowania współbieżnego, optymalizacji kodu pod kątem maszyn wieloprocesorowych, stosowania języków skryptowych i wykorzystywania możliwości procesorów graficznych.

  • Programowanie pod kątem procesorów wielordzeniowych
  • Siatkowa reprezentacja obiektów gry
  • Testowanie pojedynczych modułów gry
  • Optymalizacja korzystania z zasobów
  • Rachunek wektorowy i macierzowy
  • Symulacja zachowania cieczy
  • Tworzenie algorytmów sztucznej inteligencji
  • Korzystanie z reguł logiki rozmytej
  • Programowanie skryptowe w językach Lua i Python
  • Optymalizacja wyświetlania obiektów gry
  • Wykorzystywanie możliwości procesorów graficznych
  • Generowanie efektów dźwiękowych w czasie rzeczywistym
  • Tworzenie gier sieciowych

Przeczytaj i stwórz grę, w którą zagrają miliony graczy.


Przedmowa (13)
Wstęp (17)
O obrazku z okładki (23)
Biografie autorów (25)
Część I Programowanie w ogólności (43)
Wprowadzenie (45)
Rozdział 1.1 Algorytmy nieblokujące (47)
    • "Porównaj i zamień" oraz inne prymitywy uniwersalne (48)
    • Parametryzowany stos nieblokujący (50)
    • Parametryzowana kolejka nieblokująca (54)
    • Nieblokująca parametryzowana lista wolnych bloków pamięci (57)
    • Konkluzja (58)
    • Literatura cytowana (59)
    • Zasoby (60)
Rozdział 1.2 Wykorzystanie możliwości procesorów wielordzeniowych przy użyciu OpenMP (61)
    • Przykład: system cząstek (62)
    • Korzyści (62)
    • Wydajność (63)
    • Przykład: wykrywanie kolizji (64)
    • Zespoły wątkowe (65)
    • Zrównoleglanie wykonywania funkcji (65)
    • Tak, ale... (67)
    • Konkluzja (68)
    • Literatura cytowana (68)
    • Zasoby (68)
Rozdział 1.3 Widzenie komputerowe w grach - programowanie z użyciem biblioteki OpenCV (69)
    • Komputerowe widzenie w grach (69)
    • Biblioteka Open Computer Vision (70)
    • Przykład zastosowania (70)
    • Co dalej? (79)
    • Literatura cytowana (79)
Rozdział 1.4 Siatkowa rejestracja obiektów gry (81)
    • Drzewa czwórkowe i ósemkowe (82)
    • Organizacja obiektów (84)
    • Konkluzja (88)
    • Literatura cytowana (88)
Rozdział 1.5 Techniki BSP (89)
    • Czym jest BSP? Dlaczego BSP? (89)
    • Węzłowe BSP (90)
    • Renderowanie obiektów w węzłowym wariancie BSP (93)
    • Bezpodziałowy wariant węzłowego BSP (94)
    • Liściaste BSP i regiony wypukłe (95)
    • Generowanie portali między regionami wypukłymi (98)
    • Generowanie zbiorów PVS (100)
    • Kompresja wektora widzialności (105)
    • Obiekty krajobrazu w drzewie BSP (107)
    • Konkluzja (108)
    • Literatura cytowana (108)
Rozdział 1.6 Dopasowywanie łańcuchów (109)
    • Wyszukiwanie opierające się na identyfikatorach tekstowych (109)
    • No to mamy problem... (110)
    • Kilka znanych rozwiązań (110)
    • Nasze rozwiązanie (111)
    • Zastosowanie rozwiązania (116)
    • Konkluzja (117)
    • Literatura cytowana (117)
Rozdział 1.7 Implementacja testowania modułów na bazie CppUnit (119)
    • Ogólnie o testowaniu modułów (119)
    • Ogólnie o pakiecie CppUnit (120)
    • Uruchamianie klas mocujących (122)
    • Wykorzystanie pakietu CppUnit do testowania klasy zarządzającej modelami (123)
    • Testowanie modułowe funkcji prywatnych (129)
    • Wykorzystywanie CppUnit do testowania niskopoziomowej funkcjonalności (129)
    • Konkluzja (134)
    • Literatura cytowana (134)
Rozdział 1.8 Fingerprinting jako metoda ochrony wersji pre-release aplikacji (135)
    • Zniechęcanie (135)
    • Znaki wodne i odciski palców (136)
    • Wykonywanie znakowania (137)
    • Bezpieczeństwo gwarantowane przez znakowanie (137)
    • Strategie znakowania (137)
    • Atak porównawczy (140)
    • Konkluzja (140)
    • Literatura cytowana (141)
Rozdział 1.9 Przyspieszanie ładowania zasobów na podstawie statystyki korzystania z nich (143)
    • Sformułowanie problemu (143)
    • Optymalizowanie kolejności zasobów (145)
    • Czynniki wpływające na wynik pomiaru (146)
    • Potencjalne zagrożenia (147)
    • Powszechne praktyki optymalizacyjne (147)
    • Konkluzja (148)
    • Literatura cytowana (148)
Rozdział 1.10 Pozostań w grze: podmiana modyfikowanych zasobów "na gorąco" (149)
    • Jak to działa? (149)
    • Anatomia procesu (151)
    • Uwarunkowania praktyczne (155)
    • Przykładowy program (156)
    • Konkluzja (156)
    • Literatura uzupełniająca (156)
Część II Matematyka i fizyka (157)
Wprowadzenie (159)
Rozdział 2.1 Osobliwości arytmetyki zmiennopozycyjnej (161)
    • Format reprezentacji zmiennopozycyjnej (162)
    • Projektowanie programów i funkcji (167)
    • Konkluzja (179)
    • Literatura cytowana (180)
Rozdział 2.2 Obliczenia w przestrzeniach rzutowych z użyciem współrzędnych jednorodnych (181)
    • Podstawy matematyczne (182)
    • Obliczenia z użyciem współrzędnych jednorodnych (184)
    • Przecinanie linii z obiektami (187)
    • Konkluzja (189)
    • Dodatek A (190)
    • Dodatek B (190)
    • Podziękowania (191)
    • Literatura cytowana (191)
Rozdział 2.3 Zastosowanie iloczynu wektorowego do rozwiązywania układów równań liniowych (193)
    • Wprowadzenie (193)
    • Linie proste (196)
    • Efektywna interpolacja bilinearna (198)
    • Rozwiązywanie układu równań z trzema niewiadomymi (201)
    • Konkluzja (203)
    • Podziękowania (203)
    • Literatura cytowana i zalecana (203)
Rozdział 2.4 Indeksowanie sekwencyjne w programowaniu gier (205)
    • Terminologia (205)
    • Sekwencje (206)
    • Sekwencje dziedzinowe (207)
    • Sekwencje permutacyjne (210)
    • Sekwencje kombinacyjne (214)
    • Konkluzja (217)
    • Literatura cytowana (218)
Rozdział 2.5 Pływalność brył wielościennych (219)
    • Pływalność (220)
    • Pole wielokąta (221)
    • Objętość wielościanu (223)
    • Częściowe zanurzenie (224)
    • Dokładność obliczeń (227)
    • Siły oporu (229)
    • Kod źródłowy (230)
    • Konkluzja (230)
    • Podziękowanie (230)
    • Literatura cytowana (231)
Rozdział 2.6 Cząsteczkowa symulacja w czasie rzeczywistym oddziaływania cieczy z bryłami sztywnymi (233)
    • Symulacja przepływów cieczy a SPH (233)
    • Rozszerzenie metody SPH na oddziaływania cieczy z bryłami sztywnymi (238)
    • Oddziaływanie z obiektami dynamicznymi - krokowa aktualizacja własności cząstek (242)
    • Szczegóły implementacji (243)
    • Optymalizacje (247)
    • Konkluzja (248)
    • Literatura cytowana (248)
Część III Sztuczna inteligencja (249)
Wprowadzenie (251)
Rozdział 3.1 Zastosowanie modelowanego podejścia do implementacji AI na przykładzie Locust AI Engine w QA3 (253)
    • Wprowadzenie (254)
    • Stan obecny - zbiory reguł deterministycznych (255)
    • Problemy związane z regułami (257)
    • Modelowane podejście do implementacji AI (259)
    • Interfejs (260)
    • Zalety i korzyści dla projektantów (261)
    • Locust AI Engine w Quake III Arena (263)
    • Soar (264)
    • Konkluzja (265)
    • Literatura cytowana (265)
Rozdział 3.2 Koordynacja działań autonomicznych BN (267)
    • Możliwe rozwiązania (268)
    • Struktura BN (269)
    • Mechanizmy koordynacji (270)
    • Przykład. Skoordynowane tropienie gracza (277)
    • Konkluzja (278)
    • Literatura cytowana (279)
Rozdział 3.3 Zastosowanie behawioralnych architektur robotycznych w tworzeniu gier (281)
    • Architektura subsumpcyjna (282)
    • Rozszerzone sieci behawioralne (285)
    • Dyskusja (289)
    • Konkluzja (289)
    • Literatura cytowana (290)
Rozdział 3.4 Konstruowanie sterowanego celem robota gry Unreal Tournament przy użyciu czujników rozmytych, maszyn skończenie stanowych i rozszerzonych sieci behawioralnych (291)
    • Projektowanie rozszerzonej sieci behawioralnej (292)
    • Hierarchiczne czujniki rozmyte (298)
    • Moduły behawioralne jako maszyny skończenie stanowe (301)
    • Konkluzja (303)
    • Literatura cytowana (303)
Rozdział 3.5 Robot sterowany celem: projektowanie zachowań i cech osobowości agenta gry przy użyciu rozszerzonych sieci behawioralnych (305)
    • Rozszerzone sieci behawioralne (306)
    • Jakość wyboru akcji (311)
    • Projektowanie cech osobowości (314)
    • Konkluzja (317)
    • Literatura zalecana (318)
Rozdział 3.6 Modelowanie pamięci krótkotrwałej przy użyciu maszyny wektorów wspierających (319)
    • Maszyny wektorów wspierających (319)
    • Modelowanie pamięci krótkotrwałej (325)
    • Limitowanie obciążenia procesorów (326)
    • Konkluzja (326)
    • Literatura cytowana (327)
Rozdział 3.7 Zastosowanie modelu oceny kwantytatywnej do analizy konfliktów zbrojnych (329)
    • Formuła podstawowa (330)
    • Obliczanie siły ognia (330)
    • Obliczanie potencjału bojowego (331)
    • Szacowanie efektywności użycia broni (332)
    • Teoretyczne przewidywanie wyniku konfliktu (333)
    • A co z efektywnością wykorzystania broni? (334)
    • Przykład systemu QJM (334)
    • Ograniczenia (335)
    • Konkluzja (335)
    • Literatura cytowana (336)
Rozdział 3.8 Projektowanie wielowarstwowego, przyłączalnego silnika AI (337)
    • Rozwiązania pokrewne (338)
    • Architektura silnika AI (339)
    • Klasy i właściwości systemu sterowanego danymi (340)
    • Priorytetowy zarządca zadań (345)
    • Wydajność i techniki optymalizacyjne (346)
    • Narzędzia (348)
    • Konkluzja (350)
    • Literatura cytowana (351)
Rozdział 3.9 Zarządzanie złożonością scenerii na bazie reguł logiki rozmytej (353)
    • Koncepcja (353)
    • Regulacja rozmyta (354)
    • Narzędzia (354)
    • Projekt systemu (357)
    • Zastosowanie do gier (358)
    • Założenia (359)
    • Uwagi implementacyjne (360)
    • Testy i ich rezultat (360)
    • Konkluzja (362)
    • Podziękowanie (362)
    • Literatura cytowana (363)
Część IV Skrypty i systemy sterowane danymi (365)
Wprowadzenie (367)
Rozdział 4.1 Przegląd języków skryptowych (371)
    • Po co w ogóle stosować języki skryptowe? (371)
    • Wprowadzenie (371)
    • Sposób kodowania (372)
    • Integracja z językami C/C++ (377)
    • Wydajność (384)
    • Metody wspierania procesów wytwarzania (387)
    • Konkluzja (390)
    • Literatura (390)
Rozdział 4.2 Wiązanie obiektów C/C++ ze skryptami języka Lua (391)
    • Funkcje wiążące (392)
    • Wiązanie właściwych obiektów z wartościami języka Lua (394)
    • Wiązanie obiektów środowiska nadrzędnego z obiektami języka Lua (397)
    • Wiązanie właściwych obiektów z tabelami języka Lua (402)
    • Konkluzja (403)
    • Literatura (406)
Rozdział 4.3 Programowanie zaawansowanych mechanizmów sterujących z wykorzystaniem współprogramów języka Lua (407)
    • Współprogramy Lua (408)
    • Filtry (409)
    • Iteratory (411)
    • Mechanizmy szeregowania zadań (414)
    • Wielozadaniowość równoległa (415)
    • Konkluzja (419)
    • Literatura (419)
Rozdział 4.4 Zarządzanie wykonywaniem skryptów wysokopoziomowych w ramach środowisk wielowątkowych (421)
    • Oprogramowanie komponentowe i interpreter skryptu (422)
    • Współprogramy i mikrowątki (422)
    • Menedżer mikrowątków (423)
    • Osadzanie kodu języka Python (426)
    • Eksperymenty i wyniki (429)
    • Konkluzja (431)
    • Literatura (432)
Rozdział 4.5 Udostępnianie właściwości aktorów z wykorzystaniem nieinwazyjnych pośredników (433)
    • Aktorzy, pośrednicy i właściwości. Mój Boże! (433)
    • Nieinwazyjna i dynamiczna architektura (435)
    • Właściwości aktora (436)
    • Pośrednicy aktorów (440)
    • Od teorii do praktyki (442)
    • Konkluzja (443)
    • Literatura (443)
Rozdział 4.6 System komponentowy obiektów gry (445)
    • Obiekty gry (445)
    • Komponenty bazowe obiektów gry (447)
    • Zarządzanie komponentami z poziomu obiektów gry (448)
    • Komunikacja pomiędzy komponentami (450)
    • Szablony komponentów gry (451)
    • Szablony obiektów gry (454)
    • Tworzenie obiektu gry sterowanego danymi (455)
    • Konkluzja (455)
Część V Grafika (457)
Wprowadzenie (459)
Rozdział 5.1 Synteza realistycznych ruchów nieaktywnych postaci w grze (461)
    • Wprowadzenie (462)
    • Główne składowe animacji ciała ludzkiego (463)
    • Zmiany postaw (465)
    • Ciągłe, drobne zmiany postaw (469)
    • Konkluzja (474)
    • Literatura (474)
Rozdział 5.2 Dzielenie przestrzeni z wykorzystaniem adaptacyjnego drzewa binarnego (477)
    • Budowa adaptacyjnego drzewa binarnego (477)
    • Szczegółowa implementacja drzewa ABT (479)
    • Poszukiwanie odpowiednich płaszczyzn dzielących (483)
    • Stosowanie drzew ABT dla scen dynamicznych (486)
    • Wizualizacja drzewa ABT (487)
    • Konkluzja (489)
    • Podziękowania (489)
    • Literatura (489)
Rozdział 5.3 Rozszerzony mechanizm eliminowania obiektów z wykorzystaniem (niemal) całkowicie ukierunkowanych ramek ograniczających (491)
    • Przegląd znanych metod (492)
    • Techniki tradycyjne (493)
    • Efektywne rozwiązanie dla dwóch wymiarów (494)
    • Udoskonalenia technik tradycyjnych (496)
    • Eliminowanie obiektów według ramki ograniczającej (500)
    • Dalsze usprawnienia (501)
    • Konkluzja (502)
    • Literatura (503)
Rozdział 5.4 Podział powierzchni z myślą o optymalizacji renderingu (505)
    • Wprowadzenie (505)
    • Koncepcje podziału (506)
    • Heurystyka podziału wag (508)
    • Heurystyka palety kości (508)
    • Szczegółowe omówienie heurystyki (511)
    • Konkluzja (515)
Rozdział 5.5 Rendering terenu na poziomie procesora GPU (517)
    • Prosty algorytm (518)
    • Poziom szczegółowości (519)
    • Eliminowanie szczelin (521)
    • Odrzucanie obiektów spoza ostrosłupa widoczności (523)
    • Wyznaczanie normalnych (523)
    • Unikanie kolizji (525)
    • Problemy implementacyjne (526)
    • Wyniki (527)
    • Konkluzja (528)
    • Literatura (528)
Rozdział 5.6 Interaktywna dynamika cieczy i rendering na poziomie GPU (529)
    • Podstawy matematyczne (530)
    • Implementacja na poziomie GPU (534)
    • Interakcja z cieczą (540)
    • Materiały dodatkowe (542)
    • Konkluzja (542)
    • Literatura (543)
Rozdział 5.7 Szybkie oświetlanie poszczególnych pikseli w środowisku z wieloma źródłami światła (545)
    • Rozwiązanie polegające na odkładaniu efektów oświetlenia na później (546)
    • Implementacja odłożonego cieniowania dla najnowszych kart graficznych (547)
    • Podstawowe techniki optymalizacji składowania danych (549)
    • Optymalizacja shaderów i ograniczenia sprzętowe (552)
    • Rozszerzanie efektów przetwarzania końcowego przestrzeni obrazu (555)
    • Konkluzja (556)
    • Literatura (556)
Rozdział 5.8 Rendering ostrych znaków drogowych (557)
    • Wygładzanie krawędzi tekstur progowanych (559)
    • Optymalne tekstury dla techniki progowania (564)
    • Aplikacja autorska (568)
    • Konkluzja i perspektywa rozwoju (571)
    • Literatura (572)
Rozdział 5.9 Praktyczny rendering nieba na potrzeby gier komputerowych (573)
    • Czego chcemy, a co mamy? (573)
    • Co właściwie powinno się znaleźć na niebie? (575)
    • Wąskie gardła (576)
    • Wprowadzenie sześciennej mapy nieba (579)
    • Skalowanie czasu (580)
    • Analiza aplikacji demonstracyjnej (581)
    • Kierunki rozwoju (582)
    • Konkluzja (583)
    • Literatura (584)
Rozdział 5.10 Rendering rozszerzonego zakresu jasności (HDR) z wykorzystaniem obiektów bufora klatek biblioteki OpenGL (585)
    • Wprowadzenie do obiektów bufora klatek (585)
    • Konstruowanie obiektów bufora klatek (587)
    • Rendering rozszerzonego zakresu jasności (HDR) za pomocą obiektów bufora klatek (590)
    • Konkluzja (592)
    • Informacje dodatkowe (593)
    • Literatura dodatkowa (593)
Część VI Audio (595)
Wprowadzenie (597)
Rozdział 6.1 Generowanie dźwięku w czasie rzeczywistym poprzez deformację siatkową brył sztywnych (599)
    • Retrospekcja (599)
    • Ogólne zasady (600)
    • Podstawy analizy modalnej (601)
    • Ograniczenia (603)
    • Od deformacji do dźwięku (604)
    • Konkluzja (605)
    • Literatura zalecana (605)
    • Literatura cytowana (606)
Rozdział 6.2 Prosty generator efektów dźwiękowych czasu rzeczywistego (607)
    • Silnik akustyki otoczeniowej (607)
    • Synteza dźwięku (608)
    • Przykłady ze świata rzeczywistego (610)
    • Konkluzja (612)
    • Demo (613)
    • Literatura cytowana (613)
Rozdział 6.3 Miksowanie dźwięku w czasie rzeczywistym (615)
    • Niby nic, a jednak... (615)
    • Implementacja łańcucha magistral (617)
    • Miara głośności - stosunek natężeń albo decybele (619)
    • Zapobieganie nieefektywności (620)
    • Inne usprawnienie (620)
    • Konkluzja (620)
    • Literatura cytowana (621)
Rozdział 6.4 Zbiór potencjalnej słyszalności (623)
    • PVS - podstawy (623)
    • PAS - algorytm podstawowy (625)
    • Bezpośrednie ścieżki dźwiękowe (625)
    • Rozszerzenie na falę przechodzącą (630)
    • Rozszerzenie na falę odbitą (631)
    • Konkluzja (632)
    • Literatura cytowana (632)
Rozdział 6.5 Tani efekt Dopplera (633)
    • Zjawisko Dopplera (633)
    • Programowanie efektu Dopplera (636)
    • Zmienna prędkość (639)
    • Aliasowanie (640)
    • Implementacja (641)
    • Konkluzja (641)
    • Zasoby (641)
Rozdział 6.6 Preparowanie efektów specjalnych (643)
    • Preparacja (643)
    • Przykład: radio grające w pokoju (644)
    • Krzywe stałej głośności (645)
    • Zaawansowane sterowanie głośnością (646)
    • Pliki wielościeżkowe i DirectSound (646)
    • Koszty i korzyści (647)
    • Konkluzja (647)
    • Podziękowania (647)
Część VII Sieć i gry wielodostępne (649)
Wprowadzenie (651)
Rozdział 7.1 Dynamicznie adaptowalne strumieniowanie danych 3D dla animowanych postaci (653)
    • Wprowadzenie (653)
    • Podstawy i zagadnienia pokrewne (654)
    • Przygotowywanie i tworzenie skalowalnych danych 3D (655)
    • Sterowana kontekstem adaptacja wysyłanego strumienia (662)
    • Konkluzja (664)
    • Literatura cytowana (665)
Rozdział 7.2 Wysokopoziomowa architektura systemowa dla masywnych gier online (667)
    • Systemy złożone i ich zachowanie wzbogacające (668)
    • Architektura wielowarstwowa (668)
    • Sprzężenie zwrotne w systemach decyzyjnych (680)
    • Konkluzja (681)
    • Literatura cytowana (681)
Rozdział 7.3 Generowanie unikalnych identyfikatorów globalnych dla obiektów gier (683)
    • Wymagania dla identyfikatorów GUID (683)
    • Generowanie GUID (685)
    • Sytuacje wyjątkowe i ich obsługa (687)
    • Konkluzja (688)
    • Literatura cytowana (688)
Rozdział 7.4 Second Life jako narzędzie prototypowania gier MMOG (689)
    • Wstęp (689)
    • Dlaczego Second Life? (689)
    • Second Life - zaczynamy! (693)
    • Second Life jako narzędzie projektanta (693)
    • Opracowywanie prototypu (695)
    • Tringo - historia sukcesu (698)
    • Konkluzja (698)
    • Literatura cytowana (699)
Rozdział 7.5 Niezawodne połączenia TCP peer-to-peer w warunkach translacji NAT (701)
    • Problem (701)
    • Rozwiązania (703)
    • Realizacja (703)
    • Zastosowania (708)
    • Ograniczenia (709)
    • Konkluzja (709)
    • Literatura cytowana (710)
Skorowidz (711)