Niedawno dodałem do mojego projektu program do pakowania tekstur, który spakuje pewną liczbę tekstur do jednego, w następujący sposób:
Na przykład ten ma rozmiar 582x1023 pikseli. Celem dodania tych spakowanych tekstur było oczywiście zwiększenie wydajności, dlatego chciałem znaleźć optymalny rozmiar tekstury dla tekstur OpenGL (przy użyciu LWJGL). Odkryłem, że zgodnie z tym na przykład szeroko obsługiwany maksymalny rozmiar tekstury to 1024x1024 . Dziwi mnie to, ponieważ oczywiście wiele tekstur byłoby większych, więc co się z nimi dzieje? Jestem pewien, że większość kart graficznych obsługuje większe tekstury. Czy mogę oczekiwać, że większość kart graficznych będzie obsługiwać np. Tekstury 4096 x 4096 (a może nawet większe)?
Przechodząc do drugiego punktu (mam nadzieję, że nadal liczy się to jako jedno pytanie, ale zasadniczo sprowadza się do tego samego problemu): czy tekstury powinny mieć wielkość 2 (256 x 256, 512 x 512, 1024 x 1024, 2048 x 2048, ..) i powinny Padam spakowane tekstury mniejsze niż to do następnej potęgi 2? Zgodnie z tym pytaniem z 2011 roku nie jest to wymóg, ale może poprawić wydajność i uniknąć drobnych błędów, a ten z 2012 roku mówi, że zdecydowanie powinieneś uzupełnić tekstury. Zdaję sobie więc sprawę, że pytania te zostały zadane wcześniej, ale są rozsądnie datowane, aby odpowiedzi uległy zmianie, a ponadto każde z nich tylko częściowo odpowiada na moje pytanie. Jak inne projekty / radzą sobie z tym?
TL; DR: Jakich rozmiarów tekstur mogę się spodziewać w przypadku większości kart graficznych? Jakie są optymalne rozmiary tekstur (lub są)? Czy należy uzupełnić szerokość tekstur do następnej potęgi 2?
źródło
Odpowiedzi:
Zamierzam podjąć próbę odpowiedzi, choć YMMV. Korzystam z ankiety sprzętowej Steam ( http://store.steampowered.com/hwsurvey?platform=pc ), aby ustalić, jaka jest pamięć RAM wideo (VRAM) dostępna na większości komputerów. Patrząc na wyniki z dnia 13.10.2015 (dziś), prawie 85% ludzi ma 1024 MB VRAM.
Twoje pytanie jest bardzo szerokie, ponieważ nie określa docelowego sprzętu (konsoli, komputera, urządzenia przenośnego, urządzeń mobilnych?). Będę mówić o komputerach PC i możesz ekstrapolować na inne platformy w oparciu o specyfikacje sprzętowe.
Zakładając 32 bity koloru + alfa na piksel, tj. 4 bajty na piksel, 1 GB pamięci VRAM może maksymalnie pomieścić ~ 256 milionów pikseli. Odpowiada to 256 teksturom 1K na 1K. Zakłada się (niepoprawnie), że chcesz tylko przechowywać tekstury w pamięci VRAM, podczas gdy będzie mnóstwo innych rzeczy (np. Dane siatki, jeśli pracujesz w 3D), na które musisz zostawić miejsce. Prawdopodobnie chcesz też zostawić trochę więcej miejsca na mip-mapowanie tekstur, co zwykle działa najlepiej, jeśli twoje tekstury mają potęgę dwóch.
Nowoczesne konsole (XBOX One i PS4) mają 4-8 GB zunifikowanej pamięci RAM, większość urządzeń przenośnych i urządzeń mobilnych ma 1–2 GB zunifikowanej pamięci RAM, z ograniczeniami co do ilości przydzielonej pamięci VRAM.
Zwykle tworzyłem tekstury 2K, aby działały na większości komputerów PC, umożliwiając opcję skalowania w dół dla niższych urządzeń. Jeśli piszesz grę 2D i chcesz kierować reklamy na ekrany o wyższej rozdzielczości (4K, iPad Retina itp.), Możesz użyć tekstur 4K jako tła, ale w większości innych części może to być przesada.
Mam nadzieję, że to pomogło i nie zabłociło wód.
źródło