Добрый день, уважаемые хабражители. С вами снова Людмила Хигерович. Но сегодня мы не будем говорить непосредственно о 3D-модельках и тонкостях моделирования. Вместо этого немного отвлечемся и познакомимся с устройством архивов одной из самых популярных игр этого года и номинанте на премию Game of the year — Elden Ring, а также сравним её строение с другими играми.
В этой статье будет рассматриваться только строение файловых систем и немного типы игровых архивов. Сами скрипты, программные вопросы функционирования и сжатие подробно рассматриваться не будут.
Примечание: Пост рассчитан на тех, кто еще только знакомится с тонкостями 3D-моделирования и игровой инженерии, и в некоторых случаях понятия подаются несколько утрировано для понимания сути процесса. В тексте будет много упоминаний программ, сайтов и сервисов, а также игр и разработчиков игр. Не сочтите это за рекламу. Также в тексте будут встречаться скриншоты файловых архивов, схемы строения, рендеры моделей и текстуры из различных игр. Это иллюстративный материал, приведенный в качестве примера. Все права на модели и их текстуры из игр принадлежат разработчикам и издателям этих игр. |
▎Что такое игровой архив ?
Сейчас, заглянув внутрь папки с экзешником (исполняемым файлом запуска) почти любой игры, вы, скорее всего, увидите несколько dll-библиотек, деинсталлятор и пару подпапок с файлами странных и незнакомых расширений, например, dcx, bdt, pak, bsa и другие, причем размер их может варьировать от 500 Мб до нескольких десятков гигабайт. Это и есть архивы.
Зачем они вообще были придуманы?
Если мы откроем какую-нибудь компьютерную игру 80-х годов выпуска (например, почти любую игру Super Mario Bros), то увидим либо только сам экзешник игры, либо экзешник и пару dll-файлов, либо экзешник, dll и папку с небольшим количеством спрайтов (небольших изображений героев, окружения, кнопок и предметов, использующихся как функциональные части игры) и иногда музыку.
Некоторые современные игры в стиле ретро (как, например, Undertale) тоже минималистичны в плане внутренних файлов. Красным отмечены сами игровые файлы (и файл привязки к Steam), все остальное — музыка.
Такая простота связана с тем, что в первых видеоиграх практически не было каких-либо ресурсов. Все спрайты кодировались попиксельно непосредственно в экзешнике, позднее с усложнением дизайна уровней и анимаций персонажей понадобились изображения более высокой детализации и спрайты с вариантами реакций персонажей. Чем дальше развивался геймдизайн, тем более подробные изображения требовались, и тем большего размера спрайты помещались в директорию игры.
Это не нативные (не родные) спрайты из игр Tekken и Pokemon, однако хорошо демонстрируют разницу в качестве отрисовки (количестве кадров анимации, дополнительных цветах палитры, количестве пикселей в спрайте и т.п.).
Позднее появилось третье измерение, и проблема величины файлов становилась все значительнее. Первые трехмерные игры (Doom 1993, Wolfenstein 3D, первый The elder scrolls) с гибридной графикой (сочетание трехмерного окружения с двумерными спрайтами врагов и эффектов) уже занимали приличные для того времени 40 Мб на жестком диске (средняя емкость винчестера в то время составляла около 320 Мб, почти половину которых занимали компоненты системы и программные офисные пакеты).
DooM 1993 года. Спрайты врагов, тел павших товарищей и предметов менялись динамически (подмена текстур как кадров в GIF-анимации), но всегда были повернуты одной стороной к игроку.
Чем дальше развивалась графика, тем объемнее становились игры. Вместо привычных, но не очень функциональных .bmp файлов картинок и .txt для скриптов придумывались более экономичные форматы (по сути, лишь немного измененные варианты привычных файлов без специальной шифровки).
Кроме того, появилась и проблема корпоративного воровства: разработчики, особенно мелкие и индивидуальные, часто брали готовый продукт более успешных коллег и, заменяя несколько текстур и десяток спрайтов, продавали его как свой. Особенно остро эта проблема встала в Японии в 80 — 90-е годы с массовым распространением приставок и игр к ним, а также более дешевых подделок под фирменные приставки и игры, недоступные для большинства потребителей. |
▎Объем файла и его сжатие
Самая простая obj модель без костей (а формат не поддерживает кости) с двумя текстурами в формате jpeg (jpg) весит около 2-3 Мб при разрешении текстур в 1024х1024р. Формат fbx, содержащий риггинг, развесовку и четыре текстуры png, две из которых карты нормалей будет весить уже от 5 до 15 Мб в зависимости от размера текстур.
Текстуры Normalmap же весят еще больше, так как в сочетании синего, зеленого и красного цветов на картинке закодировано то, как свет внутри движка будет падать и преломляться на модельке. |
Одна и та же цветовая текстура, сохраненная в разных форматах. Слева — PNG-файл (1,84 Мб), справа — JPEG-файл.
Среднестатистическая модель персонажа средней полигональности с риггингом и семью сетами текстур, каждый из которых содержит по 3 текстуры (диффузная карта, карта нормалей, карта отражений) весит от 20 до 70 Мб.
Один из моих рыцарей со всеми текстурами весит 52 Мб (fbx файл+10 сетов текстур diffuse/specular/normal/environment). Средний размер текстур 1800 — 2400р. Формат png и tga. Модель разделена по мешам — частям или объектам, имеющим собственный материал и сет текстур — голова, глаза, роговица, кираса, наручи, поножи/обувь, волосы, оружие.
Другой из моих рыцарей весит 20 Мб (те же 10 сетов текстур + fbx+mesh). Средний размер текстур 500-800р. Формат текстур jpg.
Кто впервые додумался зашифровать архив игры в специфическом формате, доподлинно неизвестно. Скорее всего, пальма первенства в очередной раз оказалась у японцев. Doom 3 для сохранения места всего лишь немного поменяла Zip-архивы, которые все еще поддавались распаковке (почти) стандартными методами.
Распаковка .pk4 файлов ПК-версии DooM 3: воскрешение зла. Распаковщик — обычный 7zip.
А вот модели, текстуры и анимации уже имели более специфический формат. Думовские модели сохранены в .md5mesh, формате, экспорт которого поддерживает только пакет Autodesk Maya (и несколько специальных скриптов импорта универсальных программ-конвертеров типа Noesis). Часть текстур внутри папок имеет формат .tga (весьма тяжелый файл до сжатия с поддержкой многослойности и многоканальности изображения), часть .dds.
DDS или DirectDraw Surface Image — специфический формат изображений, часто используемый в играх в качестве текстур и карт окружения. Для этого формата характерно сверхвысокое сжатие с сохранением детализации изображения и возможностью кодировать изображение «на лету», что обеспечивает как сохранение качества, так и скорость сохранения и чтения изображений. Хотя чтение dds-файлов все равно медленнее привычных jpeg-файлов. |
- DXT1 — диффузные (цветовые), зеркальные (specular) и карты высот (в т. ч. варианты displacements), без альфа-каналов;
- DXT3 — диффузная, зеркальная и карта высот с альфа-каналами;
- DXT5 — исключительно для карт нормалей, с альфа-каналами или без них;
- DXT10 — весьма редко используемый формат, поддерживающий альфа-каналы и некоторые специфические каналы цвета, используемые в играх для дополнительного контроля над картами отражений и наложений эффектов без использования дополнительных карт (например, в Dark souls 3).
DDS-файлы не получится открыть простым средством просмотра фотографий. Для этого вам потребуется либо установить специальную dll-библиотеку в свою систему, либо использовать средства просмотра, имеющие скрипты и плагины для открытия dds-файлов (Irfanview, Xnview, GIMP, NVidia--плагины для Photoshop). Для открытия DXT5 и DXT10 dds и этого недостаточно — некоторые из них всегда будут выдавать ошибку открытия файлов или сообщение вроде «некорректный хэдер (заголовок) файла». Для справки — корректный заголовок файла dds в системе HEX — 4444 5320.
Некоторые разработчики и вовсе создают свои собственные варианты компрессии изображений. Например, часть DDS-файлов из директории Neverwinter online не хотят открываться ни в одной программе.
Сейчас же каждый издатель или студия по созданию игр (кроме тех, кто использует готовые движки) норовят использовать свой уникальный способ шифрования ресурсов и свои уникальные форматы моделей и самих архивов. А другие издатели и вовсе меняют их каждый год.
▎Многоэтажная компрессия From software
Современные игры не обходятся без сжатия файлов. Сколько бы ни расширялся объем дискового пространства накопителей с развитием НТП, еще большими темпами растет требовательность к качеству текстур и моделек. За десять лет «прожорливость» игр по отношению к свободному месту на диске выросла с 5 Гб (средний вес базовой игры TES V Skyrim 2012 года) до 40 — 50 Гб.
Elden Ring в базовом формате весит почти 47 Гб. И ОЗУ жрет столько, что мой компьютер отказывается с ним работать. Приходится мириться с облаком.
Чтобы сэкономить место на диске, некоторые разработчики используют многоэтажную компрессию. Проще говоря, запаковывают архив в архив, причем методы сжатия и форматы у этих архивов могут сильно разниться.
Первая игра от From software, с которой мне выдался шанс познакомиться, — это Dark Souls: Prepare to die edition. Я не буду расписывать тут, как перевернулся мой мир, но после относительно простого (в плане игрового процесса и устройства игровых архивов) Скайрима темный соус оставил неизгладимое впечатление и навсегда поженил меня с соулс-лайками.
Впрочем, и в предыдущей игре (Demon’s Souls) Fromы уже использовали двойную и тройную архивацию:
Некоторые частично распакованные файлы Demon's souls.
Базовые архивы Dark souls PDTE (полная версия для ПК 2012 года).
Компоненты архивации со времен демонических душ и на протяжении жизни темных душ не особо менялись. Самый последний уровень архивации — BDT архивы. Если честно, не знаю, как эта аббревиатура точно расшифровывается, вероятно, Binded data. Позднее будет понятно, почему нет третьего слова. BDT — непосредственно игровые архивы, содержащие модели, текстуры, анимации, карты, GUI и HUD (элементы интерфейса).
Файлы Elden ring. Обратите внимание на размер BDT и BHD архивов.
К BDT-файлам прилагается BHD-файл соответствующего имени — файл заголовков или Binded header (для первого Dark Souls — BHD5). В нем содержатся ключи шифрования BDT-архива и некоторые сведения о структуре зашифрованного архива. Без дескрипции BHD-файлов невозможно дешифровать и открыть BDT.
Если вам интересно, зачем в принципе может понадобиться дескрипция файловых архивов, то в следующей статье мы расскажем подробнее о том, чем и зачем это делают, почему такой вопрос возникает, и как выяснили, какая часть за что отвечает в файлах «елдарика» и «темного соуса». |
Содержимое архива dvd bond0.bdt
Dаrk souls PTDE
Dark Souls 2 SotFS разрабатывался немного иным составом команды, что отразилось и на организации архивов — вместо номерных безымянных архивов один большой архив GameDataEbl.bdt с двумя файлами кодировки (файл с заголовками и файл с ключом шифрования .pem) и множество мелких архивов с текстурами дополнительных вариантов разрешения и мелкими скриптами. Изменения в строении архивов сказались на восприятии игрой модификаций, и, по мнению некоторых, на работоспособности некоторых скриптов. Но я не настолько хороший кодер, чтобы точно это знать.
Архивы Dark Souls II SotFS.
К разработке Dark Souls 3 уже вернулась та же команда, что работала над первым дарком. Вернулись и традиционные безымянные архивы с номерами.
Архивы Dark Souls 3 с обоими DLC
В третьем дарке внутренности архивов были распределены между несколькими большими архивами. Data2 содержит папку Parts — оружие, части доспехов, тело, прически, глаза, брови/ресницы/бороды и базовое лицо, а также сеты NPC-людей (Сигварда, Орбека и др.).
Содержимое архива Data3.bdt — chr-файлы (файлы с боссами и противниками).
В Data3 содержится папка Chr и архивы четырех основных типов — chrbnd, texbnd, anibnd, behbnd:
- CHRBND — binded-архив с моделью противника или босса, а также негуманоидных и уникальных NPC (например, Хранительницы огня).
- TEXBND — текстуры соответствующего противника, зашифрованные в еще один архив — TPF-файл.
- NIBND — скелет в формате HKX (формат пакета Havok) и набор анимаций для противника, иногда отличающийся не только по типу противника, но и по каждому варианту противника (в соответствии с номером и приличествующим вариантом ИИ).
- BEHBND — архив с дополнительными настройками анимаций и поведения противников.
Data4 прячет внутри себя объекты мира, с которыми игрок может взаимодействовать — рычаги, лифты, разрушаемые объекты, а также некоторые элементы окружения с физикой и скелетом (цепи, флаги, тела и т. п.). Data5 отведена под карты (сцены) окружения, архитектуру, фоны, LOD (малополигональные модельки находящихся вдалеке объектов) и почему-то звуков. Схожей архитектуры придерживались разработчики и в работе над другими проектами — Bloodborne, Sekiro и Elden ring.
▎Что внутри Древнего Кольца
Сравним файловую организацию TES V Skyrim от Bethesda и Elden Ring от From software.
Архивы беседки очень просто устроены. В папке с игрой вы найдете папку Data, а внутри — файлы Skyrim — Meshes.bsa, Skyrim — Textures.bsa, Skyrim — Interface.bsa и т.д., а также россыпь архивов и папочек в зависимости от того, какая версия игры или сборка у вас установлена (паки-наборы текстур высокого разрешения, дополнительные интерфейсы и т.п.).
Содержимое папки Data игры TES V Skyrim
Сами архивы имеют формат BSA — Bethesda softworks archive, и распаковываются инструментами, самой студией и разработанными специально для сборки и разборки собственной игры и создания модификаций (шутка про то, что беседка оставляет игру сразу на допиливание конечным пользователям). Архивы удобно подписаны, и внутри почти все подпапки также имеют имена, соответствующие содержимому:
Содержимое архива Meshes.bsa
Все персонажи, противники и животные помещены в папку Actors, и также скрупулезно подписаны. Аналогичная структура и в архиве Textures.bsa, имена и расположение папок и конечных файлов аналогичны на 80%.
Папка actors не защищена никакими дополнительными архивами.
Больше никаких архивов внутри архивов — подпапки содержат только конечные файлы: модели в формате nif, скелеты моделей и анимации (для архива с текстурами — текстуры и энвайронмент-карты в формате dds).
Nif-файлы с моделями Скайрима можно просмотреть и незначительно отредактировать программой Nifskope
Всего один уровень архивации и папки с именами. Просто, изящно, понятно и рассчитано на ориентирование в файлах совсем неспециализированным пользователем.
Теперь возьмем Elden Ring. В папке с игрой нас встречают уже знакомые BDT-архивы и их BHD-энкрипторы. Вместо имен — абстрактные числа (Data0, Data1, Data2, Data3).
Внутри архива Data0 Elden Ring
DATA0.BDT
Data0 содержит много папочек с более-менее понятными названиями, в первую очередь, папку Parts — с одеждой и частями персонажей, включая героя игрока и NPC. Но не обольщайтесь — это последний раз, когда нам будет все понятно. Потому как внутри папки parts мы увидим картину, аналогичную картине внутренностей предыдущих игр фромов.
Внутри архива DATA0.bdt папка Parts, в ней — архивы DCX, а в каждом архиве — еще один архив — PARTSBND.
Архивы dcx и partsbnd рассортированы в соответствии с содержимым: am_m_xxxx — модели обмундирования для рук (перчатки, обмотки, латные перчатки, браслеты и т. п.) мужских персонажей и сетов без различий по полу персонажа (я их называю — реалистичный доспех), am_f_xxxx — соответствующий номеру женский вариант. BD — маркировка для тела (рубашки, кирасы, кольчуги, куртки и т.п.), LG для ног до пояса (штаны, брюки, поножи, юбки, сапоги).
HD — одеяния для головы (шлемы, капюшоны, маски, обручи, шляпы), но не сами головы. Концевая приписка _l в предыдущих играх обозначала вариант с меньшим разрешением, в Elden Ring при перепроверке оказалось, что разница в масштабе всего 20%, а в весе примерно 4 раза (в среднем 2,5 Мб против 600 Кб). |
Чтобы добраться до модели брони и ее текстуры, надо продраться сквозь многоэтажные папки в папках. В конечной папке будет лежать модель в типично соуловском flver-формате, архив с дополнительной анимацией к скелету персонажа, файлы дополнительных костей с физикой и tpf-архив с текстурами.
FC_F и FC_M — базовые лица для NPC и игрока, а также варианты текстур для маскирования (наложения цветовых масок). Лиц для каждого NPC в отдельности в этих архивах нет — как и в предыдущих играх, лицо, созданное вами в редакторе и лица персонажей хранятся в другом месте в формате .tri — файлах морфов (изменений геометрии лица).
- FG_A — маркировка для дополнительных элементов лица (брови, ресницы, глаза, усы, борода и варианты текстуры к ним).
- HR_A — архивы с прическами и белой текстурой (редактор в игре накладывает цвет на белую текстуру отдельно).
Одна из причесок Elden ring
Стоит отметить, что каждый parts-файл имеет одну модель, но в каждой модели есть несколько вариантов меша (несколько похожих или дублирующих друг друга кусков модели) для разных режимов отображения. Причем это практически не зависит от выбранного вами типа телосложения персонажа (худой, мускулистый или полный). Каждый вариант нужен для сочетания всех частей обмундирования с другими: одни части прически скрываются под шапкой, другие — под капюшоном. Аналогично и для доспехов — пояс у штанов модели из папки LG виден, если герой ходит с голым торсом, но исчезает при надевании кирасы.
К слову, прически в Скайриме тоже имеют скрываемую часть меша для помещения под шапку, как и скрываемые рукава кирасы, хотя и не со всеми сетами они работают корректно.
DATA1.BDT
Data1 содержит папку Asset, в которой есть две директории: aeg и aet. В AEG расположены несколько многоуровневых папок, в самой последней из которых лежат архивы типа aegxxx_xxx.geombnd. AEGХХХ_ХХХ.geombnd — файлы интерактивной геометрии — двери, переключатели, объекты окружения с физикой (небольшие деревья, сталактиты, обломки зданий и т.п.), а также принадлежащие им скелеты и анимации.
AET-директория содержит tpf-архивы с текстурами с аналогичной иерархией папок.
AEG001_315.geombnd содержит модельку тюремной двери. Некоторые модельки ссылаются не на свои текстуры, а на текстуры из другого архива.
DATA2.BDT
Этот архив содержит файлы окружения или карты локаций (map-файлы — архитектуру, лес, деревья, здания, руины), файлы разрушаемой геометрии (breakobj — горшки, доски, вазы, сухие корни и т. п.) и загрузочные листы (регулирующие файлы с именами NPC и врагов, которые должны быть загружены на локации).
Содержимое архива Data2.bdt
- m10 — замок Грозовой завесы и его придел (Часовня ожидания, место старта игры),
- m11 — столица Лейнделл и её засыпанный радиоактивным пеплом вариант, а также Круглый стол,
- m12 — все подземные локации ака Ночной Петербург (большие подземелья со своими кусками рисованной карты — Нокрон, Нокстелла, Глубокий корень, реки Ансель и Сиофра),
- m13 — летающий и рассыпающийся город Фарум Азула,
- m14 — местный Хогвартс ака Академия Райи Лукарии (хотя мне ближе Архивы Герцога Сита),
- m15 — проклятое… ой, то есть, священное дерево Микеллы,
- m16 — Вулканово поместье, m18 — Плавучее кладбище (тоже начальная локация),
- m19 — не уверена, но, вероятно, одно из мест встречи с финальным боссом,
- m30 — все рукотворные катакомбы,
- m31 — некоторые природные пещеры,
- m32 — некоторые шахты и туннели, соединяющие разные локации,
- m34 — сюжетно важные Дивные башни ака Священные рунные башни,
- m35 — Подземелье Отчуждения,
- m39 — усыпанный руинами обрыв (путь на плато Альтус),
- m60 — озерная Лиурния (Петербург днем), Лунный Алтарь, Замогилье, подъемник Дектуса, Вулкан Гельмир, плато Альтус, окрестности Лейнделла, подземелья окрестностей столицы, Звездные пустоши и Вершины великанов.
Пропуски в номерах вряд ли случайны — вероятно, разработчики оставляли пробелы для последующей доработки и добавления сцен или, наоборот, следы вырезанного контента. Да и сами архивы неравномерны — больше половины локаций сосредоточены в папке m60. Быть может, это следы самой первой версии игры, либо то, что, по мнению разрабов, точно должно было войти в игру. В последнем патче добавили еще и упоминание таинственного набора карт m40, вокруг которого появилось много спекуляций на тему грядущего DLC, но пока не добавили сами карты с таким номером.
DATA3.BDT
Главное, что есть в этом архиве — папка CHR с моделями и анимациями боссов, минибоссов, рядовых противников и NPC с уникальными модельками (Мелина, Ренни, Бок).
Частично распакованные файлы в папке CHR
Аналогично Dark Souls 3, внутри папки CHR расположены пронумерованные DCX-архивы, содержащие соответствующие архивы с моделями (chrbnd), текстурами (texbnd, у некоторых моделей в двух дополнительных вариантах — h-высоком и l-низком разрешении), файлами поведения (behbnd), анимациями и скелетами (anibnd). Как вы могли заметить, все файлы категории CHR помечены буквой C в начале. Это тоже давняя традиция фромов, идущая еще с Demon’s souls. |
Драконица Лансеакс без текстур
Например, c451x — код архивов с четырехкрылыми каменными драконами. С4510 — встречающаяся несколько раз на протяжении игры драконица Лансеакс и ее уменьшенная копия-рядовой враг в Фарум Азула. C4510_div — архивы с дополнительными анимациями для различных локаций и этапов игры.
Бедолага Фортисакс, зараженный проклятыми корнями. В игре его белая каменная шкура почернела от проклятия.
C4511 — брат Лансеакс, дракон-лич Фортисакс. Скелет и большая часть анимаций у них общая, кроме пары спец-атак, хотя сами модельки и их текстуры различаются. Но не все архивы боссов подвержены данному правилу. Так, c2120 Маления в одной модельке содержит меши обеих своих стадий как босса.
«Я — Маления, Клинок Микеллы. И я не знала поражений»
Фраза, вызывающая травматические флешбеки у каждого второго из тех, кто до нее дошел. Но не у меня.
Еще один вариант архивов, отличающихся одной конечной цифрой — модельки для общего геймплея и катсцены (заставки), либо для различных стадий босса. Так, c2190 — Радагон, с2191 — Марика из катсцены. Кроме того, некоторые архивы дублируются. Так, для Мелины и Малении существуют дополнительные архивы с маркером с80ХХ (маркер, обычно используемый для сюжетных NPC и иногда — фантомов-помощников). С8900 — версия Малении для катсцен, тоже содержит две модельки разных стадий в одной, но без лепестков.
С2180 — моделька Мелины для геймплея и призыва ее в качестве фантома.
Все модельки в данном вьювере отражены справа налево. Такая особенность конвертации.
С8906 — версия Мелины, не задействованная в геймплее, ее можно увидеть только в одной из концовочных катсцен.
Растрепанные волосы и побледневшая кожа прилагались.
▎Итого
Шутки про то, что японцы вечно любят все усложнять и придумывать неочевидные препоны, не родилась на пустом месте. Анатомия игр вроде Elden Ring тому подтверждение. Где это видано — четыре уровня архивации, вложенные один в другой словно матрешка (или дарума?). |
Каждый раз номера перегруппировываются, так как новые варианты (скины) персонажей «присоседиваются» к уже существующему файлу предыдущего скина, сдвигая число последующих файлов.
И, конечно, мододелы Скайрима (а каждый сумевший удачно закинуть архив с модом в корень игры считает себя почти что мододелом) при виде архивов Elden Ring и её сородичей приходит в тихий ужас. А познакомившись с процессом подключения мода (даже не создания), теряет волю к жизни, словно игровой журналист после первого соулсборновского босса.
Пускай эта статья может показаться не очень содержательной, но краткое знакомство с устройством файлов Elden Ring и игр From software очень сильно пригодится для экономии места в следующей статье. А следующая статья будет целиком и полностью посвящена модификациям уже изученных файлов и проблемам, с этими файлами связанным. Более того, большая часть этих самых проблем связана, в первую очередь, именно с устройством игровых архивов.
▎А на сегодня все. Всего хорошего и не болейте!
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS
Комментарии (19)
webdi
09.12.2022 16:56+3А что если бы наоборот, не шифровать свои творения, дабы права защитить. А делать их максимально открытыми. Да ещё инструменты создать по переделке своей игры. Это даже некий спорт получится, творческий. Каждая следующая версия/ветка может быть интереснее.
DWM
09.12.2022 17:57+1Следующий шаг -- создать нейронку для переделывания игр(ы).
<joke>Тогда, получается, разработчики уже не будут нужны</joke>webdi
09.12.2022 19:45+1О, реально. И оплату сервера связать с донатами от игроков)
А потом поместить сервера на купленный танкер, вывести в открытый океан, в нейтральные воды. И охрана нужна... или проще купить остров, или княжество.)
GothicJS
09.12.2022 18:11+4Посмотрите Neverwinter Nights, например. Они как раз так и делали. И до сих пор люди создают свои модули по этой игре.
Mingun
09.12.2022 19:08+1Хотя парочку своих премиум-модов все же запаковали чуть по другому
VoronaDragon
09.12.2022 21:35Кстати о нвн
Нвн2 как-то хитро запаковали леди Арибет, что рядовой модер невервинтер не способен её найти и распаковать без ошибок
Почти все остальное при этом прекрасно распаковывается.
Да и разрабы скайрима не особо прячут свои файлы
Aspadm
09.12.2022 22:05+6Я всячески приветствую подобные по смыслу статьи (так как в своё время именно с них я и начинал изучать реверс), но есть несколько серьёзных поправок.
-
Упаковка файлов в архивы служит для нескольких важных целей: a. Абстракция от локальной файловой системы — это упрощает портирование, позволяет обойти ограничения (например, максимальную длину путей, число файлов в директории и т.д.) b. Можно добавить метаданные (зависимости, приоритет загрузки и т.д.) c. Возможность отобразить архив в память, что кратно ускоряет доступ к подфайлам (более эффективное кэширование) d. Возможность сжатия большого числа данных сразу (более эффективно, чем отдельных маленьких файлов)
То есть, игровой архив — это эффективная упаковка ресурсов для конкретного движка.
Про DDS информация сильно упрощена и не очень правильная.
Это межплатформенный формат текстур с блочным сжатием. То есть, в отличие от форматов изображений общего назначения он изначально рассчитан на использование для текстур. Блочное сжатие аппаратно ускорено на видеокартах, так что такая текстура сразу загружается в VRAM и распаковывается на лету при обращении к пикселям, то есть, экономится не только место на диске, но и в видеопамяти. Тот же JPEG в этом плане сильно неэффективен, так как хотя изображение на диске будет сильно меньше, для использования в видеокарте его придётся распаковать в сырые пиксели. Для стандартного RGB изображения DXT1 кодирует блок 4х4 пикселя в 8 байт, т.е. ровно в 6 раз.
Естественно, что реально DXT вариантов сильно больше, да и DXT3 — это разновидность DXT1 с альфой; DXT10 - вообще не формат, а указание на более новый заголовок с поддержкой большего списка вариантов сжатия. См. S3TC/BCn/DXTn и спецификации DDS https://learn.microsoft.com/en-us/windows/win32/direct3ddds/dx-graphics-dds-pguideПро "многоэтажную компрессию" - сильно, но оно работает немного не так. Эффективно сжатые данные повторно сжать не получится, поэтому правильнее вложенные контейнеры - сжатие наверняка выполнено либо на самом высоком, либо самом низком уровне.
То, что мы видим в Noesis и что реально в архиве - очень разные вещи. Например, очень многие движки адресуют файлы по их ID (тот же Skyrim оперирует именно хэшами в консоли). Но это уже детали внутренней реализации архивов.
-
ShockwaveNN
09.12.2022 23:48Если мы откроем какую-нибудь компьютерную игру 80-х годов выпуска (например, почти любую игру Super Mario Bros),
Но как? Марио же никогда не выходил на ПК, а ромы для эмуляторов это совсем другая сущность
ShadowDweller
Понять бы ещё анатомию того же Геншина. Аудиоархивы обфусцированы вдоль и поперёк, найти нужный файл среди кучи "номерков", да ещё и расшифровать его - та ещё головная боль. Уже несколько месяцев пытаюсь разыскать единственный звуковой эффект...
vassabi
а вы не пробовали
1) записать этот эффект на внешний микрофон (с мобильного)
2) поискать записанный звук среди номерных ? (хоть самописно - для этого куча алгоритмов есть, хоть готовыми решениями, типа такого https://www.alldup.de/en_download_alldup.php)
ShadowDweller
Этот звук в абсолютной тишине выловить нереально. Это звук именно HUD'а, и срабатывает он только посреди всего остального шума. Какого "качества" будет этот звук, если его хватать ещё и третьими средствами, я, пожалуй, умолчу...
Self_Perfection
А если записать программными средствами весь звуковой поток, который подаётся на звуковую карту? Думаю если удастся поймать нужный звук посреди шума и отдельно в чистом виде звуки шумов, то вычитая одно из другого может получиться выделить чистый интересующий звук.
vassabi
а вам не нужно найти 100% совпадение, вам должно быть достаточно получить из аудио с шумами маркеры вашего нужного эффекта - так чтобы потом (например)
1) нарезать записанный звук-с-шумами на кусочки 100-200мс
2) найти спектр частот (привет БПФ), отфильтровать нижние\средние\верхние (чтобы оставить как можно больше нужного эффекта и убрать лишний сигнал с шумом), нормализовать\бинаризировать компоненты полученного вектора (снижаем порог совпадения - нам не страшны ложноположительные, главное - чтобы не было ложноотрицательных исходов)
тупым перебором поискать, какие номерные звуки имеют похожие на ваши кусочки участки - чем больше совпало кусочков на одной записи, тем лучше, если они попарно последовательные (т.е. 101,102,103) то вообще отлично
и потом уже вручную поискать среди найденных.
vassabi
конечно еще может быть, что данный эффект полностью генерируется программно и поэтому в аудифайлах его не будет
Aspadm
Аудио хранится в
Genshin Impact\Genshin Impact game\GenshinImpact_Data\StreamingAssets\Audio\GeneratedSoundBanks
в.pck
архивах. Напрямую формат вроде никто не разбирал, но как минимум есть скрипт для QuickBMS.ShadowDweller
Я уже минимум тремя разными скриптами для QuickBMS, включая базовый wavescan, прошёлся по этим банкам, перерыл уже больше 12к файлов совокупно. No dice. Видимо, придётся запрашивать помощь у тех, кто на этом собаку съел, тем более что многие из них пишут, что файлы с каждым новым патчем шифруются как-то по-новому. Головная боль, в общем, с этим Wwise.
Aspadm
А какой конкретно звук ищете? Просто я сейчас открыл несколько .pck файлов, похоже, что именно в них шифрования-то и нет (в отличии от остальных архивов GI)
ShadowDweller
Интересует звук наполнения стихийной энергии до максимума, когда Q становится доступной к использованию. Либо я невнимательно слушал свои распаковки, либо среди них его не было.