找回密码
 立即注册
查看: 528|回复: 0

UE5 插件实现导出Alembic文件

[复制链接]
发表于 2022-12-9 18:45 | 显示全部楼层 |阅读模式
最近好像捅了插件的窝了,接到的需求都是给美术写插件。。。
一口气写了三个插件:
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”开头。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-2 13:33 , Processed in 0.178691 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表