BlaXuan 发表于 2022-12-9 18:45

UE5 插件实现导出Alembic文件

最近好像捅了插件的窝了,接到的需求都是给美术写插件。。。
一口气写了三个插件:
1、程序化编写sequencer(通过json类型配置文件,自动生成sequencer,听起来是个蛮离谱的需求,但有钱我都可以忍!);
2、在网格编辑器里,实现笔刷绘制蒙皮网格体部分区域,生成影响区域网格顶点的骨骼列表;
3、从虚幻引擎将毛发资源导出Alembic文件。
由于前两个插件比较复杂,懒得写那么多,所以决定写写怎么实现第三个插件。
前提:本文不包含如何新增插件的基础教程,百度上很多了可以随便找找。
-------------------------------------------------进入正文分割线--------------------------------------------------
在实现这个插件前,先调试了引擎源码,看了下资源的导出流程:
在AssetTools.cpp里打了个断点:



断点截图

然后随便选一个资源右键选择Asset Actions->Export,然后就被断住了:



堆栈截图

根据堆栈可以摸清引擎关于资源导出功能的整个框架,有条件的可以自己调试一下(没条件的你进来干啥)。
经过上一步的分析,看来问题不大,只要新建一个uclass继承UExporter,并重写部分接口,就可以实现自己的资源导出功能。
但在正式输出插件之前,还有一个严肃的问题要解决。因为美术要求的是导出毛发资源的源文件,众所周知(不确定),虚幻引擎的GroomAsset一般是在Maya里制作,并以Alembic文件格式导出的。所以要实现从引擎里导出Alembic文件,还得先了解Alembic文件格式,这里推荐:
1、官网介绍(虽然是python库,但可以大概看看这种文件格式的设计)
2、C++版本库(git上扒拉到的c++版本)
以上资料好像要翻墙,有条件一定要自己看看(没条件我也帮不了你)。
-----------------------------------------------真.进入正文分割线-------------------------------------------------
创建一个空插件,由于是要导出毛发资源,所以配置上,需要依赖“HairStrands”插件:



插件依赖

其次是主要的模块依赖:



模块依赖

插件的代码部分其实不多,新建一个UAlembicHairExporter继承UExporter,构造函数里面新增文件类型,确定支持导出的资源类型:



构造函数

接口上,由于Alembic文件是二进制文件,只需要重载ExportBinary函数,函数主要实现:
1、获取UGroomAsset需要导出的数据:



数据转换

(截图不包含发束、顶点、宽度等数据的读取)
2、接着就是Alembic库方法的调用,将资源原始数据以Alembic格式填充进去:



Alembic的写入

对Alembic库摸不着头脑的,可以先参考官方给出的毛发资源导入插件“AlembicHairImporter”,其实写和读的流程很像,只不过两套接口读以"I"开头,写以“O”开头。
页: [1]
查看完整版本: UE5 插件实现导出Alembic文件