![]() |
|
Generalnie |
3D Wirtualne światy
Grafika w grach : część 2
Robiąc grafikę na potrzeby gier komputerowych trzeba przygotować nie tylko główne modele, ale stworzyć cały świat w którym gracz może przebywać. Jest to zadanie nastręczające sporo problemów i będące wyzwaniem dla grafików 3D.
Małym problemem jest stworzenie mrocznych lochów, czy futurystycznych wnętrz statku kosmicznego, ponieważ są to obszary zamknięte i naturalnie ograniczone przez ściany. Problemy zaczynają się przy wielokilometrowych obszarach. W przypadku tworzenia dużych i otwartych przestrzeni musimy sobie najpierw wszystko rozrysować i zobaczyć gdzie pozwolimy dotrzeć graczowi. Trzeba ustalić pierwszy, drugi i trzeci plan jak również zastanowić się jak rozplanujemy otoczenie. W tym przypadku kartka i ołówek są naszymi największymi sprzymierzeńcami. Modelowanie Kiedy skończyliśmy przygotowanie teoretyczne czas zabrać się za konkretną pracę Zacznijmy od modelowania rzeczy pierwszoplanowych. W czym tkwi największa trudność? Jest nią skala. W grze, nad którą aktualnie pracuję trzeba obok siebie postawić modele jeziora wraz z otoczeniem (ok. 6 km kwadratowych ) z modelem ryby (no – przy wyrośniętej rybie będzie to może 0,5 m kwadratowego ;). No i w czym ten problem? Przypomnę, że cała sztuka przy tworzeniu grafiki dla gier polega na jak największym ograniczeniu liczby trójkątów z których będzie się składać plansza. W moim przykładzie jest to połączenie ryby która sama w sobie ma ok. 300 trójkątów, z dnem jeziora, które całe ma ok. 1000 trójkątów ( przy rozmiarach 1km x 4 km) . Przy takiej różnicy rozmiarów w żeby zobaczyć rybę – trzeba będzie się bardzo zbliżyć do dna – co za tym idzie będzie widać dokładnie geometrię jeziora. Nieukrywajmy, że nie wygląda to zbyt atrakcyjnie. Pewną pomocą jest wygładzanie geometrii przez nadanie parametru „smooth” w materiale. Dzięki temu zabiegowi komputer wyliczy średnia dla załamań i zasymuluje tam krzywiznę. Jednak nie jest to sposób, którym da się oszukać ludzkie oko przy dużych zbliżeniach. Niestety sposobem na bardzo duże zbliżenia jest zasłanianie kantów. Jak to zrobić? Generalnie nazywamy to bawieniem się w ogrodnika ;) wszędzie w okolicach kantów „sadzimy” roślinki, kamienie i inne obiekty które mają prawo się tam znaleźć. Sposób wydaje się dość prymitywny, ale jednocześnie jest skuteczny. No dobrze – ale dlaczego nie zagęścić po prostu siatki obiektu? Są dwie przyczyny.. Po pierwsze – lepiej wygląda powierzchnia porośnięta roślinnością, mająca więcej kamieni itp. Niż gołe, ale gładkie dno.. a po drugie jak pewnie się domyślacie takie sadzenie roślinek powoduje spore zagęszczenie siatki całej sceny – a co za tym idzie zwiększenie ilości trójkątów, co przy gorszych kartach graficznych może spowodować, że nie da się grać. W przypadku zagęszczenia jednego obiektu nie możemy praktycznie nic zrobić. Natomiast przy dużej ilości obiektów z małą ilością ścianek umożliwiamy programistom zamieszczenie funkcji, która po prostu w razie potrzeby wyłączy widzenie (a co za tym idzie renderowanie) niepotrzebnych obiektów. Owszem – stracimy wtedy maskowanie naszej siatki, ale umożliwimy grę na słabszych sprzętach – a to jest najważniejsze. Teksturowanie Dużo większym problemem skali jest wg mnie tekstura. Dajmy na to dla ryby jest tekstura 512x512 pikseli. To idąc w proporcje jaka musiałaby być tekstura jeziora długości 4 km? Szczerze? Nawet nie chce mi się tego liczyć;) Maksymalną wielkością tekstury, którą w dzisiejszych czasach przyjmują silniki gier jest 2048x2048 px. Jeśli chcielibyśmy zastosować teksturę tej wielkości dla całego jeziora, to przy przybliżeniach nasza rybka byłaby wielkości jednego piksela na teksturze dna. No dobrze – ale jak to przeskoczyć? Oczywiście zwiększając ilość tekstur jak i stosując tzw. tilowanie. Obydwa sposoby mają swoje wady. Nie możemy dać zbyt dużej ilości tekstur, ponieważ karta graficzna może na raz załadować tylko określoną ich ilość. Dlatego trzeba iść na kompromis. Np. jedna tekstura dla piasków, druga dla kamieni, a trzecia dla traw i liści. Drugą rzeczą pomocną dla nas jest „tilowanie”. Oznacza to, że gdy położyć teksturę obok siebie – będzie ona tworzyć całość bez wyraźnego miejsca łączenia. Niestety zbyt durzy obszar pokryty tilowaną teksturą od razu się rzuca w oczy przez zbyt częste powtarzanie się tych samych fragmentów obrazu. Nie będziemy w stanie stwierdzić dokładnie gdzie się łączy tekstura – ale będziemy widzieć, że się powtarza. Z pomocą przychodzi nam mapa detalu. Co to jest? jest to dodatkowa tekstura ładowana niejako w teksturze właściwej na zasadzie znanej nam z Photoshopa „tzw. mnożenie warstw”. Oczywiście musi to być inna tekstura inaczej tilowana, ale nałożenie jej niweluje tak bardzo widoczny efekt powtarzania się, a przy zbliżeniach niejako zagęszcza nam szczegóły. Niestety przygotowanie takich tekstur jest bardzo pracochłonne, a ludzi którzy są w stanie to naprawdę dobrze zrobić osobiście znam tylko dwóch (pozdrawiam was Rorque i SaGat). Otoczenie Po przygotowaniu niejako pierwszoplanowych i najważniejszych rzeczy do planszy musimy nadać trochę „życia” przez dodanie otoczenia, które samo w sobie nie jest istotne (nie wpływa na grę), ale powoduje, że krajobraz jest bardziej naturalny. W tym celu trzeba przygotować domy, drzewa, lasy, niebo i... co nam przyjdzie jeszcze do głowy w celu urozmaicenia krajobrazu.. Domy itp., są to zazwyczaj proste modele które w żaden sposób nie mogłyby nas zadowolić będąc na pierwszym planie, ale jeśli na nie patrzymy z daleka – bez problemu możemy uwierzyć, że są szczegółowe. W tym celu szykujemy obiekt składający się np. z 14 trójkątów, po czym nakładamy na niego teksturę mającą zasymulować szczegóły których w rzeczywistości nie ma. Również cienie „wypalamy” bezpośrednio na teksturze dla przyśpieszenia renderingu (nasz komputer nie będzie musiał w czasie gry liczyć cieni dla obiektów dla których dokładne odwzorowanie nie jest potrzebne. Jak powstają drzewa? Generalnie roślinność jest jedną z trudniejszych w odwzorowaniu rzeczy w grach. Dlaczego? Ponieważ zrobienie ich na geometrii pochłonęłoby ogromną ilość trójkątów. Dlatego właśnie trzeba iść na kompromis. Zazwyczaj drzewa składają się z 2 płaszczyzn, na które nałożona jest tekstura drzewa wraz z kanałem alfa. Coprawda nie wygląda to zbyt realnie, ale z większych odległości w miarę skutecznie oszukuje ludzkie oko. W przypadku bardzo dalekiego planu możemy pokusić się o przygotowanie lasu na jednej płaszczyźnie na zasadzie tilowanej tekstury. Natomiast niebo jest po prostu półkulą na którą nałożone jest panoramiczne zdjęcie nieba. Oczywiście trzeba je tak przygotować, żeby się łączyło bez „szwu”. No i to byłoby chyba na tyle jeśli chodzi o tajemnicę tworzenia światów w grach 3D. Jak widzicie jest to dość praco i czasochłonne zadanie, ale efekt może wygrodzić nam poniesione trudy w postaci zadowolenia graczy. Oczywiście jak zawsze zachęcam do dyskusji na forum, gdzie z przyjemnością odpowiem na wszelkie pytania, bądź postaram się rozwiać wątpliwości. |