DDS Texture Unifier — это инструмент, который объединяет разделённые текстуры формата "DDS" из игры Warface (*.dds.0, *.dds.1, *.dds.2 и т.д. и т.п.) в единый файл, совместимый с обычными программами и старыми версиями CryEngine.
Формат "DDS" (DirectDraw Surface) — формат хранения данных, разработанный корпорацией Microsoft для использования в библиотеке DirectX.
Было:
Стало:
Файлы формата DDS можно разделить для последующего использования в технологии "Textures Streaming" в движке CryEngine. Это позволяет загружать текстуры напрямую с диска во время игры, что улучшает производительность. Изначально текстуры загружаются не целиком, а частями, в зависимости от того, насколько далеко они находятся и смотрит ли камера на объект с этой текстурой в этот момент, что позволяет снизить нагрузку на видеокарту и оперативную память соответственно, ведь загружать все текстуры в максимальном качестве уже нет никакого смысла. Однако не все версии CryEngine поддерживают эту технологию, чтобы использовать такие текстуры в старых версиях движка, их нужно объединить в один файл.
Сейчас для объединения текстур из новых версий игры Warface используется программа "DDS_Unpacking.exe", автор которой неизвестен, в принципе, как и исходный код данной программы, как она работает точно, лично мне до сих пор неизвестно. Программа была написана очень давно, где-то в 2013 году, если не раньше, работает она, по сегодняшним меркам, довольно долго, использовать её в больших масштабах можно только с bat-файлом, который дополнительно ещё немного замедляет скорость обработки. Поэтому я решил написать собственную программу, но перед этим нужно было изучить принцип работы "DDS_Unpacking.exe", сравнив исходные файлы и результат его работы, получился следующий порядок:
- Создаётся файл с названием, которое берётся из файла "*.dds.0", только уже без окончания ".0";
- Первые 128 бит (заголовок файла) берутся из файла "*.dds.0" и записываются в наш файл "*.dds";
- Затем, в порядке убывания, в наш файл записывается содержимое файлов с расширениями от ".dds.*" до ".dds.1", где на месте "*" — максимальное порядковое число-расширение, которое имеет наша разделённая текстура;
- Ну и в конец нашего файла записывается отстаток из файла "*.dds.0", который остался после извлечения первых 128 бит данных.
Имея данные вводные, я написал свою программу, которая будет работать по данному алгоритму со всеми файлами в заданной директории её расположения. Также в неё дополнительно была встроена функция автоматического удаления исходных файлов (с вашего согласия), чтобы уменьшить вес директории, в которой происходило объединение, ведь в большинстве своём исходные файлы нам уже не нужны. Замена ли это для "DDS_Unpacking.exe" в рамках игры Warface? Возможно, но чтобы узнать точно, нужно протестировать данную программу во всех ситуациях, буду рад обратной связи.