Official RF Toolkit: Difference between revisions

From Red Faction Wiki
No edit summary
Line 218: Line 218:


===VFXExporter===
===VFXExporter===
'''VFXExporter''' is a 3ds Max plugin which allows you to export meshes, lights, and other supported objects into a [[.vfx]] effects file for [[Red Faction]]. [[.vfx]] files are used for any visual effect that can't be achieved through other means. If you have non-[[.vfx]] solutions to something you want to show, via [[RED]] or through [[.tbl]] files, you should probably try that approach first.
[[.vfx]] files do provide some features not supported elsewhere. An example of this is powerups. Nearly all the powerups seen in multiplayer RF are [[.v3m]] static meshes, much like other items. There are a few exceptions, like the flags in CTF games. Since those use cloth-like deforming animation, [[.vfx]] effect files are used instead of [[.v3m]] static meshes. Another example is '''cutscene08''', which shows the shuttle lifting off in the single-player game. Since it involved multiple, non-character objects moving along a path, a big [[.vfx]] was definitely the way to go. The 3ds Max source files for both the CTF flag and shuttle cutscene examples are included in the Official RF Toolkit download: Cutscene08.max & CTFflag-red.max
There’s no step-by-step instructions for these files, but a lot can be learned simply by looking at them. Make sure to look at the User Defined Object Properties of the objects in those scene files. The usage of flags there (as discussed below) are central to how [[.vfx]] effects work. The [[.vfx]] system is pretty complicated, and this doc won’t cover everything.
'''Installation:'''
#Copy '''vfx_exporter.dle''' into the plugin directory. Example: “\3dsmax4\plugins\”
#Make sure this directory is in your plugin paths for Max. Check this in Max under '''Customize/Configure Paths/Plugins/'''
#Restart 3ds Max
There’s four types of objects supported by the [[.vfx]] system:
*Static meshes
*Morphed meshes
*Lights
*Particles
====Materials and Textures====
*Materials assigned to meshes or particle emitters need to have the texturemap assigned in the Diffuse Map channel for the game to recognize it. This can be either a 24 or 32 bit .tga file, a Volition [[.vbm]] file, or a .dds file ([[RF Clients#Dash Faction|Dash Faction]] only).
*Multi-Subobject Materials are supported.
*Blinn is the only Shader with [[.vfx]] export support. Other shaders may work, but they're not guaranteed.
*Self-illumination and Opacity are both supported. The two values in the Basic Parameters rollout will both be exported normally into the [[.vfx]]. Opacity, additionally, may be keyframe-animated with the standard Bezier Float controller.
*Additive transparency is supported for bright objects like thruster glows, light coronas, etc. To mark a material as additive, open its Extended Parameters rollout. Under Advanced Transparency, there’s a Type radio with choices for Filter, Subtractive, and Additive. Change it to Additive. Filter is the “normal” opaque blending method. Subtractive is not supported.
Any material parameters/animation not mentioned above are unsupported.
====Static Meshes====
*These are non-deforming meshes like a spaceship, a rock, a vehicle. Static meshes do not need any special flags or parameters to be exported into a [[.vfx]]. They do need mapping coordinates on all faces.
*Any mesh with Position or Rotation animation keyframes will animate in the game, as expected. Position must use the default Bezier Position controller, and Rotation must use the TCB Rotation controller. Scale animation may or may not work (Volition has indicated that this functionality may have been removed for optimization reasons).
*Hierarchy links are not directly supported by the [[.vfx]] system. If you export a mesh that’s linked to another mesh in a hierarchy, it is automatically treated as a “morphed mesh” (see below). Morphed meshes are more expensive than static keyframed meshes, so be careful.
=====Static Mesh Flags=====
There are special exporter features that can only be used via the User Defined Object Properties in Max. To view an object’s User Defined flags, right-click it and choose Properties. Under the User Defined tab, there will be a list of any flags assigned to that object. Flags must appear one-per-line in that text field. Here’s what’s supported for Static Meshes:
*'''fullbright:''' This tells the game to not apply darkening to this mesh. Essentially the same as giving its material a 100% self-illumination value.
*'''facing:''' This is used for “billboard” meshes. Any glow or corona you want to face the camera all the time needs to have this flag.
====Morphed Meshes====
Any mesh that requires vertex-based animation (like waving flags, pools of churning lava, etc) need to be treated as morphed meshes, rather than static. The waving team banners seen in some of the Volition-made CTF levels are morphed meshes. Instead of having their vertices stored once in the [[.vfx]], with a simple list of animated position & rotation keyframes like static meshes do, morphed meshes store whole vertex sets inside the [[.vfx]] file. This is done at a variable framerate, depending on the user defined flags for that mesh. Animating the vertices for a [[.vfx]] morphed mesh can be done using any tool available to you in Max. This can include an animated FFD modifier, Max morphing, noise, SimCloth, basically anything.
In addition to making large [[.vfx]] files, morphed meshes are very expensive for the game to process. Only use these when absolutely necessary, and use them in moderation.
=====Morphed Mesh Flags=====
There are special exporter features that can only be used via the User Defined Object Properties in Max. To view an object’s User Defined flags, right-click it and choose Properties. Under the User Defined tab, there will be a list of any flags assigned to that object. Flags must appear one-per-line in that text field. Here’s what’s supported for Morphed Meshes:
*'''morph:''' This is the main flag, telling the exporter to treat this as a morphed mesh rather than a static one. This parameter is automatically assumed if the mesh is linked to another.
*'''fps=VALUE:''' This tells the exporter how many samples-per-second to use when dumping out the morphed vertex positions for that mesh. VALUE must be an integer. If no fps flag is present, it will assume '''15''', which can result in some pretty large [[.vfx]] files. Rarely do you need an fps value above 5-7. Slower objects can tolerate much lower numbers.
====Particles====
In addition to the table-driven particle system used in RF PC, you can also use emitters inside [[.vfx]] files. You must use the [[Official RF Toolkit#VParticle|VParticle]] Max plugin for this to work, however. The [[.vfx]] exporter won’t recognize any other particle emitter types.
====Lights====
Only Max lights of type “Omni” are supported. The following Omni light parameters are supported for [[.vfx]] export:
*'''On/Off:''' Simple checkbox indicating the on/off status of the light. Not animatable.
*'''RGB Channels:''' Determines intensity and color of the light. I believe animation is supported for these.
*'''Multiplier:''' A global brightness value, with animation support. Only values from 0.0-1.0 are supported.
*'''Far Attenuation:''' The Start and End values are both supported, if the “Use” checkbox is enabled. Volition has indicated that the [[.vfx]] system likely assumes this is on.
All other Omni light parameters are unsupported and ignored when exporting. Animated position for Omni lights is supported, however, just like a mesh.
====Exporting====
When you have all objects ready for export in Max, here is all you need to do:
#Select all objects you wish to export (static/morphed meshes, lights, [[Official RF Toolkit#VParticle|VParticle]] emitters). Objects not selected will simply be ignored.
#Under File, choose Export.
#In the “Save as Type” drop-down, choose “VFX – V 4.6 (*.VFX)” filetype.
#Save the [[.vfx]] with a name of your choosing.
There are a number of error messages you may get during export. They should provide basic information on any problems you have in your scene. Unlike [[.v3d]] and [[.vcm]] files, [[.vfx]] files do not need further processing through [[Official RF Toolkit#CCrunch|CCrunch]] or any other utility - they can be loaded directly by the game, assuming they’re located in the proper place.
*'''NOTE:''' Like any other RF model file, [[.vfx]] files do not include textures. You must include any textures used by your mesh separately in your packfile/project.


===RFBone===
===RFBone===

Revision as of 19:51, 4 November 2020

The Official RF Toolkit is a collection of standalone utilities and 3ds max plugins used to create content for Red Faction. These are some of the same tools used by Volition in the creation of the game.

You can download the Official RF Toolkit here: [Download]

CCrunch

Captain Crunch (CCrunch) is a standalone command-line utility included in the Official RF Toolkit that does three things:

  • converts .v3d files into .v3m files (Static Meshes)
  • converts .vcm files into .v3c files (Skeletal Meshes)
  • creates .vpp packfiles out of regular datafiles

Usage

Static Meshes

Static mesh files exported from 3ds Max via the RF Toolkit Plugins are .v3d files. These need to be converted into .v3m files before Red Faction can load them.

The command-line syntax for this conversion is:

ccrunch.exe FILENAME.v3d

Where FILENAME is the relative path & filename of your .v3d file. If you specify no path, it will assume the same directory you’re running it from. The resulting .v3m file will be placed in the same directory as the source file. The output spew for this process is confusing at best, but if it created the file and you don’t see the word “ERROR” anywhere in the spew, you’re good to go.

Skeletal Meshes

Skeletal meshes are used for characters and first person weapons. They are exported from 3ds Max via the RF Toolkit Plugins are .vcm files. These need to be converted into .v3c files before Red Faction can load them.

The command-line syntax for this conversion is:

ccrunch.exe FILENAME.vcm

Where FILENAME is the relative path & filename of your .vcm file. If you specify no path, it will assume the same directory you’re running it from. The resulting .v3c file will be placed in the same directory as the source file. The output spew for this process is confusing at best, but if it created the file and you don’t see the word “ERROR” anywhere in the spew, you’re good to go.

VPP Packfiles

.vpp packfiles must be used for any data modification in Red Faction PC. This goes for levels, .tbl files, models, textures, everything. If it’s not inside a .vpp file, the game will not recognize it.

Building .vpp packfiles with CCrunch is pretty straightforward. The command-line syntax is like so:

ccrunch.exe <output VPP filename> <input TXT filename>

A text file list of individual files to include in the .vpp must be specified. You can make the .txt file with Notepad, or any other text editor. A sample .txt input file might look like this:

data\effects\lights\LightBeam02.tga
data\maps\skins\enviro_guard_face_b-mip1.tga
data\levels\single\L11S3.rfl
data\levels\single\L12S1.rfl
data\audio\music\ambience\*
data\audio\music\game\*
data\audio\music\menu\*

One file per line. The pathname must be relative to the directory you run CCrunch from. Note, wildcards are permitted, as shown in the “music” lines above. This feature of CCrunch is designed for massive, automated .vpp building. If you're only packing a few stray files, it might be better to use one of the other RF Tools.

MakeVBM

MakeVBM is a standalone command-line utility used to create .vbm files for use in Red Faction 1. These are animated or single-frame 2D bitmaps, in a proprietary Volition format. Volition's MakeVBM program is included in the Official RF Toolkit.

In 2020, rafalh released his own completely rewritten version of MakeVBM, which adds many enhanced features over the original. This enhanced tool uses the same syntax as the Volition tool, adds additional functionality, and retains all functionality of the original.

Key improvements in rafalh's enhanced MakeVBM are:

  • Support for high resolution image files
  • Support for many common image formats as input (.jpg, .png, .dds, etc.), rather than only .tga like the Volition tool

Usage

The source input for MakeVBM is one or more image files, either 24 or 32 bit with alpha, in a supported image file format. A list of supported image file formats is available here.

The first step is to get your image files in one place, and name them correctly. MakeVBM requires sequences to be named like so:

name-0000.tga
name-0001.tga
...
and so on.

“name” can be any prefix you like, but it must be followed by the “-XXXX” ending. Once you have your files together, decide what color format your VBM will use.

While all VBMs use 16 bits of color, that 16 bits can be broken down several ways. The output VBMs can be in one of four color formats. The numbers represent the ARG and B channels (alpha, red, green, and blue).

4444 4 bits for each RGB channel, 4 bits for alpha. Use this format when you want a full, varied alpha channel with semi-transparency.
1555 5 bits of color for the RG and B channels, 1 bit for alpha. Use this when you have alpha, but it’s only the “on/off” variety. Pixels are either totally opaque or totally transparent. Useful largely for interface art.
565 5 bits of alpha for the R and B channels, 6 bits for Green, and zero for alpha. Use this when the image needs no alpha transparency at all.

Next, decide what framerate the animation will need, measured in frames-per-second.

When you’re ready, open a command prompt window, make sure “makevbm.exe” is on your path, and go to the directory where your frames are located. Then type:

makevbm <colormode> <framerate> <prefix>.tga

Where <colormode> is either 4444, 1555, or 565, <framerate> is an integer like 15 or 30, and <prefix> is the first part of your sequence filenames, minus the “-XXXX” suffix.

The Red Faction invulnerability overlay effect is a .vbm using 565 color mode at 8 frames per second. To create that file from its frames, I would type:

makevbm 565 15 pow.tga

This would create “pow.vbm”, which the game can now use.

When everything is run correctly, the output spew looks like this:

MakeVBM Output

FontTool2

FontTool2 is a standalone command-line utility used to convert properly-formatted .tga images into .vf font files for use in Red Faction.

Usage

Basic Usage

In order to create a source .tga, you will need a paint program that supports 32-bit images with an alpha channel (Photoshop, Paint Shop Pro, etc). The first thing to note is that Red Faction uses the ANSI character set, not ASCII. The set coding determines in what order characters appear in the “chart”. Here is a list of ANSI character codes, and their characters:

ANSI Character Codes

Red Faction fonts must start at the first entry, 32, which is the space character. The .vf files that ship with the game include every character from 32 to 126, and also any characters marked in green or violet in the above chart. Green characters are included as-is, while violet are used for special symbols and don’t match the characters shown in the above chart.

An example formatted source file is provided (rfpc-medium.tga) in the Official RF Toolkit. This example includes each character, starting from ANSI 32, through the diacritics characters needed for German and French, ending with ANSI 252. It looks like this:

rfpc-medium.tga: example FontTool2 source file

Note that while there’s a “cell” for every character from 32 to 252, there isn’t a character in every cell. Some are empty, one-pixel wide slots. In your font, you can skip as many characters as you like, but you must include an empty cell for each of them. You can see the basics of how to create a font just by looking at the PSD file. Every character sits in a cell, every cell is made up of a 1-pixel, full green border.

Here are the basic rules for creating the source .tga:

  • Cells must start with ANSI 32 (the space character), but can end on any ANSI cell.
  • You must not skip cells. If you wish to not include a character, you need to include an empty cell for it, at least one pixel wide.
  • The green borders that make up the cells must be one-pixel in width on all sides, and must be full green (0, 255, 0).
  • Rows of cells can be broken anywhere, but at least one black pixel row must seperate each row of cells.
  • All cells must be the same height.
  • Cells can be varying widths, to match the size of each particular character. One black pixel should be included on the right side of each character. This extra space is what determines the default spacing, or “kerning” between that character and the next one.
  • You must have an alpha channel. See “rfpc-medium.tga” for an example of how the alpha channel should be used.
  • Non-black pixels in the alpha channel must not overlap the green border pixels in the RGB channels.

The example .psd, as it appears, is not ready to make a source .tga just yet. The way it’s shown is how it’s most easily edited, however, with layers for the black background, the characters, and the green borders.

Before saving it out as a .tga, copy the characters channel into the alpha channel, and floodfill the characters channel with full white. Since the alpha channel is what determines the actual shape of the characters, the RGB channels should be full intensity white (except the green borders) to make sure the characters are evenly colored. See rfpc-medium.tga for an example of how it should look.

Once you have the .tga saved out (use 32 bits, not 24), you’re ready to run it through FontTool2.

Open a command prompt window and go to your \fonttool2\ directory. Type the following:

fonttool2 FILENAME.tga

Where “source.tga” is the name of the .tga file you saved out. If everything worked, it should spit out a bunch of output, and end with something that looks like this:

FontTool2 output

If you get any sort of error message, something isn’t right with the source .tga. A common cause of errors is non-black alpha pixels underneath the green borders. If this occurs, or if your green borders aren’t connected correctly, it will give you coordinates where the problem is. Once things are straight, you’ll get a source.vf file (named however you named the .tga file). This is what the game actually loads.

Advanced Usage

Once you’ve played with making fonts, you may wish to change the kerning information. Kerning is what determines how far apart one character appears from the next. In proportional fonts like the ones seen in RF, some characters look too far from others unless you modify the kerning data. A good example of this is a T followed by a J. You may want to make the J overlap the T just a little.

Do edit the kerning data on your .vf file, go to your \fonttool2 directory and type:

fonttool2 FILENAME.vf

Where “source.vf” is the name of your .vf file. This will start the interactive kerner in FontTool2. With this you can alter the spacing between any two characters in your font, on a case-by-case basis. Instructions on how to use the interactive kerner should appear onscreen.

MVFReduce

MVFReduce is a tool that reduces the amount of keyframes in .mvf animation files. It doesn’t remove all of them, but it removes keys along a curve that aren’t necessary. It’s necessary to use MVF Reduce, as animation files can get large and won’t always fit into memory. MVF Reduce works by replacing adjacent keyframes that are "similar" to one another with a single keyframe. Adjacent keyframes that are within a certain tolerance limit of one another are considered "similar" and can therefore be merged.

Usage

Copy mvfreduce.exe into the directory containing your .mvf file(s), then open a command prompt window and run the following command:

mvfreduce -m MORPHREDUCTION –d ROTATIONREDUCTION –e POSITIONREDUCTION FILENAME.mvf
  • -m : (Optional) Float value as input, determines the keyframe reduction of morphing vertices. The lower this number, the less reduction is applied. Defaults to .005 if no float input value is provided.
  • -d : Float value as input, determines the rotational keyframe reduction. The lower this number, the less reduction is applied. Volition's recommendation is to use .00007, unless it is necessary to reduce more to fit into memory.
  • -e : Float value as input, determines the positional keyframe reduction. The lower this number, the less reduction is applied. Volition's recommendation is to use .00007, unless it is necessary to reduce more to fit into memory.
  • -a : (Optional) If you don't want to specify a specific .mvf filename to apply the reduction to, you can instead use the -a switch to apply the specified reduction to all .mvf files in the current directory.

NOTE: Do not run MVFReduce twice on the same file, as it will reduce an already reduced file. Re-export the animation file first.

3ds Max Plugins

  • NOTE: All included 3ds Max plugins require version 4.2 or 5.x of 3ds Max. They will not work on earlier or later versions.

VBMImporter

VBMImporter allows 3ds Max to read and display .vbm bitmap files. When you install this plugin, you'll get a VBM Importer (*.vbm) option in any 3ds max dialog that takes bitmap files as input. You can use this to assign .vbm bitmaps directly to models through the Material Editor. Animated .vbm files will correctly animate in the Material Editor as well.

Installation:

  1. Copy VBM_importer.bmi into the plugin directory. Example: “\3dsmax4\plugins\”
  2. Make sure this directory is in your plugin paths for Max. Check this in Max under Customize/Configure Paths/Plugins/
  3. Restart 3ds Max

VParticle

VParticle adds a new Particle emitter type to 3ds Max, called VParticle. This plugin is solely for use in .vfx files used in Red Faction. It’s not fully supported as a standard “renderable” particle type in 3ds Max, so do that at your own risk.

Installation:

  1. Copy vparticle.dlo into the plugin directory. Example: “\3dsmax4\plugins\”
  2. Make sure this directory is in your plugin paths for Max. Check this in Max under Customize/Configure Paths/Plugins/
  3. Restart 3ds Max

You can find the VParticle object under the Create panel, in the Geometry/Particle Systems category. Create it just like any other 3ds Max emitter.

The supported parameters for VParticle appear in its Modify dialog, just like other emitters. Most of the parameters are self-explanatory, or match those of other Max emitters. The VParticle-specific stuff is as follows:

  • Drops/Facing: These are the two types of VFX particles supported by Red Faction. Facing is the default type, and uses camera-facing bitmaps onscreen. Drops are untextured, triangular shapes used for sparks, water drops, etc. Unlike other VFX objects, Drop particles do not require a texturemap in their Diffuse channel. Instead, the material’s Diffuse color is used.
  • Tail Distance: Used only for Drop particles. Determines how “long” each drop is.
  • Shrink at birth: When set above 0.0, causes particles to “grow” from nothing, reaching full size at the frame indicated by this percentage multiplier value. Example: particle life is set at 30, and Shrink at Birth is set to 0.2. From frame 0 to frame 6, the particles will grow from size zero up to the size specified in Particle Size, reaching full size at frame 6.
  • Shrink at death: Same as Shrink at Birth, but operates at the end of the particle’s life.
  • Fade at Birth/Death: Similar to Shrink at Birth/Death, but causes the particle’s opacity to fade in/out based on the timing values. Unless the Shrink values are used as well, particle size is not affected by this.
  • Fast Particles: When enabled, tells the game to use the more optimized “fast particle” system instead of the default particle renderer. This was largely a feature for the PlayStation 2 version of RF, and has little effect on the PC renderer. Some options my be unavailable/greyed-out when this is enabled.
  • Apply Gravity: When enabled, does automatic gravity on the emitted particles, along the global “down” axis in Max.
  • Randomize Orientation: Randomly orients each particle’s bitmap, to prevent strobing. Only supported for Facing particle types.
  • No Cull: Forces particle rendering even if the emitter is offscreen. It’s highly recommended that you keep this off, as enabling it is expensive.

That’s basically it. If you have a VParticle emitter selected during a .vfx file export, all the parameters will be written out into the .vfx file. Note, the “scale” and specific shape of particle emissions will vary a bit from Max to RF. Some tweaking of values is often necessary.

See VFXExporter for more information on exporting .vfx files.

V3DExporter

V3DExporter is a 3ds Max plugin which allows you to export meshes into the Volition .v3d format. These files are used for static meshes like clutter, powerups, etc.

.v3d files are not directly loadable by Red Faction. Before they can be used, they must be run through the CCrunch utility to be converted into .v3m files.

Installation:

  1. Copy v3d_exporter.dle into the plugin directory. Example: “\3dsmax4\plugins\”
  2. Make sure this directory is in your plugin paths for Max. Check this in Max under Customize/Configure Paths/Plugins/
  3. Restart 3ds Max

Preparing and exporting a mesh

  1. Scale your model correctly in 3ds Max. Red Faction uses meters for measurements, so you should keep this in mind when scaling your model.
  2. Center the mesh at the world origin in 3ds Max. To do this, select it, and right click the "select and move" icon on the toolbar. A "Move Transform Type-In" dialog will come up. Enter 0.0 for all 3 axis under Absolute:World.
  3. Select the model, then from the File dropdown menu, choose "Export...". Under "Save as type", choose RF Mesh - V4.32 (*.V3D) and save the mesh to the desired directory.
  • NOTE: .v3d and .v3m files do not include textures. You must include any textures used by your mesh separately in your packfile/project.

VFXExporter

VFXExporter is a 3ds Max plugin which allows you to export meshes, lights, and other supported objects into a .vfx effects file for Red Faction. .vfx files are used for any visual effect that can't be achieved through other means. If you have non-.vfx solutions to something you want to show, via RED or through .tbl files, you should probably try that approach first.

.vfx files do provide some features not supported elsewhere. An example of this is powerups. Nearly all the powerups seen in multiplayer RF are .v3m static meshes, much like other items. There are a few exceptions, like the flags in CTF games. Since those use cloth-like deforming animation, .vfx effect files are used instead of .v3m static meshes. Another example is cutscene08, which shows the shuttle lifting off in the single-player game. Since it involved multiple, non-character objects moving along a path, a big .vfx was definitely the way to go. The 3ds Max source files for both the CTF flag and shuttle cutscene examples are included in the Official RF Toolkit download: Cutscene08.max & CTFflag-red.max

There’s no step-by-step instructions for these files, but a lot can be learned simply by looking at them. Make sure to look at the User Defined Object Properties of the objects in those scene files. The usage of flags there (as discussed below) are central to how .vfx effects work. The .vfx system is pretty complicated, and this doc won’t cover everything.

Installation:

  1. Copy vfx_exporter.dle into the plugin directory. Example: “\3dsmax4\plugins\”
  2. Make sure this directory is in your plugin paths for Max. Check this in Max under Customize/Configure Paths/Plugins/
  3. Restart 3ds Max

There’s four types of objects supported by the .vfx system:

  • Static meshes
  • Morphed meshes
  • Lights
  • Particles

Materials and Textures

  • Materials assigned to meshes or particle emitters need to have the texturemap assigned in the Diffuse Map channel for the game to recognize it. This can be either a 24 or 32 bit .tga file, a Volition .vbm file, or a .dds file (Dash Faction only).
  • Multi-Subobject Materials are supported.
  • Blinn is the only Shader with .vfx export support. Other shaders may work, but they're not guaranteed.
  • Self-illumination and Opacity are both supported. The two values in the Basic Parameters rollout will both be exported normally into the .vfx. Opacity, additionally, may be keyframe-animated with the standard Bezier Float controller.
  • Additive transparency is supported for bright objects like thruster glows, light coronas, etc. To mark a material as additive, open its Extended Parameters rollout. Under Advanced Transparency, there’s a Type radio with choices for Filter, Subtractive, and Additive. Change it to Additive. Filter is the “normal” opaque blending method. Subtractive is not supported.

Any material parameters/animation not mentioned above are unsupported.

Static Meshes

  • These are non-deforming meshes like a spaceship, a rock, a vehicle. Static meshes do not need any special flags or parameters to be exported into a .vfx. They do need mapping coordinates on all faces.
  • Any mesh with Position or Rotation animation keyframes will animate in the game, as expected. Position must use the default Bezier Position controller, and Rotation must use the TCB Rotation controller. Scale animation may or may not work (Volition has indicated that this functionality may have been removed for optimization reasons).
  • Hierarchy links are not directly supported by the .vfx system. If you export a mesh that’s linked to another mesh in a hierarchy, it is automatically treated as a “morphed mesh” (see below). Morphed meshes are more expensive than static keyframed meshes, so be careful.
Static Mesh Flags

There are special exporter features that can only be used via the User Defined Object Properties in Max. To view an object’s User Defined flags, right-click it and choose Properties. Under the User Defined tab, there will be a list of any flags assigned to that object. Flags must appear one-per-line in that text field. Here’s what’s supported for Static Meshes:

  • fullbright: This tells the game to not apply darkening to this mesh. Essentially the same as giving its material a 100% self-illumination value.
  • facing: This is used for “billboard” meshes. Any glow or corona you want to face the camera all the time needs to have this flag.

Morphed Meshes

Any mesh that requires vertex-based animation (like waving flags, pools of churning lava, etc) need to be treated as morphed meshes, rather than static. The waving team banners seen in some of the Volition-made CTF levels are morphed meshes. Instead of having their vertices stored once in the .vfx, with a simple list of animated position & rotation keyframes like static meshes do, morphed meshes store whole vertex sets inside the .vfx file. This is done at a variable framerate, depending on the user defined flags for that mesh. Animating the vertices for a .vfx morphed mesh can be done using any tool available to you in Max. This can include an animated FFD modifier, Max morphing, noise, SimCloth, basically anything.

In addition to making large .vfx files, morphed meshes are very expensive for the game to process. Only use these when absolutely necessary, and use them in moderation.

Morphed Mesh Flags

There are special exporter features that can only be used via the User Defined Object Properties in Max. To view an object’s User Defined flags, right-click it and choose Properties. Under the User Defined tab, there will be a list of any flags assigned to that object. Flags must appear one-per-line in that text field. Here’s what’s supported for Morphed Meshes:

  • morph: This is the main flag, telling the exporter to treat this as a morphed mesh rather than a static one. This parameter is automatically assumed if the mesh is linked to another.
  • fps=VALUE: This tells the exporter how many samples-per-second to use when dumping out the morphed vertex positions for that mesh. VALUE must be an integer. If no fps flag is present, it will assume 15, which can result in some pretty large .vfx files. Rarely do you need an fps value above 5-7. Slower objects can tolerate much lower numbers.

Particles

In addition to the table-driven particle system used in RF PC, you can also use emitters inside .vfx files. You must use the VParticle Max plugin for this to work, however. The .vfx exporter won’t recognize any other particle emitter types.

Lights

Only Max lights of type “Omni” are supported. The following Omni light parameters are supported for .vfx export:

  • On/Off: Simple checkbox indicating the on/off status of the light. Not animatable.
  • RGB Channels: Determines intensity and color of the light. I believe animation is supported for these.
  • Multiplier: A global brightness value, with animation support. Only values from 0.0-1.0 are supported.
  • Far Attenuation: The Start and End values are both supported, if the “Use” checkbox is enabled. Volition has indicated that the .vfx system likely assumes this is on.

All other Omni light parameters are unsupported and ignored when exporting. Animated position for Omni lights is supported, however, just like a mesh.

Exporting

When you have all objects ready for export in Max, here is all you need to do:

  1. Select all objects you wish to export (static/morphed meshes, lights, VParticle emitters). Objects not selected will simply be ignored.
  2. Under File, choose Export.
  3. In the “Save as Type” drop-down, choose “VFX – V 4.6 (*.VFX)” filetype.
  4. Save the .vfx with a name of your choosing.

There are a number of error messages you may get during export. They should provide basic information on any problems you have in your scene. Unlike .v3d and .vcm files, .vfx files do not need further processing through CCrunch or any other utility - they can be loaded directly by the game, assuming they’re located in the proper place.

  • NOTE: Like any other RF model file, .vfx files do not include textures. You must include any textures used by your mesh separately in your packfile/project.

RFBone