Який оптимальний розмір текстури?


13

Нещодавно я додав у свій проект фасувальник текстур, який упакуватиме певну кількість текстур в одну, наприклад:

Упакована текстура

Так, наприклад, розмір 582x1023 пікселів. Мета додавання цих упакованих текстур очевидно полягала в підвищенні продуктивності, тому я хотів знайти оптимальний розмір текстури для текстури OpenGL (використовуючи LWJGL). Я знайшов те, що широко підтримуваний максимальний розмір текстури здається 1024x1024, відповідно до цього, наприклад. Це здається мені дивним, оскільки очевидно, що багато текстур тільки було б більше, ніж це, так що ж відбувається з ними? Я впевнений, що більшість відеокарт підтримують більшу кількість текстур. Чи можу я обґрунтовано розраховувати на обробку більшості відеокарт, наприклад, текстури розміром 4096x4096 (або, можливо, навіть більше)?

Прийти до мого другого пункту (я сподіваюся, що це все ще вважається одним питанням, але воно по суті зводиться до того ж питання): Чи слід розміщувати текстури потужністю 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) і слід Я впакував фактури, менші за розміри, до наступної потужності 2? Відповідно до цього питання з 2011 року, це не є вимогою, але може покращити продуктивність та уникнути незначних помилок, а цей з 2012 року говорить, що ви, безумовно, повинні наносити текстури. Тож я розумію, що ці запитання були задані раніше, але вони досить датовані, щоб відповіді змінилися, і далі вони лише частково відповідають на моє запитання. Як інші проекти / впораються з цим?

TL; DR: З якими розмірами текстур я можу розраховувати на обробку більшості відеокарт? Які оптимальні розміри текстури (чи є)? Чи слід розміщувати текстури шириною до наступної потужності 2?


4
Графічний процесор працює лише з потужністю 2. Якщо ви не вручну вкладаєте свої текстури, то GPU (або ваш ігровий двигун на вибір) робить це за вас, що призводить до невеликої затримки під час виконання тексту за текстуру, яка може додати. Я не можу запропонувати жодної допомоги щодо максимальних / оптимальних розмірів текстури.
ketura

@ketura Ах, бачу, дякую. Так що скажіть, я отримав зображення розміром 513x10. Чи буде швидше встановити його на 1024x1024, а потім перенести всі ці порожні пікселі або дозволити цьому зробити GPU?
flotothemoon

4
Вам би не потрібно було йти так високо. 1024 х 16 спрацювало б; це не повинно бути БЕЗКОШТОВНО, просто потужність 2 у кожному напрямку. Хоча в такому випадку я б серйозно подумав, якби я не міг запасти піксель і звести його до 512x16, хаха.
ketura

Відповіді:


6

Я збираюся взяти у відповідь на це, хоча YMMV. Я використовую опитування апаратного забезпечення Steam ( http://store.steampowered.com/hwsurvey?platform=pc ), щоб визначити, що таке оперативна пам’ять (VRAM) для відео, доступна на більшості комп'ютерів. Переглядаючи результати станом на 10.10.2013 (сьогодні), майже 85% людей мають 1024 МБ VRAM.

Ваше запитання дуже широке, оскільки в ньому не вказано цільове обладнання (консоль, ПК, портативні пристрої, мобільні пристрої?) Я поговорю про ПК, і ви можете екстраполювати інші платформи на основі технічних характеристик.

Припускаючи 32 біта кольору + альфа на піксель, тобто 4 байти на піксель, 1 ГБ VRAM може максимально вмістити ~ 256 мільйонів пікселів. Це дорівнює 256 1К на 1К текстур. Це передбачає (неправильно), що ви хочете зберігати текстури у вашому VRAM, тоді як там буде ціла низка інших речей (наприклад, сітчасті дані, якщо ви працюєте в 3D), для яких вам потрібно залишити місце. Ви також, ймовірно, хочете дозволити ще трохи місця для картографування текстур, яке зазвичай працює найкраще, якщо ваші текстури мають дві потужності.

Сучасні консолі (XBOX One і PS4) мають 4-8 ГБ об'єднаної оперативної пам’яті, більшість КПК та мобільних пристроїв мають 1–2 ГБ об’єднаної оперативної пам’яті, з обмеженнями на те, скільки ви можете виділити як VRAM.

Як правило, я створюю 2К текстури, щоб вона працювала на більшості ПК, дозволяючи можливість зменшити масштаб для нижчих пристроїв. Якщо ви пишете 2D-гру і хочете націлити на дисплеї з більшою роздільною здатністю (4K, сітківка iPad тощо), ви можете використовувати 4K текстури для фону, але для більшості інших частин це може бути надмірним.

Сподіваюся, що це допомогло і не замулило води.


Дякую за відповідь, безумовно, допомагає. Щодо широкої широти, вибачте за це, забув включити деякі деталі: я розробляю для ПК в 2D. Що буде, якщо використовувати текстури, що перевищують максимально підтримуваний розмір текстури? Це зовсім не працює або просто стає повільніше?
flotothemoon

1
Схоже, моя відповідь виявилася на місці. Перевірка інших публікацій на форумі сайтів 2k текстури - це те, що ви повинні підтримувати, щоб ваша гра працювала на більшості пристроїв. Обмеження розміру текстури залежить від конкретного обладнання та конкретної версії OpenGL-ES. Я не впевнений, яким би було конкретне повідомлення про помилку, але воно надходило б із OpenGL-ES, коли ви намагаєтеся завантажити текстуру. Корисні посилання: answer.unity3d.com/questions/563094/… , forum.unity3d.com/threads/texture-sizes-and-videocards.281422 та feedback.wildfiregames.com/report/opengl/feature/…
Віджай Варадан

Коли я намагаюся завантажити або намагаюся зв'язати текстуру? Або це те саме?
flotothemoon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.