Недавно я добавил в свой проект упаковщик текстур, который будет упаковывать определенное количество текстур в одну, например:
Так, например, этот размер составляет 582x1023 пикселей. Целью добавления этих упакованных текстур, очевидно, было повышение производительности, поэтому я хотел найти оптимальный размер текстур для текстур OpenGL (используя LWJGL). Я обнаружил, что максимально поддерживаемый максимальный размер текстуры составляет 1024x1024, в соответствии с этим, например. Это кажется мне странным, потому что очевидно, что многие текстуры сами по себе будут больше, так что же будет с ними? Я уверен, что большинство видеокарт поддерживают текстуры больше, чем это. Могу ли я разумно ожидать, что большинство видеокарт будут обрабатывать, например, текстуры 4096x4096 (или, может быть, даже больше)?
Подходя ко второму пункту (я надеюсь, что это все еще считается одним вопросом, но это сводится к одной и той же проблеме): должны ли размеры текстур иметь степень 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) и должны Я набил упакованные текстуры меньше, чем до следующей степени 2? Согласно этому вопросу от 2011 года, это не является обязательным требованием, но может улучшить производительность и избежать незначительных ошибок, и этот вопрос от 2012 года говорит о том, что вам определенно следует дополнять текстуры. Таким образом, я понимаю, что эти вопросы задавались ранее, но они имеют разумную дату, чтобы ответы изменились, и, кроме того, каждый из них лишь частично отвечает на мой вопрос. Как другие проекты / справиться с этим?
TL; DR: Какие размеры текстур я могу ожидать от большинства видеокарт? Каковы оптимальные размеры текстуры (или есть)? Должен ли я увеличить ширину текстур до следующей степени 2?
источник
Ответы:
Я собираюсь попытаться ответить на это, хотя YMMV. Я использую обзор оборудования Steam ( http://store.steampowered.com/hwsurvey?platform=pc ), чтобы определить, какая видеопамять (VRAM) доступна на большинстве компьютеров. Если посмотреть на результаты 2015-10-13 (сегодня), то почти 85% людей имеют 1024 МБ видеопамяти.
Ваш вопрос очень широкий, поскольку в нем не указывается целевое оборудование (консоль, ПК, портативные устройства, мобильные устройства?) Я собираюсь поговорить о ПК, и вы можете экстраполировать для других платформ на основе спецификаций оборудования.
Предполагая, что 32 бита цвета + альфа на пиксель, то есть 4 байта на пиксель, 1 ГБ видеопамяти может максимально удерживать ~ 256 миллионов пикселей. Это соответствует 256 1К на 1К текстур. Это предполагает (неверно), что вы хотите хранить только текстуры в вашей VRAM, в то время как будет целый ряд других вещей (например, данные сетки, если вы работаете в 3D), для которых вам нужно оставить место. Вы также, вероятно, захотите выделить больше места для отображения текстур с помощью mip, что обычно работает лучше всего, если ваши текстуры имеют степень двойки.
Современные консоли (XBOX One и PS4) имеют 4–8 ГБ унифицированной оперативной памяти, большинство карманных компьютеров и мобильных устройств имеют 1–2 ГБ унифицированной оперативной памяти с ограничениями того, сколько вы можете выделить как VRAM.
Я бы обычно создавал текстуры 2K, чтобы они работали на большинстве ПК, позволяя уменьшить масштаб для устройств более низкого уровня. Если вы пишете 2D-игру и хотите использовать дисплеи с более высоким разрешением (4K, Retina iPad и т. Д.), Вы можете использовать 4K-текстуры для фона, но для большинства других частей это может быть излишним.
Надеюсь, что это помогло и не испортило воду.
источник