Draw Calle: Klucz do Wydajności w Optymalizacji Grafiki w Grach

Optymalizacja gier to labirynt, gdzie każdy element może wpłynąć na płynność rozgrywki. W dzisiejszym wpisie skupimy się na draw callach, kluczowym aspekcie tej skomplikowanej układanki.

Wstęp

Optymalizowanie gier to dosyć skomplikowana dziedzina i składa się na nią wiele czynników. Zoptymalizować możemy dosłownie wszystko, od kodu, przez poziomy po animacje czy modele 3D.
Dla różnych technologii miejsce które wymaga najwięcej uwagi będzie się inne. Część silników robi automatycznie rzeczy, które na innych wymagają manualnej pracy.

Dzisiaj postaramy się przyjrzeć dość uniwersalnej sprawie, ponieważ bierzemy na warsztat sprawę draw calli. Powiemy sobie czym są draw calle i jak nad nimi zapanować.

Czym są te całe draw calle?

Więc tak, te DrawCalle to takie zapytania do karty graficznej, których używamy, żeby narysować obraz na ekranie. W dużym uproszczeniu, aby narysować na na ekranie jedną klatkę silnik musi wysłać zapytanie do karty graficznej gdzie przekaże geometrie, shader, tekstury i takie zapytanie właśnie nazywamy draw callem.

Czy dużo draw calli oznacza kłopoty?

Ale tu pojawia się pytanie, w czym nam te draw calle przeszkadzają? Jeżeli chcemy coś na ekranie to wołamy do grafiki „Ej GPU narysuj mi klatkę obrazu”. Niestety to nie jest takie proste… Wyobraź sobie, że masz skrzynkę cytryn zerwanych z drzewa i chcesz je przetransportować prosto do sklepu.

Czy lepiej będzie wysłać jedną dużą paletę czy setki pojedynczych skrzynek? Zdecydowanie taniej wyjdzie nam wysłanie nam całej palety, a może nawet kontenera do jakiegoś centrum logistycznego, bliżej naszego sklepu niż wysłanie pojedynczej skrzyni prosto od producenta. Tak samo działa to z grafiką – lepiej dać jedno konkretne zapytanie, niż za każdym razem prosić nasze GPU o narysowanie jednego piksela.

draw call

Dobra, ile tych DrawCalli to idealna ilość? To zależy od wielu rzeczy, takich jak sprzęt czy technologia.
API graficzne, jak Mantle, Vulkan czy Direct3D12, pomagają w obsłudze większej ilości DrawCalli, ale nie możemy odpuścić tematu, dobra optymalizacja związana z tym problemem da nam trochę mocy obliczeniowej na inne technologie.

Ile draw calli to optymalna ilość?

Jak możemy wywnioskować z poprzedniej części artykułu im mniej draw calli tym lepiej. Ale jaka ilość jest optymalna? Niestety nie da się w łatwy sposób ustalić optymalnej wartości, ale zadanie kilku kluczowych pytań pomoże nam w ustaleniu w przybliżeniu na ile maksymalnie draw calli możemy sobie pozwolić. Te liczby będą różnić się w zależności od sprzętu czy nawet technologii.

Nowe graficzne API takie jak: Mantle, Vulkan and Direct3D12 poprawiły działanie na większej ilości draw calli ale nie oznacza to że możemy zupełnie olać temat jeżeli wybierzemy jedną z tych technologii.

  • Robisz grę na platformy mobilne, next geny czy może na high-endowe PC?
  • Chcesz, żeby gra działała na jak największej ilości sprzętu i wyglądała gorzej, czy zasypywała nas wodotryskami ale mogła być odpalona tylko mocniejszych maszynach?
  • A może chcesz stworzyć grę VR lub mobilną?

Ograniczenia w ilości DrawCalli będą się różnić między tymi zakładanymi scenariuszami.
W grach na PC & konsole nowej generacji możemy sobie pozwolić na kilka tysięcy draw calli

  • 2000~3000 to idealna ilość bez względu na sprzęt
  • 5000~ przy takiej ilości zaczynają pojawiać się pierwsze problemy
  • 10000~ to zdecydowanie za dużo i taka ilość draw calli powinna nas zacząć niepokoić

W mobilkach i grach na VR jest ograniczeni już tylko do kilku setek

Powinniśmy mieć jednak w głowie fakt że wszystko zależy od naszej technologii i zazwyczaj musimy tą ilość ustalić metodą prób i błędów.

A w jaki sposób możemy pokonać draw calle?

  • Batchowanie to klucz! Ten proces pozwoli nam na połączenie wielu tych samych modeli w jedno zapytanie do GPU
  • Odpowiednie zarządzanie teksturami i modelami może pozwolić nam na zredukowanie ilości draw calli. Zmniejszenie wielkości tekstur i połączenie w jeden atlas jest jedną z opcji, która pozwoli nam zaoszczędzić trochę calli
  • Wykorzystanie Level of Detail (LOD) lub Hierarchical Level of Detail (HLOD) – technologia ta pozwala na uproszczenie mesha w miare oddalania się od niego kamery gracza.

Ciekawe linki do poszerzenia wiedzy o draw callach:

Udostępnij:

O autorze:

Odpowiedz