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

MeshUseNotes
FP (First-Person)Visible to local player onlyHigh detail, arms/hands included or separate, fills the screen well
TP (Third-Person)Seen by all other clientsLower detail, correct silhouette, fits the character's hand socket

#Poly Budget

MeshTarget TrisNotes
FP weapon only8,000 – 14,000Bump/normal maps carry detail
FP arms (if included)6,000 – 10,000Combined with weapon mesh or separate SKM
TP weapon2,000 – 4,000Seen 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 NameWherePurpose
MuzzleFlashTip of the barrel, centeredOrigin of fire traces and muzzle cue (blast VFX/sound). Forward = +X.
LeftHandGripPump fore-end (where left hand grips)LeftHandIKEffectorSocketName — drives left-hand IK.
LeftHandElbow~15–20cm behind and below left handLeftHandIKJointTargetSocketName — 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:

SettingValue
FBX versionFBX 2020 or later
Scale1.0 (UE5 will handle cm conversion)
AxisY-up → UE5 will re-orient automatically
Smoothing GroupsOn
Tangents and BinormalsOn (export from Maya, not computed on import)
TriangulateOn (do it in Maya, not on import — more predictable)
Bake AnimationOff (no animation in base export)
IncludeMesh + 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:

SettingValue
Skeletal MeshOn
Import MeshOn
Import AnimationsOff (import separately)
Normal Import MethodImport Normals and Tangents
Generate Lightmap UVsOn
Transform — Import Uniform Scale1.0
Create Physics AssetOff (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

  1. Open the skeletal mesh in the Skeleton editor
  1. Right-click a bone → Add Socket
  1. Name it exactly as listed above (MuzzleFlash, LeftHandGrip, LeftHandElbow)
  1. Position using the socket preview — check alignment against the mesh in-viewport

Then in DA_SL_ShotgunFPMeshData / TPMeshData:

  • AttachSocketName = name of the socket on the character mesh (e.g., WeaponSocket_R)
  • LeftHandIKEffectorSocketName = LeftHandGrip
  • LeftHandIKJointTargetSocketName = LeftHandElbow
  • MuzzleSocketName (on FSLWeaponFireMode) = 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