Loading GMD Models and Animations in 3DSMax

Atlus’s new in-house graphics engine (used in Persona 5 and the Dancing games) has a new model format: GMD (sometimes called GFS). It’s used for everything from character models to objects to fields. They go right along with the new GAP animation format.

While TGE’s GFDStudio application for Windows can preview models and animations, you may want to export them to another program for rendering or editing. The current best method is to use the GMD Maxscript available here.

Prerequisites

  • An unencrypted dump of the game’s files
  • 3DSMax

Importing the model

Once you have 3DSMax installed, go to Scripting > Run Script near the top-right corner of the program.
Run Script
Paste the script and the “include” folder from the Maxscript zip into the 3DSMax Scripts folder, and then run it.
p5_gmd_gfs_gap_v0_15
Click on the “Import File” button and select a GMD model.
Import File

Locations of Files

  • Persona 5: data.cpk/model/character/…
  • Persona 3/4/5 Dancing: data.cpk/dance/player/…
  • Catherine Full Body: model.cpk/character/…

Once you select a model, click “Load Model.”
Load Model
In this example, I’ll use a model from Persona 5 Dancing. In the Dancing titles, character models are customizable so outfits, hair and accessories are all separate GMD files.
So if you load P5D’s data.cpk/dance/player/p5/pc208_01.GMD, you’ll get this…
Body Loaded
In order to stay organized, I like to select everything and add it to a New Layer in the Scene Explorer pane to the left:
New Layer
You can then click on the new Layer to give it a descriptive name.
Named Layer
While you’re at it, you can add layers for the parts you’re going to import. The selected layer (indicated by the blue icon) is where imported models will go by default.
Note: To see all this, you need to switch from Hierarchy View to Layer View.
Active Layer
Next, I’m importing P5D’s data.cpk/dance/player/p5/face/pc208_f1.GMD following the same steps from before.
Face Loaded
You may notice that faces from the Dancing games load multiple hidden objects with “MorphTarget” in the name. These are alternate expressions that you can “morph” between using sliders in the object’s Morph Modifier (in the pane to the right).
Morph Modifier
If you want, you can delete the ones you won’t need. Either way, if you switch back to Hierarchy View, you’ll see that the new objects for the head got added to a new head bone, not the original one that comes with the body.
Head Bone
If you were to load an animation at this point (from a GAP file, like say, P5D’s data.cpk/dance/player/p5/pose/pcp208_0.GAP) you’d end up with this:
Floating Head
The rest of the model is posed properly, but the head is floating away from the body. That’s because it only animated the original head bone with the body, so the contents of the new head bone need to be added to that one instead:
Parent to Head

  1. Expand Head bone under root
  2. Expand Head bone from face model
  3. Select contents of face model Head bone
  4. Right click and choose new parent
  5. Select Head bone under root
  6. Delete empty head bone
  7. Load animation

Loading the animation now should result in the face now moving properly along with the body:
Fixed Head
If the head is still floating away from the body (at a weird different angle) or you get a maxscript error, simply close the script and run it again and try again.
You can do the same with hair and accessories, parenting the new objects to the root’s head bone using the same method each time you import them (but before loading an animation).
Hair Parent
In this case, a new mesh_grip and neck bone were added. The contents could simply be added to the root’s head bone and the new bones deleted.
Skin Error
In some cases, parts of the model may be skinned incorrectly, which can be solved by clicking on the object’s Skin modifier, checking the Vertices box, opening the Weight Tool, selecting the problematic vertices and assigning them to a bone:
Hand Bone Fix
Ta-daa! Now we’re ready for rendering.

Rendering

You can output the animation frames to a video file or individual pngs if you want to use them in a video project or something.
Go to Rendering > Render Setup and under Common, choose Active Time Segment to record the entire animation (or specify a range of frames).
Render Setup
It should take whatever was visible in the viewport and split it up frame by frame as images:
Rendering
Images
Note: If you want a chroma-key background instead of transparency, you can set it up in the Rendering > Environment options:
Environment

Stay tuned for a guide on how to make changes to models/animations and put them back in the game!

Leave a Reply

Your email address will not be published. Required fields are marked *