450 lines
24 KiB
HTML
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')">» Introduction & Contents</div>
|
|
<span class="submenu" id="sub0">
|
|
<a href="../start.html">Introduction</a><br>
|
|
<a href="../start.html#2">Utilities</a><br>
|
|
<a href="../start.html#3">Source Files</a><br>
|
|
</span>
|
|
<br>Level Design<br>
|
|
<div class="menutitle" onclick="SwitchMenu('sub1')">» Setting Up UberRadiant</div>
|
|
<span class="submenu" id="sub1">
|
|
<a href="radiant_setup.html">That Scary Error Msg</a><br>
|
|
<a href="radiant_setup.html#2">General Tab</a><br>
|
|
<a href="radiant_setup.html#3">Display Tab</a><br>
|
|
<a href="radiant_setup.html#4">User Interface Tab</a><br>
|
|
<a href="radiant_setup.html#5">Keyboard Shortcuts Tab</a><br>
|
|
<a href="radiant_setup.html#6">Colors Tab</a><br>
|
|
<a href="radiant_setup.html#7">Game / Paths Tab</a><br>
|
|
</span>
|
|
<div class="menutitle" onclick="SwitchMenu('sub2')">» Building Your First Room</div>
|
|
<span class="submenu" id="sub2">
|
|
<a href="radiant_firstroom.html">Editor Interface Basics</a><br>
|
|
<a href="radiant_firstroom.html#2">Choosing Your Textures</a><br>
|
|
<a href="radiant_firstroom.html#3">Building The Room</a><br>
|
|
<a href="radiant_firstroom.html#4">Adding a Light</a><br>
|
|
<a href="radiant_firstroom.html#5">Adding a Player Start</a><br>
|
|
<a href="radiant_firstroom.html#6">Compiling Your Level</a><br>
|
|
<a href="radiant_firstroom.html#7">Viewing the Level</a><br>
|
|
</span>
|
|
<div class="menutitle" onclick="SwitchMenu('sub3')">» Constructing Terrain</div>
|
|
<span class="submenu" id="sub3">
|
|
<a href="radiant_terrain.html">Setting up the Tools</a><br>
|
|
<a href="radiant_terrain.html#2">Creating Terrain</a><br>
|
|
<a href="radiant_terrain.html#3">Modifying the Textures</a><br>
|
|
<a href="radiant_terrain.html#4">Adding More Terrain</a><br>
|
|
</span>
|
|
<div class="menutitle" onclick="SwitchMenu('sub4')">» Additional Reference</div>
|
|
<span class="submenu" id="sub4">
|
|
<a href="ldesign_lighting.html">Lighting System</a><br>
|
|
<a href="ldesign_terrain.html">Terrain Texture Blending</a><br>
|
|
</span>
|
|
<br>Scripting<br>
|
|
<div class="menutitle" onclick="SwitchMenu('sub5')">» Scripting Tutorials</div>
|
|
<span class="submenu" id="sub5">
|
|
<a href="scripting_syntax.html">Scripting Syntax</a><br>
|
|
<a href="scripting_waves.html">Spawning Waves</a><br>
|
|
<a href="scripting_flying.html">Creating Flying Creatures</a><br>
|
|
<a href="scripting_tripwires.html">Setting Up Tripwires</a><br>
|
|
</span>
|
|
<div class="menutitle" onclick="SwitchMenu('sub6')">» Global Script Synopsis</div>
|
|
<span class="submenu" id="sub6">
|
|
<a href="scripting_globalscripts.html">Introduction</a><br>
|
|
<a href="scripting_globalscripts_accelmove.html">global_accelerated</a><br>
|
|
<a href="scripting_globalscripts_accelmove.html">Movement.scr</a><br>
|
|
<a href="scripting_globalscripts_archetype.html">global_archetype.scr</a><br>
|
|
<a href="scripting_globalscripts_array.html">global_array.scr</a><br>
|
|
<a href="scripting_globalscripts_cinefx.html">global_cinematicFX.scr</a><br>
|
|
<a href="scripting_globalscripts_common.html">global_common.scr</a><br>
|
|
<a href="scripting_globalscripts_debug.html">global_debugUtils.scr</a><br>
|
|
<a href="scripting_globalscripts_flyin.html">global_flyin.scr</a><br>
|
|
<a href="scripting_globalscripts_math.html">global_math.scr</a><br>
|
|
<a href="scripting_globalscripts_ploadout.html">global_playerLoadout.scr</a><br>
|
|
<a href="scripting_globalscripts_soundpan.html">global_soundPan.scr</a><br>
|
|
<a href="scripting_globalscripts_spawnwave.html">global_spawnWave.scr</a><br>
|
|
<a href="scripting_globalscripts_transport.html">global_Transport.scr</a><br>
|
|
<a href="scripting_globalscripts_tripwire.html">global_tripwire.scr</a><br>
|
|
</span>
|
|
<div class="menutitle" onclick="SwitchMenu('sub7')">» Classes Reference</div>
|
|
<span class="submenu" id="sub7">
|
|
<a href="allclasses_g.html">Game Module</a><br>
|
|
<a href="allclasses_cl.html">Client Module</a><br>
|
|
<a href="allclasses_cg.html">Client Game Module</a><br>
|
|
</span>
|
|
<br>Older Documentation<br>
|
|
<div class="menutitle" onclick="SwitchMenu('sub8')">» Heavy Metal FAKK2</div>
|
|
<span class="submenu" id="sub8">
|
|
<a href="fakk2_camera.html">Camera Documentation</a><br>
|
|
<a href="fakk2_clientsidecmds.html">Client Side Commands</a><br>
|
|
<a href="fakk2_gui.html">GUI Documentation</a><br>
|
|
<a href="fakk2_ingameutils.html">In-Game Utilities</a><br>
|
|
<a href="fakk2_max2skl.html">MAX2SKL Reference</a><br>
|
|
<a href="fakk2_shadermanual.html">Shader Manual</a><br>
|
|
<a href="fakk2_soundsystem.html">Sound System</a><br>
|
|
<a href="fakk2_tiki.html">TIKI Model System</a><br>
|
|
</span>
|
|
<br>Other<br>
|
|
<div class="menutitle" onclick="SwitchMenu('sub9')">» Web Links & Credits</div>
|
|
<span class="submenu" id="sub9">
|
|
<a href="other_links.html">Web Links</a><br>
|
|
<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’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’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’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 “leg bones”
|
|
(that is, bones that will use the leg animations as opposed to the torso
|
|
animation). this, you must edit the baseframe’s SKL file and change
|
|
the bone definitions from “Bone” to “Legbone”.
|
|
Here’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 “origin” is expected,
|
|
but you can use the –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’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’t apply the movement deltas to the position. Using
|
|
this method we are able to remove any sliding of the character’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’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’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 “origin”, 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’t subtract the origin’s position from the model’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’t
|
|
know anything about animations other than the one it’s currently
|
|
working on, it can’t guarantee that the names of the bones, or
|
|
the order of the bones, hasn’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 –bones and –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’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’t affect any vertices.
|
|
Ignoreflags instructs Max2Skl to not perform this check. Typically,
|
|
this would be used when it isn’t feasible to use the –bones
|
|
command because the hierarchies differs. </li>
|
|
</ul>
|
|
<p> </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 ©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"> </p></td>
|
|
</tr>
|
|
</table>
|
|
<map name="Map">
|
|
<area shape="rect" coords="601,10,693,28" href="#top">
|
|
</map>
|
|
</body>
|
|
</html>
|