Cryengine Converter is a C# program to help convert Cryengine assets into a more portable format. Currently it supports .obj
(No longer supported) and .dae
(Collada), although work is in progress to allow exporting Cryengine assets into USD (Universal Scene Description) format. The default output is Collada, as this supports the most features, including Armature/rigs with vertex weights, as well as improved material handling.
How do you use it? Well, here is the output from the current Usage:
PS D:\scripts> cgf-converter
cgf-converter [-usage] | <.cgf file> [-outputfile <output file>] [-objectdir <ObjectDir>] [-obj] [-blend] [-dae] [-smooth] [-throw]
-usage: Prints out the usage statement
<.cgf file>: The name of the .cgf, .cga or .skin file to process
-outputfile: The name of the file to write the output. Default is [root].obj
-noconflict: Use non-conflicting naming scheme (<cgf File>_out.obj)
-allowconflict: Allows conflicts in .mtl file name
-objectdir: The name where the base Objects directory is located. Used to read mtl file
Defaults to current directory.
-dae: Export Collada format files (Default)
-smooth: Smooth Faces
-group: Group meshes into single model
-throw: Throw Exceptions to installed debugger
Ok, so how do you actually USE it?
I'm going to assume you've already taken a Cryengine based game (Mechwarrior Online, Star Citizen, etc) and extracted the .pak
files into a directory structure that essentially mimics a Cryengine layout.
PS D:\depot\Star Citizen> dir
Directory: D:\Depot\Star Citizen
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/20/2017 7:59 AM Animations
d----- 5/20/2017 7:59 AM Entities
d----- 5/20/2017 7:59 AM Levels
d----- 5/20/2017 8:00 AM Libs
d----- 5/20/2017 7:59 AM Materials
d----- 5/20/2017 8:43 AM Objects
d----- 5/20/2017 8:00 AM Prefabs
d----- 5/20/2017 8:00 AM Scripts
d----- 5/20/2017 8:54 AM Sounds
d----- 5/20/2017 9:04 AM Textures
d----- 5/20/2017 9:05 AM UI
This is pretty close to what Cryengine/Lumberyard games will look like after you extract all the .pak
files, using a utility like 7zip. The important directories here are Objects
(generally contains the .cga/.cgam/.cgf/.skin
files) and the Textures
directory. You generally don't need to worry about the directory structure unless you're using my cryengine-importer.ps1 script, but let's just call this the root directory for Cryengine assets.
Aside: When compiled (or you just download the .exe), this program is easiest to use when you put it into a dedicated directory that is in the path. I won't go into how to modify the path on your computer, but I have my own
d:\scripts
directory with cgf-converter.exe in it, along with a few other commonly used scripts and programs. I recommend you do the same (or something similar), as from now on the Powershell commands I type out will assume that the programs are in the path. If they aren't, the commands I list will not work.
Aside 2.0: Be careful exporting stuff to
.obj
files, as it is no longer supported. A Cryengine file (in incredibly simplified terms) consists of a geometry file (ends in.cga/.cgf/.cgam/.skin
) and the related material file (ends in.mtl
). The Cryengine material file is an XML file that contains material info. This program will take that file and convert it by default to an.obj
material file with the same name, which is not ideal. Use the-noconflict
argument to make it write to a similar name that won't conflict.
** Important:** Use the -objectdir
argument whenever possible! The location of the material files is dependent on a number of factors, and the program does its best to find them. However, if it can't find the proper material file for the object you're trying to convert, it will just create default materials for the model.
I have a playlist of tutorial videos here: https://www.youtube.com/watch?v=6WoA2ubTZ0k&list=PL106ZeLhxxVn551_IKGKeU_LBODtkh29b
Collada format (v1.4.1) may be a better option for most game assets. On top of having cleaner geometry than .obj, the material file is included into the Collada (.dae
) file, so you only have one file to worry about (so no need to use -noconflict
). In addition, if there is an armature/rig/skeleton, Collada files can also contain all that information as well.
To convert a single .cga/.cgf/.skin/.chr
file to a .dae
file, using Powershell:
PS D:\Depot\Star Citizen\Objects\Spaceships.ships\AEGS\gladius\>cgf-converter AEGS_Gladius.cga -objectdir <insert the directory to the Object dir>
You can replace the -dae
with -collada
as well.
To convert a single .cga/.cgf/.skin/.chr
file to an .obj
file, using Powershell:
PS D:\Depot\Star Citizen\Objects\Spaceships.ships\AEGS\gladius\>cgf-converter AEGS_Gladius.cga -obj
This will create a couple of files in that directory:
AEGS_Gladius.obj
AEGS_Gladius.mtl
Since the Cryengine .mtl
file has a good chance of being in that directory, it will overwrite it unless you use the -noconflict
argument.
PS D:\Depot\Star Citizen\Objects\Spaceships.ships\AEGS\gladius\>cgf-converter -noconflict AEGS_Gladius.cga
Instead of an AEGS_Gladius.mtl
file, it will create an AEGS_Gladius_mtl.mtl
file, and leave the original .mtl
file as is.
There are occasions where you may want to overwrite the file, but generally you are going to want to use the -noconflict
argument.
If you want to convert all the files in a directory, you can provide a wildcard for the file name:
cgf-converter *.cga -objectdir <path to the Objects folder>
This will take every file in the directory where the command is being run and convert it to Collada format.
If you want to convert all the files in a directory as well as all the directories below it, you can use the -recurse
option to make it traverse:
foreach ($file in (get-childitem -recurse *.cga,*.cgf,*.chr,*.skin)) { cgf-converter $file -objectdir <path to the Objects folder> }
NOTE: If you run this on the
Objects
directory, it will convert EVERY file in the game. This can take a very long time, and takes a lot of disk space. Be careful using the command like this.
Finally, the converter does support being run through the Windows Explorer, so you can just drag a .cga
file or files onto cgf-converter.exe
and it'll do a default conversion (to .dae
). This isn't ideal, but it is the quick and dirty way if you are morally opposed to using a prompt. 👍
Questions? Feel free to contact me and I'll be happy to provide some additional help.