Skip to content

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

  1. Open your character. Do not change the Expression Editor: its expressions are the facial rig.
  2. Export VRM with every reduction option off. Bone reduction removes hair and skirt bones.
  3. VRM 1.0 or 0.0 both import.

2. Import

  1. Create Content/MyGame/VRoid/Rook.
  2. Drag the .vrm file into it. In the VRM4U import dialog keep the defaults; in its advanced options, No MorphTarget and No physics asset must stay off.
  3. 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.
  4. 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

  1. Duplicate Characters/VRoid/Dorran/Animation/IK_AvatarSample_C into your character's Animation/ folder and set its Preview Mesh to your VRoid mesh. VRoid Studio exports all use the same J_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.
  2. Duplicate RTG_Manny_To_AvatarSample_C (masculine) or RTG_Quinn_To_AvatarSample_K (feminine) and set its target IK rig to your new rig.
  3. 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

  1. Create an Animation Blueprint for your VRoid skeleton. Parent class: XenoCoreFaceAnimInstance.
  2. In its AnimGraph, add Retarget Pose From Mesh. Set Retarget From to the parent skeletal mesh component, and IK Retargeter Asset to your retargeter.
  3. 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.
  4. 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.

  1. Right-click Characters/VRoid/B_XenoCore_Cosmetic_VRoid_Base and 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.Masculine or .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.
  2. Right-click Characters/VRoid/B_XenoCore_Party_VRoid_Base and 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 the Characters/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_Invis for a feminine body. The base uses SKM_Manny_Invis, and the body-mesh rules switch it by tag either way.
  3. 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 of Game/DT_XenoCore_ExperienceCurves; each sample has its own). Then either add it to Starting Roster on BP_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).
  4. 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.

  1. Open your VRoid skeleton (SKEL_...). In the skeleton tree, right-click J_Bip_R_Hand and choose Add Socket. Name it exactly XC_WeaponGrip_R.
  2. Right-click J_Bip_C_Chest, add a socket, and name it exactly XC_WeaponStow_Back.
  3. Right-click each socket › Add Preview Asset and pick a sword mesh, for example Weapons/GreatSword/SM_GreatSword.
  4. 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 example Content/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.
  5. 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_L for masculine, SKEL_AvatarSample_K for feminine).
  6. 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

  1. Open Maps/L_XenoCore_Gym, press Play (not Continue), and field your member from the Party screen (menu: pad Y, keyboard I).
  2. It follows you and runs with the same animation as the Mannequin members.
  3. Watch its face for ten seconds: it blinks at random intervals.
  4. Engage an enemy. The expression hardens when the battle starts and changes again when the character is Toppled or Dazed.
  5. The sword sits on its back while exploring (sheathed), and in its hand once drawn.
  6. 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.

Going further