UE导入导出FBX的打组问题
前言
已知UE导出FBX模型以后, 会将Mesh和Joints打成一个组, 如下图
这个组的存在会影响美术工作, K动画时是需要将这个组给删掉的, 也就是模型和骨架与组接触父子关系, 如果组有相对变换, 那么这个时候模型可能还会发生旋转
比如下图
所以现在的问题是如何有效的解决这个问题?
先大概看一下源码
导出流程
主要流程就从这里开始
第一步就会创建一个MeshNode, 用模型本身命名,然后把这个Node作为Root, 到
1 | ExportSkeletalMeshToFbx 中去创建MeshNode和SkeletonNode |
那么导出流程如果要改成不打组, 那么很简单, 在最前面把Scene的RootNode作为Mesh和Skeleton的Root传递过去就可以了
如下图
可以直接在导出数据配置中加一个选项, 方便选择
导入流程
导入流程稍微复杂一点, 看一下调用栈
以下图的模型为例
会递归的查找整个树, 找到最后的Root节点, 这里大概梳理一下FbxSdk中 这个模型的层级关系,
**
每个FbxNode都拥有一个FbxNodeAttribute**
可以用此来定义是什么类型的Node, 所以这里引擎有个规则
简单看就是要一直找到当前节点的ParentNode等于Scene的RootNode为止
所以需要改动的就是这里判断一下最上面的节点是不是
1 | FbxNodeAttribute::eSkeleton |
如果不是骨骼那么就不当做骨架创建
简单修改如下
因为要公开参数, 这里折腾了一段时间
**
**
首先需要在我们获取的
1 | FBXImportOptions |
中添加一个变量, 这个变量要从ImportUI类中获取, 这个类就是弹出来的Slate界面的Object对象
因为上面获取RootNode的时候获取不到UI类, 只能通过Options类获取参数, 所以需要在两者内都定义一个变量
最简单的方法就是在读完配置真正导入File之前读取一下UI的配置
另外还可以在
1 | void ApplyImportUIToImportOptions(UFbxImportUI* ImportUI, FBXImportOptions& InOutImportOptions) |