You are on page 1of 23

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Pereki programowania
gier. Vademecum
profesjonalisty. Tom 2
Autor: Mark DeLoura
Tumaczenie: Rafa Joca
ISBN: 83-7197-837-5
Tytu oryginau: Game Programming Gems 2
Format: B5, stron: 608
Jeli zajmujesz si lub zamierzasz si zaj programowaniem gier komputerowych,
nie odkadaj tej ksiki na pk. Znajdziesz w niej siedemdziesit rozwiza
rozmaitych problemw, przed ktrymi staje programista gier. S to rozwizania do
natychmiastowego zastosowania lub pomysy, ktre mog znacznie zredukowa nakad
pracy. Ich autorami s najwybitniejsi autorzy gier, wsptwrcy wielu prawdziwych
hitw. Do powiedzie, e redaktorami ksiki Pereki programowania gier
s pracownicy firm takich jak Nintendo czy NVidia Corporation.
Autorzy postarali si, by przedstawiane przez nich pereki ukazyway praktyczne
techniki programistyczne, moliwe do osignicia przy uyciu aktualnie stosowanych
technologii i pomagajce przy pisaniu gier komputerowych. Przykadowe kody rdowe
opieraj si na uznanych standardach: jzykach C i C++, interfejsy OpenGL i DirectX
i nieodzownym, gdy chcemy uzyska maksymaln wydajno asemblerze
procesorw x86.
Porady i rozwizania podzielone s na 6 czci:

Programowanie oglne
Matematyka
Sztuczna inteligencja
Zarzdzanie geometri
Grafika
Programowanie dwiku

Doczony CD-ROM zawiera wszystkie kody rdowe z ksiki, dema wielu


przedstawionych technik, bibliotek DirectX 8, instalator glSetup, bibliotek narzdzi
GLUT, obrazy z kolorowej wkadki w wysokiej rozdzielczoci.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

5RKUVTGEK


   
  
 



 
 
  
 
Rozdzia 1.1

 ! " #$ $!%&& #' (


Konstrukcja i destrukcja obiektu ...........................................................................................39
Zarzdzanie pamici ............................................................................................................42
Funkcje wirtualne ..................................................................................................................43
Rozmiar kodu.........................................................................................................................45
Biblioteka STL.......................................................................................................................45
Zaawansowane funkcje..........................................................................................................47
Dodatkowa lektura .................................................................................................................48

Rozdzia 1.2

)$

#$$*#!
 
   +(
Zalety funkcji inline...............................................................................................................49
Kiedy naley uywa funkcji inline.......................................................................................51
Kiedy naley uywa makr....................................................................................................51
Dodatki w kompilatorze Microsoftu......................................................................................52
Bibliografia ............................................................................................................................52

Rozdzia 1.3

 
!!*
 * #!$
!#'
$* 
Abstrakcyjny interfejs............................................................................................................53
Dodawanie fabryki.................................................................................................................55
Abstrakcyjne klasy jako zbiory cech .....................................................................................56
Wszystko ma swoj cen .......................................................................................................59
Wnioski..................................................................................................................................59
Bibliografia ............................................................................................................................60

Rozdzia 1.4

,* " *%&&"-.. 


Eksport funkcji.......................................................................................................................61
Eksport klasy..........................................................................................................................61
Eksport funkcji czonkowskich klasy ....................................................................................63
Eksport funkcji wirtualnych klasy .........................................................................................63
Podsumowanie .......................................................................................................................64

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

Rozdzia 1.5

/  #*  "-..


 $0#!#'
#$*!*  #!$
 
czenie jawne i niejawne .....................................................................................................66
Funkcje LoadLibrary i GetProcAddress ................................................................................66
Obrona przed bdnymi bibliotekami DirectX ......................................................................67
Funkcje specyficzne dla systemu operacyjnego ....................................................................68
Podsumowanie .......................................................................................................................69

Rozdzia 1.6

-!
#

 #$ !  
Wprowadzenie do klasy dynamicznej informacji o typie......................................................71
Demaskowanie typu i odpytywanie DTI ...............................................................................72
Dziedziczenie oznacza jest typu.........................................................................................73
Obsuga oglnych obiektw ..................................................................................................74
Implementacja trwaej informacji o typie ..............................................................................75
Zastosowanie trwaej informacji o typie w bazie danych zapisw stanu gry ........................77
Wnioski..................................................................................................................................77
Bibliografia ............................................................................................................................78

Rozdzia 1.7

1" *  2#2#3" $0# "


!*
#
" *%&& (
Kod.........................................................................................................................................80
Inne moliwe wykorzystania klas..........................................................................................82
Bibliografia ............................................................................................................................83

Rozdzia 1.8

4 ! $
* 5
Komponenty...........................................................................................................................86
Klasy waga pirkowa, zachowa i eksportowa .....................................................................86
Obiekty wagi pirkowej.........................................................................................................86
SAMM-y, gdzie jeste?..........................................................................................................87
Hierarchia klas zachowa ......................................................................................................88
Wykorzystanie wzorca szablonu metod w przypisywaniu zachowa ...................................89
Klasy eksportowe...................................................................................................................90
Fabryka jednostek ..................................................................................................................91
Wybr strategii w trakcie dziaania programu.......................................................................92
Uwagi kocowe .....................................................................................................................94
Bibliografia ............................................................................................................................94

Rozdzia 1.9

- 
" *!
$0#$
 "#
!#'
#$ #'%&& (
Moliwe rozwizania .............................................................................................................95
Idealne rozwizanie ...............................................................................................................96
Uywanie i przypisywanie niezalecanych funkcji.................................................................96
Implementacja niezalecania funkcji w C++...........................................................................97
Co mona poprawi? .............................................................................................................98
Podzikowania .......................................................................................................................98
Bibliografia ............................................................................................................................98

Rozdzia 1.10 6
3 # #
! !*
! ((
Zaczynamy.............................................................................................................................99
Rejestracja informacji w menederze ..................................................................................100
Raportowanie zebranych informacji ....................................................................................102
O czym naley pamita ......................................................................................................104
Moliwe rozszerzenia ..........................................................................................................105
Bibliografia ..........................................................................................................................105

Rozdzia 1.11 6 "$0#!


! 7
Podstawy profilowania programw .....................................................................................107
Komercyjne narzdzia .........................................................................................................108
Czemu utworzy wasny system? ........................................................................................109
Wymagania dotyczce moduu profilujcego......................................................................109
Architektura i implementacja...............................................................................................110
Szczegy implementacji .....................................................................................................111
Analiza danych ....................................................................................................................111
Uwagi dotyczce implementacji ..........................................................................................112

Rozdzia 1.12 6"  


 "
 #'*!*
* 
Aktualizacja wiata ..............................................................................................................113
Rozwizanie wielowtkowo ........................................................................................114
Bibliografia ..........................................................................................................................117

Rozdzia 1.13 8 $


** (
Prosty tymczasowy powrt..................................................................................................119
acuchy tymczasowych powrotw....................................................................................120
Thunking ..............................................................................................................................122
Rekurencja ...........................................................................................................................123

Rozdzia 1.14 9 !$0#!* :


Zasady kodu RAM...............................................................................................................125
Szybkie przeksztacanie i kopiowanie bitw .......................................................................126

Rozdzia 1.15 / 0


 " !!*
 " * 
Czym jest plik zasobw? .....................................................................................................133
Projekt..................................................................................................................................134
Implementacja......................................................................................................................135
Ostatnie sowa na temat implementacji ...............................................................................137
Wnioski................................................................................................................................137
Bibliografia ..........................................................................................................................137

Rozdzia 1.16  


$*
$2;! (
Do czego moe si przyda rejestracja wej? ....................................................................139
Ile to zajmie?........................................................................................................................141
Testowanie rejestracji wejcia .............................................................................................145
Wnioski................................................................................................................................145
Bibliografia ..........................................................................................................................145

Rozdzia 1.17 ," *!#


!*!*
"!* 
$* +
System analizy skadniowej.................................................................................................148
Makra, nagwki i magia wczeniejszego przetwarzania ....................................................148
Wyjanienie systemu analizy skadniowej ..........................................................................149
Klasa TokenFile ...................................................................................................................152
Uwagi kocowe ...................................................................................................................153

Rozdzia 1.18 <


$*
* "
!   2#

!#'
Analiza wymaga ................................................................................................................155
Implementacja......................................................................................................................156
Uycie ..................................................................................................................................160
Uwagi...................................................................................................................................162
Podzikowania .....................................................................................................................162

Rozdzia 1.19 =
 #$ #!2#"*!#'"# 
Pseudolosowo ...................................................................................................................163
Rzeczywista losowo .........................................................................................................164

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

rda losowych wartoci ....................................................................................................164


rda sprztowe..................................................................................................................165
Funkcja mieszajca ..............................................................................................................165
Ograniczenia ........................................................................................................................166
Implementacja......................................................................................................................166
Jak losowe wartoci uzyskujemy z GenRand? ....................................................................167
Bibliografia ..........................................................................................................................168

Rozdzia 1.20 !!*


""
   
 ! $
2#"#
$ (
Sposb Blooma ....................................................................................................................169
Moliwe zastosowania .........................................................................................................170
Jak to dziaa?........................................................................................................................170
Definicje...............................................................................................................................170
Pierwszy przykad................................................................................................................171
Drugi przykad .....................................................................................................................175
Uwagi kocowe ...................................................................................................................175
Wnioski................................................................................................................................176
Bibliografia ..........................................................................................................................176

Rozdzia 1.21 6* $0#! * #  -96>



 !#0#
 #$ 
Eksport .................................................................................................................................178
Bibliografia ..........................................................................................................................187

Rozdzia 1.22 !!*


 

!#' #' 5(
Inicjalizacja okna przechwytywania danych z kamery........................................................189
Manipulacja danymi z kamery.............................................................................................194
Wnioski................................................................................................................................197
Bibliografia ..........................................................................................................................198

   


  
 :7
Rozdzia 2.1

9#"# 

 #
!
?    ! $
2#*
 <,,, :7
Wprowadzenie .....................................................................................................................203
Format IEEE liczb zmiennoprzecinkowych ........................................................................204
Sztuczki liczb zmiennoprzecinkowych................................................................................205
Liniowa tablica przegldowa dla funkcji sinus i kosinus ....................................................210
Optymalizacja logarytmiczna pierwiastka kwadratowego ..................................................212
Optymalizacja dowolnych funkcji .......................................................................................213
Mierzenie wydajnoci ..........................................................................................................216
Wnioski................................................................................................................................217
Bibliografia ..........................................................................................................................217

Rozdzia 2.2

9#   *#!


 : (
Wysoko wzgldem paszczyzny kolizji............................................................................219
Szukanie punktu kolizji .......................................................................................................220
Odlego do punktu zderzenia............................................................................................221
Odbicie od paszczyzny kolizji ............................................................................................222
Zderzenia z tumieniem .......................................................................................................225
Interpolacja w poprzek linii lub paszczyzny ......................................................................225

Rozdzia 2.3

9!" *!#
 #

$! !#'"
 ::
Co czyni ten algorytm elastycznym? ...................................................................................228
Sformuowanie problemu ....................................................................................................228
Wyprowadzenie rwna zwizego rozwizania.................................................................230
Obsuga odcinkw ...............................................................................................................236
Opis implementacji ..............................................................................................................239
Moliwoci optymalizacji....................................................................................................239
Wnioski................................................................................................................................240
Bibliografia ..........................................................................................................................240

Rozdzia 2.4

2"

$ $ :+
Szczeglne przypadki ..........................................................................................................243
Optymalizacja implementacji ..............................................................................................248
Podsumowanie .....................................................................................................................249

Rozdzia 2.5

)  
* 
" :
Metoda .................................................................................................................................252
Wnioski................................................................................................................................255
Bibliografia ..........................................................................................................................255

Rozdzia 2.6

= 2#3% $0#
 

#' : 
Wprowadzenie .....................................................................................................................257
Interpolacja pooenia..........................................................................................................258
Interpolacja obrotu ...............................................................................................................259
Kierunek obrotu i selektywna negacja.................................................................................260
Interpolacja krzywymi sklejanymi dla kwaternionw.........................................................261
Osobliwoci w wymiernym przeksztaceniu .......................................................................262
Cicia kamery ......................................................................................................................262
Kod.......................................................................................................................................263
Bibliografia ..........................................................................................................................263

Rozdzia 2.7

)
#!$
 
!  
?*! "!#$@ :
Inne zastosowania ................................................................................................................266
Saby punkt algorytmu.........................................................................................................270
Znajdowanie par bdcych w kolizji ...................................................................................271
Zoono czasowa ..............................................................................................................273
Wnioski................................................................................................................................274
Bibliografia ..........................................................................................................................274

Rozdzia 2.8

 
  " :
Fraktal plazmowy ................................................................................................................276
Fraktal bdny ......................................................................................................................276
Fraktal ruchu Browna ..........................................................................................................277
Implementacja......................................................................................................................278
Wykorzystanie FBM............................................................................................................281
Bibliografia ..........................................................................................................................282

   !"


  
 :5
Rozdzia 3.1

9  ! " #$*#


$
"
#$ :5
Strategia 1.: Uywaj zachowania sterowanego zdarzeniami, a nie odpytywania................287
Strategia 2.: Redukuj niepotrzebne obliczenia ....................................................................288
Strategia 3.: Centralizuj wspdziaanie za pomoc zarzdcw ..........................................289

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

Strategia 4.: Rzadziej uruchamiaj sztuczn inteligencj......................................................289


Strategia 5.: Roz przetwarzanie na kilka klatek..............................................................290
Strategia 6.: Wprowad poziomy szczegowoci sztucznej inteligencji............................290
Strategia 7.: Rozwizuj tylko cz zagadnienia .................................................................291
Strategia 8.: Najcisz prac wykonuj poza ptl czasu rzeczywistego ............................291
Strategia 9.: Uywaj pojawiajcych si zachowa, by unika skryptw.............................292
Strategia 10.: Amortyzuj koszty odpytywa za pomoc cigego ksigowania..................292
Strategia 11.: Jeszcze raz przeanalizuj problem ..................................................................293
Wnioski................................................................................................................................293
Bibliografia ..........................................................................................................................294

Rozdzia 3.2

60*#
$
"
#$! :(
Prostszy sposb....................................................................................................................297
Mikrowtki...........................................................................................................................297
Zarzdzanie stosem..............................................................................................................299
Problemy ..............................................................................................................................300
Wniosek ...............................................................................................................................301
Bibliografia ..........................................................................................................................301

Rozdzia 3.3

/ 0
*#
0
"
#$0  #00 7
Kawaek po kawaku............................................................................................................303
Dobre zachowanie................................................................................................................304
Wszystko jest w umyle.......................................................................................................305
Problemy ..............................................................................................................................307
Wnioski................................................................................................................................309
Bibliografia ..........................................................................................................................310

Rozdzia 3.4

#' "$
  "#@ #')A9 
Polecenia gier RTS ..............................................................................................................311
Kolejkowanie polece..........................................................................................................312
Polecenia cykliczne..............................................................................................................313
Wnioski................................................................................................................................316
Bibliografia ..........................................................................................................................316

Rozdzia 3.5

!*! $
!*!*#
2#
!*
  !
*  #'  
Oglne przedstawienie zagadnienia.....................................................................................317
Definicje...............................................................................................................................318
Komponent 1.: Mapy widocznoci dla poszczeglnych graczy ..........................................319
Komponent 2.: Szablony linii widocznoci .........................................................................319
Komponent 3.: Poczona mapa widocznoci .....................................................................321
Usprawnione wyszukiwanie ................................................................................................322
Wnioski................................................................................................................................324

Rozdzia 3.6

6 ! ! :
Mapy wpywu ......................................................................................................................325
Prosta mapa wpywu ............................................................................................................326
Dane komrki mapy wpywu...............................................................................................327
Obliczanie potrzebnych wartoci.........................................................................................328
Okrelanie optymalnego rozmiaru komrki ........................................................................330
Rozchodzenie si wpyww.................................................................................................330
Branie pod uwag ksztatu terenu ........................................................................................331
Szczeglne okolicznoci ......................................................................................................333
Odwieanie mapy wpywu .................................................................................................333
Mapy wpywu w trjwymiarowych rodowiskach..............................................................334
Bibliografia ..........................................................................................................................335

Rozdzia 3.7

A#'
#
!* #
$ 
Drzewo przydziau zasobw ................................................................................................337
Obliczanie podanego przydziau ......................................................................................339
Okrelanie aktualnego przydziau........................................................................................339
Podejmowanie strategicznych decyzji .................................................................................340
Miary wartoci .....................................................................................................................341
Graf zalenoci ....................................................................................................................341
Wzy grafu zalenoci ........................................................................................................342
Ekonomiczne planowanie ....................................................................................................342
Znajdowanie czuych zalenoci .........................................................................................343
Wnioskowanie strategiczne .................................................................................................343
Osobowo postaci ..............................................................................................................344
czymy wszystko razem ....................................................................................................345
Bibliografia ..........................................................................................................................345

Rozdzia 3.8


" 
$! !#' #' #$ +
Reprezentacja terenu, ktra pozwoli go zrozumie i przeanalizowa .................................348
Punkty kontrolne..................................................................................................................348
Przykadowy teren i potrzeby sztucznej inteligencji ...........................................................349
Analiza taktyczna.................................................................................................................349
Od wartoci taktycznych do waciwoci punktw kontrolnych.........................................350
Obliczanie waciwoci punktw kontrolnych ....................................................................351
Wiedza pynca z dowiadczenia zdobywanego w trakcie gry ...........................................354
Umieszczanie analizy terenu w grze....................................................................................354
Inne zastosowania ................................................................................................................355
Wnioski................................................................................................................................356
Bibliografia ..........................................................................................................................356

Rozdzia 3.9

)*
 " 
$
 
0 
 "
2#  
Definiowanie modelu zderze .............................................................................................358
Znajdowanie drogi midzy wieloktami..............................................................................358
Rozszerzaj i zwyciaj.........................................................................................................359
Suma Minkowskiego dla wypukych wieloktw ...............................................................359
Rozszerzanie niewypukej geometrii ...................................................................................361
Dobr ksztatu zderzenia .....................................................................................................362
Wnioski................................................................................................................................363
Bibliografia ..........................................................................................................................363

Rozdzia 3.10  ! " #$ 


$
 0 
#
2# 
Znajdowanie drogi za pomoc punktw widocznoci .........................................................366
Przechowywanie najkrtszej cieki do kadego punktu ....................................................366
czenie naronikw ...........................................................................................................367
Optymalizacja 2.: Rozwaaj tylko cieki idce wok naronikw...................................368
Strefy zarysu ........................................................................................................................368
Uywanie stref zarysu z podziaem przestrzeni...................................................................370
Wnioski................................................................................................................................370
Bibliografia ..........................................................................................................................371

Rozdzia 3.11 9   B 3


#! ! 
Cakowicie nowy wiat ........................................................................................................374
Stada z zbami .....................................................................................................................377
Ograniczenia i moliwe rozszerzenia ..................................................................................377
Bibliografia ..........................................................................................................................378

10

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

Rozdzia 3.12 "


!  *
!!#'$!%&& (
Dlaczego warto uywa FuSM w grach? ............................................................................380
Jak uywa FuSM w grze? ..................................................................................................381
Krtkie wprowadzenie do oglnego automatu stanw skoczonych z pierwszego tomu ......381
Dostosowywanie oryginalnego automatu do FuSM w C++................................................382
Teraz dodaj logik rozmyt do wasnych gier!....................................................................383
Bibliografia ..........................................................................................................................383

Rozdzia 3.13 /
$*
* "$
#$*!* #'!!#' 5
Problem................................................................................................................................385
Rozwizanie.........................................................................................................................386
Konkretny przykad .............................................................................................................388
Konkretny przykad w metodzie Combsa............................................................................390
Wnioski................................................................................................................................392
Bibliografia ..........................................................................................................................392

Rozdzia 3.14 C3!


*#

!#' #'?

! !  (
Gra .......................................................................................................................................393
Wielowarstwowy perceptron ...............................................................................................394
Dobr wej .........................................................................................................................395
Zbieranie danych..................................................................................................................396
Trenowanie MLP .................................................................................................................397
Wyniki .................................................................................................................................398
Wnioski................................................................................................................................399
Bibliografia ..........................................................................................................................399

#$ %&  


 % '(
  
 +7
Rozdzia 4.1



D<6 +7
Czynniki...............................................................................................................................405
Czysta metoda VIMP .......................................................................................................407
Paski pomijane .....................................................................................................................410
Wielopoziomowe paski pomijane........................................................................................411
Tryb mieszany VIMP...........................................................................................................413
Tryb mieszany paskw pomijanych ....................................................................................414
Przesuwane okno .................................................................................................................414
Podsumowanie .....................................................................................................................418
Bibliografia ..........................................................................................................................418

Rozdzia 4.2

C  *#

  #0 
   + (
Zabawa z kratkami...............................................................................................................420
Tworzenie mapy ..................................................................................................................421
Szablony kratek....................................................................................................................422
Brzydko, brzydko, brzydko .................................................................................................422
Lepiej, szybciej, silniej ........................................................................................................424
Wnioski................................................................................................................................424
Bibliografia ..........................................................................................................................425

Rozdzia 4.3

- "" *!2"


 #
2#E
 ! #
!*
  * +:
Kule otaczajce ....................................................................................................................427
Uywanie drzew kul ............................................................................................................428
Przykadowa aplikacja .........................................................................................................429

Rozdzia 4.4

9 *
 *2#
 # $0#!#'

"!#'* +
Krtki przegld sposobw hierarchicznego sortowania ......................................................431
Drzewa AABB.....................................................................................................................432
Tworzenie drzew AABB .....................................................................................................433
Kompresja drzew AABB .....................................................................................................433
Aproksymacja wymiarw ....................................................................................................434
Wykorzystywanie rekurencji ...............................................................................................435
Wydajno w trakcie dziaania ............................................................................................435
Dalsze rozszerzenia..............................................................................................................436
Bibliografia ..........................................................................................................................436

Rozdzia 4.5

*
 # 2
*  +
Gdzie idzie wydajno .........................................................................................................438
Usuwanie porednikw........................................................................................................439
Warunki i wymagania ..........................................................................................................439
Okrelanie poziomu drzewa.................................................................................................440
Dostosowywanie do sytuacji ...............................................................................................442
Okrelanie pooenia............................................................................................................443
Przemieszczanie si po drzewie czwrkowym ....................................................................444
Dostosowywanie drzewa czwrkowego..............................................................................444

Rozdzia 4.6

 *! #$    @   #' ++


Obserwacja akwarium..........................................................................................................445
Poprawa realizmu ................................................................................................................448
Wniosek ...............................................................................................................................448

Rozdzia 4.7

)


!#'
"#2#
 $0#$* ++(
Podstawowy algorytm..........................................................................................................450
Uwagi i ewentualne problemy .............................................................................................452
Zakoczenie .........................................................................................................................452
Bibliografia ..........................................................................................................................452

Rozdzia 4.8

9*
2" " "
!#' #'
 + 
Algorytm..............................................................................................................................453
Przycinanie trjktw ..........................................................................................................455
Implementacja......................................................................................................................456
Bibliografia ..........................................................................................................................456

Rozdzia 4.9

)

"$*#
$  + (
Podstawowa metoda ............................................................................................................459
Rozdzielczo ta .................................................................................................................459
Rozmiar szecianu ta ..........................................................................................................460
Rendering sceny...................................................................................................................461
Szecienne mapowanie rodowiska .....................................................................................461
Tworzenie tekstur ta ...........................................................................................................462
Wniosek ...............................................................................................................................462
Kod rdowy ......................................................................................................................462

Rozdzia 4.10 * ## $0#


*#@ +
Wczeniejsze metody...........................................................................................................463
Podzia geometrii postaci.....................................................................................................463
Rendering tekstury ...............................................................................................................464
Rendering postaci ................................................................................................................464
Wniosek ...............................................................................................................................465
Bibliografia ..........................................................................................................................465

12

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

Rozdzia 4.11 9



 #$  !#$#$*!
9 6 + +
Ustawienia ...........................................................................................................................467
Konwersja wejcia kontrolera..............................................................................................468
Obrt postaci........................................................................................................................469
Przesuwanie postaci .............................................................................................................470
Animacja postaci..................................................................................................................471
Analiza animacji Super Mario 64 ........................................................................................473
Wniosek ...............................................................................................................................474
Bibliografia ..........................................................................................................................474

#)  * '+


  
 +
Rozdzia 5.1

)

*?!!



 *!"# *#!*! +(
Twrca zarysw ...................................................................................................................479
Wane krawdzie .................................................................................................................480
Metody wykrywania krawdzi sylwetki ..............................................................................481
Wyciganie rysunku w tuszu bazujce na krawdziach ......................................................481
Wyciganie rysunku w tuszu za pomoc programowanego shadera wierzchokw ...........483
Wyciganie rysunku w tuszu za pomoc zaawansowanych funkcji tekstur........................485
Wniosek ...............................................................................................................................486
Bibliografia ..........................................................................................................................486

Rozdzia 5.2

)

*  #0 
 *
  
!#'*' #' +5
Cieniowanie w kreskwkach ...............................................................................................487
Malowanie ...........................................................................................................................488
Programowane shadery wierzchokw ................................................................................491
Wniosek ...............................................................................................................................493
Bibliografia ..........................................................................................................................493

Rozdzia 5.3

6!!
#
2"
 "  *" +(
Trjwymiarowe tekstury w dynamicznym owietlaniu.......................................................495
Mapowanie nierwnoci dot3 ..............................................................................................498
Normalizacja za pomoc map szeciennych........................................................................501
wiata stokowe bazujce na pikselach .............................................................................502
Bibliografia ..........................................................................................................................503

Rozdzia 5.4

A
 # "
!#'#'
  #0  #
!#' #" #$0- 7
Waciwoci chmur..............................................................................................................505
Generator liczb losowych ....................................................................................................506
Animacja oktawy szumu......................................................................................................508
Mapowanie na geometri nieba ...........................................................................................511
Dodatkowe funkcje ..............................................................................................................511
Ograniczenia sprztowe .......................................................................................................512
Uzyskiwanie wikszej uniwersalnoci.................................................................................513
Wnioski................................................................................................................................513
Bibliografia ..........................................................................................................................514

Rozdzia 5.5

6 *
*#" !* *
 !*

*#
Zasanianie efektu soczewki ................................................................................................515
Problemy sprztowe.............................................................................................................516
Maskowanie tekstur .............................................................................................................518
Uwagi co do wydajnoci......................................................................................................519
Usprawnienia .......................................................................................................................520
Przykadowy kod .................................................................................................................520
Alternatywne podejcia........................................................................................................521
Bibliografia ..........................................................................................................................521

Rozdzia 5.6

 !#
#
 
 #' !!#' :
Porwnanie buforw priorytetowych z buforami gbi .......................................................525
Rozwizywanie problemw z aliasingiem ..........................................................................526
Metody hybrydowe ..............................................................................................................528
Podsumowanie .....................................................................................................................529
Bibliografia ..........................................................................................................................529

Rozdzia 5.7

*2#? 
2# 
Cay proces ..........................................................................................................................532
Rendering oszusta ................................................................................................................532
Heurystyka aktualizacji........................................................................................................536
Wydajno ...........................................................................................................................538
Przewidywanie.....................................................................................................................538
Podsumowanie .....................................................................................................................539

Rozdzia 5.8

- 
 * #  " $0#

 # "
0
 #$* +
Operacje sprztowe..............................................................................................................542
Dalsza praca .........................................................................................................................551
Podzikowania .....................................................................................................................552
Przykadowy kod .................................................................................................................552
Bibliografia ..........................................................................................................................552

#

 &,
  

Rozdzia 6.1

# $  


F #' 
Most .....................................................................................................................................557
Fasada ..................................................................................................................................558
Zoenie ...............................................................................................................................559
Porednik .............................................................................................................................559
Dekorator .............................................................................................................................560
Polecenie ..............................................................................................................................560
Pamitka...............................................................................................................................561
Obserwator...........................................................................................................................561
Wielka kula bota (zwana take kodem spaghetti) ..............................................................562
Wniosek ...............................................................................................................................563
Bibliografia ..........................................................................................................................563

Rozdzia 6.2

6 
!#' * 

3!# *
*!
  $0#!
  #' 
Problem................................................................................................................................565
Pomys na rozwizanie ........................................................................................................566
Rozwizanie.........................................................................................................................567
Wniosek ...............................................................................................................................568

14

2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO

Rozdzia 6.3

 !-9 (
Filtrowanie ...........................................................................................................................569
Splot .....................................................................................................................................570
Opnienie ...........................................................................................................................571
Interpolacja ..........................................................................................................................572
Bibliografia ..........................................................................................................................572

Rozdzia 6.4

<
 !
!   
 #!!F 
Wprowadzenie .....................................................................................................................575
Dyskusja...............................................................................................................................578
Kod.......................................................................................................................................580
Dodatkowy komentarz .........................................................................................................583
Wniosek ...............................................................................................................................584

Rozdzia 6.5

*!*
*!"  5
Strumieniowanie kontra sekwencjonowanie .......................................................................585
Podstawowe koncepcje komputerowej muzyki ...................................................................586
Implementacja komputerowego sekwensera muzyki ..........................................................589
Sterowanie syntez dwiku ................................................................................................596
Kod.......................................................................................................................................596
Wnioski................................................................................................................................596
Bibliografia ..........................................................................................................................596

Rozdzia 6.6

9
*
 !
$!"  (
Powizania muzyczne..........................................................................................................597
Znaczenie muzyki ................................................................................................................598
Przejcia ...............................................................................................................................598
Rodzaje przej ....................................................................................................................598
Czuo sterowania ..............................................................................................................601
Sterowanie docelowe ...........................................................................................................601
Przykady projektw ............................................................................................................602
Kod.......................................................................................................................................604
Wniosek ...............................................................................................................................604
Bibliografia ..........................................................................................................................605

Rozdzia 6.7

<
$*  *!#
!
* " F 7
Podstawowe klasy................................................................................................................607

-
& .(
9 

Rozdzia 5.4


   
  
  
       
-KO2CNNKUVGT+PVGN
kim.pallister@intel.com
W wielu grach akcja rozgrywa si na zewntrz budynkw, a rodowisko przypomina
Ziemi. Z tego powodu realistyczny rendering terenu sta si jakby witym Graalem
dla wielu twrcw gier. Niestety, na modelowanie nieba i chmur nie zwraca si tyle
uwagi, ile si im naley. Chmury to przewanie jedna lub dwie warstwy statycznych,
przesuwanych tekstur. Na pierwszy rzut oka wszystko jest w porzdku, ale po duszej
chwili zauwaamy ich powtarzalno, a po dniu grania zacznie nas ona nudzi.
W tym rozdziale zajmiemy si proceduralnie tworzonymi teksturami chmur, ktre posiadaj pewne waciwoci rzeczywistych chmur. Poniewa tekstury przewanie znajduj si w pamici podsystemu graficznego, bdziemy chcieli je generowa prawie
wycznie za pomoc procesora graficznego. Dodatkowo omwimy kilka modyfikacji
techniki pod wzgldem zmiany jakoci i wydajnoci, by dostosowa j do rnych systemw.

    
Dokadnie przygldajc si charakterystyce rzeczywistych chmur, stosunkowo atwo
mona utworzy list posiadanych przez nie cech. Oczywicie, jak w kadej metodzie
czasu rzeczywistego, bdziemy musieli powici kilka z tych funkcji na rzecz szybkoci, ale tym bdziemy si przejmowa pniej.

506

    
  

Oto kilka spraw, ktre mona zauway od razu:


 Chmury s animowane. Po niebie przesuwa je wiatr, ale to nie wszystko:

ich ksztat zmienia si lub ewoluuje w czasie (mona to atwo zauway


na dowolnych zdjciach wykonanych w staych odstpach czasu). Co wicej,
liczba chmur na niebie cay czas si zmienia. To rozwaanie prowadzi nad
do trzech zmiennych: szybko symulacji, szybko wiatru i dodatkowego
elementu opisujcego zachmurzenie.
 Mniejsze elementy zmieniaj si szybciej od wikszych (dotyczy zmiany ksztatu).
 Chmury wykazuj ogromne samopodobiestwo w swojej strukturze.
 Poziom zachmurzenia zmienia si od penego do czystego nieba z tylko kilkoma

odosobnionymi chmurkami (lub cakowitym ich brakiem). Gdy zmienia si


zachmurzenie, wygld chmur take ulega zmianie. Dla zachmurzenia chmury
staj si szare i ciemne, a dla pogodnego nieba s biae z przebyskami
niebieskiego nieba.
 Chmury to trjwymiarowe istoty. S owietlane przez soce z jednej strony, a cie

rzucaj z drugiej. W mniejszej skali jest jeszcze trudniej, poniewa chmury rzucaj
cienie na inne chmury i odbijaj promienie wietlne we wszystkich kierunkach.
 Chmury wygldaj cakowicie inaczej przy wschodzie i zachodzie soca,

poniewa soce owietla je z boku, a w skrajnych przypadkach nawet z dou.


 Chmury maj tendencj do pywania na wsplnej wysokoci, formujc warstwy.

Czasem tych warstw jest kilka. Poniewa warstwy te zachowuj sta wysoko
nad krzywizn Ziemi, wykorzystamy t krzywizn w obliczaniu warstw chmur.
... a to tylko cz spostrzee obserwatora patrzcego z Ziemi. W grach takich jak symulator lotu, gdzie moemy wlatywa w chmury, pojawia si wiele dodatkowych
utrudnie. W tym rozdziale pozostaniemy na Ziemi.

     
Jak w przypadku prawie kadej proceduralnej tekstury, musimy zacz od okrelenia
generatora pewnego rodzaju szumu. Szum to termin uywany do okrelenia czego, co
jest z natury losowe. Szumem moe by na przykad funkcja, ktra po podaniu szeregu
licz cakowitych (czyli 1, 2, 3...) utworzy pozornie losowy szereg wynikw (na przykad
0,52, 0,13, 0,38...). Pozornie losowy, poniewa dla takiego samego wejcia wyjciowe
liczby zawsze bd takie same. Takie funkcje nazywamy pseudolosowymi, poniewa
stosujc to same ziarno, moemy odtworzy te same wyniki. Dodatkowo szum ma czsto
okrelony wymiary (na przykad dwu- lub trjwymiarowy szum). Odnosi si do liczby
wej przeksztacanych na losow warto tworzymy po prostu wielowymiarow tablic. Jeden z wymiarw jest skalowany przez pewien stosunkowo duy czynnik (przewanie liczb pierwsz), aby zminimalizowa moliwo powtarzania si cigw liczb.
Tworzenie losowych (lub pseudolosowych) liczb to bardzo rozlegy temat. Kade podejcie to rwnowaga midzy zoonoci funkcji a jakoci wynikw. Dobre generatory
liczb losowych dobrze rozkadaj losowe wartoci po caym przedziale i nie powtarzaj
si przez bardzo dugi czas.

Na szczcie na potrzeby tego rozdziau wystarczy bardzo prosty generator liczb losowych. Gdy poznasz dokadnie t technik, dowiesz si, e generator liczb losowych bdziemy wywoywali kilka razy na piksel z rnymi wartociami ziarna. Poczenie wynikw zamaskuje pojawiajc si powtarzalno.
Generator liczb pseudolosowych, od ktrego zaczniemy, przedstawia wydruk 5.4.1.
Wykorzystuje on liczb podan jako parametr (x) w wielomianie, ktrego wspczynniki
s mnoone przez due liczby losowe. W ten sposb uzyskujemy znacznie mniejsz
powtarzalno wartoci. Maskujemy bit znaku, dzielimy liczb do zakresu 0 2, a nastpnie odejmujemy j od jedynki, by otrzyma przedzia od 1 do 1.

Prosty generator liczb pseudolosowych

 

 
  
  
  
   !"# $ $ % % &'"((!"
)

W przypadkach, w ktrych uywamy kilku oktaw, moesz zwikszy losowo generatora, tworzc tablic liczb pierwszych i uywajc rnych wartoci  i 
w zalenoci od oktawy. Dla naszych celw wykorzystanie tylko jednego zestawu liczb
pierwszych jest wystarczajce.
Poniewa chcemy zaimplementowa generator w procesorze graficznym, ktry nie pozwala na wykonanie caego kodu z wydruku 5.4.1, utworzymy tablic przegldow tej
funkcji jako map tekstury 512512. Wykorzystanie takiej mapy daje nam okoo 260
tysicy wpisw, zanim funkcja zacznie si powtarza. Wykorzystamy t tekstur jako
generator liczb losowych, kopiujc fragmenty tej tekstury do docelowej tekstury i uywajc losowego przesunicia wsprzdnych tekstury wygenerowanego przez oprogramowanie. Przedstawia to rysunek 5.4.1. Kopiowanie wykorzystuje kart graficzn, aby
zrenderowa na wielokcie losow tekstur ze rdowej.
 

a) Tekstura stanowica
tablic przegldow
losowych liczb;
b) Wygenerowana
tekstura szumu 3232





Ken Perlin po raz pierwszy zastosowa szum o ograniczonej zmianie jako metod renderingu. Szum o ograniczonej zmianie jest ograniczony do pewnego zakresu czstotliwoci,
ktry mona rozumie jako maksymaln zmian midzy prbkami. W naszym przypadku

508

    
  

oznacza to moliwo utworzenia losowych liczb z maksymaln zmian miedzy nimi,


a co za tym idzie, gadk interpolacj losowych prbek. Do interpolacji moemy wykorzysta filtrowanie dwuliniowe karty graficznej. W ten sposb pozbdziemy si skadowych o wysokich czstotliwociach i uzyskamy gadkie, bardziej naturalne przejcia.
Patrz rysunek 5.4.2.
 

a) Prbkowanie tekstury
stanowicej tablic przegldow
losowych liczb w celu utworzenia
tablicy szumu. b), c) Uywajc
zwikszania prbkowania
i filtrowania tworzymy szum
o ograniczonej zmianie w docelowej
rozdzielczoci (docelowym
zakresie czstotliwoci)

Warto wspomnie, e w pewnych przypadkach, wykorzystujc szum do tworzenia proceduralnej zawartoci, interpolacja dwuliniowa nie jest odpowiednia i trzeba skorzysta
z lepszej metody filtrowania, by osign podany wynik. Na szczcie w tym przypadku niska jako filtrowania dwuliniowego jest wystarczajca.
Utworzona w ten sposb tablica szumu daje nam pojedynczy podstawowy szum o danej
czstotliwoci. Bdziemy go nazywa oktaw szumu, poniewa w dalszej czci rozdziau poczymy kilka oktaw (mnoenia o tej samej czstotliwoci) razem. Najpierw
jednak bdziemy musieli zaj si animacj tablicy szumu.

!    
Jeli chcemy animowa oktaw szumu, pomylmy o czasie jak o trzecim wymiarze, za
pomoc jakiego moemy indeksowa generator liczb losowych. Moemy to wykona
na karcie graficznej, co jaki czas zapamitujc aktualny szum, tworzc nowy i interpolujc midzy nimi od jednego uaktualnienia do drugiego. Szybko uaktualnie tekstury okrela czstotliwo w trzecim wymiarze.
Interpolacj przedstawia rysunek 5.4.3. Jest to jedyny przypadek, gdzie wykorzystanie
interpolacji liniowej nie jest idealne, poniewa szum jest bardziej skupiony w rzeczywistych punktach prbkowania. Jak si jednak za chwil przekonasz, problem ten
nie jest widoczny w kocowym efekcie, ale warto o nim pamita. Jeli chcemy powici wydajno rysowania, moemy oblicza oktawy dla wielu punktw w czasie
i uywa lepszej interpolacji w celu uzyskania lepszych wynikw.
 

Interpolacja midzy uaktualnieniami
szumu w celu animacji oktawy.
Wynik = WczeniejszaAktualizacjia
(1 (T1 T0)/(T2 T0)) +
NowaAktualizacja (T1 T0)/(T2
T0). T0 to czas wczeniejszej
aktualizacji, T2 to czas nowej
aktualizacji, a T1 to aktualny czas
midzy aktualizacjami


  
  
Popularn metod uywan przy tworzeniu proceduralnych tekstur jest sumowanie
fraktalne, ktre polega na sumowaniu skalowanych harmonicznych podstawowej funkcji szumu. Z takiej operacji powstaje fraktal ruchu Browna, ktry jest bardzo popularny
w wielu technikach renderingu, na przykad fraktalnego terenu i wielu typw proceduralnych tekstur. Sum fraktaln przedstawia rwnanie 5.4.1. a okrela sposb przechodzenia przez spektrum czstotliwoci (a ma przewanie warto 2, czyli utrzymujemy f,
2f, 4f, ...), a b okrela amplitud dodawanego elementu z szeregu.
N 1

Szum( x) =
k =0

Szum(a k x)
bk

(5.4.1)

Na szczcie warto 2 dla a jest zarwno powszechnie uywana w generatorach proceduralnych tekstur, jak i dobrze obsugiwana przez sprzt, poniewa moemy po prostu
zaimplementowa oktawy szumu jako szereg map tekstur o rozmiarach bdcych kolejnymi potgami 2.
Warto 2 dla b take jest powszechnie uywana i upraszcza nasz implementacj. Zoenie oktaw szumu mona wykona, przeprowadzajc kilka przebiegw renderingu
z prostym mieszaniem (patrz pseudokod z wydruku 5.4.2).

 Zoenie oktaw szumu
''* +,-,./0/112  134+3 5 +6121 "#!
''*  + 7/%'%'(%!!!) '%'(%!!!)
./0/"!
0/. "!"
  8/9:

0/. 0/. $"!%./0/$  :8/9 8/9:# 
)

Rysunek 5.4.4 przedstawia proces animacji rnych oktaw midzy aktualizacjami i czenia ich w jedn tekstur burzliwego szumu.


  
Mamy teraz map tekstury z animowanym szumem z turbulencjami i musimy wykona
kilka krokw, by przeksztaci j na chmury. Idealnie byoby wykorzysta szum jako
wejcie pewnego rodzaju funkcji wykadniczej, uzyskujc ostry poziom skroplenia,
powyej ktrego chmury s widoczne. Poniewa jednak nie mamy dostpu do takiej
operacji w procesorze grafiki, skorzystamy z innej metody. Istnieje kilka sposobw poradzenia sobie z sytuacj.
Najprostsze podejcie to odejmowanie. Odejmujemy okrelon warto od tekstury
i przycinamy wynik od dou do 0. W ten sposb uzyskujemy pojedyncze chmury (patrz
rysunek 5.4.5).

510

    
  

 

Poczenie kilku oktaw animowanego szumu
 

Odejmowanie
staej wartoci
w celu otrzymania
pojedynczych chmur

Niestety, w ten sposb tracimy cz dynamicznego zakresu dla chmur, ktre pozostay.
Moemy to skompensowa, zwikszajc nasycenie i mnoc kolory wierzchokw. Tego sposobu uywamy w przykadowym kodzie.
Inna metoda polega na dodaniu kanau krycia do wszystkich omawianych do tej pory
warstw tekstur. Wykonamy t sam operacj odejmowania co wczeniej, ale na kanale
krycia, a nastpnie wykorzystamy test krycia do zamaskowania niektrych regionw
bez tracenia dynamicznego zakresu. W tej metodzie pojawia si jednak inny rodzaj problemu. Poniewa test krycia jest wykonywany przed filtrowaniem, pojawi si ostre
krawdzie, jeli nie skorzystamy z tekstury o naprawd wysokiej rozdzielczoci.

Jeszcze jedn metod jest pewnego rodzaju przegldanie tekstury, gdzie kolor tekstury
wpywa na pooenie, w ktrym teksel jest umieszczany w kolejnym etapie. Przykadem
takiego zachowania moe by tryb renderingu  

obsugiwany przez niektre
karty w bibliotece DirectX. W przyszoci, gdy wicej kart bdzie obsugiwao ten tryb,
stanie si moliwe zakodowanie wykadniczej funkcji w mapie tekstury i przegldanie
jej w celu otrzymania wyniku.

"
  # 
Po przygotowaniu tekstury chmury z rysunku 5.4.5 moemy j mapowa na geometri
nieba. Wybr geometrii zaley od aplikacji. W przykadowym programie uywamy tzw.
paszczyzny nieba, ktra jest po prostu prostoktn siatk trjktw z wierzchokami
przesunitymi tak, e stanowi wycinek kuli. Wyobra to sobie jak rzucenie skrawka
pachty na powierzchni piki plaowej. Nie jest to idealne rozwizanie, ale mapowanie
tekstury jest proste. Paszczyzn nieba przedstawia rysunek 5.4.6.
 

Geometria terenu
i paszczyzna
nieba uywana
dla tekstury nieba

    
W tym momencie moemy wykona wiele rzeczy z chmurami, w zalenoci od tego,
jak wiele czasu procesora i karty graficznej moemy na to powici. Kilka z tych propozycji zostao zaimplementowanych w przykadowym kodzie; pozostae to propozycje
dalszych usprawnie dla Twoich implementacji. Oto kilka funkcji, ktre moesz doda:
 Sterowany szumem kierunek wiatru i zachmurzenie. Pewne interesujce wyniki

mona uzyska, korzystajc z innych funkcji szumu do modyfikacji pozostaych


zmiennych w czasie, wic na przykad wiatr moe zmienia kierunek, a poziom
chmur obnia si i podwysza w cigu kilku godzin lub dni.
 Wytacza chmury, dodajc wraenie trjwymiarowoci. Wymaga to jednak

dodatkowego przebiegu i pewnych modyfikacji w wartociach UV wierzchokw.


Wierzchokom dodajemy drugi zbir wsprzdnych tekstury przesuwanych
w zalenoci od kierunku soca. Chmury s ciemniejsze po stronie przeciwnej
do soca, a janiejsze po tej samej.

512

    
  

 Chmury mog rzuca cie na ziemi. Wystarczy uy wynikowej tekstury

z mieszaniem odejmujcym. Teren musi posiada inny zestaw wsprzdnych


tekstury lub uywa rzutowania tekstury.
 Modyfikowa owietlenie i (lub) intensywno efektu soczewki (lens flare).

Poniewa wiemy, jak tekstura jest mapowana na geometri i znamy kt


nachylenia soca, moemy policzy dokadnie teksel lub grup tekseli, ktre
znajduj si na linii widocznoci wzgldem soca. Moemy w ten sposb
zmniejsza owietlenie terenu lub czasowo wycza efekt soczewki. Zauwa,
e modyfikacja owietlenia spowodowana wikszym zachmurzeniem zmniejsza
intensywno wiata kierunkowego soca, ale zwiksza owietlenie oglne,
poniewa chmury rozpraszaj promienie soca we wszystkich kierunkach.

$ 
#
Pozwolenie karcie graficznej na przeprowadzenie wikszoci operacji w tej technice
umoliwia osignicie wikszej wydajnoci ni w przypadku, w ktrym musielibymy
rcznie blokowa i modyfikowa tekstur w kadej klatce. Niestety, takie podejcie ma
take wady. Oto one:
 Obsuga renderingu do tekstury. Metoda przedstawiona w tym rozdziale

intensywnie korzysta z tej funkcji. Niestety, obsuga tej funkcji nie wystpuje
we wszystkich kartach graficznych. Wykrywanie obsugi staje si atwiejsze
przy nowoczesnych interfejsach programistycznych, ale nadal nie jest pewne.
W przypadkach, gdy rendering do tekstury nie jest obsugiwany, mona
skorzysta z kopiowania bufora ramki do tekstury, ale prawdopodobnie ucierpi
na tym wydajno.
 Ograniczona precyzja. Aktualnie istniejcy sprzt graficzny przechowuje

tekstury i renderuje docelowe wartoci jako liczby cakowite, przewanie 16


lub 32 bity na piksel. Poniewa w zasadzie dziaamy na skali szaroci, jestemy
ograniczeni do 8 bitw na piksel, a w najgorszym przypadku do 4! Ta druga
warto jest bardzo maa, wic na pewno pojawi si bdy. Zauwa, e oznacza
to, e oktawy o wysokiej czstotliwoci z tego powodu dodaj tylko kilka bitw
do kocowego wyniku.
 Ograniczony dynamiczny zakres. Poniewa liczby cakowite musz

reprezentowa dane z zakresu 0 1, jestemy zmuszeni wczeniej przeskalowa


i przesun te wartoci do odpowiedniego zakresu. Poniewa nasza funkcja
szumu zwraca wartoci w przedziale od 1 do 1, musimy je zmodyfikowa,
by uzyska podany zakres. Jest to dodatkowa praca, ktra powiksza bdy
powodowane przez ograniczon precyzj.
 Ograniczone moliwoci i polecenia procesora grafiki. Ubogie w instrukcje

procesory grafiki ograniczaj nas co do tego, co moemy zrobi. Dobrze byoby


prowadzi zaburzon tekstur szumu do funkcji potgowej, na przykad
wykadniczej, ale jestemy ograniczeni do prostych operacji arytmetycznych. Poza
tym intensywnie wykorzystujemy rendering do tekstury, ktry nie jest dostpny
na wszystkich kartach graficznych. Poniewa jest pewne, e w przyszoci karty
graficzne bd bardziej zaawansowane, bdziemy mieli mniej problemw.

%  #    


Jeli chcemy skorzysta z tej techniki w komercyjnym projekcie, a docelow platform
jest komputer klasy PC (gdzie wydajno moe si znacznie rni), musimy zastanowi si nad uniwersalnoci tego rozwizania. Nawet jeli docelowa platforma jest staa,
ale inne elementy gry wymagaj wikszej uwagi, musimy mie moliwo zmiany wydajnoci kosztem jakoci dla takich przypadkw.
Oto kilka sposobw na modyfikacj wydajnoci przedstawionej metody:
 Rozdzielczo tekstury. Rozdzielczo tekstury na rnych porednich etapach

mona zmniejszy, oszczdzajc na pamici i szybkoci wypeniania trjktw.


Zauwa, e nie chcemy zmniejsza gbi kolorw, poniewa przy 16 bitach
na kolor jako drastycznie spada.
 Czsto aktualizacji tekstury. Nie kada tekstura musi by aktualizowana

w kadej klatce. Szczeglnie gdy szybko symulacji nie jest dua, mona
zrezygnowa z aktualizacji w kadej kratce przedstawionej w przykadowym
kodzie.
 Liczba uywanych oktaw. Przykadowy kod uywa czterech oktaw szumu,

ale nawet trzy zapewniaj dosy dobre wyniki. Na bardzo szybkich systemach
mona skorzysta z piciu oktaw, by podnie jako grafiki.

 
Rysunek 5.4.7 przedstawia wynikowe proceduralne chmury w przykadowym programie.
 

Wynik przykadowego
programu tworzcego
proceduralne chmury

Mamy nadziej, e ten rozdzia przybliy Ci nieco techniki tworzenia proceduralnych


tekstur na przykadzie chmur oraz metody zrzucenia wikszoci oblicze na procesor
karty graficznej.

514

    
  

Sprzt graficzny staje si coraz szybszy i powoli moemy generowa proceduralne tekstury w czasie rzeczywistym. Mamy nadziej, e wyniki wasnych eksperymentw
przedstawisz spoecznoci twrcw gier.

&
[Ebert98] Ebert D. S. i inni: Texturing and Modeling: A Procedural Approach, AP Professional Inc., 1999.
[Elias99] Elias H.: Cloud Cover, dostpne w witrynie http://freespace.virgin.net/hugo.
elias/models/m_clouds.htm, zawiera czysto programow metod podobn do przedstawionej tutaj.
[Pallister99] Pallister K.: Rendering to Texture Surface Using DirectX 7, dostpne
w witrynie www.gamasutra.com/features/19991112/pallister_01.htm.

You might also like