What to validate in an FBX before Unreal imports it
Before an FBX goes into Unreal Engine, check its names, triangle count, geometry, UVs, applied transforms, units, skeleton, animation frame rate and materials. Dousen runs these checks in the DCC on the instances you publish, so an error blocks the export and the problem never reaches Perforce or Unreal.
- The checks run in the DCC on the instances you check, before anything is exported.
- A rule set to
errorblocks the publish. Awarningis advisory but you confirm it first. - A warning needs your confirmation before you publish.
- Project admins turn rules on and off, and change severity and parameters, on the portal's Validators tab.
What should you check before importing an FBX into Unreal?
The table lists checks that Dousen's built-in validators cover, with the symptom you would otherwise see in Unreal. Defaults are the baseline, and a project's conventions can change them. Which rules run depends on the DCC, so see DCC coverage.
| Check | Why it matters in Unreal | How Dousen checks it |
|---|---|---|
| Name follows the convention | Search, filters and cook rules depend on the prefix. The DousenUE plugin also checks the package name and required tags before it creates an asset. | naming.convention, error by default. Checks the prefix and the convention's pattern and length. |
| No special characters in names | Spaces and symbols in object or file names can end up in the Unreal asset name and path, where they cause import and reference problems. | naming.no_special_chars, error. |
| Triangle count within budget | A mesh over the triangle budget costs more memory and render time on every instance in the level. | mesh.poly_count, error, max_tris = 50000 by default. |
| No n-gons | Faces with five or more sides get triangulated on import in a way you don't control, which can shade differently. | mesh.no_ngons, warning, off by default. |
| No zero-area faces | Degenerate faces give bad tangents and shading artifacts. | mesh.no_zero_area, error. |
| No non-manifold geometry | Edges shared by more than two faces produce unreliable normals and collision. | mesh.no_nonmanifold, error. |
| Watertight, consistent normals (Nanite meshes) | Nanite renders open edges as missing triangles, and flipped faces show up pink in the Nanite viewport. | mesh.watertight, mesh.consistent_normals, mesh.no_loose_geometry. |
| Lightmap UVs on non-Nanite meshes | A baked-lighting mesh with no second UV channel gives lightmap errors in the build. | nonnanite.lightmap_uvs, warning. uvs.no_overlap_lightmap flags overlaps that bake as light bleed. |
| UV coverage | Small UV islands leave most of the texture unused, so the mesh looks blurry at the same texture size. | uvs.min_coverage, warning, min_coverage = 0.65. |
| Transforms applied | Unapplied scale or rotation imports with wrong size or orientation. | scene.transforms_applied, error. Blender and Maya offer an automatic fix. |
| Scene units and frame rate (3ds Max) | A scene in the wrong units imports at the wrong scale. | scene.units (centimeters by default) and scene.frame_rate (fps = 24 by default). These are 3ds Max rules. Other DCCs use anim.fps_match (target_fps = 30). |
| No hidden objects | A hidden mesh is usually left over from authoring and shouldn't ship. | scene.no_hidden_objects, warning. |
| No missing material slots | Empty slots import as blank or default materials. | materials.no_missing_slots, error. |
| Single root bone, root at origin | Several roots or an offset root cause skeleton problems and animation offsets. | rig.hierarchy, rig.root_at_origin, both error. |
| At most 4 skin influences per vertex, no unweighted vertices | Extra influences are dropped and unweighted vertices stay behind when the mesh moves. | rig.max_influences (max_influences = 4), rig.unweighted_vertices. |
| No negative bone scale | Mirrored or flipped joints import with inverted scale, which distorts skinning and breaks retargeting. | rig.no_negative_scale, error. |
| Frame rate matches the project | A clip at the wrong rate plays too fast or too slow. | anim.fps_match, error, target_fps = 30. |
| Valid frame range, no keys on frame 0 | Unreal expects keys from frame 1 onwards. | anim.frame_range, anim.no_keys_on_frame_zero. |
Which of the mesh rules apply depends on how the asset's materials are set up. Dousen runs either the Nanite rules or the non-Nanite rules for each asset, chosen from the project's material catalog. That gate is a preview feature. See Nanite rules and Materials.
What happens when a check fails?
Each rule has a severity. An error blocks the export, and the artist has to fix the problem first. A warning is advisory, but you confirm it before publishing: Blender shows Publish despite validation warnings, and the Qt Publish tab in Maya, 3ds Max and Substance asks "Publish anyway?". Expand a failing rule in the results to see the affected objects and its message. Use Select Invalid (Maya and 3ds Max) to select them in the scene, and Repair (Fix in Blender) when the rule offers an automatic fix. Houdini is the exception to blocking. There, validation is the manual Dousen: Validate shelf tool, and the export tools don't wait on it.
If a rule seems wrong for your project, send your project admin the rule name, the message, the asset type and an example.
Where are the rules configured?
In the web portal, a project admin opens Projects, selects the project and opens Validators. The tree has Global, one node per asset type, and every taxonomy node. Each node can add a rule, turn it off, change its severity (error or warning) and edit its parameters, and a deeper node overrides a shallower one. A hero-prop node can set a lower max_tris than the global rule. The editor saves each change as you make it. DCCs cache conventions for up to five minutes, so wait or relaunch the DCC before you test a change. The full list of rules and how to write your own is in Asset validation.
Can I add my own checks?
Yes. Studios can load custom validators into the DCC addons through the validators.extra_paths setting in the project's pipeline settings, and load their own tools and startup scripts alongside the Dousen addon. See custom validators and Loading studio tools.
Source
- Epic Games, FBX Content Pipeline, with pages for static mesh, skeletal mesh, animation and material import
Related
- Asset validation and DCC addons in the documentation
- Unreal asset naming conventions
- One Perforce changelist per Jira task
Dousen is free during the studio beta, with access by request, and free forever for teams of up to 5 users. Request early access.