Autor Wątek: Rozmiar tekstur  (Przeczytany 1344 razy)

Offline bartis

  • Użytkownik

# Wrzesień 23, 2015, 09:35:52
Witam,
Takie małe pytanie jakie rozmiar tekstur w tych czasach lepiej użyć 1024px czy 2048px ?
NIe będzie to używane na komórkach tylko na kmputerach.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Wrzesień 23, 2015, 10:03:21
Tak żeby było nadal szczegółowo gdy patrzysz z bliska. Zależy na co ją potem nakładasz. Jeśli to będzie coś co gracz widzi z bliska, to raczej będzie widać różnicę przy 2048px.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 23, 2015, 10:12:28
Sprawdź tak i tak. Wszystko zależy od odległości, rozciągnięcia tekstury i rozdzielczości ekranu. Nawet na FullHD masz w pionie 1080 pikseli, więc jeżeli tekstury nie rozciągniesz więcej niż ekran, to 1024 starczy. Z drugiej strony możesz naciągnąć teksturę na teren, to i 16k nie wystarczy.

Offline wezu

  • Użytkownik

  • +2
# Wrzesień 23, 2015, 12:42:38
Zależy na jakich 'komputerach'.

Tekstura 1024x1024 zajmuje 4MB (jeśli ma 4 kanały, przy 3 to tylko 3mb), jeśli chcesz użyć mipmap (a pewnie chcesz) to pomnóż to przez 1.33, jak skompresujesz teksturę do dds to podziel na 4 (albo na 6 jeśli to dxt1/bc1 bez alphy) - po takich zabiegach możesz liczyć ~2MB na każde 1024x1024.

Tekstura 2048x2048 zajmie 16MB, a doliczając kompresje i mipmapy jakieś ~6 MB (5 595 200B?). 

Jeśli twój docelowy hardware ma 512 MB vramu to upchniesz tam 200 tekstur 1024x1024 albo 80 tekstur 2048x2048 (zostawiając trochę miejsca na inne rzeczy)... a bez kompresji odpowiednio 100 i 30.

30 tektur to całkiem sporo, ale który obiekt w dzisiejszych czasach używa jednej tektury? Minimum to chyba dwie (diffuse+transparency i normal+gloss), ale nie trudno wyobrazić sobie 3  i więcej (glow, height, reflectivity, roughness, anisotropy, cavity, sub-surface-scattering...).

Na co jeszcze trzeba zostawić miejsce a vram? Na przykład efekty post-process, dajmy fxaa i jakiś bloom/hdr -pożre pewnie jakieś 32 MB (bo zajmie dwie tektury po 2k), ssao potrzebuje jeszcze głębi i normalnych to kolejne 32MB, cienie od 16 do 256MB (8192x8192)... zaczyna być ciasno.

Jeśli celujesz w sprzęt, który ma 4GB vramu i więcej, to w ogóle nie przejmuj się rozmiarem tekstur (no, puki są do 4k), prędzej trafisz na inne wąskie gardło niż skończy się pamięć na tekstury.   

Jeśli korzystasz z dds to jest taka łatwa sztuczka - można zapisać wszystkie mipmapy w jednym pliku (polecam plugin do gimpa w tym celu) i je pokolorować (np. największą na czerwono, mniejszą na zielono, trzecią na niebiesko, mniejsze nie są ważne), potem wystarczy odpalić grę i już widać czy i gdzie są wykorzystywane tektury w najwyższej mipmapy.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 23, 2015, 13:30:22
Cytuj
Tekstura 1024x1024 zajmuje 4MB (jeśli ma 4 kanały, przy 3 to tylko 3mb)
Na karcie graficznej 3-kanałowa tekstura najprawdopodobniej zajmie tyle samo, co 4-kanałowa, chyba że użyjesz jakiegoś nietypowego formatu piksela (np. 565), a to dlatego, że spodziewał bym się że 3-kanałowa tekstura wyląduje w jakimś formacie typu X8R8G8B8 lub X8B8G8R8. Tak czy inaczej nie spotkałem się z fizycznym formatem piksela, który zajmował by 3 bajty.

Cytuj
jeśli chcesz użyć mipmap (a pewnie chcesz) to pomnóż to przez 1.33
Jeżeli o GPU chodzi, to znowu nie musi to być takie proste i zależy od wielu czynników.

Cytuj
30 tektur to całkiem sporo, ale który obiekt w dzisiejszych czasach używa jednej tektury? Minimum to chyba dwie (diffuse+transparency i normal+gloss), ale nie trudno wyobrazić sobie 3  i więcej (glow, height, reflectivity, roughness, anisotropy, cavity, sub-surface-scattering...).
Obecnie przy PBR bym się spodziewał raczej czegoś pokroju: color+roughness/normal+metalness.