
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)
- 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)
- Komputerowe widzenie w grach (69)
- Biblioteka Open Computer Vision (70)
- Przykład zastosowania (70)
- Co dalej? (79)
- Literatura cytowana (79)
- Drzewa czwórkowe i ósemkowe (82)
- Organizacja obiektów (84)
- Konkluzja (88)
- Literatura cytowana (88)
- 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)
- 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)
- 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)
- 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)
- 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)
- Jak to działa? (149)
- Anatomia procesu (151)
- Uwarunkowania praktyczne (155)
- Przykładowy program (156)
- Konkluzja (156)
- Literatura uzupełniająca (156)
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)
- 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)
- 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)
- Terminologia (205)
- Sekwencje (206)
- Sekwencje dziedzinowe (207)
- Sekwencje permutacyjne (210)
- Sekwencje kombinacyjne (214)
- Konkluzja (217)
- Literatura cytowana (218)
- 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)
- 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)
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)
- Możliwe rozwiązania (268)
- Struktura BN (269)
- Mechanizmy koordynacji (270)
- Przykład. Skoordynowane tropienie gracza (277)
- Konkluzja (278)
- Literatura cytowana (279)
- Architektura subsumpcyjna (282)
- Rozszerzone sieci behawioralne (285)
- Dyskusja (289)
- Konkluzja (289)
- Literatura cytowana (290)
- Projektowanie rozszerzonej sieci behawioralnej (292)
- Hierarchiczne czujniki rozmyte (298)
- Moduły behawioralne jako maszyny skończenie stanowe (301)
- Konkluzja (303)
- Literatura cytowana (303)
- Rozszerzone sieci behawioralne (306)
- Jakość wyboru akcji (311)
- Projektowanie cech osobowości (314)
- Konkluzja (317)
- Literatura zalecana (318)
- Maszyny wektorów wspierających (319)
- Modelowanie pamięci krótkotrwałej (325)
- Limitowanie obciążenia procesorów (326)
- Konkluzja (326)
- Literatura cytowana (327)
- 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)
- 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)
- 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)
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)
- 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)
- Współprogramy Lua (408)
- Filtry (409)
- Iteratory (411)
- Mechanizmy szeregowania zadań (414)
- Wielozadaniowość równoległa (415)
- Konkluzja (419)
- Literatura (419)
- 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)
- 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)
- 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)
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)
- 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)
- 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)
- Wprowadzenie (505)
- Koncepcje podziału (506)
- Heurystyka podziału wag (508)
- Heurystyka palety kości (508)
- Szczegółowe omówienie heurystyki (511)
- Konkluzja (515)
- 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)
- Podstawy matematyczne (530)
- Implementacja na poziomie GPU (534)
- Interakcja z cieczą (540)
- Materiały dodatkowe (542)
- Konkluzja (542)
- Literatura (543)
- 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)
- Wygładzanie krawędzi tekstur progowanych (559)
- Optymalne tekstury dla techniki progowania (564)
- Aplikacja autorska (568)
- Konkluzja i perspektywa rozwoju (571)
- Literatura (572)
- 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)
- 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)
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)
- Silnik akustyki otoczeniowej (607)
- Synteza dźwięku (608)
- Przykłady ze świata rzeczywistego (610)
- Konkluzja (612)
- Demo (613)
- Literatura cytowana (613)
- 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)
- 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)
- Zjawisko Dopplera (633)
- Programowanie efektu Dopplera (636)
- Zmienna prędkość (639)
- Aliasowanie (640)
- Implementacja (641)
- Konkluzja (641)
- Zasoby (641)
- 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)
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)
- 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)
- Wymagania dla identyfikatorów GUID (683)
- Generowanie GUID (685)
- Sytuacje wyjątkowe i ich obsługa (687)
- Konkluzja (688)
- Literatura cytowana (688)
- 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)
- Problem (701)
- Rozwiązania (703)
- Realizacja (703)
- Zastosowania (708)
- Ograniczenia (709)
- Konkluzja (709)
- Literatura cytowana (710)