Звуковой Кэш
![Underlinked - Logo.png](/w/images/9/91/Underlinked_-_Logo.png)
![Wikipedia icon](/w/images/thumb/9/9a/Wikipedia_icon_small.png/16px-Wikipedia_icon_small.png)
![Wikipedia icon](/w/images/thumb/9/9a/Wikipedia_icon_small.png/16px-Wikipedia_icon_small.png)
![Wikipedia icon](/w/images/thumb/9/9a/Wikipedia_icon_small.png/16px-Wikipedia_icon_small.png)
January 2024
Contents
Наброски
Звуковой Кэш, это файл, содержавший первые .125 секунд (125 миллисекунд) каждого звука, используемого картой. Когда уровень загружается, Source загружает соответствующий кэш файл, вместо загрузки самих звуков, это сделано для экономии памяти и уменьшения времени ожидания. Во время игры, когда требуется звук, он сразу начинает проигрываться, а полный звук асинхронно загружается с жесткого диска. В большинстве случаев, этих 125 миллисекунд достаточно для синхронизации I/O и полной загрузки данных без "остановки" игры. Если асинхронность большая, происходит остановка игры, это заметно при резком снижении количества кадров. Эти проблемы могут быть отображены в консоли разработчика с помощью квара snd_async_spew_blocking 1
.
Повторная сборка файлов .manifest
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Эта инструкция позволяет модам генерировать наиболее эффективные файлы .cache:
- Создайте текстовый файл с именем
maplist.txt
и поместите его в директорию игры. - Добавьте все названия карт в
maplist.txt
. Просто добавляйте название карты, например d1_trainstation_01, а не d1_trainstation_01.bsp. Каждая карта с новой строки. - В Steam на вкладке "My Games", сделайте правый клик на вашем моде и выберите Properties. Откройте Set Launch options... и введите следующую линию:
-sw -console -condebug -nocrashdialog -makereslists -usereslistfile maplist.txt +mat_picmip 2 +r_lod 3 -autoconfig
Примечание:Если вы используете Source SDK Base, введите эти команды в SDK Base, а не в ваш мод.
- Нажмите OK и запустите игру. Этот процесс может занять очень много времени, и если произошел краш, данные не будут действительны. Движок должен сделать это по всему файлу
maplist.txt
, чтобы сгенерировать .cache файлы. Не забудьте очистить командную строку после завершения. - После завершения, сбросьте mat_picmip в 0, или на его предыдущее значение
Движок будет запускать каждую карту, оставаться на ней несколько секунд, и записывать список ресурсов в папку reslists
. Эти списки ресурсов используются для создания звуковых .cashe файлов. На выходе, после запуска с указанной выше командной строки, движок должен восстановить мета-кэш файлы и конкретный кэш для определенных файлов, указанных в maplist.txt
.
Каждый файл mapname.cache
был сделан с помощью файлов .manifest, в которых содержится список используемых звуков, а так же файлы - списки ресурсов, содержащие все файлы, используемые на карте, а не только упоминаемые как Precached (предзагруженные).
Извлечение
- .cache файлы могут быть просмотрены через Game Extractor [1]
- .manifest файлы могут быть просмотрены через текстовый редактор .
Кэши
_sharedprecache.cache
: содержит данные о пре-кэше звуках (см. раздел с информацией о прекэше ) содержавшие 50% карт (например, звуки, на которые ссылается система реагирования в каждой карте всегда пре-кешируется)._other.cache
: содержит название файлов, а не данные для предварительной загрузки каждого звука, которые не встречаются в других пре-кэшах. Звуки в этом кэше никогда не затрагивают систему I/O-блокирования, т.к. они проигрываются полностью асинхронно, то есть звуки смешиваются, после полного завершения загрузки.<mapname>.cache
: Содержит все остальные файлы, записанные движком под определенную .bsp карту, но не являющиеся частью_sharedprecache.cache
._other_rebuild.cache
: Это врменный файл, используемый для быстрого восстановления описанных выше .cache файлов.
Ручное Редактирование
Хотя движок генерирует .manifest
файлы, ручное редактирование файлов после их создания, может увеличить производительность на 400%. В частности, остерегайтесь '\VO\' файлов: в модах, базирующихся на Half-Life 2, будет три VO звука смерти Комбайна солдата, которые вам могут понадобится, следующие сотни файлов будут излишними, они могут быть удалены. После удаления всех VO записей ваш манифест (а значит и кэши) уменьшатся на половину от их первоначального размера! Этот эффект может оказать сильную оптимизацию на _sharedprecache
файлы (в эксперименте автора, сгенерированные движком кэши были размером 30MB, когда его собственные - 7MB).
Есть и другие записи, которые могут быть удалены, к примеру звуки оружия, которые на вашей карте не используются, но следует быть осторожным, т.к. могут быть удалены файлы, используемые в вашей карте. Это является причиной многих проблем.
Подготовка к релизу
Вам не обязательно выпускать мод с кэшами. Если вы включили файлы reslist/.manifest, игра будет создавать игровые кэши в процессе запуска. Однако, это может занять значительное время, и пользователи могут быть в замешательстве или проявить нетерпение. Если у вас маленький кэш, то включайте его в релиз на свое усмотрение.
Консольные Команды
snd_writemanifest
- Создает .manifest файл. Возможно с ошибками, к тому же нет необходимости использовать ее вместе с выше-перечисленными командами, автоматически пересобирающими .cache файлы.
snd_rebuildaudiocache
- Пересоздает .cache файлы. Имеет эффект только с действительными reslists и .manifest файлами.
Ограничения & Баги
! | Важно отметить, что моды на основе Half-Life 2, имеющие пустой звуковой кэш, заставляют движок создавать свой, гораздо больший кэш, размером от 20 МБ. |