DMX: Difference between revisions
TomEdwards (talk | contribs) (Created page with ''''DMX''' (Data Model eXtensible? Data Matrix?) is a binary file format used in newer Valve technologies. It appears to be a generic replacement for ASCII forma…') |
TomEdwards (talk | contribs) (→Models) |
||
Line 15: | Line 15: | ||
DMX model source files are presumably generated by Valve's [[Maya]] plugin. Some editing options are available with the Source 2009 tool <code>dmxedit</code>, including export to OBJ (unweighted, no animations). | DMX model source files are presumably generated by Valve's [[Maya]] plugin. Some editing options are available with the Source 2009 tool <code>dmxedit</code>, including export to OBJ (unweighted, no animations). | ||
* To use dmxedit, your must first create an empty file called <code>vs.lua</code> in the SDK binaries folder. It isn't clear what's meant to be in here. | |||
* You must then create a LUA file containing the actions you want to perform. Here is a simple example that exports to OBJ: | |||
<source lang=lua> | |||
Load( "<path_to_dmx>" ) | |||
Save("<export_path>.obj") | |||
</source> | |||
* Perform <code>dmxedit myfile.lua</code> to run the script. | |||
If export a mesh DMX to OBJ you will get a single file. If you export a morph DMX you will get one OBJ for each flex animation that was in the file. If you chose an animation you will get nothing; it seems that dmxedit doesn't support animations. | |||
== Programming == | == Programming == |
Revision as of 09:22, 10 December 2010
DMX (Data Model eXtensible? Data Matrix?) is a binary file format used in newer Valve technologies. It appears to be a generic replacement for ASCII formats like SMD or VDF. Currently it has two known uses: Particle systems (.pcf
) and model source data (.dmx
).
DMX has several advantages over VDF. It is:
- Efficient, especially when storing large ints or accurate floats
- Generic, and able to store most memory structures
- Robust, since it does not have to worry about delimiters, line breaks or unclosed quote blocks
Using DMX
With DMX being a binary format, it is not practical either to infer how a given file works from reading it, or to alter one by hand. When the tools for reading/writing them aren't publicly available, this is a problem!
Models
DMX model source files are presumably generated by Valve's Maya plugin. Some editing options are available with the Source 2009 tool dmxedit
, including export to OBJ (unweighted, no animations).
- To use dmxedit, your must first create an empty file called
vs.lua
in the SDK binaries folder. It isn't clear what's meant to be in here. - You must then create a LUA file containing the actions you want to perform. Here is a simple example that exports to OBJ:
Load( "<path_to_dmx>" )
Save("<export_path>.obj")
- Perform
dmxedit myfile.lua
to run the script.
If export a mesh DMX to OBJ you will get a single file. If you export a morph DMX you will get one OBJ for each flex animation that was in the file. If you chose an animation you will get nothing; it seems that dmxedit doesn't support animations.
Programming
#include "cbase.h"
#include "dmxloader/dmxloader.h"
#include "dmxloader/dmxelement.h"
CON_COMMAND(test_dmx, "Loads and interprets a DMX file")
{
DECLARE_DMX_CONTEXT();
CDmxElement* DMX = (CDmxElement*)DMXAlloc( 50000000 );
CUtlBuffer buf;
if (UnserializeDMX(args[1],"MOD",false,&DMX))
{
for (int i=0;i<DMX->AttributeCount();i++)
{
CDmxAttribute* cur = DMX->GetAttribute(i);
Msg("%s\t%i\n",cur->GetName(),cur->AttributeDataSize(cur->GetType()));
}
SerializeDMX(buf,DMX);
// write buf to file
}
else
Warning("Could not read DMX file %s\n",args[1]);
}