Unity 5.4 (obecnie w fazie beta) przyniesie bardzo oczekiwaną funkcję (od 2013 r.), Czyli tekstury tablic - w tym samym próżności co ArrayTexture OpenGL . Jednak po lekturze tekstów tablic i atlasów tekstur nadal nie rozumiem technicznych różnic w ich wykorzystaniu przez procesory i procesory graficzne.
Mówiąc bardziej szczegółowo, chciałbym prosić o wyjaśnienie głównych różnic między tym, jak atlas tekstur i tablice tekstur są przetwarzane przez procesor i procesor graficzny, a co najważniejsze, w jaki sposób różnice te mogą wpływać na wydajność i obsługę pamięci (np. jak tablice tekstur mogą być bardziej wydajne niż atlasy tekstur itp.).
Jeśli brakuje szczegółów technicznych dotyczących implementacji Unity z powodu niefortunnego zamkniętego źródła, byłbym zadowolony z odpowiedzi dotyczącej ArrayTexture OpenGL.s.
źródło
Odpowiedzi:
Jak zauważono w powyższych komentarzach, wydajność będzie zależeć od implementacji, konkretnego sprzętu i tego, co próbujesz zrobić z teksturami, więc jedyną wiarygodną odpowiedzią jest profilowanie każdej alternatywy.
Istnieje kilka różnic w sposobie korzystania z każdej opcji, które będą obowiązywać konsekwentnie:
Jedną dużą różnicą jest to, że w przypadku tekstur tablic każdą teksturę traktuje się osobno w celach takich jak zawijanie współrzędnych tekstury lub mipmapping.
Pozwala to uniknąć typowych problemów z atlasami tekstur, w których musimy dodać wypełnienie między sąsiednimi próbkami tekstury, aby próbki nie zlewały się na ich brzegach, szczególnie w przypadku głębszych poziomów mip.
Oznacza to również, że jeśli chcesz kafelkować tekstury, możesz użyć sprzętu do próbkowania tekstury, aby zrobić to tak, jak w przypadku tekstury waniliowej. W przypadku atlasów zwykle musimy wykonywać matematykę kafelków w naszym module cieniującym fragmenty, ponieważ próbnik zawija tylko / lustra / zaciski / granice współrzędnych tekstury w całym atlasie, a nie w poszczególnych płytkach.
Głównym ograniczeniem tekstur tablicowych jest to, że wymagają, aby wszystkie składowe tekstury miały tę samą rozdzielczość i liczbę poziomów mip. Jeśli próbujesz grupować tekstury o bardzo różnych potrzebach rozdzielczości (powiedzmy, przechowywanie kafelków terenu, których LoD spada z odległością w wirtualnej teksturze ), możesz zamiast tego chcieć elastyczności atlasu.
źródło
GL_MAX_ARRAY_TEXTURE_LAYERS
. Na moim pół-nowoczesnym GPU jest to 2048, więc jeśli chcesz mieć mnóstwo drobnych tekstur, ten limit może być zbyt niski.