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


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

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

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

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

2 4

2 ответа:

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

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

Что говорит,

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

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