Плитка сжатия текстур PVR (экспонирование краевого контекста) - PullRequest
4 голосов
/ 05 августа 2009

У меня есть сжатие текстур PVR, работающее в моей игре для iPhone, но у меня есть проблемы при объединении нескольких текстур. По сути, у меня очень большой фон, который разбит на несколько плиток 512x512, все сжатые PVR. Затем они объединяются, чтобы выглядеть как одно большое фоновое изображение. Как работает PVR, потому что он не знает, что он должен сжимать текстуру, как если бы это была действительно большая текстура - то есть использовать мозаичную информацию соседа, чтобы определить, как выполнить сжатие PVR.

Я могу придумать пару способов сделать это.

1) Каким-то образом сказать программе командной строки texturetool, чтобы она соответствовала другим изображениям, которые будут смежными.
2) Используйте программу командной строки, чтобы сгенерировать огромную текстуру PVR, которая представляет все изображение, а затем как-то разделить байты на несколько изображений - возможно, это невозможно.
3) Сделайте какую-нибудь хитрость OpenGL ES, которая хорошо сочетает края.
4) Сделайте некоторую хитрость, когда у меня есть избыточная информация в каждой плитке, а затем обрежьте эти области при рисовании текстуры (пожалуйста, нет).

Надеюсь, я смогу сделать 1, 2 или 3, или есть другое известное решение.

Ответы [ 2 ]

4 голосов
/ 18 августа 2009

В итоге я выбрал вариант 4. Я не думаю, что это была ситуация, когда PVRTC не подходит - фактически это почти необходимость. Когда у меня в памяти одновременно 24 512x512 текстур (представляющих очень большой фон и передний план), помещать их в несжатый формат - самоубийство. Поэтому я просто использовал PVR-сжатие как обычно, а затем отредактировал несколько строк кода в своем алгоритме разбиения на листы так, чтобы они перекрывались и урезались по 15 пикселей на каждом конце. Вуаля, выглядит отлично. Это заняло пару дней и было довольно раздражающим, но я думаю, что это хороший вариант для людей, которым нужен очень большой плиточный фон на iPhone.

1 голос
/ 12 августа 2009

Мой лучший совет, но не то, что вы спросили, это знать, когда PVRTC не подходит. Безусловно, самое простое решение - просто не использовать PVRTC для этих плиток. Я потратил много времени, пытаясь изогнуть PVRTC для работы в ситуациях, для которых он просто не подходит.

Тем не менее,

При использовании PVRTC текстура всегда предполагается мозаичной (с самой собой), поэтому пиксели на правом краю влияют на пиксели на левом краю (то же самое с верхним и нижним). Поэтому варианты 1 или 2, скорее всего, не сработают.

Одна из возможностей - добавить альфа-канал к плиткам и позволить им постепенно исчезать по краям, чтобы при их наложении они переходили друг в друга. Имейте в виду, что PVRTC лучше работает с постепенными альфа-затуханиями. Жесткие альфа-края часто имеют артефакты в PVRTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...