Каково современное состояние доставки игровой графики, такой как множество маленьких файлов BMP? [закрыто]


9

У нас есть много маленьких BMP-файлов, которые, я думаю, было бы легче скопировать, если бы мы объединили их в большой TAR / ZIP / что угодно.

Каково современное состояние доставки игровой графики?

Мы используем C # и знаем о zlib. Просто мозговой штурм, чтобы увидеть, есть ли какие-либо другие решения лучше, чем zlib.

Ответы:


7

Вы также можете взглянуть на SharpZipLib или DotNetZip - DotNetZip дает вам Streamпрямой доступ , что полезно, поскольку большинство библиотек C # могут загружаться из потоков (в отличие от файлов). Кроме того, DotNetZip использует Ms-PL (BSD-Like) вместо GPL с юридически сомнительным исключением.

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

Наконец, вы можете запустить каждый тип ресурсов через соответствующий компрессор без потерь (PNG, FLAC и т. Д.) И сохранить их в виде плоского файла (в основном это zip-файл с отключенным сжатием). Не забудьте сжимать сжатые данные, так как это увеличит размер в большинстве случаев.

Некоторый уровень техники:

  • MPQ : Вероятно, это так же хорошо, как и для игровых ресурсов, поиск спроектирован так, чтобы быть быстрым (хэш-таблица на диске и т. Д.). Каждый тип файла (который поддерживается) имеет уникальный компрессор.
  • Quake PAK : Это в основном плоская файловая структура.
  • Doom WAD : немного специфично для Doom, но стоит разобраться.

1

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

Посмотрите этот ответ для получения дополнительной информации о сжатых текстурах: https://gamedev.stackexchange.com/a/5177/3505


0

ZLIB может быть хорошим ответом, но если вы знаете о людях, открывающих захват ваших активов, вы также можете создать свой собственный формат файлов для хранения ваших активов, хотя это не так сложно.

Вот как вы можете это сделать.

Он написан на C, но не должен быть таким сложным для изучения, поскольку C # похож на C и C ++.

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

Это может быть очень полезно, но оно просто объединит ваши файлы. Для сжатия у вас есть два варианта.

  1. Создайте весь файл ресурсов, сожмите его и отправьте.
    Этот метод прост, но не очень хорош, вы должны распаковать все, если вы хотите взять только один ресурс.

  2. Сожмите каждый ресурс и добавьте их в файл ресурса.
    Это тоже очень хорошо, у вас будет небольшое увеличение размера, кроме метода 1, потому что каждый файл сжимается отдельно, но лучше, если вам нужна гибкость.

У каждого метода есть свои недостатки, выбирать их нужно с умом. Как правило, если ваша игра имеет довольно небольшое количество ресурсов, метод 1 должен быть лучше. Если у вас есть ЛОТЫ, метод 2 должен вам подойти, потому что размер всех ресурсов вместе сокрушит дополнительные, которые вы получаете.

Для сжатия библиотек у вас есть:

  • Самый известный медиум, Злеб
  • Тот, с более быстрой декомпрессией, LZO
  • Отличная степень сжатия, 7-Zip

Я бы пошел с LZO, если я хочу быстрый доступ в игре, так что вам не нужно бояться распаковки в реальном времени, 7-Zip, если я хочу, чтобы файлы были сжаты LOT или Zlib, если я хочу сбалансированный коэффициент и размер декомпрессии.
Выбор за вами: D

Ах, конечно, есть и другие алгоритмы сжатия данных, и вы можете найти их в Google .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.