Вход

Просмотр полной версии : dehrust и спрайты



drbars
23.12.2012, 21:08
Бывают такие ситуации, когда ну совсем нет свободного места под графику в игре, а некоторые спрайты используются несколько редко и размер их велик. (например логотип/враг итд...) и очень удобно такие спрайты хранить пакованными.

Вопрос в следующем: как приспособить dehrust (без стековый депакер) для потоковой распаковки спрайта на экран? Есть идеи у кого?

jerri
23.12.2012, 21:10
drbars, вопрос неясен- проясни поподробнее

drbars
23.12.2012, 21:18
Есть в памяти спрайт, например 16*16 знакомест. Спрайт упакован hrust'ом.
Нужно распаковать спрайт сразу на экран. Т.е. процедура спрайта сразу распаковывает и выводит.

jerri
23.12.2012, 21:37
drbars, нет
у хруста окно 8кб и и в этом окне 4 таких спрайтов поместиться
есть другой вариант

у тебя на экране есть например 3 разных обьекта - ты их (со всей анимацией) распаковываешь в буфер и оттуда кидаешь на экран

при переходе на другой экран - распаковываешь другие обьекты
примерно так

либо переписать хруст под распаковку на экран
это уже реально я переписывал ХРУМ

Vitamin
23.12.2012, 22:48
Я в свое время разработал сжатый формат спрайтов .bit для этих целей. Одно знакоместо на выходе от 1 до 9 байт без атрибутов. Есть вырезалка спрайтов.

drbars
23.12.2012, 23:20
Я в свое время разработал сжатый формат спрайтов .bit для этих целей. Одно знакоместо на выходе от 1 до 9 байт без атрибутов. Есть вырезалка спрайтов.
Давай, может пригодится. Где глянуть?

newart
24.12.2012, 09:49
Давай, может пригодится. Где глянуть?
Тут уместно вспомнить еще и Laser Basic в котором если не изменяет память, в спрайте храняться только не пустые знакоместа спрайтов. Для Dizzy мы делали так же, что дает не хилую экономию памяти.

Andrew771
24.12.2012, 09:56
в спрайте храняться только не пустые знакоместа спрайтов
ну это я всегда так и делал, еще с книги "Как написать игру...". И 3D-View моя также нарезает.


Я в свое время разработал сжатый формат спрайтов .bit для этих целей. Одно знакоместо на выходе от 1 до 9 байт без атрибутов. Есть вырезалка спрайтов.
Интересно посмотреть!

alone
24.12.2012, 11:28
Спрайты с маской? Маску можно вычислять.

Vitamin
24.12.2012, 12:16
Давай, может пригодится. Где глянуть?

Статья с алгоритмом:
http://zxvideo.fatal.ru/gfx_pack.htm

Формат спрайтов:
http://zxdocs.fatal.ru/formats/formats.php?file=BIT&type=html

Плагины для BGE 3.х (в том числе вырезалка):
http://zxdocs.fatal.ru/myworks/bge_plugs.zip

drbars
24.12.2012, 14:05
Спрайты с маской? Маску можно вычислять.
Я где-то видел оптимизированный тобой депакер дехруста. Где скачать можно последнюю версию?

alone
24.12.2012, 14:17
Я не оптимизировал депакер дехруста!

drbars
24.12.2012, 19:50
Я не оптимизировал депакер дехруста!
Извиняй, попутал значит. Был просто не авторский депакер хруста, без стека и короче оригинала.

Titus
24.12.2012, 20:25
Использовать LZ-пакеры или же Хаффмана для распаковки спрайтов на лету не эффективно. LZ - требует окно уже распакованных данных, а Хаффман очень тормозной. Идеальных вариант - это паковать только повторяющиеся байты простым алгоритмом. Тогда скорость распаковки на лету будет сравнима с обычным выводом спрайта. Конечно, это эффективно только если у спрайта есть много пустых одинаковых байт.

alone
24.12.2012, 20:38
Был просто не авторский депакер хруста, без стека и короче оригинала.
Где дают?

---------- Post added at 19:38 ---------- Previous post was at 19:37 ----------


Использовать LZ-пакеры или же Хаффмана для распаковки спрайтов на лету не эффективно. LZ - требует окно уже распакованных данных, а Хаффман очень тормозной. Идеальных вариант - это паковать только повторяющиеся байты простым алгоритмом. Тогда скорость распаковки на лету будет сравнима с обычным выводом спрайта. Конечно, это эффективно только если у спрайта есть много пустых одинаковых байт.
Можно разложить спрайт на чанки 2x2 и кодировать 4 чанка (то есть две строки) одним байтом. Так у меня было в видео плеере.

tiboh
25.12.2012, 00:07
Извиняй, попутал значит. Был просто не авторский депакер хруста, без стека и короче оригинала.

Такой депакер есть для Hrust 2. Для Hrust 1 тоже есть укороченный, но со стеком.

Andrew771
25.12.2012, 09:33
Скорее всего, алгоритм Vitamin лучше всех пока.
А вот еще у большинства спрайтов границы плавные, а внутри всё или почти всё заполнено. Может, еще это как-то учитывать при кодировании.

drbars
25.12.2012, 23:09
Скорее всего, алгоритм Vitamin лучше всех пока.
А вот еще у большинства спрайтов границы плавные, а внутри всё или почти всё заполнено. Может, еще это как-то учитывать при кодировании.
Плавные границы — это уже бит-ориентированная компрессия. Усложнится как сам алгорим паковки, так и время на распаковку. Поэтому не особо актуально в нашем случае.

Vitamin
26.12.2012, 00:18
Плавные границы — это уже бит-ориентированная компрессия. Усложнится как сам алгорим паковки, так и время на распаковку. Поэтому не особо актуально в нашем случае.
Вертикальные границы из двух чередующихся байт (размытие шахматной текстурой) упаковываются в два байта на знакоместа. Подобные горизонтальные границы в 3 или 4 байта.
SamStyle в своем редакторе анимации также поддержал вариацию на тему алгоритма BitPack- оптимизирует сжатие сплошных фонов. Так что рекомендую также его попробовать.

alone
26.12.2012, 11:19
А вот еще у большинства спрайтов границы плавные, а внутри всё или почти всё заполнено. Может, еще это как-то учитывать при кодировании.
Если так, надо посмотреть, сколько всего комбинаций из 2 байтов существует. Возможно, меньше 256. Даже если и больше, можно редкие заменить на похожие частые.

Sergey
15.01.2013, 16:33
Если так, надо посмотреть, сколько всего комбинаций из 2 байтов существует. Возможно, меньше 256. Даже если и больше, можно редкие заменить на похожие частые.

Боюсь огорчить, но, по-моему, всё-таки, 65536 :v2_wink2:

Andrew771
15.01.2013, 16:51
Боюсь огорчить, но, по-моему, всё-таки, 65536
это если все 2х-байтные комбинации используются. А в реале, как правило, их намного меньше.