Exporter for Unreal to Unity 使用体验
Background
最近需要在Unity中验证自定义渲染管线的效果,从Fab上找到了一个还不错的UE场景,接下来就需要将这套场景导入到Unity中。
本篇博客会记录使用 Exporter for Unreal to Unity(后面都简称为UTU)的踩坑记录,这个工具取代了我原本使用UE的File→Export All的流程。
我对于这个工具的阶段性需求:
- 导出Level中的Static Mesh Actor,并在Unity中还原Actor的Transform
- 导出贴图
- 导出基础的材质效果
UTU是以Unreal Plugin的形式存在的,在工程中启用后,会出现一个UnrealToUnity的选项,目前我只需要用到其中的ExportToUnity。
打开后,会弹出一个窗口,标题是插件名加版本号(当前是 UnrealToUnity 1.57)。所有项都在 Parameters 分组里,底部是 OK / Cancel。点 OK 才开始导出,这些设置会记在工程的 Editor 用户配置里。
结合我当前的三条需求,真正需要想清楚的是输出目录、管线、Shaders,以及 Nanite / Foliage / Prefabs 会不会把场景摊得太大。其余多数保持默认即可。
输出与管线
Output Directory 导出目录,默认 C:\UnrealToUnity\。插件会在里面生成一套可直接用 Unity 打开的工程,包括 Assets/、ProjectSettings/、Packages/。不同 Render Pipeline 不要导进同一个目录。
Scriptable Render Pipeline
- Built In Render Pipeline
- Universal Render Pipeline(默认)
- HD Render Pipeline
决定拷哪套 Unity 工程模板,以及后面材质走哪套 shader 壳。URP / HDRP 官方下限是 Unity 2021.2。
Shaders
- CustomShaders(designed for accuracy)(默认):把 UE 编译后的 HLSL 裁出来,塞进 Unity 的 shader 模板,追求观感接近 UE
- Standard Shaders:全部改用 Unity / URP / HDRP 的 Lit,某个输出槽如果有多张贴图,只用第一张
Custom 路径更“像 UE”,也更容易在 Unity 里编译失败。如果只要基础 PBR,或者后续要接到自己的渲染管线,Standard 更稳;必要时可以先用菜单里的 BakeTextures 把材质烘成贴图,再选 Standard 导出。
ExposeParameters(requires UE5.4+)
默认开。Material Instance 尽量共用父材质的 shader,只覆盖参数。当前工程是 UE 5.6,这个开关是生效的。
网格
Skinned Meshes
- Export As Skinned Mesh(默认):保留骨骼和动画
- Export As Static Mesh:导出前先在 UE 里把骨骼网格烤成静态网格
只要关卡里的 Static Mesh,选 Static 可以少掉一批蒙皮相关的问题。
Nanite Options
- Export Coarse Mesh(默认):导 Nanite 的粗网格,快、面数少
- Export Original Mesh:导原始高模,面数可能非常大
Show FBX Export Dialog
默认关。开了会再弹出 UE 自带的 FBX 导出窗口。关掉时,LOD 和顶点色由下面两项控制。
Export LODs
默认开。FBX 里带 LOD。
Export Vertex Colors
默认开。FBX 里带顶点色。
材质与法线
Export Vertex Shader
默认开。把材质的 World Position Offset 也写进 Unity shader。关了更不容易编译失败,我这种“只要基础材质”的阶段可以先关掉。
Export Textures
默认开。写出贴图和对应的 .meta(sRGB、Normal、Cube 等导入设置)。
Tangent To World Location
法线 / TBN 怎么从 UE 的 Z-up 对到 Unity 的 Y-up:
- Keep Export Vectors
- Keep Export Vectors + No WorldNormalCopy
- Flip YZ Before Normals(默认)
- Flip YZ After Normals
WorldAligned 贴图或法线看起来不对时,优先改这一项。
场景对象
Export Brushes
默认关。是否导出 BSP Brush。文档写在 UE5 上开这个可能崩溃。
Export Physics
默认开。导出 Mesh / Box / Sphere / Capsule 碰撞。
Export All Sounds
默认关。扫项目里的 USoundWave,导出成 OGG。
Export All Animations
默认关。开了会把和该骨骼网格同 Skeleton 的所有 AnimSequence 一起导出,不只是关卡里正在播的那条。
Foliage Export
- Create GameObject Per Instance(默认):每棵草 / 树一个 Unity 物体,实例一多场景会非常重
- Tree Instances(requires extra step in Unity):打成自定义组件,进 Unity 后还要用菜单搬到 Terrain 上
Prefabs
- None:场景里全是独立物体
- Create per mesh/material(默认):按网格 + 材质组合生成 Prefab 并实例化
- Create From Blueprints(experimental):按蓝图层级做 Prefab;选这个时不会把 Actor 从父级 Detach 掉
默认的 per mesh/material 会在导出前 Detach 所有 Actor(保留世界坐标),Unity 里的层级和 UE 不一定一致,但 Transform 还在。
使用体验
- 优先导出为URP,HDRP的导出结果有概率存在shader问题,可能还是因为HDPR太重了
- 待补充