TXD
Материал из GTAModding.ru
Версия от 22:04, 24 декабря 2012; Lego (обсуждение | вклад)
TXD (TeXture Dictionary) - формат, использующийся Rockstar Games для хранения игровой графики в GTA III, GTA: Vice City, GTA: San Andreas, а также Bully, The Warriors и Manhunt. Важно заметить, что TXD - это платформозависимый формат (англ. platform specific texture dictionary).
Содержание |
Основные данные
Все текстуры в GTA третьей серии закодированы в виде бинарных потоков - RenderWare binary stream file, специализированных для движка RenderWare, используемого в игре. Все бинарные потоки с текстурами имеют расширение TXD (TeXture Dictionary), для просмотра и редактирования иерархии которого существует программа RW Analyze от Steve 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 - платформа (строка "PS2"), 4b- флаги фильтра + String - имя текстуры + String - имя альфа-канала текстуры + Struct # Struct - 4b- ширина, 4b - высота, 4b - битность, неизвестно # Struct - 80 bytes неизвестно, пиксели/индексы (80 bytes неизвестно, палитра) + Extension - дополнение секции # Sky Mipmap Val (RW Section) - 4 bytes неизвестно o Extension - дополнение секции (0b - пусто - не используется)
Swizzling
Важно отметить, что на PS2 растр может хранится с использованием swizzling'а и для корректного отображения в графическом редакторе нужно преобразовать текстуру.
Особенности в GTA3 на платформе X-BOX
В TXD-файлах, содержащихся в IMG-архиве X-BOX версии GTA3 (не путать с модом GTAIII X-BOX version), применён специальный тип компрессии. Для их распаковки существует утилита dffxbox2pc от АК-73 aka Alex. После её применения TXD-архив открывается любым TXD-редактором (правда альфа-канал читается неверно).
Альфа канал
К изображениям в TXD также применим альфа канал. Разрешение текстуры и её альфа-канала всегда равны.
Альфа канал, также известный как маска-канал - это черно-белое изображение, применяется с целью создания эффекта частичной прозрачности, либо с целью определения контуров, если модель выполняет роль спрайта в игровой сцене. Таким образом черные сектора альфа-канала определяют полную прозрачность, белые - полную видимость, а участки с разными оттенками серого определяют частичную прозрачность накладываемой на объект текстуры. Примеры - текстуры стекла, растительности, particle-эффектов, шрифтов и т.д.
Для наглядности возьмём текстуру и её альфа-канал:
В итоге мы получим красный текст.
Компрессия текстур в 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. Всё, теперь движок видит все добавленные текстуры и отрисовывает их на игровой карте.