Za pomocą profilowania klatek możesz zdiagnozować kilka możliwych problemów z wydajnością związanych z wierzchołkami. W panelu Polecenia możesz wyświetlić wszystkie wywołania rysowania, które gra wykonuje w danej klatce, oraz liczbę narysowanych elementów pierwotnych w każdym wywołaniu rysowania. Może to dać przybliżoną liczbę wierzchołków przesłanych w jednej klatce.

glDrawElements
połączenia, pokazujący 2718 narysowanych prymitywów trójkątnychKompresja atrybutów wierzchołków
Jednym z częstych problemów, z jakimi może się zmagać Twoja gra, jest duży średni rozmiar wierzchołka. Duża liczba wierzchołków przesłanych z dużym średnim rozmiarem wierzchołka powoduje dużą przepustowość odczytu pamięci wierzchołków, gdy są one odczytywane przez procesor graficzny.
Aby sprawdzić format wierzchołka dla danego wywołania rysowania, wykonaj te czynności:
Wybierz interesujące Cię losowanie.
Może to być typowe wywołanie rysowania sceny, wywołanie rysowania z dużą liczbą wierzchołków, wywołanie rysowania złożonego modelu postaci lub inny typ wywołania rysowania.
Przejdź do panelu Pipeline (Potok) i kliknij IA (Input Assembly) w przypadku zestawu wejściowego. Określa format wierzchołków wchodzących do procesora graficznego.
Obserwuj serię atrybutów i ich formatów, np.
R32G32B32_SFLOAT
to 3-elementowa 32-bitowa liczba zmiennoprzecinkowa ze znakiem.

Atrybuty wierzchołków można często skompresować przy minimalnym pogorszeniu jakości rysowanych modeli. Zalecamy w szczególności:
- Kompresowanie pozycji wierzchołków do 16-bitowych liczb zmiennoprzecinkowych o połowicznej precyzji
- Kompresowanie współrzędnych tekstury UV do 16-bitowych liczb całkowitych bez znaku
- Kompresowanie przestrzeni stycznej przez kodowanie wektorów normalnych, stycznych i binormalnych za pomocą kwaternionów.
W przypadku typów o mniejszej precyzji mogą być też rozpatrywane inne atrybuty różne, ale w każdym przypadku indywidualnie.
Dzielenie strumienia Vertex
Możesz też sprawdzić, czy strumienie atrybutów wierzchołków są odpowiednio podzielone. W architekturach renderowania kafelkowego, takich jak mobilne procesory graficzne, pozycje wierzchołków są najpierw używane w procesie dzielenia na koszyki, aby utworzyć koszyki elementów pierwotnych przetwarzanych w każdym kafelku. Jeśli atrybuty wierzchołków są przeplatane w jednym buforze, wszystkie dane wierzchołków są odczytywane do pamięci podręcznej na potrzeby dzielenia na przedziały, mimo że używane są tylko pozycje wierzchołków.
Aby zmniejszyć przepustowość pamięci odczytu wierzchołków i zwiększyć wydajność pamięci podręcznej, a tym samym skrócić czas spędzony na etapie dzielenia na przedziały, dane wierzchołków należy podzielić na 2 osobne strumienie: jeden dla pozycji wierzchołków, a drugi dla wszystkich innych atrybutów wierzchołków.
Aby sprawdzić, czy atrybuty wierzchołka są odpowiednio podzielone:
Wybierz interesujące Cię losowanie i zanotuj jego numer.
Może to być typowe wywołanie rysowania sceny, wywołanie rysowania z dużą liczbą wierzchołków, wywołanie rysowania złożonego modelu postaci lub inny typ wywołania rysowania.
Przejdź do panelu Pipeline (Potok) i kliknij IA (Input Assembly) w przypadku zestawu wejściowego. Określa format wierzchołków wchodzących do procesora graficznego.
Obserwuj powiązania atrybutów wierzchołków. Zwykle rosną one liniowo (0, 1, 2, 3 itd.), ale nie zawsze tak jest. Pozycja wierzchołka jest zwykle pierwszym atrybutem wierzchołka na liście.
W panelu Stan znajdź symbol
LastDrawInfos
i rozwiń pasujący numer losowania. Następnie rozwińBoundVertexBuffers
dla tego wywołania rysowania.Obserwuj bufory wierzchołków powiązane podczas danego wywołania rysowania, z indeksami pasującymi do powiązań atrybutów wierzchołków z wcześniejszego etapu.
Rozwiń powiązania atrybutów wierzchołków wywołania rysowania i rozwiń bufory.
Zwróć uwagę na
VulkanHandle
w przypadku buforów, które reprezentują pamięć bazową, z której pochodzą źródła danych wierzchołków. JeśliVulkanHandle
są różne, oznacza to, że atrybuty pochodzą z różnych buforów bazowych. JeśliVulkanHandle
są takie same, ale przesunięcia są duże (np. większe niż 100), atrybuty mogą nadal pochodzić z różnych podbuforów, ale wymaga to dalszego zbadania.

Więcej informacji o dzieleniu strumienia wierzchołków i sposobach rozwiązywania tego problemu w różnych silnikach gier znajdziesz w naszym poście na blogu.