Хранение игровых активов: архив против отдельных файлов [закрыто]

8

Поскольку я нахожусь в процессе создания 3D-игры на C ++, мне было интересно, что будет более полезным при работе с игровыми ресурсами в отношении хранилища. Я видел, что в некоторых играх есть один файл ресурсов, сжатый со всем, что есть в нем, и другие с большим количеством маленьких сжатых файлов.

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

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

Я мог бы также иметь файл актива для каждого уровня, но тогда как мне обращаться с общими активами

Это беспокоило меня какое-то время, поэтому расскажите, какие еще есть преимущества и недостатки в любом из способов ведения дел.

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

Ответы:

9

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

ИМО, как правило, это не так важно, просто используйте более удобный для вас способ, это просто техническая деталь, которую не следует рассматривать, пока вы действительно не заметите некоторые проблемы с ней.

Петр Абдулин
источник
6
+1, Делайте то, что проще всего с точки зрения разработчика, пока это не вызовет проблемы
Джон Макдональд
4

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

С точки зрения производительности: загрузка большого количества маленьких файлов с жесткого диска может быть намного медленнее, чем одного большого, потому что дефрагментация файловой системы обычно пытается избежать разбиения больших файлов, но много маленьких файлов в один и тот же каталог может быть разбросан по всему диску. Поэтому, когда вы загружаете тысячи маленьких файлов, накопителю, возможно, придется много искать. Но с другой стороны, использование архивов может повысить стоимость получения отдельных файлов из архивов (в зависимости от внутренней структуры ваших архивов), поэтому вам следует попытаться сгруппировать файлы, которые обычно необходимы вместе.

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

Philipp
источник
1

Как правило, пакет будет быстрее, однако это не всегда так удобно, как сказал Петр. Однако один из способов борьбы с этим - сделать так, чтобы ваш движок мог загружать свободные файлы и упаковывать файлы. Затем в режиме отладки загрузите свободные файлы, а в режиме выпуска загрузите из пакета

CobaltHex
источник