ef2-ubertools-gdk/Documentation/content/fakk2_max2skl.html
2003-08-18 00:00:00 +00:00

450 lines
24 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ÜberTools Game Development Kit</title>
<link rel="stylesheet" href="style.css">
<script type="text/javascript">
/***********************************************
* Switch Menu script- by Martial B of http://getElementById.com/
* Modified by Dynamic Drive for format & NS4/IE4 compatibility
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
if (document.getElementById){ //DynamicDrive.com change
document.write('<style type="text/css">\n')
document.write('.submenu{display: none;}\n')
document.write('</style>\n')
}
function SwitchMenu(obj){
if(document.getElementById){
var el = document.getElementById(obj);
var ar = document.getElementById("masterdiv").getElementsByTagName("span"); //DynamicDrive.com change
if(el.style.display != "block"){ //DynamicDrive.com change
for (var i=0; i<ar.length; i++){
if (ar[i].className=="submenu") //DynamicDrive.com change
ar[i].style.display = "none";
}
el.style.display = "block";
}else{
el.style.display = "none";
}
}
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<a name="top"></a>
<table width="702" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3"><img src="../images/header.jpg" width="702" height="101" border="0"></td>
</tr>
<tr>
<td width=158 valign="top"><table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" class="menu">
<!-- Keep all menus within masterdiv-->
<div id="masterdiv">
<img src="../images/navigation.jpg" width="158" height="27"><br>
UberTools GDK
<div class="menutitle" onclick="SwitchMenu('sub0')">&raquo; Introduction &amp; Contents</div>
<span class="submenu" id="sub0">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="../start.html">Introduction</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="../start.html#2">Utilities</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="../start.html#3">Source Files</a><br>
</span>
<br>Level Design<br>
<div class="menutitle" onclick="SwitchMenu('sub1')">&raquo; Setting Up UberRadiant</div>
<span class="submenu" id="sub1">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html">That Scary Error Msg</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#2">General Tab</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#3">Display Tab</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#4">User Interface Tab</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#5">Keyboard Shortcuts Tab</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#6">Colors Tab</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_setup.html#7">Game / Paths Tab</a><br>
</span>
<div class="menutitle" onclick="SwitchMenu('sub2')">&raquo; Building Your First Room</div>
<span class="submenu" id="sub2">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html">Editor Interface Basics</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#2">Choosing Your Textures</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#3">Building The Room</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#4">Adding a Light</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#5">Adding a Player Start</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#6">Compiling Your Level</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_firstroom.html#7">Viewing the Level</a><br>
</span>
<div class="menutitle" onclick="SwitchMenu('sub3')">&raquo; Constructing Terrain</div>
<span class="submenu" id="sub3">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_terrain.html">Setting up the Tools</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_terrain.html#2">Creating Terrain</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_terrain.html#3">Modifying the Textures</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="radiant_terrain.html#4">Adding More Terrain</a><br>
</span>
<div class="menutitle" onclick="SwitchMenu('sub4')">&raquo; Additional Reference</div>
<span class="submenu" id="sub4">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="ldesign_lighting.html">Lighting System</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="ldesign_terrain.html">Terrain Texture Blending</a><br>
</span>
<br>Scripting<br>
<div class="menutitle" onclick="SwitchMenu('sub5')">&raquo; Scripting Tutorials</div>
<span class="submenu" id="sub5">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_syntax.html">Scripting Syntax</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_waves.html">Spawning Waves</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_flying.html">Creating Flying Creatures</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_tripwires.html">Setting Up Tripwires</a><br>
</span>
<div class="menutitle" onclick="SwitchMenu('sub6')">&raquo; Global Script Synopsis</div>
<span class="submenu" id="sub6">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts.html">Introduction</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_accelmove.html">global_accelerated</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_accelmove.html">Movement.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_archetype.html">global_archetype.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_array.html">global_array.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_cinefx.html">global_cinematicFX.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_common.html">global_common.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_debug.html">global_debugUtils.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_flyin.html">global_flyin.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_math.html">global_math.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_ploadout.html">global_playerLoadout.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_soundpan.html">global_soundPan.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_spawnwave.html">global_spawnWave.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_transport.html">global_Transport.scr</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="scripting_globalscripts_tripwire.html">global_tripwire.scr</a><br>
</span>
<div class="menutitle" onclick="SwitchMenu('sub7')">&raquo; Classes Reference</div>
<span class="submenu" id="sub7">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="allclasses_g.html">Game Module</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="allclasses_cl.html">Client Module</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="allclasses_cg.html">Client Game Module</a><br>
</span>
<br>Older Documentation<br>
<div class="menutitle" onclick="SwitchMenu('sub8')">&raquo; Heavy Metal FAKK2</div>
<span class="submenu" id="sub8">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_camera.html">Camera Documentation</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_clientsidecmds.html">Client Side Commands</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_gui.html">GUI Documentation</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_ingameutils.html">In-Game Utilities</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_max2skl.html">MAX2SKL Reference</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_shadermanual.html">Shader Manual</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_soundsystem.html">Sound System</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="fakk2_tiki.html">TIKI Model System</a><br>
</span>
<br>Other<br>
<div class="menutitle" onclick="SwitchMenu('sub9')">&raquo; Web Links &amp; Credits</div>
<span class="submenu" id="sub9">
&nbsp;&nbsp;&nbsp;&nbsp;<a href="other_links.html">Web Links</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="other_credits.html">Credits</a><br>
</span>
</div>
</td>
</tr>
</table></td>
<td width="13" background="../images/vert_line.jpg"><img src="../images/vert_line.jpg" width="13" height="1"></td>
<td valign="top" width="533"><p class="header"><br>
MAX2SKL Reference Guide </p>
<p class="subheader"> Overview</p>
<p> Max2skl is a command line utility for converting .SKL files into a form
usable by the Tiki model system. .SKL files are text-based model files
exported from 3DS Max using SkelOut. Having the functionality of Max2skl
as a separate program from the exporter allows changes in model format
without requiring the artists to re-export their models.</p>
<p>Max2skl will check the file times of the source and destination file
and only rebuild them if they differ. This reduces runtime when running
Max2skl from a batch file that converts a lot of animations when only
a few have changed.</p>
<p class="subheader"> File formats</p>
<p> Each .SKL file contains a list of material identifiers, a list of bones
in the model, triangle and vertex assignments, and any number of frames
of animation. Being text-based allows .SKL files to be viewed or edited
in a text editor, making diagnosing problems in models more convenient.</p>
<p>Max2skl exports two types of files: .SKA and .SKB. SKB files contain
the definitions of the bone heirarchy, vertex weights, surfaces, triangles,
and level of detail (LOD). SKA files contain only the bone animation info.</p>
<p class="subheader"> SKB Files</p>
<p> SKB files are created from the model&#8217;s baseframe. Each model only
needs one SKB file. The baseframe is the .SKL file that has the model
posed in such a way as to create the best LOD information possible. The
order that triangles are removed as the model is lowered in detail is
based upon the length of the edges and the orientation of neighboring
triangles. Triangles with very short edges or whose orientation differs
the least from triangles that share the same edge are chosen first. Edges
that are seams (either the triangle has a different texture from its neighbor,
or doesn&#8217;t have a neighbor) can not be removed, and so limit how
low detail the model can go.</p>
<p>In order to create the best LOD information, models should be posed such
that important joints are bent so that triangles at those joints reduce
detail last. For example, if a model&#8217;s arms are kept straight in
the baseframe, then when the model reduces in detail the upper arm and
forearm will appear to have webbing between them, like a bat. Bending
the arms in the baseframe will help Max2skl choose more appropriate triangles
when lowering detail.</p>
<p>Since the SKB file also contains the definition of the bone heirarchy,
if the order of the bones are changed, or the bones are renamed, then
the SKB file should be recreated to reflect the changes. Also, while changing
the bone names is harmless, if the bone order changes in the SKB file,
you should rebuild the SKA files to make sure the bone order is the same
in them.</p>
<p>The names and triangles contained in each surface are stored in the SKB
file. When surface names or IDs change in the SKL file, you should rerun
Max2skl to recreate the baseframe to reflect the change.</p>
<p>The Tiki model system allows separate animations to play on the torso
and legs of the model. To do mark bones in the model as &#8220;leg bones&#8221;
(that is, bones that will use the leg animations as opposed to the torso
animation). this, you must edit the baseframe&#8217;s SKL file and change
the bone definitions from &#8220;Bone&#8221; to &#8220;Legbone&#8221;.
Here&#8217;s an example of a changed SKL file: </p>
<blockquote>
<p class="menu">//////////////////////////////////////////////////////////////////////////<br>
//<br>
// Exported by FAKK2 Skeleton export, Version 1.00.<br>
//<br>
//////////////////////////////////////////////////////////////////////////<br>
<br>
SKELETON<br>
VERSION 1<br>
<br>
NUMMATERIALS 1<br>
MATERIAL 1 material1<br>
<br>
NUMBONES 85<br>
LEGBONE 0 -1 Bip01<br>
LEGBONE 1 0 Bip01 Footsteps<br>
LEGBONE 2 0 Bip01 Pelvis<br>
LEGBONE 3 2 Bip01 Spine<br>
BONE 4 3 Bip01 Spine1<br>
BONE 5 4 Bip01 Spine2<br>
BONE 6 5 Bip01 Neck<br>
.<br>
.<br>
.</p>
</blockquote>
<p>Bones that should be marked as leg bones are not always grouped together;
it depends upon the hierarchy. Usually any bone that is below the spine
is a good start. Check the model in the game and see if the animation
looks right when another animation is playing in the torso.</p>
<p class="subheader"> SKA Files</p>
<p> SKA files contain only animation information. You should have at least
one SKA for each animation in the model. SKAs contain bone animation information
and movement deltas for each frame.</p>
<p>Movement deltas are created by measuring the movement of the specified
origin bone. By default, the bone named &#8220;origin&#8221; is expected,
but you can use the &#8211;origin parameter to specify a different bone.
No matter where the origin bone is in any frame of the original animation,
it will be moved to (0, 0, 0) in the model&#8217;s coordinate space, with
all other bones still in the same relative position around it. When the
model is animated in the game, it will simply sit in place if the game
physics doesn&#8217;t apply the movement deltas to the position. Using
this method we are able to remove any sliding of the character&#8217;s
feet on the ground.</p>
<p class="subheader">Tags</p>
<p> Tags are special triangles placed in the model to indicate attachment
points on the model. These work the same way as they did in the vertex
animation format that Tiki uses (.TAN) and you should refer to the Tiki
document for an explanation of them. The difference between tags in vertex
animated models and tags in skeleton animated models is that tags are
turned into bones in skeleton models. In the case where there is already
a bone with the same name as the tag, the tag will override the bone.
Another consequence of this is that all bones are available as tags in
the game, so extra tags only need to be added if a bone doesn&#8217;t
exist in the appropriate location.</p>
<p class="subheader"> Command line options</p>
<p> max2skl animname [-uv filename] [-force] [-scale num] [-dest name]<br>
[-ignore filename] [-origin originname] [-reverse]<br>
[-verbose] [-nolod] [-noclampz] [-zeroz] [-noorigin]<br>
[-clearz] [-clearxy] [-baseframe] [-maxbones num]<br>
[-weightthreshold num] [-md4] [-bones filename]<br>
[-offset x y z] [-clearx] [-cleary] [-loop]<br>
[-zerox] [-zeroy] [-uvb filename] [-destdir dirname]<br>
[-ignoreflags]</p>
<p>The parameters are as follows:</p>
<ul type="square">
<li><b>animname</b><br>
This is the name of a SKL file created by SKELOUT.<br>
<br>
</li>
<li> <b>-uv filename</b><br>
This specifies a SKL file to copy the texture coordinates, material
names and surface IDs from. This is useful for when you have model exported
before you&#8217;ve textured it.<br>
<br>
</li>
<li><b>-force</b><br>
Causes MAX2SKL to re-process the animation regardless of what the time
and date of the destination file is.<br>
<br>
</li>
<li><b> -scale num</b><br>
Specify a scale to be used when converting the file. The default scale
is 1.<br>
<br>
</li>
<li><b> -dest filename</b><br>
Specify an alternate destination name for the SKA for SKB file. Normally
the destination file shares the same name as the animname but with a
SKA or SKB extension. Note that the directory remains the same.<br>
<br>
</li>
<li><b> -ignore filename</b><br>
Specify an external file which contains a list of surfaces to ignore
when grabbing this model. This is used extensively when grabbing a multi-part
model.<br>
<br>
</li>
<li><b> -origin originname</b><br>
Specify an alternate surface name for the origin. Normally, the origin
surface is simply called &#8220;origin&#8221;, this allows one to choose
an alternate surface name for the origin. This is used extensively when
grabbing a multi-part model.<br>
<br>
</li>
<li><b> -reverse</b><br>
Reverse the order of frames of the animation.<br>
<br>
</li>
<li><b> -verbose</b><br>
Output a lot of information while processing the model.<br>
<br>
</li>
<li><b> -nolod</b><br>
Do not create an LOD mapping for this model.<br>
<br>
</li>
<li><b> -noclampz</b><br>
By default, the Z component of the origin tag is clamped to only positive
and zero values. If you would like to allow negative Z values, use this
option.<br>
<br>
</li>
<li><b> -zeroz</b><br>
Always set the Z component of the origin tag to zero.<br>
<br>
</li>
<li><b> -noorigin</b><br>
Don&#8217;t subtract the origin&#8217;s position from the model&#8217;s
position. No movement deltas are produced.<br>
<br>
</li>
<li><b> -clearz</b><br>
Specifies that Z movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -clearxy</b><br>
Specifies that X and Y movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -baseframe</b><br>
Save the model as SKB. The SKB file contains the bone definitions, the
surfaces, texture coordinates, triangles, and the LOD mapping.<br>
<br>
</li>
<li><b> -maxbones num</b><br>
Limit the number of bones that can affect a vertex to num per vertex.
The num most influential bones will be used. The default (and maximum)
is 8.<br>
<br>
</li>
<li><b> -weightthreshold weight</b><br>
Limit the minimum influence a bone must have to be included in a vertex.
Any with less influence will not affect the vertex. The default value
is 0.01.<br>
<br>
</li>
<li><b> -md4</b><br>
Save the model as an MD4 file. MD4 files are Quake 3 skeleton models.
This was implemented for Quake 3, but was never used.<br>
<br>
</li>
<li><b> -bones filename</b><br>
Use the bone heirarchy from the specified file. This is used when the
hierarchy changes somehow, usually due to bones being unlinked from
the hierarchy in Max for animation reasons. Since MAX2SKL doesn&#8217;t
know anything about animations other than the one it&#8217;s currently
working on, it can&#8217;t guarantee that the names of the bones, or
the order of the bones, hasn&#8217;t changed from one animation to the
next. If you always specify this and use the baseframe as the source,
you will be assured that the animations always have the same number
of bones and the same heirarchy.<br>
<br>
</li>
<li><b> -offset x y z</b><br>
Offsets the model by the specified amount. This is useful for when animations
are animated at different heights or using different origin tags.<br>
<br>
</li>
<li><b> -clearx</b><br>
Specifies that X movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -cleary</b><br>
Specifies that Y movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -loop</b><br>
Drops the last frame of the animation. This allows MAX2SKL to properly
calculate deltas on looped animations. The last frame in the animation
should be the pose as the first frame.<br>
<br>
</li>
<li><b> -clearx</b><br>
Specifies that X movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -cleary</b><br>
Specifies that Y movement is cleared out on deltas.<br>
<br>
</li>
<li><b> -loop</b><br>
Drops the last frame of the animation. This allows MAX2SKL to properly
calculate deltas on looped animations. The last frame in the animation
should be the pose as the first frame.<br>
<br>
</li>
<li><b> -uvb filename</b><br>
The same as using &#8211;bones and &#8211;uv. This is just an easy way
to copy both the bone heirarchy and the surface definitions from one
file.<br>
<br>
</li>
<li><b> -destdir dirname</b><br>
Specify an alternate destination directory for the SKA for SKB file.
Normally the destination directory is the current working directory.
<br>
<br>
</li>
<li><b> -ignoreflags</b><br>
Normally, when a bone&#8217;s parent is unused and no bone with the
same leg/torso designation exists higher up the hierarchy, the parent
is kept, despite the fact that it doesn&#8217;t affect any vertices.
Ignoreflags instructs Max2Skl to not perform this check. Typically,
this would be used when it isn&#8217;t feasible to use the &#8211;bones
command because the hierarchies differs. </li>
</ul>
<p>&nbsp;</p></td>
</tr>
<tr>
<td colspan="3"><img src="../images/footer.jpg" width="702" height="36" border="0" usemap="#Map"><br>
<img src="../images/hor_line.jpg" width="702" height="1"></td>
</tr>
<tr>
<td colspan="3" class="legal"><table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td class="legal"> Copyright &copy;2003 Ritual Entertainment, Inc. All rights reserved.<br>
Please do not email Ritual Entertainment with questions about the
UberTools Game Development Kit. It is provided as is and is not supported by Ritual Entertainment.</td>
<td><a href="http://www.ritual.com/tech/overview.html" target="_blank"><img src="../images/uber_logo.jpg" width="43" height="56" hspace="4" border="0"></a></td>
<td><a href="http://www.ritual.com" target="_blank"><img src="../images/ritual_logo.jpg" width="100" height="56" hspace="4" border="0"></a></td>
</tr>
</table>
<p align="center">&nbsp;</p></td>
</tr>
</table>
<map name="Map">
<area shape="rect" coords="601,10,693,28" href="#top">
</map>
</body>
</html>