MDL — различия между версиями
Материал из GTAModding.ru
Solom (обсуждение | вклад) |
|||
Строка 11: | Строка 11: | ||
PS2-версия MDL разобрана '''AK-73 aka Alex''', им же написан уникальный скрипт к [[3D Studio MAX]] для загрузки любого MDL PS2-версии (поддерживаются [[GTA LCS]], [[GTA VCS]] и [[Manhunt 2]]). Скрипт поддерживает импорт всех составляющих MDL, присутствует совместимость с [[GTA Tools]] для быстрой конверсии MDL в [[DFF]] (эта версия [[MDL importer]] со всеми исправленными ошибками остаётся закрытой для обычных пользователей, как собственно и остальные программы от LCS Team). | PS2-версия MDL разобрана '''AK-73 aka Alex''', им же написан уникальный скрипт к [[3D Studio MAX]] для загрузки любого MDL PS2-версии (поддерживаются [[GTA LCS]], [[GTA VCS]] и [[Manhunt 2]]). Скрипт поддерживает импорт всех составляющих MDL, присутствует совместимость с [[GTA Tools]] для быстрой конверсии MDL в [[DFF]] (эта версия [[MDL importer]] со всеми исправленными ошибками остаётся закрытой для обычных пользователей, как собственно и остальные программы от LCS Team). | ||
− | PC-версия MDL никем не разбиралась. Судя по первому впечатлению, Рокстары усложнили формат, сделав его более похожим на форматы | + | PC-версия MDL никем не разбиралась. Судя по первому впечатлению, Рокстары усложнили формат, сделав его более похожим на форматы движка RAGE. Используется исключительно в [[Manhunt 2]]. |
== Структура == | == Структура == | ||
− | [[Изображение:Tri-Strip.png|200px|thumb|right|Изображение одного | + | [[Изображение:Tri-Strip.png|200px|thumb|right|Изображение одного тристрипса]] |
Общее для всех MDL - наличие глобального заголовка и заголовка Атомика. Остальные секции MDL строго специфические для каждой из поддерживаемых платформ - PSP, PS2 и PC. | Общее для всех MDL - наличие глобального заголовка и заголовка Атомика. Остальные секции MDL строго специфические для каждой из поддерживаемых платформ - PSP, PS2 и PC. | ||
Строка 43: | Строка 43: | ||
Содержится исключительно в WRLD и является сжатой по сравнению с MDL-версией для быстрого чтения и экономии памяти консоли. Вместо имён текстур содержит их id (хэши). Заголовок списка геометрии из WRLD читает программа [[GTA Stories WRLD Tool]] - количество материалов в MDL + размер секции в байтах без заголовка. Длина строки списка геометрии = 20 байт. Код строки на условном языке: | Содержится исключительно в WRLD и является сжатой по сравнению с MDL-версией для быстрого чтения и экономии памяти консоли. Вместо имён текстур содержит их id (хэши). Заголовок списка геометрии из WRLD читает программа [[GTA Stories WRLD Tool]] - количество материалов в MDL + размер секции в байтах без заголовка. Длина строки списка геометрии = 20 байт. Код строки на условном языке: | ||
− | <source lang="scm">id текстуры[2], | + | <source lang="scm">id текстуры[2], unknown1[2], множитель для U[2], множитель для V[2], unknown2[2], код оптимизации[10] </source> |
==Список геометрии== | ==Список геометрии== | ||
Строка 51: | Строка 51: | ||
====PS2-версия==== | ====PS2-версия==== | ||
− | Вся геометрия модели разбита на тристрипсы (поддержка тристрипсев присутствует и в [[DFF]] начиная и заканчивая [[GTA SA]]). | + | Вся геометрия модели разбита на тристрипсы (поддержка тристрипсев присутствует и в [[DFF]], начиная и заканчивая [[GTA SA]]). |
Чтение первого тристрипса в MDL начинается сразу после списка материалов. Началом чтения геометрии тристрипса служит флаг 6С018000. За флагом 2 раза повторяется количество вершин в тристрипсе. Затем идёт технический сектор 40404020, который необходим для движка (для импорта модели он не важен). | Чтение первого тристрипса в MDL начинается сразу после списка материалов. Началом чтения геометрии тристрипса служит флаг 6С018000. За флагом 2 раза повторяется количество вершин в тристрипсе. Затем идёт технический сектор 40404020, который необходим для движка (для импорта модели он не важен). | ||
Строка 65: | Строка 65: | ||
* Блок 6F - '''Pre-Light''' - содержит RGBA для предварительного освещения вершинки. Вычисляется по хитрой формуле AK-73. Размер блока = заголовок блока (4 байта) + (RGBA (2 байта) * количество вершин в тристрипсе). | * Блок 6F - '''Pre-Light''' - содержит RGBA для предварительного освещения вершинки. Вычисляется по хитрой формуле AK-73. Размер блока = заголовок блока (4 байта) + (RGBA (2 байта) * количество вершин в тристрипсе). | ||
− | * Блок 6Е - ''' | + | * Блок 6Е - '''Unknown''' - блок, добавленный в MDL в [[Manhunt 2]]. Не разобран. Размер блока = 4 байта, в котором хранится количество вершинок в тристрипсе. |
− | * Блок 6A - '''Normals''' - содержит все | + | * Блок 6A - '''Normals''' - содержит все координаты векторов нормалей в трипстрипсе. Одна координата закодирована одним байтом и вычисляется делением на 127. Размер блока = заголовок блока (4 байта) + (XYZ (3 байта) * количество вершин в тристрипсе). |
* Блок 6С - '''Skin''' - содержит таблицу весов вершинок для их анимации. Это id косточки (1 байт) + её вес (3 байта). Соответственно, каждая вершинка содержит 4 id (т.е. в анимации она управляется 4 косточками). Размер блока = заголовок блока (4 байта) + ((id_weight (4 байта) * 4) * количество вершин в тристрипсе. | * Блок 6С - '''Skin''' - содержит таблицу весов вершинок для их анимации. Это id косточки (1 байт) + её вес (3 байта). Соответственно, каждая вершинка содержит 4 id (т.е. в анимации она управляется 4 косточками). Размер блока = заголовок блока (4 байта) + ((id_weight (4 байта) * 4) * количество вершин в тристрипсе. |
Версия 15:16, 27 февраля 2012
MDL – условное обозначение формата (не путайте его с другими MDL, содержащимися например в Gothic или Half-Life2), в которых хранятся откомпилированные данные игровых моделей для GTA LCS, GTA VCS и Manhunt 2. Формат MDL жёстко привязан к игровой платформе, т.е. не является кроссплатформенным в отличие от DFF, использовавшегося в предыдущих играх серии GTA до покупки RenderWare фирмой EA Games.
Содержание |
Основные данные
PSP-версия MDL была разобрана J-Fox, им же написана программа, читающая структуру MDL с рендерингом геометрии, UV-координат с текстурами из CHK. Как и остальной многочисленный софт для сториесов, программа от J-Fox не была выпущена.
PS2-версия MDL разобрана AK-73 aka Alex, им же написан уникальный скрипт к 3D Studio MAX для загрузки любого MDL PS2-версии (поддерживаются GTA LCS, GTA VCS и Manhunt 2). Скрипт поддерживает импорт всех составляющих MDL, присутствует совместимость с GTA Tools для быстрой конверсии MDL в DFF (эта версия MDL importer со всеми исправленными ошибками остаётся закрытой для обычных пользователей, как собственно и остальные программы от LCS Team).
PC-версия MDL никем не разбиралась. Судя по первому впечатлению, Рокстары усложнили формат, сделав его более похожим на форматы движка RAGE. Используется исключительно в Manhunt 2.
Структура
Общее для всех MDL - наличие глобального заголовка и заголовка Атомика. Остальные секции MDL строго специфические для каждой из поддерживаемых платформ - PSP, PS2 и PC.
Основные термины:
Tri-Strips (Тристрипсы) - Это серия связанных треугольников и вершин. Специально используется в играх данной серии для быстрого рендеринга.
Pre-Light - Предварительное освещение модели во время рендеринга модели.
Глобальный заголовок
Информация будет добавлена позже...
Atomic
Информация будет добавлена позже...
Clump
Информация будет добавлена позже...
Список материалов
MDL-версия
Информация будет добавлена позже...
WRLD-версия
Содержится исключительно в WRLD и является сжатой по сравнению с MDL-версией для быстрого чтения и экономии памяти консоли. Вместо имён текстур содержит их id (хэши). Заголовок списка геометрии из WRLD читает программа GTA Stories WRLD Tool - количество материалов в MDL + размер секции в байтах без заголовка. Длина строки списка геометрии = 20 байт. Код строки на условном языке:
id текстуры[2], unknown1[2], множитель для U[2], множитель для V[2], unknown2[2], код оптимизации[10]
Список геометрии
PSP-версия
Информация будет добавлена позже...
PS2-версия
Вся геометрия модели разбита на тристрипсы (поддержка тристрипсев присутствует и в DFF, начиная и заканчивая GTA SA).
Чтение первого тристрипса в MDL начинается сразу после списка материалов. Началом чтения геометрии тристрипса служит флаг 6С018000. За флагом 2 раза повторяется количество вершин в тристрипсе. Затем идёт технический сектор 40404020, который необходим для движка (для импорта модели он не важен).
Далее идут собственно блоки, содержащие элементы модели:
- Блок 79 - Geo - содержит все координатки вершин в тристрипсе. Одна координата закодирована 2мя байтами и представляет собой обычный множитель на размер ограничивающей модель коробки из клампа. Размер блока = заголовок блока (4 байта) + (XYZ (6 байтов) * количество вершин в тристрипсе).
Блок геометрии заканчивается техническим блоком 50505020, который необходим для движка (для импорта модели он не важен).
- Блок 76 - UV - содержит все координатки UV-маппинга в тристрипсе. Одна координата закодирована 1м байтом, вычисляется делением на 255 и умножением на 2 (иногда умножение на 2 не требуется - импортёр должен проверять получившуюся цифру после деления). Размер блока = заголовок блока (4 байта) + (UV (2 байта) * количество вершин в тристрипсе).
- Блок 6F - Pre-Light - содержит RGBA для предварительного освещения вершинки. Вычисляется по хитрой формуле AK-73. Размер блока = заголовок блока (4 байта) + (RGBA (2 байта) * количество вершин в тристрипсе).
- Блок 6Е - Unknown - блок, добавленный в MDL в Manhunt 2. Не разобран. Размер блока = 4 байта, в котором хранится количество вершинок в тристрипсе.
- Блок 6A - Normals - содержит все координаты векторов нормалей в трипстрипсе. Одна координата закодирована одним байтом и вычисляется делением на 127. Размер блока = заголовок блока (4 байта) + (XYZ (3 байта) * количество вершин в тристрипсе).
- Блок 6С - Skin - содержит таблицу весов вершинок для их анимации. Это id косточки (1 байт) + её вес (3 байта). Соответственно, каждая вершинка содержит 4 id (т.е. в анимации она управляется 4 косточками). Размер блока = заголовок блока (4 байта) + ((id_weight (4 байта) * 4) * количество вершин в тристрипсе.
Чтение следующего тристрипса начинается сразу же за флагом окончания тристрипса - 14000006. Общее количество тристрипсев в модели так же записано в Clump'e.
PC (Windows) версия
Информация будет добавлена позже...