A properly baked normal map makes a 3,000-poly low-poly model indistinguishable from a million-poly high-poly original. A bad normal map introduces dark bands on edges, seams at UV boundaries, and flat surfaces under side lighting. Technically, Normal map baking takes minutes. Baking it correctly requires specific settings, understanding of tangent space, and the ability to anticipate artifacts before they appear. We have been in the gamedev pipeline for over 5 years and have baked assets for 15+ games, including mobile and PC projects. Our expertise ensures a clean result that passes QA in any engine.
Why artifacts occur on normal maps?
Tangent space mismatch – baking normal maps
This is perhaps the most non-obvious cause of a "correct" normal map that looks wrong in-engine. Marmoset Toolbag, xNormal, Substance Painter, and each engine use their own tangent space conventions. Unity (Standard and URP/HDRP) – MikkTSpace. Unreal Engine – also MikkTSpace, but with specific handling of hard edges in UE4 vs UE5. Godot – MikkTSpace. If a map is baked in one tangent space and imported into an engine with another, you get incorrect lighting: strange highlights in wrong places instead of relief.
Solution: In Marmoset Toolbag 4, set Tangent Space → MikkTSpace. In Substance Painter, this is the setting when importing the mesh (Compute Tangent Space Per Fragment). Verify the result in the actual engine, not just in the tool's preview.
Hard edge + UV seam mismatch
Standard hard-surface geometry has hard edges (smoothing group breaks) at constructive edges. If the UV seam does not coincide with these edges, the baker will interpolate normals across the seam – result: a dark or light band along the edge. The rule: every hard edge must be a UV seam, and every UV seam on hard-surface must be a hard edge. This is mandatory, not a recommendation.
In Blender, this is done via Edge → Mark Sharp + Mark Seam on the same edges. In Maya – Mesh Display → Soften/Harden Edge and UV Seam on coinciding edges. In 3ds Max – Smoothing Groups + UV seam following the same logic.
Cage and projection misses
For complex geometry with concave shapes, floating parts, or large discrepancy between HP and LP in Marmoset Toolbag, you must work with Bake Groups. Each floating part is a separate group with an individual cage offset. Without this, the baker casts rays through incorrect geometry and gets black spots or inverted normals in intersecting areas.
How to configure baking in Marmoset Toolbag 4?
Marmoset Toolbag 4 is the main tool for production bake. Settings for final baking:
- Samples: 512 for 4096 maps, 256 for 2048. Lower values cause noise on complex transitions.
- Dilation: 32px for 4096, 16px for 2048. Critical for mip-map bleeding.
- Tangent Space: MikkTSpace (for most engines).
- Max Frontal / Rear Distance: individual per asset. Too large rear distance – baker captures geometry from the back side. Too small – misses on parts with large offset from LP.
For floating geometry: separate Bake Group for each floating group. Max Frontal Distance = slightly larger than distance from LP surface to farthest point of floating object. Rear Distance = minimal.
In xNormal, we use the same approach but via a .hnmap file with cage settings for each asset. xNormal is faster on large scenes and useful for batch baking when you need to bake 50+ objects simultaneously.
Comparison of baking tools:
| Tool |
Speed |
Tangent Space |
Features |
| Marmoset Toolbag 4 |
High |
MikkTSpace |
Best preview, cage support |
| xNormal |
Very high |
Standard (configurable) |
Best batch bake, open source |
| Substance Painter |
Medium |
Per Fragment |
Integration with texturing |
How to verify the normal map before delivery?
We always check the baked map in the actual engine, not just in Marmoset. Reason: the Toolbag preview uses its own PBR renderer, which can mask issues that become visible under standard lighting in the engine.
Example artifact: a streak on a hard edge
If the hard edge and UV seam do not match, a dark or light stripe appears on the edge. This is detectable at grazing angle lighting in the engine.
Verification checklist:
- Lighting from three sides: key, side, backlight
- Extreme angles: camera nearly parallel to the surface (grazing angle)
- Check edges: no dark streaks along hard edges
- Check seams: no visible seams along UV boundaries
If the map passes in-engine testing, it is ready. We guarantee that following these steps yields a clean normal map without artifacts.
What is included in the work
- Consultation on high-poly and low-poly geometry preparation
- Setting up the bake project in Marmoset Toolbag 4 / xNormal based on the task
- Baking all required maps: Normal, Ambient Occlusion, Cavity, Curvature, Thickness, World Space Normal
- QA in the target engine (Unity, Unreal, Godot)
- Delivery of source files (.fbx, .tga, project files)
- Adjusting UV if necessary
Timeline estimates
| Asset |
Maps |
Duration |
| Simple prop (weapon, tool) |
Normal + AO |
2–6 hours |
| Medium-complex object (vehicle, parts) |
Full PBR |
4–10 hours |
| Character (one UV tile) |
Full PBR |
1–3 days |
| Complex asset with floating parts |
Full PBR |
2–4 days |
| UDIM character (4–6 tiles) |
Full PBR per tile |
3–6 days |
Cost is calculated individually. Input needed: high-poly (FBX/OBJ), low-poly with ready UV, information about the target engine.
Contact us to discuss your project and get pipeline consultation. Request an evaluation of your asset based on references — it takes one day.
3D Modeling for Games
An artist delivers a character at 120,000 triangles and insists it “looks better this way.” In a mobile scene, ten such characters tank FPS below playable. We solve this daily: every model passes strict polygon control and per-platform optimization. We have shipped over 50 game projects — from mobile hyper‑casual to PC action titles — and guarantee each asset fits technical constraints without losing visual quality.
3D modeling for games is not “make it look good.” It is prioritising within a limited budget of triangles and draw calls. Every pipeline stage affects runtime performance. Skipping retopology or producing bad UVs forces rework during integration — we eliminate that from the start.
We design models for specific target platforms: mobile uses low texel density (512 px/m), PC up to 2048 px/m. All decisions are backed by engine benchmarks and profiling on real hardware.
How Are Polygons Distributed for Different Platforms?
This aspect is often overlooked at project start — and later causes rework.
Mobile Platforms (iOS / Android)
Mobile is the toughest environment. Character budgets:
| Character Type |
Polygons (triangulated) |
| Main hero (close‑up) |
3,000 – 8,000 |
| Secondary NPC |
1,000 – 3,000 |
| Crowd / distant enemies |
300 – 800 |
Environment objects (single prop):
| Object |
Polygons |
| Large interactive (chest, door) |
500 – 1,500 |
| Medium decorative |
100 – 400 |
| Small (rock, branch) |
20 – 80 |
More critical than polygon count are draw calls and batching. A 200‑triangle model with a separate material can be more expensive than a 2,000‑triangle model that batches with the scene. SRP Batcher and GPU instancing cut draw calls by up to 40% — two to three times more efficient than per‑object rendering — giving headroom for richer assets.
PC / Console
Budgets are looser but not unlimited:
- Main character in a first‑person shooter: 15,000 – 60,000 triangles (enemy constantly visible).
- Character in a third‑person RPG: 8,000 – 25,000.
- Vehicle in a racing game: 30,000 – 80,000 (requires LOD).
Key tool — LOD (Level of Detail). In Unity it is LOD Group, in Unreal — automatic HLOD plus manual LOD levels in Static Mesh Editor. Rule: LOD0 → LOD1 loses ~50–60% polygons, LOD1 → LOD2 another ~50%. Occlusion culling and clustered rendering further reduce GPU load.
VR
VR renders for two eyes at 90 fps (Quest) or 120 fps (PSVR2). Any freeze is physically felt — the player gets dizzy. Character budget: 4,000 – 12,000 triangles (depends on simultaneous NPCs). Environment requires aggressive optimisation: portal system, occluder culling, clustered rendering. We use Frame Debugger and RenderDoc early in the pipeline.
Why Is Retopology an Artistic Task?
Retopology — creating a clean polygon mesh over the sculpt. Many see it as a boring technical step and rely on auto‑retopology (ZRemesher, Instant Meshes, Auto Retopology in Maya). That is a mistake.
Auto‑retopology fails in three critical areas:
- Joints — knees, elbows, wrists need even edge loops perpendicular to the rotation axis. Auto‑retopology produces chaotic diagonals; during animation the joint collapses unattractively.
- Face — concentric loops around mouth and eyes are mandatory for correct blend‑shape deformation. Auto‑retopology ignores muscle structure.
- Silhouette edges — shoulders, chest, large forms. Polygons must be consciously distributed so the silhouette reads even on LOD2.
Manual retopology reduces skinning artifacts by 60% compared to auto‑retopology. Tools: Maya (Quad Draw), Blender (BSurfaces + Shrinkwrap), 3ds Max (Graphite Modeling Tools), ZBrush (ZRemesher with guide curves). Density is uneven: face and hands get more polygons, back and lower legs fewer — because the camera spends more time there. This is not arbitrary; it is driven by silhouette and animation needs.
How Does UV Unwrapping Affect Texture Quality?
UV is another underestimated step. Texel density must be uniform across the entire character. If the boot has twice the density of the face, the texture looks inconsistent. In Maya we use UV Toolkit with normalization; in Blender — the TexTools addon.
UDIM (U‑Dimension) combines multiple UV tiles into one object, allowing 4K–8K textures without single‑UV‑space limits. Used for characters with high detail — cinematic games, hero assets. Pipeline then requires Substance Painter in UDIM mode and separate export per tile.
Baking — transferring high‑poly detail to maps for low‑poly. Tools:
- Marmoset Toolbag — industry standard, cage‑based with fine tuning. According to its documentation, batch baking saves up to 30% time.
- xNormal — free, stable for batch baking.
- Substance Painter — built‑in baker for quick results within texturing, less flexible.
- Blender Cycles — slower, but free.
Typical baked map set: Normal Map, Ambient Occlusion, Curvature, Thickness, Position, World Space Normal. Curvature and Thickness serve as generator masks in Substance Painter for automatic procedural texturing.
What Does 3D Modeling for Games Include?
| Stage |
Details |
Deliverable |
| High‑poly sculpt |
Detailed sculpt in ZBrush / Blender |
.zpr / .blend, screenshots |
| Manual retopology |
Clean low‑poly mesh with proper edge loops for animation |
.fbx / .ma |
| UV unwrapping |
Normalized texel density, optionally UDIM |
.fbx with UV set |
| Baking |
Normal, AO, Curvature, Thickness (Marmoset / xNormal) |
Texture set (PNG/TGA) |
| LOD chain |
LOD0–LOD3 with polygon and distance thresholds |
.fbx per LOD |
| Integration |
Import into Unity / Unreal, material and batching check |
.unitypackage / .uasset |
| Documentation |
Asset naming, hierarchy, triangle budget |
PDF / Notion |
We also provide one hour of support after delivery — helping with LOD Group setup, collisions, and animation. Source files (.zpr, .blend, .ma, .fbx) are fully transferred.
Common UV mistakes we prevent: different texel densities on adjacent parts, overlapping UVs, insufficient padding between islands, missing UDIM for complex characters.
Reach out for a detailed project assessment. We'll analyze your requirements and recommend the optimal pipeline — from mobile hyper‑casual to PC action and VR. Contact us to discuss your project and receive a tailored commercial proposal.