Silnik graficzny

Silnik graficzny – część kodu aplikacji odpowiedzialna za tworzenie grafiki 2D, 2,5D lub 3D, która następnie widoczna będzie na urządzeniu wyświetlającym obraz. Zawiera on elementy konieczne do wykonywania złożonych matematycznych obliczeń i przekształceń elementów grafiki.

Silnik graficzny zajmuje się renderowaniem programowym bądź sprzętowym obrazu w czasie rzeczywistym na typowym ekranie komputera. W przypadku grafiki trójwymiarowej oznacza to, że każda klatka obrazu musi zostać wygenerowana na tyle szybko, aby możliwe było swobodne „poruszanie się” po trójwymiarowym świecie wirtualnym. Silniki graficzne do generowania obrazu trójwymiarowego są czasami nazywane silnikami 3D. Do przyśpieszenia i wykonywania bardziej złożonych obliczeń mogą wykorzystywać wsparcie sprzętowe specjalizowanych procesorów graficznych oraz obsługujących je bibliotek graficznych, takich jak DirectX, OpenGL czy Vulkan.

Przykładami silników graficznych są: Genesis3D, Irrlicht, OGRE, Antiryad Gx, Crystal Space. Choć zwykłemu użytkownikowi komputera kojarzą się one przede wszystkim z grami komputerowymi, to są projektowane do wielu innych celów, np. wizualizacji projektowanych budynków lub wnętrz. Nie powinny być utożsamiane z silnikami gier.

Działanie

Na samym początku tworzenia obrazu, procesor przesyła do VRAM podstawowe informacje o danej scenie. Na niego składają się wszystkie tekstury, współrzędne wierzchołków elementów sceny, położenie względem siebie, umiejscowienie obserwatora oraz oświetlenie całej sceny.

Tworzenie siatek wielokątów

Kolejny krok to operacje związane ze współrzędnymi wierzchołków. Karta graficzna buduje krawędzie trójkątów, z których z kolei powstają siatki wielokątów – definiując powierzchnię wirtualnych obiektów. Procesor graficzny ustawia na wirtualnej scenie kamerę, czyli punkt, z którego wirtualny świat będzie obserwowany. Siatki wielokątów oraz otoczenia są umieszczane na scenie w odpowiednich pozycjach względem kamery lub obserwatora. Ponieważ kamera i obserwator to elementy nieruchome, siatki wielokątów zaczynają się poruszać, obracać i przekształcać względem nieruchomego obserwatora (kamery), by uzyskać wrażenie, że to on się porusza i obraca. Operacje te są na bieżąco synchronizowane z pozycją podglądu.

Usuwanie niewidocznych powierzchni

W całej scenie trójwymiarowej może pojawić się ogromna liczba wierzchołków, dlatego by zminimalizować obciążenie karty graficznej i procesora, stosuje się optymalizacje w postaci usuwania siatek powierzchni niewidocznych dla obserwatora. Wycinane są przede wszystkim obiekty znajdujące się za jego plecami, wszystkie poza kadrem obserwatora oraz elementy znajdujące się z tyłu obserwowanych obiektów. Procesor w obliczeniach nie uwzględnia także tych ścianek obiektów, które są zasłonięte przez inne przedmioty na scenie, chyba że są zdefiniowane jako przezroczyste.

Teselacja

Następny proces to teselacja, wykorzystująca obsługiwane przez biblioteki graficzne shadery, gdzie zachodzi cieniowanie wierzchołków i pikseli. Tworzone są w tym celu krzywe beziera, które trafiają do teselatora tworząc nową powierzchnię obiektu, a następnie dzieli on tę powierzchnię na siatkę geometryczną składającą się z odpowiednio większej liczby trójkątów (krzywe beziera zmieniają istniejące siatki wielokątów w nowe siatki).

Rasteryzacja

Do tego etapu wszystkie ww. procesy operowały na obiektach wypełnionych jednolitym kolorem z uwzględnieniem oświetlenia sceny. Przy użyciu modułu rasteryzacji grafika 3D jest spłaszczana i przygotowywana do wyświetlania w ustalonej przez użytkownika rozdzielczości ekranu. W międzyczasie część jednostek obliczeniowych procesora graficznego zajmuje się dalszą obróbką grafiki: nadaje obiektom różne kolory, połysk, fakturę i inne detale. W późniejszym etapie moduł rasteryzacji zajmie się wygładzaniem krawędzi w spłaszczonych obiektach.

Bibliografia

  • Krzysztof Roszak: Moc obrazu PC Format 5/2011

Linki zewnętrzne