MDL file
From Wiki
Holy Diver (talk | contribs) m |
m (moved MDL (file format) to MDL file) |
||
(42 intermediate revisions by 17 users not shown) | |||
Line 1: | Line 1: | ||
− | + | '''MDL''' is the file format employed by [[Sword of Moonlight]] when something is to be animated. It's counterpart is [[MDO]]. Tools were provided by [[From Software]] for working with MDO files. However, no analogous tools were ever provided for MDL. MDO appears to be incapable of locomotive animation, despite having some simple texture based animation ability, which MDL may well not enjoy. MDL does the rest. | |
− | + | ||
+ | ==History== | ||
+ | |||
+ | Despite having tools to work with MDO files, the format itself remains a black box. Since the MDL format on the other hand had been completely inaccessible for nearly a decade, greater priority has been given to figuring it out. The file format was first reverse engineered sometime in the latter half of 2010. There has been no official statement, however there has been a claim that on at least one occasion, a From Software customer relations spokesperson did state via email, paraphrasing, any attempt to reverse engineer Sword of Moonlight file formats is OK with the company. | ||
+ | |||
+ | Even though importers and exporters (export from MDL would come later) were developed around the same time the format had become well understood, there was no party invested enough in creating original MDL compatible models until the mid months of 2011. Efforts so far remain in the immature stages while a fully realized outcome appears inevitable. | ||
+ | |||
+ | ==Characteristics== | ||
+ | |||
+ | An MDL file is a relatively simple, piecewise model, with limited texture mapping possibilities. There are two flavor of animation, [[Tinman]] and [[Scarecrow]]. Tinman animations move like an animated suit of armor, or a wooden puppet come to life. Scarecrow on the other hand, move like a sack doll, or anything really with some degree of flexibility. | ||
+ | |||
+ | ==Specification== | ||
+ | This section describes the file format in an intimate way, which the average reader might prefer to dismiss. It should be understood that the specification below, is more like documentation, and a reverse engineered one at that. Note that some more technical aspects may be offloaded to subpages linked to from within. If you want to make MDL files, it will probably be a favor to yourself to look this over well. | ||
+ | |||
<fieldset class="spec"> | <fieldset class="spec"> | ||
<legend class="caps"> | <legend class="caps"> | ||
− | ==Header== | + | ===Header=== |
</legend> | </legend> | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 55: | Line 68: | ||
<legend class="tech">1st PRIMITIVE CHANNEL | <legend class="tech">1st PRIMITIVE CHANNEL | ||
− | ==Primitive channels== | + | ===Primitive channels=== |
</legend> | </legend> | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 90: | Line 103: | ||
These three 32bit{{dagger}} values account for the number of elements expected to be found within the data indicated by VB, NB, PB respectively. | These three 32bit{{dagger}} values account for the number of elements expected to be found within the data indicated by VB, NB, PB respectively. | ||
− | {{dagger|The alignment is 32bit, the values themselves may be 16bit.}} | + | {{dagger|The alignment is 32bit, the values themselves may be 16bit (this possibility remains untested.)}} |
</fieldset> | </fieldset> | ||
Line 102: | Line 115: | ||
<legend class="tech">3D PRIMITIVES BLOCK | <legend class="tech">3D PRIMITIVES BLOCK | ||
− | ==3D primitives== | + | ===3D primitives=== |
</legend> | </legend> | ||
{{main|3D Primitive}} | {{main|3D Primitive}} | ||
+ | {{Under construction}} | ||
</fieldset> | </fieldset> | ||
<fieldset class="spec"> | <fieldset class="spec"> | ||
<legend class="tech">PER VERTEX LOCATION BLOCK | <legend class="tech">PER VERTEX LOCATION BLOCK | ||
− | ==Per vertex location== | + | ===Per vertex location=== |
</legend> | </legend> | ||
{{main|3D Vertex#Location}} | {{main|3D Vertex#Location}} | ||
Line 124: | Line 138: | ||
<fieldset class="spec"> | <fieldset class="spec"> | ||
<legend class="tech">PER VERTEX LIGHTING BLOCK | <legend class="tech">PER VERTEX LIGHTING BLOCK | ||
− | ==Per vertex lighting== | + | ===Per vertex lighting=== |
</legend> | </legend> | ||
{{main|3D Vertex#Lighting}} | {{main|3D Vertex#Lighting}} | ||
Line 141: | Line 155: | ||
<fieldset class="spec"> | <fieldset class="spec"> | ||
<legend class="tech">Tinman ANIMATIONS BLOCK | <legend class="tech">Tinman ANIMATIONS BLOCK | ||
− | ==Tinman animations== | + | ===Tinman animations=== |
</legend> | </legend> | ||
{{main|Tinman animation}} | {{main|Tinman animation}} | ||
Line 159: | Line 173: | ||
<ifieldset class="spec"> | <ifieldset class="spec"> | ||
<legend class="tech">1st Tinman ANIMATION | <legend class="tech">1st Tinman ANIMATION | ||
− | ===Animations by ID=== | + | ====Animations by ID==== |
</legend> | </legend> | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 175: | Line 189: | ||
<ifieldset class="spec"> | <ifieldset class="spec"> | ||
<legend class="caps"> | <legend class="caps"> | ||
− | ===The animation frame buffer=== | + | ====The animation frame buffer==== |
</legend> | </legend> | ||
+ | {{main|/Algorithm A (Tinman codec)}} | ||
+ | |||
+ | The Tinman frame buffer model lacks a definite structure. It is instead a kind of specialized compression algorithm. For a precise definition, there is [[MDL (file format)/Algorithm A (Tinman codec)]]. | ||
+ | |||
+ | How it works in a nutshell; there is a sequence of variable length frames, which are themselves comprised of a sequence of variable length channel operations. Unaffected channels are omitted per frame. And in general the affect upon the channel for that frame is proportional to the amount of bytes consumed by that operation. Each operation upon a channel is accumulated frame by frame until the animation runs its course. | ||
+ | The word length of the frame buffer in total is not part of the MDL format. It is necessary to traverse the coarsest level of granularity afforded the frame buffer model in order to compute it. Or in fact to arrive at the end of the the animation itself. Which is where you will find the next animation, and so on, until the last animation indicated in the [[#Header]] is encountered. | ||
+ | |||
+ | The first channel operation sequence of the first frame of the first animation includes some additional information which describes a skeletal hierarchy by ID. IDs up to the number of [[#Primitive channels]] indicated by the header refer to the primitive channels themselves per each ''sub header''. Subsequent IDs refer to until hence undefined animation-only channels, ie. lacking geometry. | ||
+ | |||
+ | Each channel operation has the net effect of transforming (eg. translating and rotating) its assigned channel little by little something like stop-motion animation. | ||
</ifieldset> | </ifieldset> | ||
Line 191: | Line 215: | ||
<legend class="tech">Scarecrow ANIMATIONS BLOCK | <legend class="tech">Scarecrow ANIMATIONS BLOCK | ||
− | ==Scarecrow animations== | + | ===Scarecrow animations=== |
</legend> | </legend> | ||
{{main|Scarecrow animation}} | {{main|Scarecrow animation}} | ||
+ | {{Under construction}} | ||
</fieldset> | </fieldset> | ||
<fieldset class="spec"> | <fieldset class="spec"> | ||
<legend class="tech">1st PlayStation .TIM IMAGE | <legend class="tech">1st PlayStation .TIM IMAGE | ||
− | ==TIM imaging== | + | ===TIM imaging=== |
</legend> | </legend> | ||
{{main|TIM (file format)}} | {{main|TIM (file format)}} | ||
Line 208: | Line 233: | ||
<legend>Nth PlayStation .TIM IMAGE</legend> | <legend>Nth PlayStation .TIM IMAGE</legend> | ||
</fieldset> | </fieldset> | ||
+ | |||
+ | ==See also== | ||
+ | *[[/Appendix A (animation IDs)]] | ||
+ | *[[x2mdl]] | ||
[[Category:Sword of Moonlight]] | [[Category:Sword of Moonlight]] | ||
[[Category:File formats]] | [[Category:File formats]] |
Latest revision as of 05:19, 21 August 2013
MDL is the file format employed by Sword of Moonlight when something is to be animated. It's counterpart is MDO. Tools were provided by From Software for working with MDO files. However, no analogous tools were ever provided for MDL. MDO appears to be incapable of locomotive animation, despite having some simple texture based animation ability, which MDL may well not enjoy. MDL does the rest.
Contents
History[edit]
Despite having tools to work with MDO files, the format itself remains a black box. Since the MDL format on the other hand had been completely inaccessible for nearly a decade, greater priority has been given to figuring it out. The file format was first reverse engineered sometime in the latter half of 2010. There has been no official statement, however there has been a claim that on at least one occasion, a From Software customer relations spokesperson did state via email, paraphrasing, any attempt to reverse engineer Sword of Moonlight file formats is OK with the company.
Even though importers and exporters (export from MDL would come later) were developed around the same time the format had become well understood, there was no party invested enough in creating original MDL compatible models until the mid months of 2011. Efforts so far remain in the immature stages while a fully realized outcome appears inevitable.
Characteristics[edit]
An MDL file is a relatively simple, piecewise model, with limited texture mapping possibilities. There are two flavor of animation, Tinman and Scarecrow. Tinman animations move like an animated suit of armor, or a wooden puppet come to life. Scarecrow on the other hand, move like a sack doll, or anything really with some degree of flexibility.
Specification[edit]
This section describes the file format in an intimate way, which the average reader might prefer to dismiss. It should be understood that the specification below, is more like documentation, and a reverse engineered one at that. Note that some more technical aspects may be offloaded to subpages linked to from within. If you want to make MDL files, it will probably be a favor to yourself to look this over well.