trendy w tworzeniu grafiki 3D w grach
Data: 6 kwiecień 2009
Identyfikator: 090520
Twórcy gier i producenci kart graficznych starają się zaskoczyć odbiorców nowymi efektami, dzięki którym ich wirtualne światy będą jeszcze bardziej realistyczne. Sprawdziliśmy, jakie technologie mają szansę pojawić się w nowych silnikach graficznych i jak wpłyną na jakość tworzonych obrazów.
Strona 1 z 3
|
Świat tworzony z klocków
|
Trójwymiarowe światy można budować z voxeli, które są czymś w rodzaju przestrzennych pikseli. Tak samo jak piksele dzielą obszar zdjęcia czy ekranu na fragmenty, tak i voxele partycjonują przestrzeń 3D. Definiuja i stanowią zatem najmniejszą możliwą jednostkę jej podziału. Obiekty mogą więc albo w całości zajmować dany voxel, albo nie – nie ma stanu pośredniego. Oznacza to, że tak modelowane bryły 3D mają z góry określoną rozdzielczość, narzuconą przez programistę przy definiowaniu, na ile elementów podzieli zajmowaną przez obiekt objętość wzdłuż każdego z wymiarów. W praktyce oznacza to, że każdy przedmiot może być reprezentowany z inną dokładnością. Voxelowy opis świata stosować można tylko do wybranych elementów, pozostałe opisując siatką trójkątów. Takie podejście eliminuje potrzebę użycia tekstur – kolor każdego elementu może być zakodowany w odpowiadającej mu strukturze danych w kodzie gry.
Oczywiście algorytmy służące wyświetlaniu obiektów voxelowych także są inne niż przy podejściu konwencjonalnym. Stosuje się tzw. drzewa ósemkowe (ang. octrees), dzielące przestrzeń obiektu na coraz mniejsze części tam, gdzie zachodzi potrzeba. Pozwala to na szybkie wyszukiwanie konkretnych voxeli, co z kolei czyni takie podejście dobrze integrującym się z raytracingiem.
Kolejną zaletą jest możliwość łatwego zaprojektowania meachanizmu realistycznych deformacji obiektów. Jak burzyć modele z klocków, wie każdy z nas – implementacja w grze wykorzystującej voxelowe obiekty będzie analogiczna.
Ale są i wady. Pierwszą jest mała przydatność przy opisie poruszających się obiektów. Każdy ruch wymaga przeliczenia drzewa ósemkowego opisującego położenie poszczególnych voxeli, co jest dość czasochłonne. Druga wada to rozdzielczość modeli – musi być taka, by pojedynczy voxel obiektu znajdującego się w danej odległości od wirtualnej kamery był zbliżony rozmiarem do piksela obrazu. W przeciwnym razie renderowany model będzie miał wyraźnie postrzępione brzegi.
|
Choć producenci kart graficznych zachwalają stosowane w nowych produktach rozwiązania, w większości przypadków są to działania marketingowe, a oferowane przez nich urządzenia działają niemal tak samo jak ich poprzednie wersje. Od czasu pojawienia się układów ze specjalizowanymi jednostkami vertex i pixel shader w standardzie 2.0 (2002 r., karty AMD Radeon 9xxx i Nvidia GeForce FX) wartymi odnotowania nowościami były zunifikowane układy cieniujące oraz wprowadzenie shaderów geometrii (oba elementy pojawiły się w standardzie 4.0). Mimo to gracze bombardowani są nieustannie informacjami, że nowe układy przetwarzają X proc. więcej trójkątów czy tekseli na sekundę oraz mają
o N więcej potoków przetwarzania. Towarzyszy temu praktycznie niezmienny sposób podejścia projektantów silników 3D, którzy nowe rozwiązania dopasowują jak najlepiej do istniejącego i nadchodzącego sprzętu.
Zoptymalizowane trójkąty
W praktyce większość wydanych do tej pory gier, a konkretniej silników, na których one bazują, wykorzystuje technikę rasteryzacji. Obiekty w wirtualnych światach tworzone są z siatek trójkątów, na które nakładane są tekstury, po czym wykonywane są obliczenia związane z oświetleniem sceny czy nakładaniem efektów specjalnych. Obliczenia związane z ustalaniem położenia i podstawowych parametrów wierzchołków trójkątów wykonują vertex shadery, zaś za ustalanie wynikowej barwy poszczególnych elementów odpowiedzialne są pixel shadery.
Rastering, czyli powszechnie stosowany sposób, w jaki karty graficzne przekształcają oteksturowane siatki wielokątów w gotowy obraz, to złożona operacja matematyczna. Polega ona na aplikowaniu serii przekształceń na współrzędnych wierzchołków tak, aby ustalić ich wynikowe położenie na ekranie.
Przetworzenie wszystkich elementów składowych sceny nie wchodzi w grę – to zbyt duża ilość danych nawet dla najsilniejszych obecnie kart GeForce GTX 295 czy Radeon HD 4870. Dlatego programiści uciekają się do różnych zabiegów ograniczających ilość danych. Jeszcze przed etapem wysłania danych do karty silnik gry usuwa niewidoczne trójkąty czy redukuje jakość siatki, eliminując szczegóły z oddalonych obiektów. Dynamicznie dobierana jest też rozdzielczość nakładanych tekstur.
Problemy programistów
Jednym z nadrzędnych celów twórców silników gier jest uzyskanie maksymalnego fotorealizmu. O ile zadania związane z przetwarzaniem samych wierzchołków dają się dość dobrze zoptymalizować, by uzyskać wiarygodne rezultaty kosztem jak najmniejszej mocy obliczeniowej, mnóstwo czasu GPU zużywane jest na poprawne oświetlenie sceny. Niektórych efektów nie da się też uzyskać w prosty sposób – przykładem może być choćby generowanie realistycznych cieni. Dodatkowo stosowane do tego techniki to omijanie problemu, np. nakładanie map cieni na obiekty (shadow mapping) daje mocno poszarpany brzeg cienia, a uzyskanie miękkich, płynnych krawędzi wymaga dodatkowych obliczeń.
Jednym z nadrzędnych celów twórców silników gier jest uzyskanie maksymalnego fotorealizmu. O ile zadania związane z przetwarzaniem samych wierzchołków dają się dość dobrze zoptymalizować, by uzyskać wiarygodne rezultaty kosztem jak najmniejszej mocy obliczeniowej, mnóstwo czasu GPU zużywane jest na poprawne oświetlenie sceny. Niektórych efektów nie da się też uzyskać w prosty sposób – przykładem może być choćby generowanie realistycznych cieni. Dodatkowo stosowane do tego techniki to omijanie problemu, np. nakładanie map cieni na obiekty (shadow mapping) daje mocno poszarpany brzeg cienia, a uzyskanie miękkich, płynnych krawędzi wymaga dodatkowych obliczeń.
Ocena: 



(aby ocenić, musisz się zalogować w serwisie)
Podobne artykuły: