Advanced Modding Tutorial [Remodels]

Downloading the Required Tools

Acquiring the models & textures:

  1. DQXI-S Tools Pack (includes quickbms script, custom UModel) by spiritovod

  2. QuickBMS by aluigi


Editing the models:

  1. Blender (free & recommended) / 3DS Max

  2. (optional) DQXI Character Models Resource (coming soon!)

importing from PSK changes the normals of the mesh, which can cause neck seams and strange lighting effects. personally, I use 3DS Max to convert the PSK models to FBX, and use these in blender, since the blender plugin is problematic. the files in the resource above contain the correct normals needed to avoid this issue


Packaging the mod:

  1. DQXIS UE4

  2. u4pak_dq11_v2_packer by spiritovod


DQXIS UE4

Before getting started, make sure to use the link above to download DQXIS UE4. This version of the Unreal Editor is made specifically to work with DQXI S Definitive Edition. Using this version over a standard 4.18.3 install ensures you don't have to take extra steps to get the mod working (such as mike9k1's old cook fixer scripts) and allows you to import models with working outlines, as this guide will explain in full. There may be other advantages to using this version too!

If you are going to stick with a standard 4.18.3 install, please note that any steps involving outlines can be disregarded.

Part I: Acquiring the models & textures

If you mean to use models from XI or XI S, check out our DQXI Character Models Resource (coming soon). This includes all the outfits for the party characters, their canon weapons, some unique NPCs and more. Using models from this pack will save a lot of headache.

Or, if the models you want to work with are not included in the pack, you could try extracting them yourself using QuickBMS + Umodel. For the sake of this tutorial, I will assume you know how to extract files from the game at this point. If not, we have a full written tutorial here!

OPTIONAL: (for best quality models, requires 3DS Max)

  1. export chosen models as GLTF in newer versions of umodel (or FBX in Olganix's custom umodel)

  2. export the same models again as PSK

  3. batch export all the PSKs as FBXs in 3DS Max with the ActorX scripts linked above

  4. in blender, import the GLTF or FBX from step 1 - make sure you are selecting Shading > Use Normal Data (or Include > Custom Normals for FBX importer)

  5. in the same scene, import the same FBX from step 3

  6. follow the instructions on the image to the right, these are for FighterZ but the process is just the same (yes, that is me!! - Komodo)

This will give you a version of the original mesh with correct normals. Normals are the values in a mesh that determine how the surface reacts to light. PSK files do not store this information. The reason this is important is because if you let blender/3ds or unreal editor generate their own normals, details like sharp edges may appear rounded and seams between meshes (i.e. the infamous neck seam from older versions of Project Rebuild) will become visible.

Part II: Editing the models

Blender

  1. If importing models from DQXI to edit, first set skeleton's scale to 0.01 on all axis. This may be correct already depending on what version of umodel and what setting you exported with. Press N in 3D view to bring up the panel on the right.

3. Make your edits!

For this tutorial I have selected the eyepatch model from MI_P002_Wear_E004 and removed it, so in game the pirate outfit should no longer have an eyepatch.

If you have any unused materials (such as the outline material from step 2) be sure to remove them from the materials list by hitting the downward arrow on the materials list and selecting Remove Unused Models.

Useful resources:

Official Blender Tutorials Page
Blender Fundamentals YT Playlist
Youtube: Introduction to vertex groups (rigging)

mod of the year ^

2. If importing models from the original release of the game, we need to remove the MI_Base_Outline material. Depending on your umodel settings, it may not be named correctly in blender. Nevertheless, this material is usually the last on the list and can be identified as the material that covers the entire mesh when selected. To remove it, hit select in the materials menu and hit delete > vertices.

This material is used differently in DE, and no longer requires this shell model to function, so let's get rid of it!

Blender - Final Checks
skip to 3. if static mesh (most weapons, env objects etc)

  1. Before exporting we need to make sure the mesh is properly linked to the skeleton, to do that we must check the relations (Object Data > Relations) to ensure the parent is set to Armature.

3. This seems unimportant, but I've experienced several crashes for skipping this step so consider it vitally important.

Remember to name your skeleton Armature and your model the correct in-game name. This will ensure Unreal Engine deals with it as it should.

2. Additionally, for the model to be poseable, we need to set up an Armature modifier in Modifier Properties > Add Modifier > Deform > Armature. It should be set up like this.

4. Now it's time to export the model. Select the model and then shift+select the skeleton so they are both highlighted in 3D view.

Then go to export and select FBX as the format.

Under Include settings, Make sure Limit to Selected Objects is ticked, in case of stray objects such as duplicated skeletons, models and light sources - we don't want these in our assets.

Finally, in Armature settings, untick Add Leaf Bones, I'm not sure if this will cause problems in game, but it can definitely cause model/skeleton compatibility issues in Unreal Editor.

Part III: Setting up the mod in Unreal Editor

Cooking the models in DQXIS UE4

  1. You can do this now to save forgetting, or save it for later, but it is best to create a dummy material for the outline of the model. All you need to do to do this is to right click in the assets menu, Create Advanced Asset > Materials & Textures > Material Instance.

The name and location of the outline material vary depending on what kind of mesh you are importing. Finding the original .uasset file you intend to replace and opening it up in a hex editor can reveal the name and path of the appropriate outline material.

For Characters - name it MI_Base_Outline and drag it into the following path

Characters\Human\Common\Share\Outline

For Weapons - name it MI_Weapon_Outline and drag into the following path

Characters\Weapon\Common\Outline

It is completely unnecessary to alter this material in any way as it will not be part of the final mod, it just needs to exist for the cooking process!

3. Under Material settings, you can select materials if already imported or import the materials saved within the FBX file, which is what we are going to do!

Make sure Import Materials and Import Textures (if needed) are selected and then hit Import All.

Note: if experiencing crashes, one of the things to try is to replace the materials with material instances like the outline above, files with the prefix "MI_" are meant to be material instances, and in some cases mislabelling them as regular materials like this can cause crashes, but you can usually get away with it. I wasn't aware that this would cause crashes when I started this tutorial.

3. With the material (and possibly textures) imported, you can now go about dragging them into the correct folders. A typical character file structure in XI would be something like the following. My model belongs in Content\Characters\P002\Wear\Mesh, and the materials then belong in Content\Characters\P002\Wear\Material.

Face

Material

Mesh

Texture

Wear

Material

Mesh

Texture

etc.

IMPORTANT: rename skeleton to S_Human_Base and leave it in the Human folder. It is only needed for the cooking process, so that the model references the correct skeleton in game. DO NOT include S_Human_Base.uasset or S_Human_Base.uexp in your mods!!!!

5. With the model fully set up, it's time to cook!

Before cooking, make sure to hit File > Save All so all the assets are updated.

Then select the File > Cook Content for Windows.

Aaaaand you're done! After a few seconds/minutes your files should be ready at:

Users\XXXX\Documents\Unreal Projects\XXXX\Saved\Cooked\WindowsNoEditor\XXXX\

2. Under Mesh settings, it is imperative for character models and other models beginning with the prefix "SK_" that Skeletal Mesh is ticked, this means it can be hooked to an existing skeleton in Unreal Editor, or left blank so Unreal Editor will import the internal skeleton of the FBX.

If you have a static mesh (prefix "SM_") do not tick Skeletal Mesh.

Create Physics Asset is unticked as it is usually unnecessary.

Import Normals and Tangents is selected to ensure the model reacts to light the same way it does in 3D software, this can prevent issues like incorrectly lit surfaces and neck seams. Whether or not this is important depends on the model.

4. Double click on the imported model and if not set correctly, ensure the materials listed here match up with the materials your mesh is supposed to use.

For the sake of this preview, I've tweaked my materials to show what the model will look like, if you haven't the model will be pure white - this is absolutely fine if all you're going to change is the model like me because the material files are not necessary for the final mod.

IMPORTANT: under SkeletalMesh settings, there is an option to pick Outline Material - if you do not set this value to the Material Instance we created earlier, the model will not be outlined in game. Also, despite the group being labelled Skeletal Mesh, the same process applies to static meshes as long as the engine was compiled correctly.

Packing the files for installation/distribution

note: common sense required here, if all you are doing is altering an existing model like me, ALL YOU NEED is the model files in Wear\Mesh. If you have altered the textures, include them too etc etc

to reiterate, S_Human_Base, MI_Base_Outline and other temporary assets are NOT to be included in the pak, only the files you intend to edit

  1. Open a clean directory and make a "JackGame" folder. Copy u4pak_dq11_v2_packer.exe into the directory [image 1]


(Note that the images below are slightly older- we've since combined these tools into a single exe that no longer requires Python)

3. Double click u4pak_dq11_v2_packer.exe [image 3]

2. Recreate the same directory structure as before under "JackGame" and copy your uasset/uexp files into there. [image 2]

4. Your new pak will appear shortly, rename it to suit your mod [image 4]

5. Copy the pak file into <steamapps>\common\DRAGON QUEST XI S\Game\Content\Paks [image 5]

NOTE: If you are making a Project Rebuild mod, name your .pak according to this format-
"Project_Rebuild_ZZ_My_Mod_Name_v0.0.1.pak"

This will ensure the correct load order and that your mod loads properly on top of Project Rebuild.

Congratulations, if all worked as planned you should have a working model in game!

The main thing that can go wrong in this process is causing CTDs whenever the mesh is loaded in game. If you experience any crashes there are a few things to verify:

  1. Ensure that in every step of the process you used the correct names for models, materials and textures.

  2. Also check to ensure the placeholder skeleton in UE4 Editor and the internal skeleton of the mesh match up.

  3. Finally, try replacing the materials with material instances of the same name.

If all else fails please reach out to me on discord and I'll do my best to help - Komodo

(sword of light scabbard - a static mesh mod made following this process)

Additional Tools & Information

Model Import/Export Plugins

Blender Script for enabling the Mirror Modifier (by kmxn)

Used for creating automatic mirrored weights by renaming vertex groups to a convention blender understands.

(must be ran before and after applying the mirror modifier)

import bpy


obj = bpy.context.active_object

bpy.ops.object.mode_set(mode='OBJECT',toggle=True)

for g in obj.vertex_groups:

if g.name.startswith('BN_L'):

print(g.name)

g.name = g.name.replace("_L", "_X") + '.L'


elif g.name.startswith('BN_R'):

print(g.name)

g.name = g.name.replace("_R", "_X") + '.R'

elif g.name.startswith('BN_EX_L'):

print(g.name)

g.name = g.name.replace("_L", "_X") + '.L'

elif g.name.startswith('BN_EX_R'):

print(g.name)

g.name = g.name.replace("_R", "_X") + '.R'


elif g.name.startswith('BN_Ph_L'):

print(g.name)

g.name = g.name.replace("_L", "_X") + '.L'


elif g.name.startswith('BN_Ph_R'):

print(g.name)

g.name = g.name.replace("_R", "_X") + '.R'

elif g.name.endswith('.L'):

print(g.name)

g.name = g.name.replace(".L", "").replace("_X", "_L")

elif g.name.endswith('.R'):

print(g.name)

g.name = g.name.replace(".R", "").replace("_X", "_R")