Export DA:I model into Blender
This tutorial will walk you through the process of exporting a 3d model out of Inquisition and into Blender.
Contents
What you need:
I am using the following programs/versions:
Frosty Editor | 1.0.5.7 | https://frostytoolsuite.com/downloads.html part of the Frosty Tool Suite, not the ModManager |
Blender | 2.8 | http://www.blender.org/download/releases/2-80/ |
If you are using other versions of the tools that will probably still work, but the user interface may look different.
1) Find the character you want to export in Frosty Editor.
Filtering in Frosty
You can filter by using the topmost box in the Data Explorer part of the UI. The example below shows only meshes that are not animated and have "templar" as part of their file name (such as prp_re_seeker_templar_flag_mesh). To search for only animated templars (armour etc.), use skinnedmeshasset instead.
Exporting
I'm going with Cassandra's Skyhold PJ plate, because first of all she's pretty and I love her, and second of all, she has six meshes in total, which is sort of a lot. Also, how many people use plate armor as part of their pajamas? How badass is that?
For any character that you want to hook up in Blender, you will need to export MeshAssets and TextureAssets for head, face, hair, armor.
You export an asset by opening it in the preview, and then clicking on "export" (screenshot_03).
For meshes:
Skeleton | DA3/Animation/Humanoid/Human/AdultFemale/hf_skeleton |
Version | FBX_2017 (the latest) |
Scale | Meters |
For textures: I'll use PNG format.
1.1) Armor
Armor can either come in parts or as a single mesh
Cassandra has four pieces of armor, whereas Alistair has just one. If you want to read up more on that, check out Padme4000's excellent Tutorial on DeviantArt.
You can see which meshes you need by looking them up in the AppearanceMeshSet (screenshot_02), you can also open them directly from there.
That will give you the following meshes:
Mesh(es) | Path | Files |
---|---|---|
Legs | DA3/Actors/Cassandra/Appearances/Var1/Models | hf_cassandra_var1_core_0001_model_mesh |
Arms | DA3/Actors/Cassandra/Appearances/Var1/Models | hf_cassandra_var1_core_0010_model_mesh |
Chest | DA3/Actors/Cassandra/Appearances/Var1/Models | hf_cassandra_var1_core_0100_model_mesh |
Buttflap | DA3/Actors/Cassandra/Appearances/Var1/Cloth | hf_cassandra_var1_core_0100_cloth_model_mesh |
You may want to export the textures as well, while you are at it. They won't be needed until part 2 of the tutorial (forthcoming), but I will assume that you have them by then and link here, so you may as well do it now.
Armor base textures and bumpmap: DA3/Actors/Cassandra/Appearances/Var1/Textures.
- hf_cassandra_var1_0111_t
- hf_cassandra_var1_0111_n
- hf_cassandra_var1_0111_d
- hf_cassandra_var1_0111_s
Textures for the colored parts: DA3/Actors/BaseMaterials/Cloth.
- ptrn_cloth_lustrouscotton_d
- ptrn_cloth_lustrouscotton_s
- ptrn_cloth_samite_d
- ptrn_cloth_samite_s
- ptrn_leather_bear_d
- ptrn_leather_bear_s
1.2) Head
You will need to export the textures for eyes and eyebrows just once, as they are part of the head mesh.
Head | DA3/Actors/BaseHeads/Cassandra | mt_cbt_cass_mesh |
Face | DA3/Actors/BaseHeads/Cassandra | hf_har_cass_n_e3 hf_har_cass_d_e3 hf_hed_cass_n hf_hed_cass_d hf_hed_cass_s hf_hed_cass_ssm |
Hair | DA3/Actors/BaseHeads/Hair/Textures | mh_hf_cassandra_d mh_hf_cassandra_n |
Eyes |
DA3/Actors/BaseHeads/Textures/Eye |
UHEL_F_d (lashes female) UH_eye_t (Eye tint) UH_Iris_n (iris bumpmap) UH_eye_n (eye bumpmap) UH_eye_d (eye normal map) ... and whatever else you want to experiment with. |
2) Importing it into Blender
The interface
Now it's time to fire up Blender. Do File/New/General. You'll see this:
Delete the cube and select the root object, "SceneCollection", in the Outliner.
Importing the files
Now we start importing all the meshes. Select File -> Import -> FBX from the menu and do one at a time.
If you have no idea what you're doing, best import all files first, then proceed with the instructions below.
I'm starting with hf_cassandra_var1_core_0001_model_mesh.fbx
You will see a blue X-like thing. That's the skeleton - it'll be required for animation. Look at the scene editor now - there is a yellow thing called "Skeleton". Hiding that will make the blue thing go away, which is fine, because we don't need it for a long time yet.
Exporting the files again
Select File / Export / FBX. Make sure that under "Geometry", "Tangent space" is selected. Save, and try reimporting into Frosty. If you haven't made any mistakes, you should be good to go now!
What are these things I am seeing?
Expand the yellow Skeleton. You will see the following things:
- Meshes (the triangular icon): The actual 3d objects
- LODs (the spiky object, annotated blue below): Those are for the purpose of grouping meshes together for the different mesh quality levels
- Skeleton (annotated purple below): This hooks up the different objects with the animation data.
The annotations below assume that you don't want to reimport because you want a high-quality mesh to play around with. Please disregard them if you want to re-import.
Why are there duplicates, and which one do I want?
The fbx-Files we exported contain data for every resolution, that is, one empty and one copy of every mesh.
- Most files will have one mesh per resolution, but the head fbx contains three: Head, eyes, and eyelashes.
Sort the duplicates for re-import
You need to distribute the individual meshes to the correct LOD groups. _lod0 contains the highest resolution, _lod1 the next-highest, and so on.
Find out which mesh has which number of polygons / vertices, and distribute them accordingly:
- Select the mesh (triangular icon) in the outliner
- Select the LOD (three axes) in the outliner
- Press Ctrl+P to parent the mesh to the LOD
- select "Object (Keep Transform)
Delete the duplicates
We want to keep the one with the highest poly count. Because we're lazy, we will use a python script to do this.
Careful: This may crash Blender, so save now. If you crash, just open it and try again.
By script
Switch to the "Scripting" perspective:
Copy this script to your clipboard and paste it into the window. If you can't paste, click on "Text -> New" (Alt+N).
Then, click the "Run Script" button.
This script was written by yours truly (~manavortex), if I improve it, I'll update the source on github.
This should remove all but the highest poly count version of a mesh, and any empty LODs. If it doesn't, check out the "by hand" section for manual cleanup.
By hand (the script doesn't work/wtf is it doing)
Go back to the "Layout" perspective if you are in the "Scripting" perspective so you can use the Outliner again. Delete any LODs that are still sticking around.
Now you need to find out which of the remaining meshes actually has the highest poly count so you can delete the others.
You can either do this (again) by running this script (you will see the results in the system console, or by using the edit mode.
You will be taken to edit mode automatically if you click the green icon under a mesh instead of the yellow one.
Compare the Vertex count in the taskbar, and delete the low-poly versions.
Check if the root element is selected
If it's not, do that - otherwise, your stuff will end up nested and will look different from the tutorial.
Add all meshes to the first skeleton
First, switch the View back to Object Mode.
For every Skeleton.00x, repeat the following steps:
- Click on each of the contained meshes
- In the preferences area on the bottom right, set the "Object" to "Skeleton"
- Shift-Click on the first Skeleton object
- Move the mouse over the 3d viewer
- press Ctrl+P to assign a new parent
- Select "Object (Keep Transform)"
- Rinse and repeat