Unreal (.zip)
Awaken imports Unreal projects from a .zip, decoding static-mesh geometry, textures, material expression graphs and landscape terrain, and - when the pack ships .umap levels - the actual scene layout. This is the youngest of the three engine importers, so this page is explicit about what works and what does not yet.
What Awaken reads
An Unreal .zip is recognised by a .uproject file. Awaken scans the archive for .uasset packages (identified by their package magic) and sorts them by folder convention:
- Meshes - assets under a
Meshes/folder, orSM_-prefixed assets. - Textures - assets under a
Textures/folder. - Materials - assets under a
Materials/folder.
Unreal's binary .uasset/.umap formats are decoded directly (the StaticMesh geometry lives in a block-compressed MeshDescription bulk section). No Unreal Engine is involved.
What imports today
Static meshes
StaticMesh geometry decodes to positions and UVs; normals are recomputed. Each decoded mesh is registered and welded like any other import. Not every StaticMesh decodes - the import report tells you how many succeeded (for example, "decoded 47/52 StaticMeshes (the rest are placeholders)"), and undecodable meshes are listed individually with a reason.
Materials and textures
Textures (Texture2D) are extracted to PNG. Unreal stores texture source as BGRA, so the red and blue channels are swapped back on decode. Normal-map samples are unpacked to -1..1, and multi-channel masks are read per channel rather than as a single value.
Each material is mapped to its texture by reading the material's own texture imports (name heuristics fail for tiling surfaces, so the import list is authoritative). If a material's texture can't be resolved, Awaken falls back to the material's name stem, then to the pack's main atlas, and finally to untextured grey - a wrong texture is never guessed.
Material graphs
Unreal material expression graphs are read and translated into Awaken node shaders, which is what gives an imported pack its real water colour, sky, glass and textured terrain instead of a flat approximation.
Translation flattens the graph first: reroute nodes are collapsed, material functions are inlined, and Unreal's engine functions are transcribed from their published definitions. 28 of the 39 engine functions a surveyed pack used are covered.
The rest are named rather than approximated, which is the same rule the other importers follow:
SimpleGrassWindandBlendAngleCorrectedNormalsare documented by behaviour rather than by formula, so transcribing them would be invention.FlipBook,RGBtoHSVandRadialGradientExponentialhave formulas and are simply not done yet.
Parameter names are sanitised into valid WGSL identifiers, and translated materials are compiled under the GPU test harness rather than trusted to be valid.
Landscape terrain
Landscape terrain imports, including its splat layers: the landscape material's LandscapeLayerBlend names its layers and says which texture each uses, so the layer-to-texture mapping is read out of the asset rather than guessed.
Scene layout
When the pack ships .umap levels (the *_BuiltData lighting caches are skipped), Awaken reads each StaticMeshActor's mesh reference and world transform, plus the level's lights, and reconstructs the scene. The first level that ships a post-process grade or sky light drives the Render Settings. If no level produces placements, Awaken falls back to a grid of every decoded mesh so you can still see them.
Lights and post-FX
Directional, point and spot lights import, with their intensities remapped from Unreal's lux/candela ranges onto Awaken's, point range taken from the attenuation radius, and a spot's cone from its outer cone angle. A PostProcessVolume grade (exposure, contrast, saturation, vignette, bloom, colour filter) and a SkyLight (ambient intensity and tint) map onto the render settings.
Coordinate conversion
Unreal is Z-up, left-handed, and measured in centimetres; Awaken is Y-up, right-handed, and metric. Mesh vertices swap Y and Z and scale by 0.01. Actor placements use the matching maps so they line up with their geometry:
| Quantity | Unreal → Awaken |
|---|---|
| Position | (x, z, y) × 0.01 |
| Scale | (x, z, y) |
| Rotation | (x, z, y, −w) |
Not supported yet
Be aware of these gaps before importing an Unreal pack:
- No cameras - camera actors are not imported.
- No colliders - no collision shapes come across; you'll author physics in Awaken.
- No prefabs or instance grouping - actors are flattened into the scene; there's no prefab-per-model as with Unity/Godot.
- One material per mesh - no per-instance material overrides (re-skins).
- Eleven engine functions are not translated - see Material graphs above for which, and why some will not be.
- Partial mesh decode - some StaticMeshes may import as placeholders.
Because of these gaps, an Unreal import is best treated as a way to get geometry and rough layout into Awaken, then finish materials, physics, and organisation in the editor.
📸 Screenshot - save as img/import-unreal-result.png
An imported Unreal level in the Awaken viewport, with the Console showing the import report (decoded mesh count and any placeholders).
See also
- Importing Assets - the pipeline and support matrix
- The Import Dialog - choosing files and the texture cap
- Colliders on import - what physics data survives (none, for Unreal)
- Console - where the import report appears
- Physics Overview - authoring colliders after import