If you've seen the warning message "Object has Degenerate Tangent bases which will results in incorrect shading" you may be wondering what this means exactly.
As of Unreal Engine version 4.7 and higher, the editor will now use MikkTSpace tangents by default. This can easily be changed in the Import Options window by changing the Normal Generation Method or it can be changed in the Build Settings from the Static Mesh Editor.
The main difference between the previous method and MikkTSpace is that you have to make sure that you're static mesh asset has been properly UV mapped. If not, it can produce the error message mentioned above and will not provide accurate lighting results, even though you may not see any issue with the way the mesh is rendered. It it up to your discretion if you are happy with the results or need to use the alternative built-in method of tangent calculation over MikkTSpace.
In the example here the cube's face has been inset causing the UV's to no longer be properly mapped. This is the result of the tangent calculation with each method.
UAssets are compiled assets created for use with Unreal Engine 4 that are generated from files imported such as Textures, Media/Movies, and FBX/OBJs. This compile happens when the asset is imported for the first time and will now show up in your Content Browser and the subsequent Project Folder under the Content section in Windows/Mac/Linux.
These UAssets can be moved directly from folder to folder in your OS without the need to use the editor to migrate them, but there are some caveats to this method.
They require the same folder structure as the original project they were created in otherwise they will lose references. For example, if you have a UAsset of a static or skeletal mesh that has materials assigned to it, the asset will need to be placed in the same folder structure as the original project to show these correctly. So if you have these in Project Folder > Content > Meshes for the original project and your new project you place the UAsset in Project Folder > Content > FBXs the material references will be lost since they will not know where they were referenced to the original mesh.
The UAsset may not be from a build of the engine that is compatible. For instance, If you have an UAsset from a 4.10 project you've made, this will not be able to be opened with a 4.9 project. Previous version of the engine are not forward compatible which is in line with pretty much any other software out there.
The UAsset may be serialized so that it can only work with a specific engine that so that the asset cannot ever be loaded in another engine or engine version that it is not assigned to. This type of serialization does not refer to the engine versions available via GitHub or the Epic Games Launcher.
There are number of reasons that importing a Static Mesh or Skeletal Mesh into the editor can take a bit of time. Here are some of the things that you can do to help more quickly get your assets into UE4.
1. FBX Triangulation: This routine can be slow and is dependent on the mesh being imported. We use a routine provided by the FBX SDK and it can be slower with meshes that consist of larger polygon counts.
Resolution: You can Triangulate your mesh before you export it from your modeling application.
2. Lots of Meshes in a single FBX: When importing a single FBX that may contain a number of assets that need to be combined into a single mesh on import you will see the processing time go up, sometimes exponentially. This is usually something that is reported as a "Freeze" or "Crash" with UE4, but it's just processing the asset. Largely, this can happen because there needs to be a lot of copying around in memory for this to work, which itself takes a while. Each part will save as a whole and then load another piece that needs to be added and saved.
Resolution: In your modeling application you can combine meshes to be a single asset or bring the mesh into the editor in chunks rather than a single FBX with lots of pieces. Depending on on your asset and needs this may differ slightly for different FBXs.
3. Build Adjacency Buffers: This is required for PNT triangles to work for Tessellation. If you have a large mesh or do not plan to use tessellation with it just disable it.
1. Animation Key Frames: This can cause the import process to increase by having a large number of Key Frames setup for your animation, and can largely depend on the number of bones that are being animated.
2. Morph Targets: The more morph targets you have to be imported with your skeletal mesh the longer the import process will take.
You may need to double check in your modeling package that your polygons normals are facing the correct direction. In most modeling programs, like 3Ds Max or Maya, the back-face will render in the viewport, however in a game engine where you don't want to render what is not needed the backface is culled unless specified to. Only the direction of the polygon's normal will render unless it has a two-sided material applied that will render the face.
You can verify this issue in UE4 by opening the Static/Skeletal Mesh Editors. Once enabled you will see Green lines drawn out from each vertex that shows the direction of the normal.
If these are Green lines are facing inward you will want to edit this in your modeling program to flip the faces the correct direction. Your modeling program should also have a method of displaying the direction of the normal as well.
For Desktop development the only limitation is based on what your hardware is capable of handling. However, on Mobile the scene view is limited to \ Advanced > Check the UV check box. Here you will also have the drop-down for UV Channel you would like to be overlaid in the view.
If you need to assign a material to your mesh it would be imperative to setup your UV, otherwise you would see stretching or other artifacts because the UV is not laid out properly.
You can read more about this in the documentation page:
Unreal Engine 4 cannot import specific materials/textures/shaders that were created in other programs. While the Material Editor in UE4 is a robust system there isn't a universal system in place to communicate the different shader setups from other programs. With the many different modeling packages out there and their own shader setups Unreal can only do basic imports. It is for this reason that it is recommended to use the Material Editor in the engine to create all your materials for your assets.
There are a few types of textures that can be imported automatically to create the material and assign to the mesh, but this is only for simple materials that use Diffuse, Normal, and Opacity(Alpha) textures. These types of textures can be automatically assigned in a generated material.
When you create a Apex Cloth asset with your modeling package using Maya, 3Ds Max, or Nvidias ClothingTool that comes with their SDK you may be wondering how you would import that .apb/.apx file that is created with your Cloth attributes.
You will not be able to directly import this type of file using the Import option from the Content Browser. Instead it will be assigned to the Skeletal Mesh that houses the material that this file needs to be assigned to.
1. Start by importing your Skeletal Mesh
2. Now open the Skeletal Mesh in Persona (Skeletal Mesh Editor)
3. In the Detail's panel on the left and locate the section named Clothing and click the Add APEX clothing file...
4. Select your .apx file from the selection window.
5. Once imported you can select the Clothing drop-down under each Material Element to choose where it should be assigned.
By default, the pivot will use the World Origin (0,0,0) of the FBX, so if the meshes pivot is not centered out to 0,0,0 then the mesh will appear to be offset when you import it into UE4.
As of 4.12 you can now import your static meshes and have have the pivot use the one from the DCC for the mesh rather than being centered to the FBX's DCC.
Use the following when you import:
Simply uncheck the option for Transform Vertex to Absolute so that the Pivot, Transform, and Offset from the FBX will be used for the static mesh.
If you are able to walk through your mesh you likely have no collision setup for your static mesh. This will prevent the player or any objects simulating physics to interact with the mesh.
For an overview of different methods that Unreal Engine 4 uses with collision along with how-to set these up have a look at this documentation:
If you are having trouble getting collision to be more accurate you will likely need to use the auto-convex method of collision generation with higher accuracy settings, or you will need to create custom collision in your modeling application.
You can read more about that here in the documentation where it covers adding convex collision and the caveats to using it.
When importing any textures that have an Alpha, like with PNG, the Alpha is disabled when viewing just the texture asset, but it's visible when viewing in the Texture Editor. When disabling the Alpha the color information is not known for this negative space and is just pulled from the colors of the pixels that are known in that area.
When opening the Texture Editor with this asset you can enable and disable the Alpha to see how this works.
When creating or using a texture in Unreal Engine you will need to make sure that it is a Power of two, meaning that it should be using 16, 32, 64, 128, 256, etc for it's resolutions. ie. 256 x 256 for it's dimensions.
While you can use a texture without these dimensions you may run into issues, especially depending on the file size of the time. When not using a power of two the texture can never be streamed, which means that it cannot have mipmaps to lower its resolutions dynamically at further distances. This means that it will always render at full quality at the farthest distances and at its full file size too.
It's always best to use a power of two where possible and take precautions where you cannot.
Unreal Engine 4 has no problem importing textures that are up to 8192, but you may have noticed if you look at the Texture Editor the in-game resolution is still listed as 4196. Before you can use 8192 you will need to make some edits to your device profiles in order to enable this.
Follow the documentation here to see how to proceed:
If you're seeing a difference between working in the Editor and PIE (Play in Editor) then you will likely want to check to make sure that your Engine Scalability settings are set to EPIC. Sometimes these can be lowered when monitoring performance of your computer to make sure that you keep decent performance while working in the Editor.
For more information on Engine Scalability you can see the documentation here:
If you find that the scalability is being lowered often you can disable the option for Monitor Editor Performance? to keep the same quality settings.
If it's the first time you've opened an asset in the editor it can take a moment to write the Derive Data Cache (DDC) so that it can make it easier for the editor to know what these assets are and open them more quickly in the future. For most assets you may not notice any delay in opening them the first time, but if you have textures with high resolutions in the range of 8192 and high polygon density static meshes it can take a moment or more to write these to the DDC the first time. The time it takes to write to the DDC is dependent on the number of assets being opened and the hardware that is being used. If opening multiple assets it can take more time.
For more information about the Derive Data Cache you can see the documentation here: