前两周接了个外包,客户发来一个用 SolidWorks 导出的机械外壳模型,要求在 UE 里做成产品展示。我当时觉得这活儿不复杂,无非是“把 3D 模型导入、调一下材质、再打个灯”,真做起来才发现,模型进引擎后不是发黑就是尺寸乱套,贴图也全变成灰扑扑的占位色。折腾下来我意识到,很多人对 3D 模型导入与材质、光照设置 的理解都停留在表面的“拖拽文件”上,实际上这个流程里的坑远比想象中多:格式选错、单位不一致、轴向翻转、贴图路径断裂、PBR 参数不匹配、灯光单位混乱,任何一个环节出问题,出来的效果都很难看。
这篇文章不打算讲软件操作说明书,而是把我实际项目中踩过的坑、验证过的处理顺序、以及不同场景下能直接照用的参数配置完整梳理一遍。不管你是做产品展示、三维可视化,还是搞 CAD/EDA 模型互导,只要路径里有“模型、材质、光照”这三个环节,都值得花几分钟看看。
1. 导入前的第一道关卡:格式、单位、轴向和网格清理
1.1 格式选错了,后边全白干
很多同学拿到模型就直接拖进目标软件,但“能打开”和“能正确工作”完全不是一回事。三维模型文件的格式选择,决定了材质、动画、坐标信息和几何精度能否被完整保留。
常见的几个格式我用下来大致是这样:
| 格式 | 适用场景 | 材质/动画支持 | 注意事项 |
|---|---|---|---|
| FBX | 游戏引擎、DCC 软件之间交换 | 支持 PBR 材质、骨骼、动画、相机 | 业内通用程度最高,导入前要检查轴向和单位 |
| OBJ | 静态模型、快速预览 | 只有简单材质和 UV 信息 | 不含动画,贴图需要额外管理 |
| glTF/GLB | Web 端、Three.js、Cesium | 支持 PBR 材质,适合网络传输 | 默认 Y 轴向上,加载后一般不需要翻转 |
| STEP/IGES | CAD 软件(SolidWorks、中望3D、AD 等) | 仅几何,无材质 | 需要先转成网格,不能直接用于渲染 |
如果你要导入到 UE 或者 Unity,FBX 基本是最稳妥的。如果目标是做网页三维展示,那就直接用 glTF/GLB,别用 OBJ 硬扛,因为 Web 渲染器对 glTF 的支持最完整。再比如说 PCB 相关的场景,有人问“立创EDA 3D模型如何导入 AD”,我建议优先导出 STEP,再到 AD 里通过导入 3D Body 的方式加载,因为 PCB 建模本身是精确建模,STEP 能保留更多的形状细节,而 OBJ 或者其它三角网格格式容易把圆弧面变成肉眼可见的多边形。
1.2 单位与缩放:1:1 在三维世界里并不存在
我见过最离谱的一次,是把一个机械件导入 UE 之后,模型变成了一个 300 米高的巨物,场景摄像机随便一动就穿模。原因非常简单,SolidWorks 默认单位是毫米,而 UE 默认单位是厘米,两个软件之间没有做单位换算,模型数值就直接被当成“厘米”用了。
处理单位问题的逻辑其实很清楚:导入前先确认源文件是用什么单位建模的,再确认目标软件导入时如何解释这个数值。举例来说,一个 500mm 长的零件,在 Blender(默认单位为米)中应该显示为 0.5m。如果 Blender 在导入时把单位解释成“米”,但你源文件实际上是 mm,那这个 500 就会变成 500m,那就是大问题了。
我比较习惯的做法是这样的:
- 在 CAD 软件导出前,先把文档单位设置成毫米,这也是绝大多数机械模型的默认值。
- 到 DCC 或引擎中导入时,找到“Scale”或“Unit”参数,手动填写 0.001 或 1000,不对就换一个方向试。
- 导入后用包围盒工具看一眼模型尺寸,一个机械外壳如果显示成了 300m 或者 0.03mm,那就是单位有问题,赶紧退回导入面板调。
这里要注意,有些软件提供了“自动检测单位”的选项,但自动检测并不总是可靠。尤其是在 OBJ 这种本来就“没单位”的格式里,软件只能靠猜,所以我更倾向于自己在导出时就确定单位,不给它猜的机会。
1.3 轴向:为什么模型一导入就躺倒
模型导入之后整体躺倒、侧翻,这块的九成原因都是坐标轴不一致。三维软件里,有的用 Y 轴向上(比如 Maya、OpenGL 体系),有的用 Z 轴向上(比如 Blender、3ds Max、UE),这个差异如果不处理,就会出现“在源头软件里站着,到目标软件里趴着”的问题。
好在主流引擎和 DCC 软件都内置了轴向转换。FBX 格式里通常会记录坐标轴信息,所以 UE 导入 Maya 导出的 FBX
