Skip to main content

Polyforge

Learn

How Game Engines Handle 3D File Imports

Unity, Unreal Engine, and Godot each process 3D files differently. This guide walks through what actually happens when you import a model, where materials and animations break, and how to pick the right format for your engine.

15 min read
By Polyforge · Published Mar 24, 2026 · Updated Mar 28, 2026
LEARN
Game Engine Guide

From Export to Engine

You exported a beautiful model from Blender. You dragged it into your engine. The textures vanished, the scale is wrong, and the character is facing the floor. This is not a bug in your model. It is a mismatch between how your authoring tool stores data and how the engine reads it.

Every game engine converts imported files into its own internal representation. Understanding that conversion process is what separates a smooth asset pipeline from hours of debugging.

$ contents
$ import_pipeline

What Happens When You Import a 3D File

No game engine renders your FBX, OBJ, or glTF file directly. Every engine converts the source file into an internal representation that is optimized for its renderer, its material system, and its target platform.

In Unity, the source file stays untouched in your Assets folder while the engine writes a converted version to the Library directory. Unreal compiles everything into .uasset files in the Content Browser. Godot generates resources in the .godot/imported/ directory. In all three cases, you never work with the raw source file at runtime.

During this conversion, the engine reads the mesh geometry, triangulates any quads or n-gons, extracts or generates materials, loads textures, and parses animation data. Each of these steps has format-specific behavior, which is why the same model can look correct in one engine and broken in another.

$ unity

Unity: FBX First, glTF via Plugin

Unity's entire import chain is built around FBX. The engine can also read OBJ, DAE (Collada), and proprietary formats from Maya, Blender, and 3ds Max, but under the hood it funnels everything through its FBX processing pipeline. Unity's own documentation recommends using FBX whenever possible.

The .meta file system

Every asset and folder in a Unity project gets a .meta file. This file stores a unique ID (GUID) that Unity uses to track references, plus all the import settings you configure in the Inspector: scale factor, mesh compression, material mode, animation compression, and more. If you move or rename a file outside the Unity Editor, the .meta link breaks and every reference to that asset disconnects. Always move assets through the Editor.

Material handling

Unity offers three material import modes: None (uses a default shader), Standard Legacy, and Import via MaterialDescription. The last option reads embedded material data from FBX files and maps it to Unity shaders. However, FBX has a critical limitation: it only reliably transfers diffuse texture data. Metallic, roughness, and normal maps often get lost or approximated because FBX has no standard PBR material definition.

For full PBR material transfer, Unity supports glTF through the official glTFast package (com.unity.cloud.gltfast). This package maps glTF's metallic-roughness materials to proper PBR shaders in URP, HDRP, and the Built-in Render Pipeline. The alternative is UnityGLTF from the Khronos Group, which supports advanced material extensions like transmission, sheen, and clearcoat.

Scale and units

Unity uses 1 unit = 1 meter with a Y-up, left-handed coordinate system. FBX files from Blender often arrive with a 0.01 scale factor because Blender defaults to centimeters in FBX exports. The Model Import Settings panel provides a Scale Factor field and a Convert Units toggle to handle this automatically.

Key takeaway: Use FBX for animated characters and rigged models in Unity. Use glTF (via glTFast) for static models where PBR material accuracy matters. If you need to convert FBX to GLB, Polyforge handles this in the browser.
$ unreal_engine

Unreal Engine: FBX, Nanite, and Interchange

Unreal Engine also treats FBX as its primary import format. On import, the engine compiles source files into .uasset binaries that live in the Content Browser. The FBX SDK handles triangulation, skeleton extraction, and material stub generation. For large files with multiple meshes, the engine processes each part sequentially, which can be slow on complex scenes.

Nanite: rethinking polygon budgets

Unreal Engine 5 introduced Nanite, a virtualized geometry system that streams and renders pixel-scale detail from meshes containing billions of triangles. With Nanite enabled, you can import film-quality assets directly without creating manual LODs (Level of Detail).

There is a major constraint: Nanite only works with static geometry. Characters, cloth simulations, and anything that deforms at runtime still requires traditional polygon budgets. Translucent materials also cannot use Nanite. So while environment art and props benefit enormously, animated assets still need the same optimization work as before.

The Interchange Framework

Starting with UE 5.4, the Interchange Framework became the default import pipeline, replacing the legacy FBX Importer. Interchange is format-agnostic: it handles FBX, glTF, and OBJ through a single asynchronous pipeline. You can customize the pipeline through Blueprint, Python, or C++, and it supports runtime asset loading.

Material handling

Unreal generates Material Instances from imported material data. Like Unity, it struggles with PBR transfer from FBX because FBX lacks a standardized PBR material definition. The recommended workflow in most studios is to import textures separately and build materials manually using Unreal's node-based material editor. Naming conventions matter: textures named with suffixes like _BaseColor, _Roughness, _Normal, and _Metallic help automated tools map them correctly.

Scale and units

Unreal uses 1 unit = 1 centimeter with a Z-up, left-handed coordinate system. A 100cm box in your DCC tool matches a 100-unit box in Unreal. This is different from Unity and Godot, which both default to meters.

Key takeaway: For static environment assets in Unreal, import at full resolution and let Nanite handle LODs. For characters and animated meshes, optimize the polygon count before import just as you would for any other engine.
$ godot

Godot: glTF Native, FBX via ufbx

Godot takes a different approach from Unity and Unreal. The engine officially recommends glTF 2.0 as the primary import format. glTF materials map directly to Godot's StandardMaterial3D, which means PBR properties like metallic, roughness, normal maps, and ambient occlusion transfer without manual intervention.

FBX support via ufbx

Before Godot 4.3, FBX import required an external tool called FBX2glTF that converted FBX to glTF behind the scenes. This was unreliable and unavailable on all platforms. Starting with Godot 4.3 (August 2024), the engine includes native FBX parsing through the ufbx library, a free, open-source FBX loader. ufbx applies unit conversion directly to mesh geometry rather than adding scale transforms to nodes, producing cleaner scene hierarchies. It also handles Mixamo and ReadyPlayerMe bone conventions out of the box.

Direct Blender import

Godot 4 can import .blend files directly. You configure the path to your Blender installation in Project Settings, and from that point you can drop .blend files into the project folder. Godot calls Blender in the background to convert the file. This skips the manual export step entirely, though complex rigs and linked blend files can cause issues.

Scale and units

Godot uses 1 unit = 1 meter with a Y-up, right-handed coordinate system. This matches the glTF specification exactly, which is another reason glTF imports tend to work cleanly in Godot.

Key takeaway: Export to glTF or GLB for Godot whenever possible. The format alignment between glTF and Godot's material system means fewer surprises. Need to convert? Polyforge converts between 11 formats in your browser.
$ format_support

Format Support at a Glance

All three engines support FBX and glTF, but the depth of support varies. This table covers the formats most relevant to asset pipelines as of early 2026.

Format Unity Unreal Engine 5 Godot 4
FBX Native (preferred) Native (preferred) Native via ufbx (4.3+)
glTF / GLB Via glTFast package Via Interchange (5.4+) Native (recommended)
OBJ Native Via Interchange Native (limited)
USD / USDZ Experimental packages Plugin (USD Importer) Not supported
Collada (DAE) Native Legacy support Native
Blender (.blend) Auto-converts to FBX Not supported Native (direct import)
Alembic Via package Native Not supported
$ materials

Materials and Textures: What Transfers

All three engines use PBR with the metallic-roughness workflow. In theory, this means a material authored once should look consistent everywhere. In practice, the file format you use to deliver that material determines how much data survives.

The FBX material problem

FBX was designed before PBR became standard. The format stores Phong and Lambert shading parameters (diffuse, specular, glossiness) but has no official metallic-roughness definition. When you export PBR materials through FBX, only the diffuse/base color texture transfers reliably. Metallic, roughness, and normal maps either get dropped or require the receiving engine to guess at the mapping.

This is the single biggest source of "my materials look wrong after import" complaints. The fix is either to use glTF (which has a formal PBR metallic-roughness material model) or to import textures separately and assign them manually inside the engine.

glTF PBR materials

The glTF 2.0 specification defines metallic-roughness as its core material model. Base color, metallic factor, roughness factor, normal maps, occlusion, and emissive all have defined slots in the format. This maps cleanly to Unity (via glTFast), Unreal (via Interchange), and Godot (natively).

Texture compression per platform

Each engine compresses textures to GPU-specific formats during the build process. Desktop builds typically use BC7 (high quality RGBA) or BC6H (HDR). Mobile builds use ASTC on modern devices or ETC2 as a fallback for older hardware. These compression settings are per-platform and configured inside the engine, not in the source file. Your export format does not affect which GPU texture format the engine ultimately produces.

Practical tip: If you are building a cross-engine pipeline, use glTF/GLB as your interchange format for materials. FBX for animation data. Import textures separately when FBX is your only option. See our format comparison guide for a deeper look at what each format supports.
$ scale_units

Scale, Units, and Coordinate Systems

Scale and orientation mismatches are the fastest way to waste an afternoon. Every engine has its own conventions, and every DCC tool has its own defaults.

Engine / Tool 1 Unit Equals Up Axis Handedness
Unity 1 meter Y-up Left-handed
Unreal Engine 1 centimeter Z-up Left-handed
Godot 1 meter Y-up Right-handed
Blender 1 meter Z-up Right-handed
Maya 1 centimeter Y-up Right-handed
3ds Max Configurable Z-up Right-handed
glTF spec 1 meter Y-up Right-handed

Why models end up the wrong size

Blender exports FBX files with a scale factor of 0.01 by default because it internally works in meters but the FBX convention is centimeters. Unity reads this scale metadata and usually adjusts automatically, but older versions or custom export settings can produce models that are 100x too large or too small. In Unreal, where 1 unit equals 1 centimeter, a model built at meter scale in Blender matches correctly without any conversion.

Why models appear rotated

When you export from a Z-up tool (Blender, 3ds Max) into a Y-up engine (Unity, Godot), the importer applies a 90 degree rotation on the X axis. Most engines handle this transparently, but it can create problems when you parent objects or apply additional rotations at runtime. If your model appears to be lying on its back or facing the wrong direction, the coordinate system conversion is the most likely cause.

Best practice: Establish a written contract for your asset pipeline that specifies the target engine's unit scale, up axis, and forward direction. Test with a single reference cube (1m on each side) before starting production. See our conversion errors guide for more details on fixing scale and axis problems.
$ animations

Animations: What Survives the Import

FBX is the standard for animation exchange between DCC tools and game engines. It handles skeletal animation (bone transforms over time), morph targets (blend shapes for facial animation), and basic keyframed object transforms. All three engines can import these animation types from FBX.

What transfers cleanly

  • Skeletal animations with bone hierarchies and skin weights
  • Simple keyframed translations, rotations, and scale
  • Morph targets / blend shapes (exported with the "Deformations" option enabled)

What does not transfer

  • Inverse kinematics (IK) constraints must be baked to per-frame keyframes before export
  • Procedural animations driven by physics or scripts
  • Engine-specific state machines: Unity's Animator Controllers, Unreal's Animation Blueprints, and Godot's AnimationTree are all built inside the engine and cannot be exported
  • Complex blend shape setups driven by bone transforms need baking in your DCC tool

Animation in Godot via glTF

Godot imports glTF animations into its AnimationPlayer node. Skeletal animations and morph target animations both work through glTF, making it a viable alternative to FBX for delivering animation data to Godot. For complex character animation, Godot's AnimationTree provides state machine logic and blend trees similar to what Unity and Unreal offer.

Animation compression

Each engine applies its own animation compression after import. Unity offers keyframe reduction with a configurable error threshold (0.5% by default). Unreal provides multiple compression codecs optimized for different animation types. Godot compresses animation data during resource import. In all cases, the compression is engine-side and does not depend on the source format.

$ choose_format

Picking the Right Export Format

There is no single format that works perfectly in every engine. The right choice depends on what kind of asset you are delivering and which engine you are targeting.

Scenario Recommended Format Why
Animated characters for Unity or Unreal FBX Best skeletal animation support, native in both engines
Static models with PBR materials glTF / GLB Standardized PBR material model transfers cleanly
Any asset for Godot glTF / GLB Godot's recommended format, best material and feature support
High-poly static assets for Unreal (Nanite) FBX or GLB Both work with Nanite; no LOD creation needed
Quick iteration from Blender to Godot .blend (direct) No export step required
Web viewers and AR GLB Compact binary, supported by three.js, Babylon.js, model-viewer

Many professional studios use a dual-format approach: FBX for delivering animation and rig data, glTF or GLB for delivering static props and materials. Some teams maintain their assets in Blender's native format and export to the target engine's preferred format as part of an automated build step.

If you need to convert between formats before importing into your engine, Polyforge's converter handles FBX, GLB, glTF, OBJ, STL, USDZ, and more directly in the browser with no file upload to a server.

$ faq

Frequently Asked Questions

Which 3D file format should I use for Unity?

FBX for animated characters and rigged models. glTF (via the glTFast package) for static models where you need accurate PBR materials. FBX only transfers diffuse textures reliably; metallic and roughness maps require glTF or manual assignment.

Which 3D file format should I use for Unreal Engine?

FBX is the safe choice for Unreal, especially for skeletal meshes and animations. The Interchange Framework (UE 5.4 and later) also handles glTF and OBJ. For static props targeting Nanite, polygon count is less of a concern since Nanite manages LODs automatically.

Which 3D file format should I use for Godot?

glTF 2.0 is Godot's recommended format. Materials map directly to StandardMaterial3D. FBX is supported natively since Godot 4.3 through the ufbx library. You can also drop Blender .blend files directly into a Godot project.

Why does my model look different after importing into a game engine?

Most likely a material or coordinate system mismatch. FBX does not have a standard PBR definition, so metallic and roughness data gets lost. Engines also use different coordinate systems: Unity is Y-up left-handed, Unreal is Z-up, Godot is Y-up right-handed. These differences cause rotations, flipped normals, or incorrect material assignments.

Can I transfer animations between different game engines?

You can transfer the raw animation clips using FBX. Skeletal animations and keyframed transforms port well. What does not transfer is engine-specific logic: Animation Blueprints (Unreal), Animator Controllers (Unity), and AnimationTree (Godot) must be rebuilt inside each engine.

What is Nanite and does it change how I prepare models?

Nanite is Unreal Engine 5's virtualized geometry system. It renders pixel-scale detail from meshes with billions of triangles and generates LODs automatically. This only applies to static, non-deforming geometry. Animated characters and translucent objects still need traditional polygon budgets and manual LOD work.

Why is my imported model the wrong scale in the game engine?

Unit mismatch. Unity and Godot measure in meters. Unreal measures in centimeters. FBX files can store distances in centimeters, millimeters, or inches depending on the tool that created them. Check your DCC tool's export unit settings and the engine's scale factor option.

$ related

Related Guides and Tools