Weapons · Updated Apr 17, 2026
Shotgun — Maya Modeling Guide
Shotgun — Maya Modeling Guide
Reference for building the FP and TP shotgun meshes for SystemLink. Covers proportions, poly budgets, pivot, required sockets, UV layout, and UE5 export/import.
#Reference — Halo M90 Shotgun
The M90 is a pump-action, full-gauge shotgun. Key silhouette features:
- Long barrel with a flat muzzle (no choke taper)
- Thick tubular magazine under the barrel
- Wide, boxy receiver
- Short pistol grip (not a full stock — more of a bullpup-adjacent form)
- Pump fore-end sits roughly at mid-barrel
Approximate real-world length for feel: ~900mm total. In UE5 units (1 unit = 1 cm), ~90 units barrel-to-stock.
#Two Meshes Required
| Mesh | Use | Notes |
|---|---|---|
| FP (First-Person) | Visible to local player only | High detail, arms/hands included or separate, fills the screen well |
| TP (Third-Person) | Seen by all other clients | Lower detail, correct silhouette, fits the character's hand socket |
#Poly Budget
| Mesh | Target Tris | Notes |
|---|---|---|
| FP weapon only | 8,000 – 14,000 | Bump/normal maps carry detail |
| FP arms (if included) | 6,000 – 10,000 | Combined with weapon mesh or separate SKM |
| TP weapon | 2,000 – 4,000 | Seen small, LODs do the rest |
These are targets, not hard limits. The AR is the reference — stay in the same ballpark.
#Pivot Point
Set the pivot to the right-hand grip position — where hand_r will attach.
- X axis: points forward (down the barrel)
- Y axis: points right
- Z axis: points up
This is the origin UE5 will use to snap the mesh onto the character's hand socket. Getting this right means the weapon won't be floating or clipping in-hand without extra offset tweaking.
#Required Sockets
These are added in UE5's Skeleton editor after import, but you should plan their positions now while modeling so you know where to place them.
| Socket Name | Where | Purpose |
|---|---|---|
MuzzleFlash | Tip of the barrel, centered | Origin of fire traces and muzzle cue (blast VFX/sound). Forward = +X. |
LeftHandGrip | Pump fore-end (where left hand grips) | LeftHandIKEffectorSocketName — drives left-hand IK. |
LeftHandElbow | ~15–20cm behind and below left hand | LeftHandIKJointTargetSocketName — pole vector for left elbow. Optional but strongly recommended. |
MuzzleFlash is the one that matters most for gameplay. The fire ability reads FireMode.MuzzleSocketName to get the trace origin. If this socket doesn't exist or is misnamed, traces will fall back to the weapon actor origin.
#Skeleton
Both FP and TP meshes should be skeletal meshes (not static meshes) so they can receive animation and IK.
#Minimum Bones
FP mesh (if arms-included):
root
└── weapon_root ← weapon driven by anim BP
├── barrel
├── pump ← animated for pump cycle
└── trigger
└── upper_arm_r
└── lower_arm_r
└── hand_r ← attach point
└── upper_arm_l
└── lower_arm_l
└── hand_l ← IK effector drives this
TP mesh (weapon only, no arms):
root
└── weapon_root
├── barrel
└── pump
The TP weapon attaches to the character's hand_r socket on the character skeleton — it does not need its own arm bones.
#UV Layout
- 1 UV channel (UV0) for textures
- 1 UV channel (UV1) for lightmap (static lighting) — UE5 can auto-generate this on import if you check "Generate Lightmap UVs"
- Keep the pump, barrel, and receiver as separate UV islands — they'll animate independently
- 4px gutter between islands at 2048 resolution
- Aim for 2048×2048 for FP, 1024×1024 for TP
#Maya Export Settings
Export both meshes as .fbx from Maya:
| Setting | Value |
|---|---|
| FBX version | FBX 2020 or later |
| Scale | 1.0 (UE5 will handle cm conversion) |
| Axis | Y-up → UE5 will re-orient automatically |
| Smoothing Groups | On |
| Tangents and Binormals | On (export from Maya, not computed on import) |
| Triangulate | On (do it in Maya, not on import — more predictable) |
| Bake Animation | Off (no animation in base export) |
| Include | Mesh + Skeleton only |
Export each mesh as a separate .fbx:
SK_SL_Shotgun_FP.fbx
SK_SL_Shotgun_TP.fbx
Drop into: Content/SystemLink/Weapons/Shotgun/Meshes/
#UE5 Import Settings
When importing each .fbx in the UE5 Content Browser:
| Setting | Value |
|---|---|
| Skeletal Mesh | On |
| Import Mesh | On |
| Import Animations | Off (import separately) |
| Normal Import Method | Import Normals and Tangents |
| Generate Lightmap UVs | On |
| Transform — Import Uniform Scale | 1.0 |
| Create Physics Asset | Off (weapon meshes don't need physics) |
If you already have a skeleton from a previous import (e.g., from the AR), you can point the FP shotgun skeleton reference to SK_SL_Shotgun_FP_Skeleton — do not reuse the AR skeleton unless the bone names are identical.
#After Import — Add Sockets in UE5
- Open the skeletal mesh in the Skeleton editor
- Right-click a bone → Add Socket
- Name it exactly as listed above (
MuzzleFlash,LeftHandGrip,LeftHandElbow)
- Position using the socket preview — check alignment against the mesh in-viewport
Then in DA_SL_Shotgun → FPMeshData / TPMeshData:
AttachSocketName= name of the socket on the character mesh (e.g.,WeaponSocket_R)
LeftHandIKEffectorSocketName=LeftHandGrip
LeftHandIKJointTargetSocketName=LeftHandElbow
MuzzleSocketName(onFSLWeaponFireMode) =MuzzleFlash
#Checklist Before Handing Off to UE5
- [ ] Pivot at right-hand grip, axes oriented correctly
- [ ] Triangulated
- [ ] No N-gons, no degenerate faces
- [ ] Single smoothing group per logical surface region
- [ ] UV islands not overlapping (UV0), reasonable texel density
- [ ] Skeleton exported with mesh
- [ ] Pump bone separated and named (needed for pump animation)
- [ ] Exported as two separate FBX files (FP + TP)
- [ ] File names:
SK_SL_Shotgun_FP.fbx,SK_SL_Shotgun_TP.fbx