The 3D Handbook
Topic

Hard-surface modeling

Modeling manufactured, engineered objects such as crates, machines, weapons and sci-fi panels, and the main workflows game artists use to make their edges, shading and detail work in real time.

modelinghard-surfaceworkflowenvironment-art

Hard-surface modeling is modeling objects with "controlled, manufactured, or engineered forms": machines, crates, doors, vehicles, weapons, pipes and wall panels (GarageFarm blog: Hard Surface Modeling in Blender). An object counts as hard-surface because it looks built (cut, bent, cast, bolted together), whatever its material (GarageFarm blog: Hard Surface Modeling in Blender).

Hard-surface work is a large part of environment art. Sci-fi corridors, industrial props, vending machines and modular wall kits are all hard-surface assets. The craft is mostly about two things: clean, readable shapes, and edges that catch light the way real manufactured edges do (see bevels and chamfers).

Three subdivided cubes: one rounded into a blob, one with tight bevelled edges, one with sharp creased edges.
Three cubes with the same Subdivision Surface modifier (level 2). Left: no support loops, so it rounds into a blob. Middle: a bevel adds support loops next to every edge, so the edges stay tight. Right: full edge crease keeps the edges sharp without extra loops.Rendered in Blender 5.2 (Cycles) by the handbook author

#What makes hard-surface different

Organic models (rocks, trees, characters) are usually sculpted and their surfaces flow. Hard-surface models are built from flat planes, precise curves and crisp transitions. That raises three technical problems you will meet on every asset:

Each workflow below is a different answer to those three problems.

#The main workflows

#Subdivision with support loops

You model a low-density cage of quads and let a subdivision surface smooth it. To keep edges tight, you add support loops (also called holding edges) close to each edge. The smoothed result is usually used as a high poly for baking. FrankPolygon's long-running Polycount sketchbook is a detailed free study of this technique. He describes support loops as edges that "counter the uniform inward pull of the smoothing", so shapes hold when subdivided (Polycount forum: Sketchbook: Frank Polygon).

Manual support loops are slow. FrankPolygon notes that with manual edge extrusion "it can be difficult and time consuming to maintain consistent edge width", and recommends generating loops with bevel or chamfer modifiers controlled by edge weights instead (Polycount forum: Sketchbook: Frank Polygon).

#Boolean and bevel

You block out a base shape, then cut and add volumes with booleans: one object cuts into, combines with or isolates part of another (GarageFarm blog: Hard Surface Modeling in Blender). A bevel modifier then rounds the edges. Keeping cutters editable lets you move an opening late in the process (GarageFarm blog: Hard Surface Modeling in Blender). FrankPolygon describes models where "the basic shape is created with a series of boolean operations on a mirrored base mesh", applied and cleaned up only once the shape is approved (Polycount forum: Sketchbook: Frank Polygon).

#Mid-poly with weighted normals

You build one mesh with real, low-segment bevels on every visible edge. Face-weighted normals make the big faces shade flat and the bevels shade round. There is no separate high poly and usually no unique bake. Detail comes from tiling materials, trim sheets and decals. See the mid-poly workflow for the full picture.

On Star Citizen, a developer explained on Polycount that ships were "far too big to be custom baked", so the team used "edge loops and custom vertex normals" plus floating decals (Polycount forum: Star Citizen...The Gladiator...ART DUMP). A Polycount veteran later credited the Star Citizen environment team with popularising the approach that is now called mid-poly (Polycount forum: I need some advice).

#CAD and NURBS to mesh

You model with exact mathematical surfaces in a CAD-style tool such as Plasticity, MoI or Fusion, then convert (tessellate) to polygons. Fillets and booleans are reliable because the software works on exact surfaces, not polygons. The export becomes either a high poly for baking or the start of a game mesh. See CAD and NURBS modeling for games.

At the studio Angelic, the concept department supplies Fusion 360 meshes as reference for the hard-surface team (80 Level: Creating Assets Within the Mid-Poly Workflow…).

#High-to-low baking

The traditional approach. You build a detailed high poly (by sub-d, booleans, CAD or sculpting), a separate efficient low poly, then bake the difference into a normal map. Small floating details called floaters are common in the high poly. See the high-to-low workflow.

A Blender hard-surface prop built with Hard Ops and Boxcutter; the artist lists the high poly at about 45.2k triangles and the in-game low poly at about 5.7k. Switch to wireframe in Sketchfab's model inspector and compare the edge density with the panel detail you see in the shaded view; the difference is what the bake carries.Syntax3D, via Sketchfab

#Nanite-dense geometry

With virtualised geometry such as Unreal Engine's Nanite, very dense meshes become practical. Epic's documentation recommends you "use high-poly detailing rather than baking detail into normal map textures" (Unreal Engine documentation: Nanite Virtualized Geometry in Unreal Engine). The same page warns that "practical limits still remain" and that you should measure triangles, instances and performance on your target hardware (Unreal Engine documentation: Nanite Virtualized Geometry in Unreal Engine).

Two rows of boxes. High-to-low: high poly, low poly with unique UVs, bake, unique texture set. Mid-poly: one mesh with real bevels, weighted normals, reusable UVs, shared materials and decals.
The two most common pipelines for hard-surface game assets. Most real projects mix them per asset.Diagram by the handbook author

#Comparison

Workflow What you build Strengths Costs Fits best
Sub-d + support loops Quad cage, smoothed Smooth curves, clean highlights Slow; loops hard to keep even (Polycount forum) High polys for baking; curvy shapes
Boolean + bevel Base mesh, cutters, bevel modifier Fast; non-destructive until applied (GarageFarm blog) Messy topology; needs cleanup (Polycount forum) Blockouts, panels, high polys, mid-poly
Mid-poly + weighted normals One bevelled mesh No duplicate mesh; iterate without rebuilding high and low poly (80 Level) Higher triangle count; relies on shared textures Machines, modular kits (ArtStation blog)
CAD/NURBS to mesh Exact surfaces, tessellated Reliable fillets and booleans Export needs retopology or baking Concept, precise mechanical parts
High-to-low High poly + low poly + bake Cheap runtime mesh; unique detail Two meshes; re-bake on changes Hero props, weapons, small props (ArtStation blog)
Nanite-dense Dense final mesh Detail in geometry, not textures (Unreal Engine documentation) Disk size; engine-specific UE5 projects with Nanite

#Design principles

Technique only helps if the design reads well. These principles come up in nearly every hard-surface breakdown. Design is also iterative: Matthias Develtere's 380-page written breakdown of designing and modelling a mech in 3ds Max shows his rejected options for the head, arms and legs, and his mistakes, alongside the final design (ArtStation: Breakdown - design - modelling of a mech).

Three versions of a generator box. Stage one has a body, skid frame and tank. Stage two adds a vent, control panel recess and fuel cap. Stage three adds bolts, a gauge, a handle and a label, with one area outlined as a deliberately plain rest area.
Build big shapes first, then medium, then small. Leave some surfaces plain on purpose.Diagram by the handbook author

#Big, medium and small shapes

Start with primitives and the large masses that make the object recognisable, then add secondary forms. Leave "screws, panel lines, vents, or tiny surface details" until later (GarageFarm blog: Hard Surface Modeling in Blender). This is the same idea as primary, secondary and tertiary forms in sculpting. Joppe Stijf, a prop and weapon artist whose credits include Call of Duty: Vanguard, puts it this way: "The main thing to get good first is object size and general composition" (80 Level: Prop Art Tips: Creating a Realistic Radio…).

Check the silhouette at the big-shape stage, because added detail does not fix a weak silhouette.

#Rest areas

Not every surface needs detail. If a panel neither does a job nor improves the composition, "consider leaving the surface alone" (GarageFarm blog: Hard Surface Modeling in Blender). Plain areas give detailed areas contrast, the same way negative space works in composition.

#Functional logic

Hard-surface objects look believable when they look like they could be manufactured and assembled. "A panel needs a reason to exist," and fasteners "should be placed where components could logically connect" (GarageFarm blog: Hard Surface Modeling in Blender). Ask: how does this open, where does the cable go in, how was this part bolted on? Collect real reference of machinery to answer those questions.

#Panel lines

Panel lines show where parts meet. Use them to break large surfaces at believable seams, not as random decoration. On mid-poly and modular assets, panel lines, bolts and switches often come from a trim sheet applied as mesh decals rather than modeled geometry (80 Level: How to Create a Detailed Large-Scale Scene…).

#Consistent bevel width

Edges of similar parts should have similar bevel widths, scaled to the object's real size. Judge bevels "in relation to the object's real or intended scale and under lighting similar to the final presentation" (GarageFarm blog: Hard Surface Modeling in Blender). For bakes, high-poly bevels often need to be wider than feels natural: one Polycount reply on edge artefacts advised making them "over double the current size" (Polycount forum: Advice for solving various normal map/edge…). See bevels and chamfers.

#Tool landscape

Every major package can do hard-surface work. These are the tools and add-ons most often named in breakdowns. See modeling software for licensing.

#Examples

#Walkthrough: a generator box for an environment

This walkthrough uses Blender terms but works in any package. The target is a mid-poly prop, about 1.2 × 0.8 × 0.9 m, that will appear many times in a level.

  1. Gather reference and decide function. Find real generators. Note the frame, the vent, the control panel, the fuel cap and where bolts actually hold panels on.
  2. Block out at real scale. Set your units first. Use boxes and cylinders only. Check the silhouette from your game camera height.
  3. Cut the medium shapes with booleans. Add the vent recess and control panel as Difference cutters. Keep them live so you can move them (GarageFarm blog: Hard Surface Modeling in Blender).
  4. Bevel. Add a Bevel modifier with Limit Method set to Angle, so only sharp edges are bevelled (Blender Manual: Bevel Modifier). Use 2–3 segments on edges the player sees up close, 1 elsewhere. Pick one width for all similar edges.
  5. Fix shading. Add a Weighted Normal modifier after the bevel, using Face Area weighting with Keep Sharp enabled (Blender Manual: Weighted Normal Modifier). Patscheider recommends Face Influence for hard-surface stacks (ArtStation blog: Quarry Bank Mill 3D #07 Modifiers and Wires /…).
  6. Clean up. Apply booleans only when the shape is approved. Then clean up stray geometry; FrankPolygon uses triangulation and limited dissolve for this (Polycount forum: Sketchbook: Frank Polygon).
  7. Small details. Add bolts, labels and panel lines as mesh decals or with a trim sheet. If the generator is a hero prop instead, model them as floaters on a high poly and bake.
  8. UV and texture. Lay out UVs for tiling materials and trims. Check texel density against the rest of the kit.
  9. Export. Export FBX with custom normals. In Unreal, set Normal Import Method to Import Normals, so "the normals are imported from the FBX file" rather than recomputed (Unreal Engine documentation: FBX Import Options Reference in Unreal Engine).

#Further reading and watching

A fast Blender demo of booleans and the Mirror modifier on a classic sci-fi crate; pause often and copy along. Watch on YouTube

References

  1. GarageFarm · Hard Surface Modeling in Blender · GarageFarm blog · article · accessed 2026-10-21
  2. FrankPolygon · Sketchbook: Frank Polygon · Polycount forum, 2020 · forum · accessed 2026-10-21
  3. Trevelyan and others · Star Citizen...The Gladiator...ART DUMP · Polycount forum · forum · accessed 2026-10-21
  4. Devickpi23, poopipe, ThisisVictoriaZ · I need some advice · Polycount forum, 2023 · forum · accessed 2026-10-21
  5. Malte Resenberger-Loosmann · Creating Assets Within the Mid-Poly Workflow in UE5 · 80 Level · article · accessed 2026-10-21
  6. Epic Games · Nanite Virtualized Geometry in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  7. Matthias Patscheider · Quarry Bank Mill 3D #07 Modifiers and Wires / #08 The mid-poly workflow · ArtStation blog, 2020 · article · accessed 2026-10-21
  8. Matthew Murchison · Leveraging Multiple Workflows · ArtStation blog, 2019 · article · accessed 2026-10-21
  9. Matthias Develtere · Breakdown - design - modelling of a mech · ArtStation · web · accessed 2026-10-21
  10. Joppe Stijf (interviewed by Emma Collins) · Prop Art Tips: Creating a Realistic Radio Receiver in Blender & Marmoset Toolbag · 80 Level, 2025 · article · accessed 2026-10-21
  11. Jessica Canales (interviewed by Gloria Levine) · How to Create a Detailed Large-Scale Scene with Rich Props & Assets in Unreal Engine · 80 Level · article · accessed 2026-10-21
  12. Interface, Vertrucio · Advice for solving various normal map/edge bake artifacts? · Polycount forum, 2020 · forum · accessed 2026-10-21
  13. Blender Foundation · Bevel Modifier · Blender Manual (2.83), 2020 · docs · accessed 2026-10-21
  14. Blender Foundation · Weighted Normal Modifier · Blender Manual (2.82), 2020 · docs · accessed 2026-10-21
  15. Metin Seven · Blender add-ons review — BoxCutter and Hard Ops · BlenderNation, 2020 · article · accessed 2026-10-21
  16. MACHIN3 · MESHmachine documentation · machin3.io · docs · accessed 2026-10-21
  17. markus; Shawn Olson (Autodesk) · Implement a new Vertex Normal Modifier (Weighted Normals, Merge, Transfer) · Autodesk Community, 3ds Max Ideas, 2020 · forum · accessed 2026-10-21
  18. Arkance UK · What's New in 3ds Max 2022? – New and Improved Object Modifiers · Arkance Community · article · accessed 2026-10-21
  19. dzibarik and others · The 'ultimate trim' technique from Sunset Overdrive · Polycount forum, 2015 · forum · accessed 2026-10-21
  20. Jim Thacker · CG Channel news article on Plasticity 2026.1 · CG Channel, 2026 · article · accessed 2026-10-21
  21. Fabien Franzen · Moi3d Overview · moi3d.com · docs · accessed 2026-10-21
  22. Maxon · ZModeler Overview · ZBrush for iPad documentation · docs · accessed 2026-10-21
  23. Maxon · Live Boolean Essentials · ZBrush for iPad documentation · docs · accessed 2026-10-21
  24. Chase Long (interviewed by Arti Sergeev) · Designing Environments for DOOM Eternal · 80 Level · article · accessed 2026-10-21
  25. Morten Olsen (Insomniac Games) · The Ultimate Trim: Texturing Techniques of Sunset Overdrive · GDC Vault, 2015 · talk · accessed 2026-10-21
  26. Matthew Trevelyan Johns · The Last of Us: Part I...Trim Pipeline · ArtStation · web · accessed 2026-10-21
  27. François Larrieu (interviewed by Ellie Harisova) · Working on Modular Sci-Fi Environments in Blender and UE4 · 80 Level, 2020 · article · accessed 2026-10-21
  28. Epic Games · FBX Import Options Reference in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  29. polygonrunway · Hard Surface Modeling: Create a Sci-Fi Crate · BlenderNation, 2023 · video · accessed 2026-10-21
  30. Art of Pilgrim · Remaking a M24 Stielhandgranate - Full Length · YouTube · video · accessed 2026-10-21

Last updated 2026-10-22