How to Replace the Weapon With a Custom Model in Unreal Engine 5 (Blender to UE5)
Import a custom weapon model into Unreal Engine 5 using Blender. Learn rigging, FBX export, materials, sockets, and demo setup.
Summary / Table of Contents
Introduction
In this guide, I’ll walk you through replacing the existing gun model in the project with a custom one.
You can use pretty much any weapon 3D model, but you’ll get the best results when the new model’s overall shape and proportions match the weapon you’re replacing. That keeps the animations looking believable and helps prevent hand clipping.

For this walkthrough I’m replacing the assault rifle, but the same workflow applies to any other weapon. You’ll prep and skin the mesh in Blender, then import it into Unreal Engine 5 (UE5) using the existing weapon skeleton.
Requirements
Blender 4.5 LTS or later (earlier versions may work, but I haven’t tested them).
A custom weapon model (FBX works great).
An Unreal Engine project with the Tactical FPS animations pack installed.
The Blender rig/source files for the weapon you’re replacing.
If you’re not sure where to find the Blender source files, check the product’s Additional files section on Fab.
Find a Custom Weapon Model
First, you need a model to work with. I used an assault rifle model created by Firewarden3D (licensed under Creative Commons Attribution).
The main thing I’m looking for is similar proportions to the original weapon. A similarly shaped weapon saves you a lot of headache later, because the hands and fingers will naturally line up better with the animations.

Download the model as an FBX file, then unzip it into a clean folder. After extracting, you’ll usually end up with something like:
a folder containing the model/source files
a folder containing the textures

(This varies a lot depending on the source site.)
Blender
Open the Weapon Rig in Blender
Now open the Blender rig/source files for the weapon you want to replace (assault rifle in this example).
If you don't have the source files downloaded yet, you can find them directly on the FAB store page for the specific product that you purchased from us.
After downloading, unzip the files and open the folder.
Inside the Rigs folder you’ll find the weapon-specific Blender rig. I would recommend duplicating it before editing, so you can always revert back to it later if something breaks.

Import the Model and Clean It Up
Open your duplicated rig file. You should see the weapon meshes plus the rig (called an Armature in Blender).


Create a Collection for the Custom Weapon
To keep things tidy, create a new collection for your custom model:
Right-click inside the Outliner.
Select New Collection.
Rename it to something like
RIG_CustomRifle.


You can rename items in Blender by selecting them and pressing F2.
Import the FBX
Go to File > Import > FBX, locate the FBX you downloaded earlier, and import it.

Clean Up Extra Meshes and Fix Transforms
If you’re lucky, the scale matches right away. Usually it’s a surprise. In many Sketchfab exports, you’ll also get extra meshes (multiple weapons, bullets, display props), plus odd rotation/placement.
Here’s a workflow that tends to be quick and reliable:
Hide the current weapon meshes by unchecking the box next to its collection.

Select everything with A.
Switch to wireframe with Shift + Z.

Box select with B, while holding Left Shift, to deselect the parts you want to keep.

Delete the remaining selected parts with X > Delete.

If the weapon comes in as multiple separate objects, I usually join them into one mesh to make scaling and positioning easier:
Select the parts and press Ctrl + J.

Then reset the imported model’s transforms:
Reset rotation: Alt + R
Reset location: Alt + G

Fit Scale and Placement to the Reference Weapon
Now we match the custom model to the weapon we’re replacing.
Re-enable the reference weapon by ticking the checkbox next to its collection.
Move the custom model with G and rotate with R until it lines up as closely as possible.

If the weapon is facing the wrong direction, a quick flip is:
Select the model, press R, then Z, then type
180.This will rotate the model 180 degrees on the Z axis.

It won’t be perfect (and that’s normal). Focus on the parts the hands interact with the most:
Grip (right hand is placed here)
Trigger + trigger area
Magazine (left hand will grab it)
Handguard / barrel (left hand placement in idle poses)

I usually start by matching the trigger area first, then adjust from there.
When you’re happy, apply transforms:
Select the model and press Ctrl + A > All Transforms

That sets location/rotation to 0,0,0 and scale to 1,1,1.
Then rename the mesh to something clear, like SK_CustomRifle (SK = skeletal mesh).
Separate the Magazine Mesh (Optional)
This step is optional, but I recommend it. It makes the magazine easier to tweak later (and the included demo logic expects the magazine to be its own mesh).
To separate the magazine:
Select the weapon mesh and enter Edit Mode.
Hover the magazine and press L to select linked vertices.

Make sure you also select internal parts (bullets/spring/etc), if your model has them.
Press P and choose Selection.


This turns the magazine into its own object.
Rename it to something like SM_CustomRifle_Magazine (SM = static mesh).
Clean Up Unused Material Slots (Optional)
Totally optional, but it keeps things clean (and I’m also the type who can’t ignore a messy material list).
Select the mesh, open the Materials tab, then choose Remove Unused Slots. Blender will remove any material slots that aren’t actually assigned to the mesh.

Skin the Weapon to the Existing Armature
Now we assign (skin) the custom model to the skeleton.

Enable the Deform Bones collection if it’s hidden.
These are the bones that will be exported to Unreal Engine. Controller bones are mainly there to make the rig easier to animate.

To bind the custom gun to the armature:
Shift-select the weapon mesh.
Shift-select the armature (second).
Press Ctrl + P and choose With Empty Groups.

This will:
add an Armature modifier to the mesh
create vertex groups for each deform bone
Assign Vertex Groups (Grip Trigger Bolt Etc)
Some bones are only used as sockets/reference points, so you don’t need vertex weights for everything. You can delete vertex groups by selecting them and pressing the minus button.
Common groups you’ll want to keep (names vary per weapon of course):
GripTriggerBoltDust_CoverCharging_HandleMagazine_ReleaseFire_Selector
A Simple Weighting Workflow
My usual workflow is:
In Edit Mode, select the whole mesh.

Assign everything to
Gripfirst. This gives you a solid baseline.

For a moving part (example: trigger), select just that part (hover it and press L).

In
Grip, click Remove to unassign that selection from the grip bone.Select the part’s real group (example:
Trigger) and click Assign.This transfers the influence from the grip bone to the trigger bone for the selected vertices on the mesh.
Repeat this process for each moving part you want animated by a specific bone.
Test Your Weights
To test, select the armature and switch to Pose Mode.
Move/rotate the bones and watch the mesh. Ideally you should not see obvious stretching, popping, or parts moving with the wrong bone.

Fix Pivot Issues for Moving Parts
During testing, you might notice some parts aren’t rotating cleanly around their intended pivot (trigger, fire selector, dust cover, etc).
That usually means the bone pivot isn’t aligned well with the new custom mesh.
Here’s a quick fix approach:
Re-enable the Deform Bones collection (if you hid it).

Enable Names under Viewport Display so you can see bone names.

For a part like the fire selector, select both the deform bone and its controller bone (example:
Fire_SelectorandCB_Fire_Selector).

Move them so the bone pivot (bone endpoint) sits right in the “hinge” center of the mesh.

Repeat for other parts like the trigger. Then go back to Pose Mode and test again.

Fix the Magazine Pivot Point
If the magazine mesh pivot is in the middle, it won’t attach nicely to the magazine bone. We want the magazine mesh origin aligned to the magazine bone, so attachments and animations behave predictably.
In Pose Mode, select the magazine bone.
Press Shift + S and choose Cursor to Selected (this moves the 3D cursor to the bone).

Switch to Object Mode, select the magazine mesh.
Go to Object > Set Origin > Origin to 3D Cursor.

Now the magazine pivot should align with the magazine bone.

You can sanity check it by adding a Copy Transforms constraint on the magazine mesh and targeting the Magazine bone on the armature. If it lines up perfectly, you’re good.

Before export, remove/disable the constraint and make sure transforms are applied.
Export FBX From Blender
At the end you should have two FBX exports:
receiver as a skeletal mesh (example:
SK_CustomRifle.fbx)magazine as a static mesh (example:
SM_CustomRifle_Magazine.fbx)
Export the Magazine (Static Mesh)
Select the magazine mesh in Object Mode.
Disable any temporary constraints (like Copy Transforms) so it exports cleanly.
Go to File > Export > FBX and export.
These are the export settings that I use for static meshes:
Static Mesh Export Settings
You can save these export settings as an Operator Preset in Blender to re-use it later.

Export the Receiver (Skeletal Mesh)
Select both the receiver mesh and the armature.
Go to File > Export > FBX and export.
These are the export settings that I use for skeletal meshes:
You should now have both FBX files ready to import into Unreal Engine.

Unreal Engine 5
Import the Custom Meshes Into Unreal Engine
Now we’ll set everything up in Unreal Engine. This guide assumes you’re testing using the included assault rifle demo setup, but the same import steps apply to any weapon.
Create a Clean Folder Structure
Create a folder for the weapon (example: CustomRifle). Inside it, create:
MaterialsMeshesTextures

Import the Magazine Mesh
Open the
Meshesfolder.Right-click and choose Import to...
Import the magazine FBX first.
Leave most settings as default. Just make sure you’re not importing textures or auto-creating materials if you don’t want that.

If faces look invisible in Unreal, your normals might be flipped. Fix it in Blender (flip normals) and re-export.
Import the Receiver Skeletal Mesh
Import the skeletal mesh FBX. The most important part is selecting the correct weapon skeleton on import, otherwise your animations won’t play without retargeting.
For the assault rifle, that skeleton is SKEL_TFA_AR. Other weapons follow the same naming pattern: SKEL_TFA_WeaponName (example: SKEL_TFA_Pistol).

Unreal will also generate a Physics Asset. It’s fine to leave it as-is for now.

After import, open the skeletal mesh and quickly verify that the bones drive the correct moving parts (trigger, bolt, etc).

Import Textures and Fix Common Material Issues
Most downloaded models come with textures. Import them by dragging them into your Textures folder.

Fix Normal Maps (OpenGL vs DirectX)
Unreal expects normal maps created for DirectX. Many online assets use OpenGL normals if they were not specifically created for use in Unreal.
If the shading looks “inside out" after assigning the textures in a material, open the normal map texture and enable Flip Green Channel.

Disable sRGB on Data Textures (Roughness/Metallic/AO)
Make sure roughness, metallic, and AO textures have sRGB disabled. Open each texture and uncheck sRGB if it’s enabled.

Create Material Instances
Now let’s create the actual weapon materials.
In the
Materialsfolder, right-click and choose Material > Material Instance.Name it something like
MI_CustomRifle(MI= material instance).

Open it and set the Parent to
M_TFA_Weapon_Master.

If you have separate roughness and metallic textures, uncheck Use Packed ORM Texture so you can plug them in separately. Then assign each texture to its correct slot.


If your model has bullet textures, duplicate the material instance and suffix it with _Bullet (example: MI_CustomRifle_Bullet), then assign the bullet textures there.

Finally, apply the material(s) to your custom weapon mesh and preview it.

Set Up Weapon Sockets for the Demo (Optional)
Only do this if you’re using the included demo logic. If you’re using your own gameplay/attachment system, you can skip it.
Open the receiver skeletal mesh, go to the skeleton hierarchy, and create these sockets:
SOCKET_Muzzle(muzzle flash / VFX spawn point)SOCKET_Laser(laser attachment spawn)SOCKET_Grip(grip attachment spawn)

Place them where you want the attachment or VFX to appear. You can set a preview mesh on a socket, like a grip mesh, to make placement easier.

Test in the Demo Map and Troubleshoot
Now for the fun part: test it in the demo map.
Open the weapon data asset for the weapon you’re replacing (example:
DA_TFA_AssaultRifle).

Assign your custom receiver skeletal mesh and your custom magazine mesh in their slots.

Remove meshes you don’t need. Keep the defaults you still want (example: bullet, casing, laser, grips).
Press Play in the demo map!


Conclusion
That’s it! Once you’ve done this a couple of times, it starts feeling way more straightforward (even if it’s still a little bit tedious).
If anything looks “off,” it’s almost always one of these:
Forgetting to apply transforms in Blender before exporting
Missing sockets
Incorrect weight painting (for example multiple bones influencing the same part)
Flipped normals on the exported meshes, making faces appear invisible in engine
Common Issues & Troubleshooting
If the demo setup behaves oddly (attachments spawning at origin, no muzzle flash, etc), it’s usually a socket issue. Double-check socket names and placement.
Left Hand Clipping Through the Gun/Grip Area
A super common issue when replacing existing weapon models is that the left hand will clip through the model.
If you notice hand clipping with your custom model, check out this guide:
How to Fix Left-Hand Clipping in Unreal Engine 5

No Bullets in Magazine When Doing Mag Check/Reloading
If the magazine bullets don’t populate, it’s because the demo expects bullet sockets on the magazine mesh. By default, it scans socket names by a prefix (commonly Bullet_), then fills bullet meshes into those sockets.
So you typically want names like:
Bullet_001Bullet_002Bullet_003And so on
The exact prefix is config-driven. If you want to be 100% sure, check your weapon config and the magazine logic:
Add as many sockets as you want. For placement, use the original magazine mesh as a reference:
Open your weapon data asset (example:
DA_TFA_AssaultRifle).Find the magazine mesh field.
Open that static mesh and inspect how its
Bullet_*sockets are placed.
If you want a quick shortcut, you can also replace the old magazine by reimporting:
Duplicate the old magazine mesh first (recommended).
Right-click the duplicate and choose Reimport with New File.
That replaces the mesh completely, so keep backups.
Once the magazine is set, reassign it in your weapon data asset and test again.
Last updated
Was this helpful?



