MDL — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
(PS2-версия)
Строка 1: Строка 1:
 
{{stub}}
 
{{stub}}
  
<!--->TODO: переделать. Статья никуда не годится. Много информации действительности не соответствует, вместо этого есть много ненужного и лишнего.</!--->
+
'''MDL''' – внутренный формат моделей игр от Rockstar Leeds (не путайте его с другими MDL-файлами, содержащимися в прочих видеоиграх), используемый в [[GTA LCS]], [[GTA VCS]] и Manhunt2. Данный формат жестко привязан к игровой платформе (PSP/PS2), т.е. не является кроссплатформенным в отличие от DFF, использовавшегося в предыдущих играх серии GTA до покупки [[RenderWare]] фирмой EA Games.
 
+
'''MDL''' – внутренный формат моделей (не путайте его с другими MDL-файлами, содержащимися в прочих видеоиграх), используемый в [[GTA LCS]] и [[GTA VCS]]. Данный формат жестко привязан к игровой платформе (PSP/PS2), т.е. не является кроссплатформенным в отличие от DFF, использовавшегося в предыдущих играх серии GTA до покупки [[RenderWare]] фирмой EA Games.
+
 
+
Используется в ресурсах, обобщенных расширением .MDL и .WRLD.
+
 
+
  
 
== Основные данные ==
 
== Основные данные ==
 
[[Изображение:Lcs J-Fox tool.jpg|200px|thumb|right|Скриншот программы J-Fox'a]]
 
[[Изображение:Lcs J-Fox tool.jpg|200px|thumb|right|Скриншот программы J-Fox'a]]
  
PSP-версия MDL была разобрана '''J-Fox''', им же написана программа, читающая структуру MDL-файлов с рендерингом геометрии и UV-координат с текстурами из [[TEX|<code>*.chk</code>]]-файлов. Как и остальной многочисленный софт для GTA: LCS и GTA: VCS, программа от J-Fox не была выпущена.
+
PSP-версия MDL была разобрана '''J-Fox''', им же написана программа, читающая структуру MDL-файлов с рендерингом геометрии и UV-координат с текстурами из [[TEX|<code>*.chk</code>]]-файлов. Как и остальной многочисленный софт для GTA: LCS и GTA: VCS, программа от J-Fox не была автором выложена в открытый доступ.
  
PS2-версия MDL разобрана '''AK-73 aka Alex''', им же написан уникальный скрипт к [[3ds_Max|3D Studio Max]] для загрузки любого [[MDL|<code>*.mdl</code>]]-файла PS2-версии (поддерживается как [[GTA LCS]], так и и [[GTA VCS]]).
+
PS2-версия MDL разобрана '''AK-73 aka Alex''', им же написан уникальный скрипт к [[3ds_Max|3D Studio Max]] для импорта любого [[MDL|<code>*.mdl</code>]]-файла PS2-версии. Подробнее о скрипте читайте в статье о [[MDL importer]].
 +
 
 +
PC-версия MDL никем не разбиралась. Судя по первому впечатлению, Рокстары усложнили формат, сделав его более похожим на форматы движка RAGE. Используется исключительно в Manhunt2.
  
 
== Структура ==
 
== Структура ==
Строка 27: Строка 24:
 
''Pre-Light'' - предварительное освещение модели во время её рендеринга.
 
''Pre-Light'' - предварительное освещение модели во время её рендеринга.
  
==Глобальный заголовок==
+
'''Структура заголовка MDL (на основе данных Хероманта):'''
{{Заготовка}}
+
 
''Информация будет добавлена позже...''
+
  0х00 4b: сигнатура "LDM"
 +
  0х04 4b: не используется (всегда = 0)
 +
  0х08 4b: размер MDL
 +
  0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в MDL)
 +
  0х10 4b: адрес на начало глобалсекции (повторяется)
 +
  0х14 4b: количество оффсетов в глобалсекции
 +
  0х18 4b: переход на массив имён (?)
 +
  0х1С 2b: не используется (всегда 0)
 +
  0х1E 2b: тип MDL
 +
 
 +
  0х20 4b: адрес 1 (секция зависит от типа MDL)
 +
  ...
 +
 
  
 
==Atomic==
 
==Atomic==
{{Заготовка}}
+
 
''Информация будет добавлена позже...''
+
  4b: идентификатор секции
 +
  4b: переход на первый фрейм
 +
  4b: ...
 +
 
 +
===Atomic:Frame===
 +
 
 +
  4b: идентификатор
 +
  4b: 0 в первом фрейме либо переход на первый фрейм
 +
  4b: позиция в файле
 +
  4b: позиция в файле-4
 +
{цикл - чтение матрицы положения пустышки в сцене - 2 раза
 +
  4b: matrix3[1][1]
 +
  4b: matrix3[1][2]
 +
  4b: matrix3[1][3]
 +
  4b: не используется (всегда = 0)
 +
  4b: matrix3[2][1]
 +
  4b: matrix3[2][2]
 +
  4b: matrix3[2][3]
 +
  4b: не используется (всегда = 0)
 +
  4b: matrix3[3][1]
 +
  4b: matrix3[3][2]
 +
  4b: matrix3[3][3]
 +
  4b: не используется (всегда = 0)
 +
  4b: X координата относительно центра модели
 +
  4b: Y координата относительно центра модели
 +
  4b: Z координата относительно центра модели
 +
  4b: 1 (конец строки)
 +
конец цикла}
 +
  4b: переход на следующий фрейм
 +
  4b: 0
 +
  4b: переход на первый фрейм
 +
  4b: выравнивание (FFFFFFFF)
 +
  4b: 0
 +
  4b: переход на строку с именем фрейма
 +
  4b: неизвестно
 +
  4b: 0
  
 
==Clump==
 
==Clump==
{{Заготовка}}
+
 
''Информация будет добавлена позже...''
+
  4b: количество адресов либо номер секции (для клампа = 2)
 +
  4b: адрес первого фрейма
 +
  4b: адрес первого атомика
 +
 
 +
===Clump:Frame===
 +
 
 +
  4b: количество адресов либо номер секции (для фрейма = 1)
 +
  4b: переход на продолжение
 +
 
 +
  8b: нули
 +
  4b: неизвестно
 +
  4b: флаг
  
 
==Список материалов==
 
==Список материалов==
Строка 51: Строка 106:
  
 
<source lang="scm">id текстуры[2], unknown1[2], множитель для U[2], множитель для V[2], unknown2[2], код оптимизации[10] </source>
 
<source lang="scm">id текстуры[2], unknown1[2], множитель для U[2], множитель для V[2], unknown2[2], код оптимизации[10] </source>
 +
 +
====DTZ-версия====
 +
MDL-файлы, "вшитые" внутри [[DTZ]]-файла. Формат ничем не отличается, поэтому [[MDL importer]] может прочитать DTZ как MDL и импортировать модели.
  
 
==Список геометрии==
 
==Список геометрии==

Версия 22:23, 17 мая 2013

MDL – внутренный формат моделей игр от Rockstar Leeds (не путайте его с другими MDL-файлами, содержащимися в прочих видеоиграх), используемый в GTA LCS, GTA VCS и Manhunt2. Данный формат жестко привязан к игровой платформе (PSP/PS2), т.е. не является кроссплатформенным в отличие от DFF, использовавшегося в предыдущих играх серии GTA до покупки RenderWare фирмой EA Games.

Содержание

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

Скриншот программы J-Fox'a

PSP-версия MDL была разобрана J-Fox, им же написана программа, читающая структуру MDL-файлов с рендерингом геометрии и UV-координат с текстурами из *.chk-файлов. Как и остальной многочисленный софт для GTA: LCS и GTA: VCS, программа от J-Fox не была автором выложена в открытый доступ.

PS2-версия MDL разобрана AK-73 aka Alex, им же написан уникальный скрипт к 3D Studio Max для импорта любого *.mdl-файла PS2-версии. Подробнее о скрипте читайте в статье о MDL importer.

PC-версия MDL никем не разбиралась. Судя по первому впечатлению, Рокстары усложнили формат, сделав его более похожим на форматы движка RAGE. Используется исключительно в Manhunt2.

Структура

Изображение одного тристрипса

Общее для всех *.mdl - наличие глобального заголовка и atomic-заголовка. Остальные секции *.mdl строго специфические для каждой из поддерживаемых платформ - PSP или PS2

Основные термины:

Tri-Strips - серия связанных треугольников и вершин. Специально используется в играх данной серии для быстрого рендеринга.

Pre-Light - предварительное освещение модели во время её рендеринга.

Структура заголовка MDL (на основе данных Хероманта):

  0х00 4b: сигнатура "LDM"
  0х04 4b: не используется (всегда = 0)
  0х08 4b: размер MDL
  0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в MDL)
  0х10 4b: адрес на начало глобалсекции (повторяется)
  0х14 4b: количество оффсетов в глобалсекции
  0х18 4b: переход на массив имён (?)
  0х1С 2b: не используется (всегда 0)
  0х1E 2b: тип MDL
  0х20 4b: адрес 1 (секция зависит от типа MDL)
  ...
  

Atomic

 4b: идентификатор секции
 4b: переход на первый фрейм
 4b: ...

Atomic:Frame

 4b: идентификатор
 4b: 0 в первом фрейме либо переход на первый фрейм
 4b: позиция в файле
 4b: позиция в файле-4

{цикл - чтение матрицы положения пустышки в сцене - 2 раза

 4b: matrix3[1][1]
 4b: matrix3[1][2]
 4b: matrix3[1][3]
 4b: не используется (всегда = 0)
 4b: matrix3[2][1]
 4b: matrix3[2][2]
 4b: matrix3[2][3]
 4b: не используется (всегда = 0)
 4b: matrix3[3][1]
 4b: matrix3[3][2]
 4b: matrix3[3][3]
 4b: не используется (всегда = 0)
 4b: X координата относительно центра модели
 4b: Y координата относительно центра модели
 4b: Z координата относительно центра модели
 4b: 1 (конец строки)

конец цикла}

 4b: переход на следующий фрейм
 4b: 0
 4b: переход на первый фрейм
 4b: выравнивание (FFFFFFFF)
 4b: 0
 4b: переход на строку с именем фрейма
 4b: неизвестно
 4b: 0

Clump

 4b: количество адресов либо номер секции (для клампа = 2)
 4b: адрес первого фрейма
 4b: адрес первого атомика

Clump:Frame

 4b: количество адресов либо номер секции (для фрейма = 1)
 4b: переход на продолжение
 8b: нули
 4b: неизвестно
 4b: флаг

Список материалов

Информация будет добавлена позже...

MDL-версия

Информация будет добавлена позже...

WRLD-версия

Содержится исключительно в *.wrld и является сжатой по сравнению с *.mdl-версией для быстрого чтения и экономии памяти консоли. Вместо имён текстур содержит их id (хэши). Заголовок списка геометрии из *.mdl - количество материалов в *.mdl + размер секции в байтах без заголовка. Длина строки списка геометрии = 20 байт. Код строки на условном языке:

id текстуры[2], unknown1[2], множитель для U[2], множитель для V[2], unknown2[2], код оптимизации[10]

DTZ-версия

MDL-файлы, "вшитые" внутри DTZ-файла. Формат ничем не отличается, поэтому MDL importer может прочитать DTZ как MDL и импортировать модели.

Список геометрии

PSP-версия

Информация будет добавлена позже...

PS2-версия

Вся геометрия модели разбита на тристрипсы (поддержка тристрипсов присутствует и в DFF-файлах GTA: SA).

Чтение первого тристрипса в MDL начинается сразу после списка материалов. Началом чтения геометрии тристрипса служит флаг 6С018000. За флагом 2 раза повторяется количество вершинок в тристрипсе. Затем идёт технический сектор 40404020, который необходим для движка (для импорта модели он не важен).

Далее идут собственно блоки, содержащие элементы модели:

  • Блок 79 - Гео - содержит все координаты вершинок в тристрипсе. Одна координата закодирована 2мя байтами и представляет собой обычный множитель на размер ограничивающей модель коробки из клампа. Размер блока = заголовок блока (4 байта) + (XYZ (6 байтов) * количество вершинок в тристрипсе).

Блок геометрии заканчивается техническим блоком 50505020, который необходим для движка (для импорта модели он не важен).

  • Блок 76 - UV - содержит все координаты UV-маппинга в тристрипсе. Одна координата закодирована 1м байтом, вычисляется делением на 255 и умножением на 2 (иногда умножение на 2 не требуется - импортёр должен проверять получившуюся цифру после деления). Размер блока = заголовок блока (4 байта) + (UV (2 байта) * количество вершинок в тристрипсе).
  • Блок 6F - Прилайт GTA Stories - содержит RGBA для предварительного освещения вершинки. Используется только в GTA LCS и GTA VCS. Вычисляется по хитрой формуле AK-73. Размер блока = заголовок блока (4 байта) + (RGBA (2 байта) * количество вершинок в тристрипсе).
  • Блок 6A - Нормали - содержит все координаты векторов нормалей в трипстрипсе. Одна координата закодирована одним байтом и вычисляется делением на 127. Размер блока = заголовок блока (4 байта) + (XYZ (3 байта) * количество вершинок в тристрипсе).
  • Блок 6С - Скиннинг - содержит таблицу весов вершинок для их анимации. Это id косточки (1 байт) + её вес (3 байта). Соответственно, каждая вершинка содержит 4 id (т.е. в анимации она управляется 4 косточками). Размер блока = заголовок блока (4 байта) + ((id_weight (4 байта) * 4) * количество вершинок в тристрипсе.

Чтение следующего тристрипса начинается сразу же за флагом окончания тристрипса - 14000006. Общее количество тристрипсев в модели так же записано в клампе.

п · о · р
Lcs.png GTA Liberty City Stories Vcs.png GTA Vice City Stories
Форматы файлов.anim.at3.cam.chk/.xtx.col2.cut.dtz.ifp.img/.dir.irx.gxt.lvz.mdl.pss.raw/.sdt.scm.vb.wrld
ИнструментыApacheConsole Texture Explorer (PSP/PS2)GTA Stories IMG ToolGTA Stories Texture ViewerGTA Stories Texture Explorer
GTA Stories RAW EditorGXT EditorJPCSPMDL importerMF AudioPCSX2PPSSPPStories WRLD ToolGTA Stories Map Converter v1.0UMD GenYAIE
ТуториалыМоддинг VCS и LCS (PSP/PS2)Аудио на PSPАудио на PS2Спецификация версий PS2Конфигурирование PCSX2
ПК-версииVice City StoriesLiberty City Stories