FN P90 Submachine Gun

Intended use: First-person weapon in a realistic environment
Modelled in: 3ds Max
Textured in: Substance Painter & Photoshop
Tris: 34,710 with bullets, 11,642 without
Texture Sets: 2 @ 4096×4096
This is my first proper attempt at a game-ready PBR asset made in my own time. I decided on an FN P90 Submachine gun (not just because I’d seen it on Stargate SG-1) but because of its complex shape and use of curves blending into hard edges. I wanted a challenge that would teach me new techniques and help me develop an understanding of the high-to-low poly pipeline.

I started with the grey body which appeared to be two pieces of formed plastic joined down the middle. This meant the surface was smooth and flowing, no interconnected parts or seams except where the two pieces met. From this part alone I learned a lot about edge loops and where it’s appropriate to use triangles and ngons in a subdividable mesh. I collected a few reference photos online but they weren’t ideal and left a lot of smaller details unclear. To solve this I contacted a local airsoft shop and they let me take photos of a replica (which I ended up buying a few weeks later!).


After the high-poly for the body was finished I moved on the metal receiver at the front. This part uses more hard edges and sharper curves but still doesn’t feature any obvious seams (except for the two mounting points at the top). Using measurements taken from the airsoft replica I was able to build a 1:1 copy including all of the small details.

The muzzle, trigger, charging handles and magazine release were fairly simple shapes and it was a nice change to model separate small components. The magazine was an interesting challenge as its frosted appearance revealed the thickness of the plastic and inner components.
I tried to preserve as many details as possible, including the spring and rollers which push the bullets out of the magazine.


The low poly model came about much quicker but not necessarily easier. It was still an exercise in using edges appropriately, making sure every edge served a purpose while reducing the triangle count.

From here things got very difficult. I had little experience with baking meshes and was unprepared for the sheer amount of normal map issues.I was about to face! Ugly seams, skewed details and triangulation mismatches are just a few of the problems I had. After researching different techniques and unwrapping the model three times I began to understand how to fix these common mistakes. This is also where I learnt that tangent spaces exist and differ between products (Unreal, Unity, Max etc).

Finally, after working on-and-off for a time far longer than I’m willing to admit (plus burning out a lot along the way), I got all the modelling and texturing done. Currently I’m working on adding animations and a reflex sight.