Оптимизация размера графики в казуалках

May 28, 2011 23:20

В казуалках есть одна штука, в которой есть месту техническому теку - это пайплайн, хорошо сжимающий графику. Кто-то считает что необоснованно "пользователю всё равно сколько скачать, 10 мегабайт или 100, он не разбирается", кто-то считает что важно "+10 % к размеру - минус 1% пользователей", ну и видел даму которая не скачивает игры с большим ( Read more... )

tips, imaging, release, soft-dev

Leave a comment

Comments 54

daradiboga May 29 2011, 02:11:33 UTC
1. А почему надо именно JPEG, если распаковка все равно кастомная фактически?
в современных видеокодеах стоп-кадры пакуются с адаптивной квантизацией, как раз для этого.
2. Зачем редактор? Почему бы не определять по уровню шума автоматически эти квадратики?

Ну и "размытие" rgb канала это must-have для любых игр с текстурами с альфой, по понятным причинам. Ничего специфически казуального нету.

Reply

_winnie May 29 2011, 07:15:04 UTC
1) слишком сложной возни с jpeg-декодером не хотелось. Ну вот собственно код который рисует патчики - оно кастомная распаковка, на экране показа комикса нет смысла экономить FPS.
Функция загрузки текстуры есть, функция "нарисовать квадратик там" есть, 10 строчек на загрузку, 5 строчек на отрисовку, зачем вчитыватся в 1000 строчек libjpeg?

2) уровень шума - это не самая лучшая метрика для определения "человеческий глаз видит тут херню". Например, шум на волосах или на облаке может быть очень большой, а шум на глазах или губах меньше.

Reply

daradiboga May 29 2011, 12:05:54 UTC
1) там выше уже предложили - взять i-frames от xvid/h264. Всяко меньше возни, чем делать редактор, не говоря уже о работе художников
2) SSIM - примерно метрика для "человеческий глаз видит фигню". Картинок исходных нет, а то можно было бы проверить.

Ну то есть - сделано было как сделано, понятно.
Но на мой взгляд, что это очень сложный пайплайн, требующий большого количества ручного труда и не устойчивый к изменениям.

Reply

_winnie May 29 2011, 12:45:58 UTC
2а) SSIM находит глаза, ладони и сюжетные элементы? (сарказм)
2б) Глянул в википедию, я не вижу что бы он хотя бы углы и границы считал чем-то более важным, не говоря уж о лице. Ну и даже абстрактные углы и границы не абсолютный показатель, листва дерева может быть любой, а вот глаза - нет.

Редактор был очень примитивный :) Я за первые полдня написал редактор, за вторые - прошелся по 25 комиксам. Естественно, если стоит задача ужать 5000 картинок в гигабайт, то это совсем не задача про то что бы ужать 25 картинок в 5 мегабайт.

Reply


thedeemon May 29 2011, 04:29:39 UTC
А почему не взяли JPEG2000, где можно задавать разную степень сжатия для разных областей из коробки?

Reply

_winnie May 29 2011, 07:08:27 UTC
Я пробовал Jpeg2000, при сильном сжатии артефакты размытия выглядели неприятней, чем шум от обычного JPEG из фотошопа.

Reply


esyr May 29 2011, 08:23:52 UTC
У тебя ж вроде раньше были другие однотемные посты (про MA точно писал). Поставил бы на них один тег, толе.

Reply


udpn May 29 2011, 13:01:55 UTC
А что за алгоритм использован для запаковки шрифта? Я даже представить себе не могу, как можно спрессовать литеры так плотно.

Reply

_winnie May 29 2011, 14:19:51 UTC
Алгоритм "тетрис", сортируем по фигурки высоте (пробовались разные эвристики, по ширине, по площади, по диагонали, по сумме).
Затем полный перебор width/height, только оптимизированный, что бы найти прямоугольник наименьшей площади.

Reply

_navi_ May 30 2011, 19:24:19 UTC
2d knapsack problem, я так понимаю, как раз про это

Reply

udpn May 30 2011, 19:42:07 UTC
Задача NP-полная, но результат алгоритма _winnie выглядит так, будто была использована какая-то очень хорошая эвристика. Нужно бы попробовать. Похожая задача возникает, когда на одной странице сайта нужно отобразить много латеховских формул.

Reply


ext_165111 May 29 2011, 15:49:52 UTC
Для компьютерных игр - всё в несжатый BMP и в solid 7zip архив - обычно результат замечательный.

Reply

orvind May 29 2011, 18:55:27 UTC
Алгоритмы с потерей данных могут дать лучшую степень сжатия, чем алгоритмы без потерь. BMP + 7zip - это хорошо, но если нужно еще выиграть процентов 10-15, то уже начинаешь читить.

Reply

ext_165111 May 29 2011, 22:24:21 UTC
Сами по себе - да, но проблема в том, что тогда теряется возможность один раз закодировать общие элементы из разных файлов, а в компьютерных играх повторяемость достаточно часто чрезвычайно велика. bmp+solid 7zip с лёгкостью даёт 12-15 кратное сжатие, не сильно артефактистый jpeg - часто всего 3-4.

Вообще, хотелось бы каких-нибудь цифр - сколько именно было данных изначально, сколько удалось сэкономить и была-ли какая-нибудь выгода в сравнении с описанным способом.

Reply

rainman_rocks May 30 2011, 13:12:55 UTC
адовый отжиг, адовый.

В "игровых комиксах" какие "повторяющиеся элементы"-то? Наляпанные художником градиенты? О да, детка, алгоритм 7zip - он как раз для того.

Ваши слова были бы справедливы только для изображений с палитрой или маленьких глифов, но никак не портянок в true color.

Выигрыш от solid-архивов - этим вот как раз упомянутый "атласинг" и занимается.

Reply


Leave a comment

Up