The gap between "looks great in Blender" and "arrived correctly in the engine" is four topics: units, axes, pivots, and export settings. Get them right once, save them as a preset, and never think about them again. Here's each one, and the preset.
Blender thinks in meters. Unreal thinks in centimeters. Unity thinks in meters but imports FBX at a 0.01 file scale it then compensates for. This is why the internet is full of assets arriving 100x too small, and why physics goes floaty when someone "fixes" it by scaling the mesh in-engine (mass and collision didn't get the memo).
The setup that works: leave Blender at Unit Scale 1.0, meters - model real-world size (a door ~= 2m). The conversion belongs in the exporter, not your scene: the FBX exporter's Apply Scale: FBX All bakes the unit conversion into the file so both engines read it clean. Model at real scale, export with the preset, done. The full cross-app table lives on Units & Axes.
Blender is Z-up, -Y-forward. Unreal is Z-up, X-forward. Unity is Y-up, Z-forward. Every FBX carries axis metadata, and every importer interprets it slightly differently - which is how you get the fence that lies down in Unity or faces backwards in Unreal.
Two rules cover it: author facing -Y in Blender (character looks toward -Y; front of a prop toward -Y), and let the exporter do the conversion - tick Bake Space Transform (the "!EXPERIMENTAL!" label has been scaring people unnecessarily for a decade) so the rotation is baked into vertex data instead of arriving as a -90 deg rotation on the object. If your assets come in with X-rot -90 that "fixes itself" when you press zero - this checkbox is the cure.
The object's origin in Blender becomes the pivot in-engine - the point it rotates around, snaps by, and places at. Modular kit rules: props get the origin at the base-center (sits on floors when dropped); modular wall/floor pieces get it at a corner, on the grid, so pieces snap like Lego; doors get it on the hinge. And before every export: Apply All Transforms (Ctrl+A) - an object carrying scale 0.37 exports as an object carrying scale 0.37, and someone downstream inherits the mystery.
The habit that scales: one collection = one exported asset. Name the collection what the file should be called (SM_Crate_01), keep its parts inside, and batch-export collections to files (the cookbook has the script). Now "what's in the game" is answerable by reading the outliner, high-poly sources live in an excluded _source collection, and nobody exports the lighting rig by accident. This mirrors exactly how UE/Unity think about assets, so the mental model transfers.
| FBX exporter setting | Value | Why |
|---|---|---|
| Limit to | Selected Objects / Active Collection | Never ship the whole scene |
| Object Types | Mesh (+ Armature for characters) | No cameras/lights in asset files |
| Apply Scale | FBX All | The units fix - bakes m->cm properly |
| Bake Space Transform | On | The axis fix - no -90 deg rotation stowaway |
| Apply Modifiers | On | Mirrors/bevels arrive as geometry |
| Smoothing | Face (UE) / Normals Only (Unity) | Kills the "no smoothing group" warning |
| Add Leaf Bones | Off | The mystery _end bones - nobody wants them |
| Custom Properties | On | Carries your metadata to the engine |
Click the + at the top of the export dialog and save this as UE_Asset (and a Unity variant). That preset file lives in your Blender config - copy it to teammates, or better, ship it inside a studio add-on so everyone's exporter agrees by default.
A jam team once lost half a day to a "haunted" level - every prop placed fine, then drifted after a save/reload. Cause: one artist's exporter had Apply Scalings set differently, so their props carried scale 100 with a compensating import scale of 0.01. Harmless - until anything requeried the transform. Since then my rule: the export preset is not personal preference, it's shared infrastructure, versioned like code.
_source junk excluded?Automate this checklist and you've built a portfolio piece - the cookbook's audit recipe is the skeleton.