• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Po co łączyć kilka tekstur w jedną

Object Storage Arubacloud
0 głosów
330 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez jankustosz1 Nałogowiec (35,880 p.)
Witam.

W pewnym kursie sfml było napisane że im więcej tekstur tym gorzej i lepiej aby była jedna która zawiera wszystkie inne a potem odwoływać się do wycinka za pomocą textureRect.

Zauważyłem że często w grach np. minecraft kilka tekstur jest walniętych do jednego pliku. Czy wewnętrznie dzielą to na kilka tekstur czy odwołują się do wycinków - tego akurat nie wiem.

Dlaczego tak jest? Pamięci z pewnością zajmują tyle samo więc nie w tym rzecz. Dlaczego to miałoby być wydajniejsze?

1 odpowiedź

+1 głos
odpowiedź 12 stycznia 2017 przez Benek Szeryf (91,010 p.)
wybrane 12 stycznia 2017 przez jankustosz1
 
Najlepsza

Czy wewnętrznie dzielą to na kilka tekstur czy odwołują się do wycinków - tego akurat nie wiem.

Odwołują się do konkretnych fragmentów jednej tekstury bez jej uprzedniego, fizycznego dzielenia. To znaczy konkretnym punktom na teksturze przypisywane są punkty modelu (zwykle wierzchołki brył). Zwie się to UV mapping. W ten sposób można sobie nałożyć kawałek tekstury na jedną ścianę modelu, a jej inny kawałek na inną ścianę. Bardzo łatwo zrozumieć ten proces podczas teksturowania modeli w programach typu 3ds Max.

Dlaczego tak jest? Pamięci z pewnością zajmują tyle samo więc nie w tym rzecz. Dlaczego to miałoby być wydajniejsze?

Komputery bazują na systemie dwójkowym. Optymalne wczytywanie tekstury odbywa się wtedy, gdy jej rozmiary są potęgą 2, np. 512px x 512px, czy 2048px x 1024px. W przeciwnym razie dochodzi do skalowania tekstury, co pochłania zasoby. Stąd też najkorzystniej tworzyć tekstury w całości wypełnione (stąd jak najwięcej elementów na teksturze) o rozmiarze 2^N px x 2^N px. Lepiej mieć jedną teksturę 1024px x 1024px niż cztery 512px x 512px. Choć powierzchniowo zajmują tyle samo, to pierwsza opcja ma dwie zalety w stosunku do drugiej:

  • można na niej umieścić element o szerokości > 512px
  • przydział pamięci na wczytywaną teksturę następuje tylko raz, a nie cztery

Tak więc projektowanie samych tekstur też wymaga pewnych przemyśleń, rozlokowania elementów i zadbania o odpowiedni rozmiar.

komentarz 12 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)

Optymalne wczytywanie tekstury odbywa się wtedy, gdy

Tylko wczytywanie a więc nie zrobi różnicy czy wewnętrznie w programie sobie teksture 1024x1024 podziele na 4 mniejsze czy nie wydajność 4 mniejszych wydajność będzie taka sama?

Pytam bo lepiej mi się pisze gdy nie korzystam z tych TextureRect'ów.

komentarz 12 stycznia 2017 przez Benek Szeryf (91,010 p.)
edycja 12 stycznia 2017 przez Benek

Wyświetlanie tekstury, to odwoływanie się do obiektu, który ją przechowuje. Gdy wyświetlasz jedną bryłę z nałożoną jedną teksturą, to odwołujesz się tylko do jednego obiektu. W przypadku użycia czterech tekstur musisz obsłużyć cztery obiekty. A efekt jest ten sam. Wystarczy że obrócisz obiekt 3D i trzeba liczyć cztery globalne transformacje dla każdego obiektu osobno. W przypadku jednej tekstury komputer liczy jedną globalną transformacje, reszta liczy się lokalnie, tzn. pozostałe punkty dużej tekstury są przyspawane do globalnego układu jednej tekstury. Teoretycznie więc wydajność powinna być większa, zwłaszcza że w celu nałożenia dwóch różnych tekstur na obiekt, trzeba odmergować płaszczyzny bryły trójwymiarowej.

Podobne pytania

0 głosów
0 odpowiedzi 62 wizyt
0 głosów
4 odpowiedzi 1,228 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez czmyk Obywatel (1,100 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...