Плитка сжатия текстуры PVR (отображение контекста края)

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

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

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

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


person Eli    schedule 05.08.2009    source источник


Ответы (2)


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

person Eli    schedule 18.08.2009

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

Тем не менее,

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

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

person Jon-Eric    schedule 12.08.2009