TXD

Материал из GTAModding.ru
Перейти к: навигация, поиск

TXD (Texture Dictionary) - формат, использующийся RockStar Games для хранения игровой графики в таких играх как GTA 3, Vice City, San Andreas Manhunt и Bully.

Содержание

Основные данные

Все текстуры в GTA третьей серии закодированы в виде бинарных потоков - RenderWare's binary stream files, специализированных для движка RenderWare, используемого в игре. Все бинарные потоки с текстурами имеют расширение TXD (TeXture Dictionary), для просмотра и редактирования иерархии которого существует программа RWAnalyze от Stive M. Для создания, изменения текстур в архиве и их типа компрессии так же используют специальные программы, а именно PS2 TXD Viewer (только для просмотра текстур на PS2), G-TXD и TXD Workshop.

Типы текстур

Текстуры в GTA можно разделить на 4-битные (только для PS2), 8-битные, 16-битные, 32-битные. Разрешения всех текстур в ГТА обычно кратно N^2, т.е. встречаются 2х2, 4х4, 2x4 и т.д. В некоторых модах можно встретить нестандартные разрешения текстур, использование которых так же не запрещено документацией RenderWare.

Структура

1. Архив текстур PC и X-BOX (TXD)

   * Texture Dictionary
         o Struct - 2b - количество текстур в архиве, 2b - неизвестно
         o Texture Native - данная секция в TXD может повторяться несколько раз, в зависимости от количества текстур в архиве.
               + Struct - заголовок с именем и параметрами текстуры + тело текстуры
               + Extension - дополнение подсекции (не используется) 
         o Extension - дополнение секции (не используется)

2. Архив текстур PS2 (TXD)

   * Texture Dictionary
         o Struct - 2b - количество текстур в архиве, 2b - неизвестно
         o Texture Native - данная секция в TXD может повторяться несколько раз, в зависимости от количества текстур в архиве.
               + Struct - 4b - платформа, 4b- флаги фильтра
               + String - имя текстуры
               + String - имя альфа-канала текстуры
               + Struct
                     # Struct - 4b- ширина, 4b - высота, 4b - битность, неизвестно
                     # Struct - 80 bytes неизвестно, пиксели/индексы (80 bytes неизвестно, палитра) 
               + Extension - дополнение секции 
                     # Sky Mipmap Val (RW Section) - 4 bytes неизвестно 
         o Extension - дополнение секции (не используется)

Особенности в GTA3 на платформе X-BOX

В TXD-файлах, содержащихся в IMG-архиве X-BOX версии GTA3 (не путать с модом GTAIII X-BOX version), применён специальный тип компрессии. Для их распаковки существует утилита dffxbox2pc от АК-73 aka Alex. После её применения TXD-архив открывается любым TXD-редактором (правда альфа-канал читается неверно).

Альфа канал

К изображениям в TXD также применим альфа канал. Разрешение текстуры и её альфа-канала всегда равны. Альфа канал, также известный как маска-канал - это черно-белое изображение, применяется с целью создания эффекта частичной прозрачности, либо с целью определения контуров, если модель выполняет роль спрайта в игровой сцене. Таким образом черные сектора альфа-канала определяют полную прозрачность, белые - полную видимость, а участки с разными оттенками серого определяют частичную прозрачность накладываемой на объект текстуры. Примеры - текстуры стекла, растительности, particle-эффектов, шрифтов и т.д.

[[1]] [[2]]

В итоге мы получим красный текст.

Компрессия текстур в TXD

GTA3, GTA VC и GTA SA поддерживают TXD с компрессированными текстурами. Алгоритмы компрессии, применяемые для текстур в игре - DXT1 (для текстур без альфа-канала) и DXT3 (для текстур с альфа-каналом). Использование в модах текстур с компрессией существенно снижает размер мода, при этом качество текстуры падает не очень существенно. Тем более все современные видеокарты уже умеют работать с компрессованными текстурами. Компрессию не рекомендуется применять для текстур particle-эффектов, где после компрессии в альфа-канале могут наблюдаются сильные искажения кривой градиента, что очень заметно проявляется в игре.

GENERIC текстуры

В GTA3, GTA VC и GTA SA для моделей игровой карты можно создавать и использовать TXD вне IMG-архива. Этот тип текстур считается общим, они ищутся и загружаются движком автоматически, при загрузке игры, по адресу, указанному в gta3.dat или default.dat. Данный тип внедрён специально только для разработчиков игры, для прямого редактирования текстур без обращения к IMG-архиву игры, а так же для подгонки системных требований игры под требования заказчика. Соответственно разработчиками модов эта возможность нигде не применяется (кроме GTA Stories) и задокументирована Херомантом007 только на gtamodding.ru и gtamaps.net.

1. Для GTA3 и GTA VC - в исполняемый файл игры зашито только одно единственное имя GENERIC'а карты - generic.txd. Механизм использования множества общих текстур на карте очень простое - создаём любые папки в игровой директории (имена папок соответственно на английском языке), в каждую папку помещаем какой-нибудь TXD-файл, используемый картой и переименовываем его в generic.txd. Затем прописываем путь к архиву в gta3.dat или default.dat, а так же не забываем в секции objs ИДЕшника привязать нужную модель к generic.txd. Например, я создал в папке TXD архив generic.txd, добавил строчку в gta3.dat "TEXDICTION TXD\GENERIC.TXD" и в каком-то IDE у меня есть строчечка "5002, ind_land052, generic, 1, 300, 0". Всё, теперь движок видит все добавленные текстуры и отрисовывает их на игровой карте.

2. Для GTA SA - в исполняемый файл игры так же зашито только одно единственное имя GENERIC'а карты - generic.txd. Но так же движок GTA SA поддерживает и дочерние текстуры, на которые по принципу наследования распространяются и параметры их родителей, заданные в исполняющем файле, в том числе и параметр GENERIC. За счёт этого можно создавать внешние TXD со своими именами. Делается это так: сначала создаём где-нибудь generic.txd и прописываем его в игре так же точно, как это описано для GTA3 и GTA VC; после этого, как ресурсов generic.txd нам становится мало, в директории игры создаётся ещё один TXD-файл с любым англоязычным уникальным именем (удобнее это делать в папке GENERIC) и прописываем так же путь к нему в gta3.dat или default.dat, а в IDE, кроме указания имени текстуры в секции objs, так же прописываем её как дочернюю по отношению к generic.txd в секции txdp. Пример: я создал текстуру jetty.txd в папке GENERIC, прописал её в gta3.dat как "TEXDICTION MODELS\GENERIC\jetty.txd", в IDE у меня есть строчки "5002, ind_land052, generic, 300, 0" в секции objs и "jetty, generic" в секции txdp. Всё, теперь движок видит все добавленные текстуры и отрисовывает их на игровой карте.