Jeśli potrzebujesz tylko normalnych na twarz, a jeśli twoje texcoords dla twarzy są ściśle 0/0, 0/1, 1/0, 1/1 (lub podobne do twojego układu), możesz zbudować sześcian z 8 wierzchołkami oraz indeksy 30 (pasek z restartem) lub 36 (lista). Pobierz normalne i tekstowe przy użyciu stałego wyszukiwania tablicowego na podstawie SV_VertexID w swoim module cieniującym wierzchołki.
Oznacza to, że nie musisz nawet umieszczać tekstów ani normałów w buforze wierzchołków, co zapewni jeszcze więcej oszczędności pamięci.
Idąc dalej, nadal możesz przejść do 24 wierzchołków na kostkę, ale także użyć instancji. Każda kostka miałaby stały rozmiar w buforze wierzchołków (1x1x1) i miałbyś współczynnik skalowania i pozycję (zakładając, że twoje kostki się nie obracają, a jeśli macie, to macierz) jako dane dla instancji. W przypadku nieobrotowego jednorazowy koszt wynosi 24 wierzchołki, ale wtedy każda kostka potrzebuje tylko 6 pływaków, aby w pełni określić. W obrotowej obudowie patrzysz na 16 liczb zmiennoprzecinkowych, ale nawet to jest znaczną oszczędnością (w tym przypadku bardziej prawdopodobne jest wąskie gardło po stronie procesora w przypadku transformacji macierzowych - w przypadku nieobrotowej obudowy budującej matrycę w locie w twój moduł cieniujący wierzchołki - nawet jeśli jest zrobiony dla jednego wierzchołka, jest tak głupio szybki, że nawet nie musisz się tym martwić).
W przypadku tekstur na twarz wystarczy użyć tablicy tekstur. Musisz oczywiście upewnić się, że każda taka tekstura w tablicy ma ten sam rozmiar, i nadal będziesz musiał przerwać bieżącą partię, jeśli sama tablica musi się zmienić, ale w przeciwnym razie dobrze sobie poradzi. Dodaj trzeci tekstowy tekst do definicji wierzchołka, który określa plasterek tablicy do użycia dla każdej twarzy.
Nie potrzebujesz GS z tym i powinien on działać szybciej niż przy użyciu jednego, ponieważ włączenie etapu modułu cieniującego geometrię spowoduje dodatkowe własne obciążenie.
W swoim silniku mam kod porównawczy, który po prostu rysuje kilka kostek za pomocą tej metody, i mogę łatwo przeżuć ponad 300 000 kostek, wciąż czyszcząc 60 klatek na sekundę na stosunkowo niskiej jakości GPU i nie robiąc nic innego, aby zoptymalizować proces . Wprawdzie nie jestem ich oświetleniem ani teksturowaniem, ale mam włączone mieszanie alfa, wyłączone wygładzanie tła i ogólnie równoważy to z moją częścią „nie robienia niczego innego w celu optymalizacji”, więc powinno dać ci rozsądne wyobrażenie o rodzaju boisko można uderzyć tą metodą.