Version: 2017.4
Art Asset best practice guide
FBX export guide

How do I import models from my 3D app?

There are two ways to import 3D models into Unity:

  • Drag the 3D model file from your file browser straight into the Unity Project window.
  • Copy the 3D model file into the Project’s Assets folder.

Select the file in the Project view and navigate to the Model tab in the Inspector window to configure import options. See documentation on Models for more information about import options.

Unity supports importing models from most popular 3D applications. For more guidance on how to import from specific 3D packages, see the following pages:

Textures

You must store Textures in a folder called Textures, placed inside the Assets folder (next to the exported Mesh) within your Unity Project. This enables the Unity Editor to find the Textures and connect them to the generated Materials. For more information, see documentation on Importing Textures.

3D formats

Unity supports importing Meshes from two different types of files:

  1. Exported 3D file formats, such as .fbx or .obj. You can export files from 3D modeling software in generic formats that can be imported and edited by a wide variety of different software.
  2. Proprietary 3D or DCC (Digital Content Creation) application files, such as .max and .blend file formats from 3D Studio Max or Blender, for example. You can only edit proprietary files in the software that created them. Proprietary files are generally not directly editable by other software without first being converted and imported. An exception to this is SketchUp .skp files, which both by SketchUp and Unity can read.

Unity can import and use both types of files, and each come with their own advantages and disadvantages.

Exported 3D files

Unity can read .fbx, .dae (Collada), .3ds, .dxf, .obj, and .skp files. Refer to your 3D modeling software documentation for information about exporting 3D files.

Advantages:

  • Instead of importing the whole model into Unity, you can import only the parts of the model you need.
  • Exported generic files are often smaller than the proprietary equivalent.
  • Using exported generic files encourages a modular approach (for example, using different components for collision types or interactivity).
  • You can import these files from software that Unity does not directly support.
  • Exported 3D files (.fbx, .obj) can be reimported into 3D modeling software after exporting, to ensure that all of the information has been exported correctly.

Disadvantages:

  • Models must be re-exported manually if changes are made to the original file.
  • Extra care must be taken to keep track of versions between the source file and the files imported into Unity.

Proprietary 3D application files

Unity can import proprietary files from the following DCC software: Max, Maya, Blender, Cinema4D, Modo, Lightwave & Cheetah3D. Files imported this way are converted into .fbx files by Unity during the import process.

Advantages:

  • Updates made to the original model are automatically imported into Unity.
  • This is initially simple - but it can become more complex later in development.

Disadvantages:

  • A licensed copy of the software used must be installed on all machines using the Unity project.
  • Software versions should be the same on each machine using the Unity project. Using a different software version can cause errors or unexpected behavior when importing 3D models.
  • Files can become bloated with unnecessary data.
  • Big files can slow down Unity project imports or Asset re-imports, because you have to run the DCC software you use as a background process when you import the model into Unity.
  • Unity exports proprietary files to .fbx internally, during the import process. This makes it difficult to verify the .fbx data and troubleshoot problems.

Note: Assets saved as .ma, .mb, .max, .c4d, or .blend files fail to import unless you have the corresponding DCC software installed in your computer. This means that everybody working on your Unity project must have the correct software installed. For example, if you use Maya to create ExampleModel.mb and copy it into your project, anyone else opening that project also needs to have Maya installed on their computer.

Model Importer: Model

Model files that are placed in the Assets folder in your Unity project are automatically imported and stored as Unity Assets.

A model file can contain a 3D model, such as a character, a building, or a piece of furniture. The model is imported as multiple Assets. In the Project window, the main imported object is a model Prefab. Usually there are also several Mesh objects that are referenced by the model Prefab.

A model file can also contain animation data, which can be used to animate this model or other models. The animation data is imported as one or more Animation Clips.

A Mesh Filter together with the Mesh Renderer makes the model appear on screen
A Mesh Filter together with the Mesh Renderer makes the model appear on screen

Import settings for Meshes

The Import Settings for a model file is displayed in the Model tab of the FBX importer’s Inspector window when the model is selected. These affect the Mesh and its Normals. Settings are applied per Asset on disk, so if you need Assets with different settings, make (and rename accordingly) a duplicate file.

Property Function
Meshes
Scale Factor Unity’s physics system expects 1 meter in the game world to be 1 unit in the imported file. If you prefer to model at a different scale then you can compensate for it here. Defaults for different 3D packages are as follows:
.fbx, .max, .jas, .c4d = 0.01
.mb, .ma, .lxo, .dxf, .blend, .dae = 1
.3ds = 0.1
Use File Scale Use the default model scaling, or uncheck to set a custom File Scale value for your model. Unity’s physics system expects 1 meter in the game world to be 1 unit in the imported file. If you prefer to model at a different scale then you can compensate for it here.
File Scale Set a custom scale for your model. Only available when Use File Scale is checked.
Mesh Compression Increasing this value reduces the file size of the Mesh, but might introduce irregularities. It’s best to turn it up as high as possible without the Mesh looking too different from the uncompressed version. This is useful for optimizing game size.
Read/Write Enabled When this option is enabled, Unity uploads the Mesh data to GPU-addressable memory, but also keeps it in CPU-addressable memory. This means that Unity can access the mesh data at run time, and you can access it from your scripts. For example, if you’re generating a mesh procedurally, or if you want to copy some data from a mesh. When this option is disabled, Unity uploads the Mesh data to GPU-addressable memory, and then removes it from CPU-addressable memory.

In most cases, you should disable this option to save runtime memory usage. For information on when to enable Read/Write Enabled, see Mesh.isReadable.
Optimize Mesh Let Unity determine the order in which triangles are listed in the Mesh. Unity reorders the vertices and indices for better GPU performance.
Import BlendShapes Allow Unity to import BlendShapes with your Mesh.
Generate Colliders If this is enabled, your Meshes are imported with Mesh Colliders automatically attached. This is useful for quickly generating a collision Mesh for environment geometry, but should be avoided for geometry you are moving.
Keep Quads Unity can import any type of polygon ( triangle to N-gon ). Polygons that have more than 4 vertices are always converted to triangles. Quads are only converted to triangles if “Keep Quads” is off. Quads might be preferable over polygons when using Tessellation shaders. See documentation on Surface Shader Tessellation for more information.
Index Format Defines the size of the Mesh index buffer. Note: For bandwidth and memory storage size reasons, you generally want to keep 16 bit indices as default, and only use 32 bit when necessary.
Auto Allows Unity to choose whether to use 16 or 32 bit indices when importing a Mesh, depending on the Mesh vertex count. This is the default for assets added in Unity 2017.3 and onwards.
16 bit Makes Unity always use 16 bit indices when importing a Mesh. If the Mesh is larger, then it is split into <64k vertex chunks. Assets that already exist in projects made in Unity 2017.2 or previous versions will use this setting.
32 bit Makes Unity always use 32 bit indices when importing a Mesh. This might be useful if you are doing GPU-based rendering pipelines (for example with compute shader triangle culling). This ensures that all Meshes use the same index format and allows you to have simpler compute shaders, because they only need to handle one format.
Weld Vertices Combine vertices that share the same position in space. This optimizes the vertex count on Meshes by reducing their overall number. This option is enabled by default.

In some cases, you might need to switch this optimization off when importing your Meshes. For example, if you intentionally have duplicate vertices which occupy the same position in your Mesh, you may prefer to use scripting to read or manipulate the individual vertex or triangle data.
Import Visibility Import the FBX settings that define whether or not MeshRenderer components are enabled (visible). See Importing Visibility below for details.
Import Cameras Import cameras from your .FBX file. See Importing Cameras below for details.
Import Lights Import lights from your .FBX file. See Importing Lights below for details.
Preserve Hierarchy Always create an explicit prefab root, even if this model only has a single root. Normally, the FBX Importer strips any empty root nodes from the model as an optimization strategy. However, if you have multiple FBX files with portions of the same hierarchy you can use this option to preserve the original hierarchy.

For example, file1.fbx contains a rig and a Mesh and file2.fbx contains the same rig but only the animation for that Mesh. If you import file2.fbx without enabling this option, the animation is imported without its rig, the hierarchies don’t match, and the animation breaks.
Swap UVs Swaps the primary and secondary UV channels in your Meshes. Use this option if your diffuse texture uses UVs from the lightmap.
Generate Lightmap UVs Creates a second UV channel for Lightmapping. See documentation on Lightmapping for more information.
Normals & Tangents
Normals Defines if and how normals should be calculated. This is useful for optimizing game size.
Import Default option. Imports normals from the file.
Calculate Calculates normals based on Smoothing angle. If selected, the Smoothing Angle becomes enabled.
None Disables normals. Use this option if the Mesh is neither normal mapped nor affected by realtime lighting.
Normals Mode Define how the normals are calculated by Unity. This is only available when Normals is set to Calculate.
Unweighted Legacy The legacy method of computing the normals (prior to version 2017.1). In some cases it gives slightly different results compared to the current implementation. It is the default for all FBX prefabs imported before the migration of the project to the latest version of Unity.
Unweighted The normals are not weighted.
Area Weighted The normals are weighted by face area.
Angle Weighted The normals are weighted by the vertex angle on each face.
Area and Angle Weighted The normals are weighted by both the face area and the vertex angle on each face. This is the default option.
Tangents Defines how vertex tangents should be imported or calculated. This is only available when Normals is set to Calculate or Import.
Import Imports vertex tangents from FBX files if Normals is set to Import. If the Mesh has no tangents, it won’t work with normal-mapped shaders.
Calculate Tangent Space Calculates tangents using MikkTSpace. This is the default option if Normals is set to Calculate.
Calculate Legacy Calculates tangents with legacy algorithm.
Calculate Legacy - Split Tangent Calculates tangents with legacy algorithm, with splits across UV charts. Use this if normal map lighting is broken by seams on your Mesh. This usually only applies to characters.
None Does not import vertex tangents. The Mesh has no tangents, so won’t work with normal-mapped shaders.
Smoothing Angle Sets how sharp an edge has to be in order to be treated as a hard edge. It is also used to split normal map tangents.

Importing visibility

Unity can read visibility properties from FBX files with the Import Visibility property.

Values and animation curves can enable or disable MeshRenderer components by controlling the Renderer.enabled property.

Visibility inheritance is true by default but can be overridden. For example, if the visibility on a parent Mesh is set to 0, all of the renderers on its children are also disabled. In this case, one animation curve is created for each child’s Renderer.enabled property.

Some 3D modelling applications either do not support or have limitations regarding visibility properties. For more information, see:

Importing cameras

The following Camera properties are supported when importing Cameras from an .FBX file:

Property: Function:
Projection mode Orthographic or perspective. Does not support animation.
Field of View Supports animation.
Near and Far Clipping Plane distance Does not support animation. When exporting from 3DSMax, enable the Clip Manually setting; otherwise the default values are applied on import.

Note: Targeted cameras are not supported.

Importing lights

The following Light types are supported:

  • Omni
  • Spot
  • Directional
  • Area

The following Light properties are supported:

Property: Function:
Range The FarAttenuationEndValue is used if UseFarAttenuation is enabled. FarAttenuationEndValue does not support animation.
Color Supports animation.
Intensity Supports animation.
Spot Angle Supports animation. Only available for Spot lights.

Note: In 3DSMax, the exported default value is the value of the property at the current selected frame. To avoid confusion, move the playhead to frame 0 when exporting.

Limitations

Some 3D modelling applications apply scaling on light properties. For instance, you can scale a spot light by its hierarchy and affect the light cone. Unity does not do this, which may cause lights to look different in Unity.

The FBX format does not define the width and height of area lights. Some 3D modelling applications don’t have this property and only allow you to use scaling to define the rectangle area. Because of this, area lights always have a size of 1 when imported.

Targeted light animations are not supported unless their animation is baked.


  • 2018–08–23 Page amended

  • 2017–09–04 Page amended

  • 2018–03–12 Page amended

  • Existing (pre Unity 5.6) functionality of Keep Quads first documented in User Manual 5.6

  • Normals Mode, Light and Camera import options added in Unity 2017.1 NewIn20171

  • Materials tab added in 2017.2 NewIn20172

  • Index Format property added in 2017.3 NewIn20173

  • Updated description of read/write enabled setting and reorganized properties table, to match improvements in Unity 2017.3 NewIn20173

See also

Art Asset best practice guide
FBX export guide