Poprzednia strona Spis treści Nastepna strona   30
      

Michał "Xtense" Stopa


CO JA WIDZĘ...
„Piękne tereny! Cudownie wykonane! Tekstury, jak prawdziwe, a modele tak realistyczne!...” – tego typu teksty bardziej doświadczonych kolegów spotykamy na co dzień podczas grania. O co właściwie chodzi? Domyślamy się, że tu chodzi o TEREN, czyli miejsce, w którym rozgrywa się akcja. Dochodzą jeszcze dwa zagadkowe wyrazy – TEKSTURA i MODELE. Mogę to wyjaśnić na dwa sposoby – sposób prosty, że „to pierwsze”, to może być kolor trawy, ściany, nieba, blizn na czole dowódcy eskadry, natomiast „to drugie”, to może być sam dowódca, drzewo, samochód czy nawet przeciwnik. Sposób naukowy przedstawia się następująco: TEKSTURA – jest to obraz nałożony na MODEL (ob. MODEL), przedstawiający barwę, szczegóły itp. MODEL – jest to wykorzystywany zbiór PUNKTÓW (ob. PUNKT), które są łączone w powierzchnie, na które nakładana jest TEKSTURA (ob. TEKSTURA).
PUNKT – element podstawowy, z którego składa się MODEL (ob. MODEL). Umieszczony w przestrzeni trójwymiarowej (X,Y,Z), łączony z co najmniej dwoma innymi punktami tworzy powierzchnię. RENDEROWANIE – proces, zamiana modeli i tekstur na obraz widziany na ekranie.
Pomińmy jednak żargon i naukowe rozważania. Założę się, że chcielibyście się dowiedzieć, jak to wszystko powstaje (zakładając, że jeszcze nie wiecie ;) ).



PAN TRÓJWYMIAR
„Bziuu!– śmignęła nam rakieta przed nosem! Odeprzeć atak! Nie dać zdobyć bazy! Aaaa!”. W ten, dosyć podstawowy sposób dowiadujemy się, co to takiego „trójwymiar”. Otóż rakieta porusza się w trzech płaszczyznach – X,Y,Z, lub, jeśli wolicie – w bok, wzwyż i w głąb. Nie trzeba nikogo przekonywać, że tak dzieje się wszędzie – nie tylko w grach. Kopnięta piłka, rzucona kulka śniegu lub butelki spadające w otchłań kosza na śmieci również poruszają się w trzech wymiarach. Da się to łatwo sprawdzić, ale najpierw trzeba by kopnąć piłkę, ulepić kulkę śniegową lub opróżnić kilka butelek (tego ostatniego wyjścia nie polecam – czasami zamiast butelki, osoba pijąca trafia do kosza ;) ). Otóż, płaszczyzna X odpowiada za ruchy poziome, płaszczyzna Y odpowiada za ruchy pionowe, a płaszczyzna Z odpowiada za ruchy „w głąb”, czyli jak gdyby „w dal”. Mam nadzieję, że wyjaśniłem pojęcie trójwymiaru ;) .



PAN MODEL
„No pięęękna modelka...” – nie, to nie o tego typu „modele” chodzi, chociaż takie są nie mniej interesujące ;) . Modelem nazywamy, jak już wcześniej powiedziałem, zbiór punktów w płaszczyźnie XYZ połączonych powierzchniami. Daje nam to spore plusy, gdyż obracając taki model, wygląda zawsze tak samo. Model może mieć dowolne rozmiary, dowolny wygląd, dowolną teksturę, dowolną ilość punktów – słowem, może być dowolny ;) . Kieeedyś kiedyś dawno temu, nie myślano nad takim rozwiązaniem, gdyż, jak na ówczesny sprzęt, było zbyt powolne. Stosowano wtedy tzw. Sprite`y (duszki) – specjalne tekstury, które obracały się razem z użytkownikiem tak, aby zawsze być „na wprost” gracza.

PAN TEKSTURA
„Mmm trawka – albo nie, bo jeszcze dzieci będą patrzeć” (cytat z gry TEENAGENT). Otóż my właśnie patrzymy, aktywnie postrzegamy – trawka ;) . Otóż trawka, to właśnie tekstura. Nie wiem, czy mi uwierzycie ( ;) ), ale tekstura to prosty rysunek nałożony na model – nic więcej. Ciekawiej się robi, kiedy np. chcemy zakwalifikować do tekstur coś przezroczystego, lub nie zajmującego kwadratowej powierzchni (np. kula w ścianie). Otóż tekstura MOŻE być przezroczysta – do ustalenia przezroczystości służy tzw. Kanał Alfa (Alpha Channel), który po prostu jest współczynnikiem mieszania się ustalonej barwy z tłem (słowem – współczynnikiem przezroczystości ;) ).
Trochę ciekawiej jest, jeśli tekstura nie posiada kanału alfa – wtedy któryś z kolorów (najczęściej ostro odcinający się od „właściwego” obiektu) jest po prostu wycinany i na jego miejsce wstawiana jest przezroczystość. Są też specjalne tekstury z tzw. Mapą wybojów (bump-mapping) – dzięki niej „wydaje” nam się, że tekstura ma nierówności, wgniecenia itp. Tworzony jest bardzo prosto – na gotowy obraz, już nałożony na model, nakłada się właśnie bumpmap [nakłada się efekt będący wynikiem działania algorytmów bump-mappingu – przyp. korekta] – silnik gry, w oparciu o mapę, tworzy nierówności względem kierunku światła padającego na teksturę.



JAK TO SIĘ WŁAŚCIWIE DZIEJE?
Jak przebiega cały proces, zaczynający się od punktu, a kończący się na obrazie wyświetlonym na ekranie? Cóż – nie należy do łatwiejszych ;) . Pokrótce można go opisać tak:
Dane punktów (wierzchołków) i ich powierzchni są transformowane na model, który silnik gry potrafi „przełknąć”. W tym miejscu do modelu dostarczana jest informacja o jego oświetleniu, tj. jak bardzo jest widoczny. Potem następuje tzw. Rasteryzacja, czyli wyznaczanie powierzchni (trójkątów) widocznych w wybranych warunkach. Potem następuje nakładanie tekstur – tu nic nie trzeba specjalnie wyjaśniać ;) Można dodać jedynie, że jest kilkanaście sposobów nałożenia tekstury – Sześciennie (jak nałożona na sześcian), sferycznie (jak nałożona na kulę) i „płasko” (bez specjalnego przesuwania). Ostatnio doszedł jeszcze jeden sposób – według wierzchołków (tekstura jest nakładana według punktów specjalnych na obrazie). Teraz następuje sortowanie pikseli według odległości od kamery (czy, jeśli wolicie, waszych oczu). A później – już na ekran ;) . Mogę dodać, że, zależnie od silnika gry, są jeszcze wstawiane efekty jak rozmywanie pikseli krawędziowych na modelach (AntiAliasing), efekt rozmycia na przesuwającym się obiekcie (Motion Blur) i tona innych ;) . Pamiętajcie jednak, że nadmiar, jakkolwiek ładny, ale szkodzi (nie nam – procesorowi ;) ).



JEŚLI JESTEM PROGRAMISTĄ?
Jeśli mamy zdolności programistyczne w małym palcu (a co za tym idzie – dogłębną wiedzę o procesach zachodzących podczas renderowania ;) ), wtedy możemy pomyśleć nad tworzeniem własnego światka trójwymiarowego. Silnik oczywiście trzeba napisać, ale takiej konieczności nie ma z rendererem (silnikiem graficznym). Mamy do dyspozycji tonę gotowych bibliotek wykorzystujących sprzętowe możliwości naszego komputera. W ich skład wchodzą, ale nie są ograniczone do: Direct3D (moduł DirectX), OpenGL, 3DFx i inne. Oczywiście „dobry” produkt powinien mieć możliwość renderowania programowego, gdyż tryb sprzętowy niekoniecznie chce pracować razem z naszym sprzętem. Sugeruję, żeby tryb programowy był optymalizowany – nie można stwierdzić, że „każdy ma kartę graficzną, która wspomaga moduł graficzny, który wykorzystałem”. Trzeba pamiętać, że nie wszędzie to wspomaganie jest – ba, nie każdy ma procesor, który wytrzymałby takie wspomaganie. Od tego jest właśnie tryb renderowania programowego.

NO CÓŻ...
Zdaję się, że to już koniec artykułu... ;) Mam nadzieję, że naświetliłem kilka nie-całkiem-jasnych aspektów grania i pracy z grafiką 3D. A więc patrzcie, postrzegajcie – i niech was nie zdziwi nic więcej, co wchodzi w skład grafiki 3D.


Poprzednia strona Spis treści Nastepna strona   30