A A A

Moc obrazu

PC Format 05/2011
Grafika w grach jest coraz ładniejsza i coraz bardziej realistyczna. To za sprawą silnika danej gry oraz wydajnych kart graficznych. Pokażemy, w jaki sposób generują one grafikę z gier i z jakim ogromem obliczeń muszą sobie radzić. [Krzysztof Roszak]

Silnik gry jest kodem opisującym tworzenie i wyświetlanie grafiki. Wykorzystuje on zarówno efekty zdefiniowane w bibliotekach graficznych (OpenGL czy DirectX), jak i autorskie rozwiązania. To m.in. na podstawie tego kodu karta graficzna generuje i przetwarza obraz z gry, a następnie wysyła go na ekran. Silnik graficzny zawiera również opis interakcji zachodzących w wirtualnym świecie (tzw. fizykę gry), których realizacja coraz częściej należy do karty graficznej.

Podstawą procesu generowania grafiki przez współczesne karty są skomplikowane obliczenia wykonywane przez procesor graficzny (GPU). Proces generowania pojedynczej klatki obrazu, aby gra zachowała dynamikę i płynność, musi się powtórzyć co najmniej 30 razy w ciągu każdej sekundy!

1. Informacje o scenie

Na samym początku procesu tworzenia obrazu procesor centralny komputera przesyła do pamięci karty graficznej podstawowe informacje o tworzonej scenie gry. Na taki pakiet składają się wszystkie tekstury, współrzędne wierzchołków elementów sceny, a także dodatkowe informacje określające ich położenie względem siebie, umiejscowienie obserwatora oraz oświetlenia całej sceny. Oprócz tego procesor główny przesyła na bieżąco do karty instrukcje z kodu gry oraz koordynaty dotyczące zmiany położenia myszki lub naciskanych przycisków klawiatury.

2. Operowanie wierzchołkami

Na podstawie uzyskanych współrzędnych wierzchołków (1) karta graficzna buduje krawędzie trójkątów (2), z których powstają siatki obiektów. Posłużą one do zdefiniowania powierzchni wirtualnych obiektów.
Procesor graficzny ustawia na wirtualnej scenie kamerę, czyli punkt, z którego wirtualny świat będzie obserwowany. Następnie siatki obiektów oraz otoczenia są umieszczane na scenie w odpowiednich pozycjach względem kamery lub obserwatora (3). Kamera czy obserwator jest elementem nieruchomym. Aby uzyskać wrażenie, że porusza się i obraca, należy poruszać, obracać i przekształcać siatki elementów sceny względem nieruchomego obserwatora (4). Operacje te są na bieżąco synchronizowane z pozycją myszki czy z instrukcjami wydawanymi przez użytkownika na klawiaturze.

Procesor graficzny ustawia także wszystkie źródła światła. Oświetlenie sceny posłuży jednostkom obliczeniowym do określenia sposobu cieniowania elementarnych płaszczyzn obiektów przestrzennych, a na późniejszym etapie – do uzyskania odpowiednich cieni w grafice.

3. Usuwanie trójkątów

Aby zminimalizować liczbę operacji przeprowadzanych przez kartę graficzną, usuwane są z siatek trójkątów te niewidoczne dla obserwatora. Wycinane są wszystkie elementy znajdujące się za jego plecami – zielony obszar na ilustracji (5), oraz wszystkie poza kadrem obserwatora – czerwony obszar na ilustracji (5). Procesor w obliczeniach nie uwzględnia tych ścianek obiektów, które są zasłonięte przez inne przedmioty na scenie (6). Wyjątek to sytuacja, gdy obiekt zasłaniający będzie pokryty przezroczystym materiałem. W procesie obliczeniowym nie są też uwzględniane elementy znajdujące się z tyłu obserwowanych obiektów.

4. Ustalanie gęstości siatek

Jednostki obliczeniowe procesora graficznego sprawdzają, które z wierzchołków sceny znajdują się bliżej gracza, a które dalej. Na tej podstawie określają grupy siatek, w których liczba trójkątów zostanie powiększona (wirtualne obiekty znajdujące się blisko postaci gracza musi cechować duży realizm) lub zmniejszona (elementy znajdujące się daleko od gracza są słabo dostrzegalne, zatem nie muszą być szczegółowe). Zabieg ten pozwala zwiększyć realizm sceny, a jednocześnie optymalizuje liczbę szczegółów na scenie, co oznacza mniej obliczeń do wykonania przez kartę (7). Uzyskane dane przekazywane są do modułów teselacji.

5. Zagęszczanie siatek

Do wykonania operacji teselacji (zagęszczania) siatek przeznaczono aż trzy nowe funkcje cieniujące (Hull Shader, Domain Shader i Geometry Shader), które są realizowane przez rdzenie obliczeniowe procesora graficznego. Funkcje te (shadery) wchodzą w skład bibliotek graficznych DirectX 11. W procesie teselacji biorą też udział sprzętowe jednostki teselacji, znajdujące się we współczesnych procesorach graficznych.

Hull Shader zajmuje się transformacjami rodzajów siatek obiektów na inne. Może zamieniać klasyczną siatkę geometryczną (8) w strukturę zawierającą tzw. powierzchnie sklejane Beziera. Zmniejsza to liczbę operacji związanych z obiektami. Powierzchnie Beziera potrzebują do obliczeń zaledwie kilku lub kilkunastu punktów kontrolnych dla pojedynczego obiektu. Natomiast przy klasycznych siatkach geometrycznych obliczeniom podlegają wszystkie wierzchołki siatki. Pomimo mniejszej liczby punktów kontrolnych uzyskiwana jest niezwykle gładka powierzchnia obiektu bez względu na jego przybliżenie do kamery (9).

Obiekt powstały z powierzchni Beziera jest przesyłany do teselatora. Ten dzieli go na siatkę geometryczną składającą się z odpowiednio większej liczby trójkątów.Domain Shader pobiera następnie dane z tekstur (10) zawierających opis wysokości dla każdego piksela. Na ich podstawie przypisuje wartość wysokości każdemu wierzchołkowi w siatce otrzymanej z Hull Shadera i teselatora.

Te informacje pozwolą określić, jak mają być poprzesuwane wierzchołki obiektu, by na jego powierzchni można było uzyskać dodatkowe detale geometryczne. Dzięki temu bryła wygląda bardziej naturalnie bez potrzeby umieszczania tych detali w podstawowym opisie siatki obiektu. Odciąża to znacznie programistów i grafików, ponieważ to zadanie przejmuje układ GPU. Dzięki tym funkcjom procesor graficzny sam potrafi na bazie tekstur uzyskać odpowiednio złożoną siatkę.

Geometry Shader to jednostka wykonawcza, która transformuje siatkę na bazie otrzymanych z Hull Shadera parametrów. On też tworzy dodatkowe wierzchołki, krawędzie oraz trójkąty, tak by obiekt wyjściowy wyglądał realniej. Pozwala to na łatwe uzyskanie np. nierówności w murach (11), bardzo realistycznie wyglądających gór (np. dzięki zastosowaniu map fraktalnych) lub efektu falującego morza (w wyniku nakładania animowanej mapy przemieszczeń). Te dodatkowe detale są już uwzględniane na następnych etapach procesu tworzenia grafiki, takich jak np. rzucanie cieni czy tworzenie odbić z otoczenia.


Ocena:
Oceń:
Komentarze (0)

Redakcja nie ponosi odpowiedzialności za treść komentarzy. Komentarze wyświetlane są od najnowszych.
Najnowsze aktualności


Japończycy planują Społeczeństwo 5.0
15 października 2019
Od 4 lat Japończycy pracują nad tym, by znacząco usprawnić funkcjonowanie społeczeństwa za pomocą technologii. Jutro w Tokio rozpoczyna...


Artykuły z wydań

  • 2019
  • 2018
  • 2017
  • 2016
  • 2015
  • 2014
  • 2013
  • 2012
  • 2011
  • 2010
  • 2009
  • 2008
  • 2007
Zawartość aktualnego numeru

aktualny numer powiększ okładkę Wybrane artykuły z PC Format 6/2019
Przejdź do innych artykułów
płyta powiększ płytę
Załóż konto
Co daje konto w serwisie pcformat.pl?

Po założeniu konta otrzymujesz możliwość oceniania materiałów, uczestnictwa w życiu forum oraz komentowania artykułów i aktualności przy użyciu indywidualnego identyfikatora.

Załóż konto