Add a VRoid party member¶
Designer · 2 h · No code
Result: a character made in VRoid Studio is a playable party member. It runs, fights, blinks and changes expression in battle, using the same animations, abilities and weapon sockets as every other member.
Read this first: this route depends on the VRM4U plugin
Importing a .vrm file, and the sample VRoid members' spring bones and facial expressions,
use the third-party VRM4U plugin. It ships with the project (Plugins/VRM4U) and builds
with it, and XenoCore.uplugin depends on it. The scripted pipeline used to build the samples
is not part of the product, so this page describes the editor-only route: every step can be
done by hand in the editor. If you have removed VRM4U from your copy, you cannot import .vrm
files; use a mesh on the Mannequin skeleton instead
(Add a party member).
Before you start¶
- Add a party member. A VRoid member is the same assets plus a cosmetic part that carries the VRoid body.
- VRoid Studio (Stable), and the VRM4U plugin enabled in Edit › Plugins.
Licence: never ship an unedited VRoid sample model
VRoid Studio output may be used in paid games. pixiv's sample models may be used commercially but may not be redistributed for a fee unedited. Edit a sample's textures and parameters in VRoid Studio into an original, or build your own, before you sell anything. Do not build a character creator from VRoid data.
The seven sample characters ship edited: each has its own tint on hair and clothing
(Base Color Tint on its MI_Lit_* hair and cloth instances) and the XenoCore emblem
painted into its outfit texture at the left chest. Give your own sample-based character an
edit of its own: change Base Color Tint on its hair and cloth material instances, and paint
your own mark into its outfit texture in an image editor, then re-import the texture (or make the
edit in VRoid Studio before export). The samples' VL_/VM_ objects in each VRM/ folder carry no
licence terms (the licence fields are empty; the meta holds bone mapping only). Your own
import's VL_ object carries whatever the VRoid export dialog was set to.
How a VRoid member works¶
The pawn still uses an invisible Mannequin body (SKM_Manny_Invis or SKM_Quinn_Invis, Lyra's
own, under Content › Characters › Heroes › Mannequin › Meshes). That body runs XenoCore's animation, plays
every montage and ragdolls on death. The VRoid mesh is a cosmetic part attached to it that
copies its pose through an IK retargeter. Nothing in the abilities, AI or party code knows the
difference.
The retargeter copies joint rotations, not hand positions, so a VRoid hand is never exactly
where the Mannequin's is. The weapon is therefore held by the VRoid body: its skeleton carries
the two weapon sockets, XC_WeaponGrip_R and XC_WeaponStow_Back, and a weapon attaches to
whichever body has them. You place them per character in step 7.
Each character has one folder, named for them, laid out the same way. Dorran, the sample used below,
is Characters/VRoid/Dorran:
| Folder | Holds |
|---|---|
Dorran/ |
What you edit: pawn, cosmetic part, member definition, anim profile, portrait |
Dorran/Mesh/ |
The meshes (SK_ and its _Lit copy), the skeleton with the weapon sockets, physics, pose assets |
Dorran/Materials/Lit/ |
The lit material instances the game draws |
Dorran/Materials/Toon/ |
VRM4U's own toon materials, kept as a fallback |
Dorran/Textures/ |
Every texture |
Dorran/Animation/ |
The post-process and retarget anim Blueprints, face animation, IK rig, retargeter |
Dorran/VRM/ |
The importer's licence and metadata objects |
The two bases, the face-expression table and the lit master material sit directly in
Characters/VRoid/. Asset names keep the AvatarSample_C suffix the importer gave them.
SK_ is the mesh here, and SKEL_ is the skeleton
The importer's prefixes are the reverse of Lyra's (where SK_ is a skeleton and SKM_ a
skeletal mesh). In a VRoid Mesh/ folder, SK_AvatarSample_C is the mesh and
SKEL_AvatarSample_C is the skeleton that carries the weapon sockets. See
Asset naming.
| Piece | Sample (Dorran) | Role |
|---|---|---|
| VRoid mesh | Mesh/SK_AvatarSample_C_Lit |
What you see |
| Retarget anim Blueprint | Animation/ABP_XenoCore_VRoidRetarget_C |
Copies the invisible body's pose, and drives the face |
| Cosmetic part | B_XenoCore_Cosmetic_VRoid_C |
Actor carrying the mesh and its animation-style tag |
| Pawn Blueprint | B_XenoCore_Party_VRoid_C |
Invisible body, cosmetic part, stats, gear |
| Member definition | PartyMember_VRoid_C |
Name, portrait, pawn class |
| IK rig and retargeter | Animation/IK_AvatarSample_C, Animation/RTG_Manny_To_AvatarSample_C |
Map the Mannequin skeleton onto the VRoid one |
| Weapon sockets | Mesh/SKEL_AvatarSample_C: XC_WeaponGrip_R on J_Bip_R_Hand, XC_WeaponStow_Back on J_Bip_C_Chest |
Where this character holds the drawn weapon and carries the sheathed one |
| Post-process anim Blueprint | Animation/ABP_Post_AvatarSample_C (made by VRM4U on import) |
Spring bones for hair and cloth, and turns face curves into the model's own morph targets |
The last row is why the face needs VRM4U at runtime as well as at import: the mesh's Post Process Anim Blueprint uses VRM4U nodes.
Steps¶
1. Export from VRoid Studio¶
- Open your character. Do not change the Expression Editor: its expressions are the facial rig.
- Export VRM with every reduction option off. Bone reduction removes hair and skirt bones.
- VRM 1.0 or 0.0 both import.
2. Import¶
- Create
Content/MyGame/VRoid/Rook. - Drag the
.vrmfile into it. In the VRM4U import dialog keep the defaults; in its advanced options, No MorphTarget and No physics asset must stay off. - Check the import: open the skeletal mesh and look at Morph Targets. A VRoid Studio export has about 56. Zero means the face will never move: delete the import and try again.
- Open the imported skeletal mesh and set its Physics Asset to the imported
PHYS_asset. The importer creates it but does not assign it, and ragdoll death needs it.
Toon or lit materials
The import brings VRM4U's toon materials. The samples instead draw a _Lit copy of each mesh
whose materials are instances of Characters/VRoid/M_XenoCore_VRoidLit, which lights
like the rest of the world and does not depend on VRM4U. To match them, duplicate your mesh
and swap its materials for instances of that material.
3. Build the IK rig and retargeter¶
- Duplicate
Characters/VRoid/Dorran/Animation/IK_AvatarSample_Cinto your character'sAnimation/folder and set its Preview Mesh to your VRoid mesh. VRoid Studio exports all use the sameJ_Bip_*bone names, so the chains carry over. If a chain shows red, reassign its bones by hand. Automatic characterisation does not recognise VRoid rigs, so do not rely on it. - Duplicate
RTG_Manny_To_AvatarSample_C(masculine) orRTG_Quinn_To_AvatarSample_K(feminine) and set its target IK rig to your new rig. - In the retargeter, keep Run IK Rig off. With IK on, the ankles are pulled to the Mannequin's ankle height and the whole body sinks into the floor.
4. Make the retarget anim Blueprint¶
- Create an Animation Blueprint for your VRoid skeleton. Parent class:
XenoCoreFaceAnimInstance. - In its AnimGraph, add Retarget Pose From Mesh. Set Retarget From to the parent skeletal mesh component, and IK Retargeter Asset to your retargeter.
- Add Modify Curve after it, expose its Curve Map pin, and connect the Face Curves variable to it. That one wire drives blinking and expressions.
- Connect to Output Pose, compile and save. Compare against
ABP_XenoCore_VRoidRetarget_C.
5. Make the member¶
The pawn uses a member definition and pawn data like any other member.
- Right-click
Characters/VRoid/B_XenoCore_Cosmetic_VRoid_Baseand choose Create Child Blueprint Class. On its inherited MeshComponent, set the mesh to yours and Anim Class to your new anim Blueprint. In Class Defaults, set Static Gameplay Tags to one tag,Cosmetic.AnimationStyle.Masculineor.Feminine, to match the body. The base has no tag, so skipping it leaves the body on the base's default mesh and the unarmed masculine clips. - Right-click
Characters/VRoid/B_XenoCore_Party_VRoid_Baseand choose Create Child Blueprint Class. Do not duplicate a sample member: a copy brings that character's gear, learnset, skill tree and anim profile with it, silently. The base holds only the invisible Mannequin body and the body-mesh rules that pick it, so leave those alone. In the child's Class Defaults set:- Cosmetic Part: your cosmetic part.
- Combatant Pawn Data:
Characters/VRoid/PawnData_XenoCore_Party_VRoid, for any body. Its Pawn Class is the VRoid base, so a member does not also load the Mannequin colour samples (B_XenoCore_Party_Manny/_Quinn) and their materials, as theCharacters/Party/PawnData_XenoCore_Party_*assets would. Empty means the character cannot be hurt or die. - Stats Effect and Combatant Level, exactly as in Add a party member.
- On the Mesh component, Skeletal Mesh Asset:
SKM_Quinn_Invisfor a feminine body. The base usesSKM_Manny_Invis, and the body-mesh rules switch it by tag either way.
- Duplicate
PartyMember_VRoid_C, set Member Class to your pawn, Display Name, Portrait, Menu Portrait (the full-body main-menu card) and Experience Curve (a row ofGame/DT_XenoCore_ExperienceCurves; each sample has its own). Then either add it to Starting Roster onBP_XenoCore_Party, which starts with Kael and Mira, or have an NPC recruit it as the other five samples are (Recruit a party member from an NPC). - Duplicate
DA_XenoCore_AnimProfile_VRoid_C(a data asset; data assets cannot have a base) beside your pawn and set the pawn's XenoCore › Animation › Anim Profile to the copy. It is empty, so nothing changes until you give the character its own clips; see Give a character its own combat animations.
Fails silently: two members share one anim profile
Point every member at its own profile. Two pawns on one profile share it: giving either its own Topple changes both.
6. Give them their own kit¶
A child of the base starts with the party base's defaults: the default learnset, no skill tree, the Junk Sword and its Talent Art (Turn Strike), and no victory emote. The duplicated member definition still carries the sample's role and AI profile. Set each one:
| Piece | Where | How |
|---|---|---|
| Arts | Pawn Class Defaults › XenoCore › Arts › Art Learn Table | Duplicate a learnset into your folder and edit its rows. Three palette slots are open at level 1. See Set palette slots and unlocks. |
| Talent Art | The weapon's ability set | A Talent Art belongs to the sword, not the character. For a character-specific Talent Art, give them their own sword: a child of B_XenoCore_Sword_Base and of ED_XenoCore_Sword_Base, whose ED grants AbilitySet_XenoCore_SwordCommon plus a set holding only the Talent (a child of GA_XenoCore_TalentArt_Base). See Make a Talent Art and Add a weapon. The samples are Isolde, Sabine and Tamsin's Violet, Amber and Ivory Swords. |
| Skills | Pawn Class Defaults › XenoCore › Skills › Skill Tree | Point it at a tree, or make one. See Add a skill or a skill tree. |
| Starting gear | Pawn's equipment component, Starting Equipment | The sword above in Weapon, plus armour. |
| Weapon type | Pawn's equipment component, Allowed Weapon Types | The kinds of weapon the character may wield. Every sample is DA_XenoCore_WeaponType_Greatsword. Saving the pawn reports an error if the starting weapon is not allowed. |
| Role and AI | Member definition: Role, and XenoCore › AI › AI Profile | A healer wants a higher Heal Threshold. See Tune companion AI. |
| Victory emote | Your anim profile's Victory Montages | Empty means the character does not celebrate. See Give a character its own combat animations. |
| Portraits | Member definition Portrait and Menu Portrait | Bake a portrait |
Fails silently: the new character has Turn Strike
The base's Junk Sword grants Turn Strike. Until your character's Starting Equipment names a sword of their own, their centre palette slot is Turn Strike, and equipping any other character's sword gives them that character's Talent Art instead.
Fails silently: a blue Mannequin draws inside the VRoid body
The pawn's body mesh rules still select the visible SKM_Manny or SKM_Quinn. In the
pawn's character parts component, every Body Meshes rule, and Default Mesh, must point at an _Invis mesh.
7. Place the weapon sockets¶
Without these the weapon falls back to the invisible Mannequin's hand and floats beside the hand you can see.
- Open your VRoid skeleton (
SKEL_...). In the skeleton tree, right-click J_Bip_R_Hand and choose Add Socket. Name it exactlyXC_WeaponGrip_R. - Right-click J_Bip_C_Chest, add a socket, and name it exactly
XC_WeaponStow_Back. - Right-click each socket › Add Preview Asset and pick a sword mesh, for example
Weapons/GreatSword/SM_GreatSword. - To see them in a pose: right-click a clip such as
Characters/Player/Animations/Kwang/AS_Kwang_Idle› Retarget Animations, pick your retargeter, and save the copy in a folder of your own that you will delete before shipping (for exampleContent/MyGame/Scratch). In the skeleton editor's Preview Scene Settings › Animation, pick that copy. An idle, a swing, and the draw and sheathe clips cover every pose worth checking. - Move and rotate each socket until the grip sits in the palm and the sheathed sword lies flat on
the back. Leave each socket's Scale at 1.0: a socket's scale multiplies every weapon the
character holds. To change how big weapons are, see Size in Add a weapon. A good start is to copy the values from a sample of the same body style
(
SKEL_AvatarSample_Lfor masculine,SKEL_AvatarSample_Kfor feminine). - Save the skeleton.
Fails silently: one character's weapons are smaller or larger than everyone else's
A weapon socket has a Scale other than 1.0. It is easy to change by accident while dragging the gizmo in scale mode. Set both sockets' Scale back to 1.0.
Fails silently: a misspelled socket name
The names are the contract and must match exactly. A socket named anything else is ignored, and the weapon goes back to floating, with nothing logged.
Every weapon follows the same two sockets
Tune them once per character, not per weapon. If one weapon sits differently from the others, fix that weapon's mesh or its actor instead (see Add a weapon).
Test it¶
- Open
Maps/L_XenoCore_Gym, press Play (not Continue), and field your member from the Party screen (menu: pad Y, keyboard I). - It follows you and runs with the same animation as the Mannequin members.
- Watch its face for ten seconds: it blinks at random intervals.
- Engage an enemy. The expression hardens when the battle starts and changes again when the character is Toppled or Dazed.
- The sword sits on its back while exploring (sheathed), and in its hand once drawn.
- Open the console (the key left of 1) and run
XenoCore.Weapon.Describe <name>to see what it may wield and is holding.
If it doesn't work¶
Fails silently: the face never moves
The import has no morph targets (re-import with Optimize Vertex off), the Curve Map
pin is not wired to Face Curves, or the mesh lost its Post Process Anim Blueprint
(the ABP_Post_ asset from the import). If you duplicated the mesh for lit materials, check
the duplicate still has it.
The character floats or sinks, or its arms stay out in a T-pose
The retargeter has Run IK Rig on, or a chain in your IK rig has no bones. Open the retargeter and check its preview against the Mannequin.
Fails silently: the character stands in place when it dies
The mesh has no Physics Asset. Assign the imported PHYS_ asset.
The sword floats off the hand, or sits inside the body
The skeleton has no XC_WeaponGrip_R / XC_WeaponStow_Back, or they are misspelled, so the
weapon is on the invisible Mannequin. Check step 7.