Professional Documents
Culture Documents
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
5RKUVTGEK
Rozdzia 1.1
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
2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO
Rozdzia 1.5
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
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
!#'
Analiza wymaga ................................................................................................................155
Implementacja......................................................................................................................156
Uycie ..................................................................................................................................160
Uwagi...................................................................................................................................162
Podzikowania .....................................................................................................................162
Rozdzia 1.19 =
#$ #!2#"*!#'"#
Pseudolosowo ...................................................................................................................163
Rzeczywista losowo .........................................................................................................164
2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO
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
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
2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO
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
10
2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO
Rozdzia 3.13 /
$*
* "$
#$*!* #'!!#' 5
Problem................................................................................................................................385
Rozwizanie.........................................................................................................................386
Konkretny przykad .............................................................................................................388
Konkretny przykad w metodzie Combsa............................................................................390
Wnioski................................................................................................................................392
Bibliografia ..........................................................................................................................392
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
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
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
12
2GTG MKRTQITCOQYCPKCIKGT8CFGOGEWORTQHGULQPCNKUV[6QO
)
*?!!
*!"# *#!*! +(
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
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
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,
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
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
512
$
#
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
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
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.