本文章出自视频https://www.youtube.com/watch?v=Oq6KbrqkGnw,讲者为Flavien Picon。
我们平时在导入文件的时候,引擎会根据文件类型把不同格式的文件导入成对应的资产,比如jpg、png格式会变成纹理资产,fbx、obj会变成Mesh资产等。正如前言所说,导入大量素材需要大量调整,所以我们需要构建一套模块化系统帮助我们更有效率地导入文件。或者我们还可以添加自己的文件格式支持,比如添加自己的翻译器,让引擎能够导入本来不受支持的文件格式。我们还可以设计多线程导入多个文件,加快大量素材的导入速度。一直到现在我们都在专注于改善导入工作,未来会推进交换框架对于导出工作方面的支持。
相较于传统的导入行为,新的交换框架允许我们模块化导入时用到的管线,并且我们还可以定制管线与管线的预设。让导入界面更加简洁易用,便于我们导入时调整参数。还可以结合编辑器工具控件导入资产。总之就是这个交换框架可以大大提高我们在导入大量资产时的效率,并且还能达到定制的目标,比如导入时自动放在对应的文件夹之类的。接着往下看您就能明白定制导入的好处。
如图所示,这是一张从源文件导入到资产的流程图,源文件会先通过翻译器获取源文件里面的数据。比如导入gltf文件时,就会读取文件中的材质、网格、纹理等数据,然后翻译器就会生成出来并各自翻译对应的资产,然后通过管线构建出对应的工厂,最后由工厂生成资产。我们现在的目的是修改翻译流程、工厂生产流程、导入资产后的操作等,从而达到自己的一些具体需求。
交换框架在UE5.1已经出现,我们已经接触过这个框架了,只是我们平时没有注意到,就是我们平时导入纹理的时候就已经和这个框架打交道了。
如果我们在虚幻5.4中导入fbx模型时,我们应该会看到这个:
我们还可以预览(Preview)这个源文件导入需要创建什么工厂节点,换句话说也就是会导入什么资产。
这个源文件有一个材质,并且有两个Mesh在里面,所以就是三个工厂节点,导出的资产也是三个。如果勾选了合并网格体,就是只有一个Mesh资产,和之前设置界面中的一样,只不过合并之后就会显示这个Mesh资产会包含两个Mesh对象。
在项目设置中有Interchange页面,可以设置一些导入时所使用的管线,这个管线其实就是定义了源文件导入到引擎中要经历的一系列工作与流程。
如果我们打开管线资产,就会看到下图这个画面,这里其实就是定义了导入界面中会显示或者锁定的一些参数,并且在导入面板中点击重置选择的管线(Reset Selected Pipeline)的时候就会重置到预设资产中所设定好的值。特别提醒:如果我们想在项目中使用这种预设,记得将预设资产复制到项目内容文件夹里,如果您正在与团队共同开发,这个操作是十分重要的!
下图框框显示的是设置默认堆栈和堆栈设置,并且导入窗口可以选择设置好的堆栈。下图还有一个点就是是否显示导入窗口(Show Import Dialog),不勾选就会直接导入。
最后一个要演示的内容是,重新导入的冲突处理。如果导入了一个资产,用另外一个或者同一个源文件重新导入,就可能出现下图这样的窗口。这里可以看到堆栈选择的是ReimportPipeline,这个堆栈意思是当前显示的设置与导入时的设置一致。当然我们也可以在重新导入的时候使用不同的设置,修改堆栈和堆栈对应的设置即可。显示冲突(Show Conflict)按钮显示的内容与原版导入的内容相似,这里就不展示了,也很易懂。
首先我们再回顾一下资产导入的流程,并且看看我们能在哪个阶段做些修改。如图所示,我们可以在管线期间、工厂生成后、导入资产后进行修改。当然我们也可以自己从零开始构建一个导入管线,但今天我们主要分享的还是拿官方给的默认管线来进行修改。
在Execute Pipeline事件中,通过Get Nodes和Get Factory Node节点我们可以获取工厂节点并且修改他们里面的一些参数,然后让Pipeline继续导入工作。修改的参数大多数都是可以在上文提到的导入菜单中找到的,但我们也可以加入一些定制参数,让管线后续工作可以获取到这些参数并进行相对应的工作。
在Execute Post Import Pipeline事件中,我们可以获取已经导入的资产引用,然后对资产进行一些元数据参数的修改等操作。
在视频的26分钟左右有一段对于预先编写的蓝图的简单讲解,读者可以自行看视频查看蓝图的大致编写流程,或者看文章第六部分中的社区学习链接下载示例工程学习。当蓝图编写完成以后,我们可以在项目设置中的翻译器设置中加入我们的蓝图(IBP_CreateFolders,下方的DefaultGraphInspectorPipeline是调试用的,方便查看导入时的翻译节点),这里的翻译器设置将会针对gltf格式文件的导入流程中,执行默认管线以及蓝图编写好的逻辑。这里对于翻译器的设置可以帮助我们很方便的针对不同格式文件进行不同的导入处理,并且可以自由定义堆叠顺序,还是十分方便的。
当我们导入gltf格式文件时,我们就会看到导入界面中,有我们设置好的几个管线流程,我们可以对这些管线一一设置。讲者预先编写的交换蓝图有几个功能:一个是Create Folder,这能够根据资产的类型将资产放到不同的子文件夹中;一个是Static Mesh to Remove,用来禁用带有特定字符串的静态网格体;一个是Deactivate Related Assets,能够禁用前一个功能中静态网格体相关的资产,包括纹理和材质等。
在导入之后,就会弹出一个窗口,用来预览我们创建好的翻译节点。通过这个界面我们可以很方便地调试蓝图逻辑,能够看到哪些功能正常起作用了。当蓝图中的创建文件夹功能启动了,就会自动将资产分类到不同的子文件夹。如果蓝图中的过滤功能启动了,就会自动将相关的翻译节点禁用(左边的勾勾取消了)。在点击OK之后,就会继续导入工作,并最终导入资产。
视频讲者还在视频33分钟开始演示了一个对称导入资产的功能,利用了Dynamic Mesh的一些功能制作的。感兴趣的读者也读者可以自行看视频查看蓝图的大致编写流程,或者看文章第六部分中的社区学习链接下载示例工程学习,最终导出的网格体如下图所示。
如果要编写python来定义导入行为,我们还可以创建一个Python类的交换管线蓝图,然后将它弄到项目设置中。
我们还可以在Editor Utility Widget蓝图中制作一些按钮去执行导入工作,如下图的逻辑所示。当资产导入完成之后会有一个事件回调,也能做一些定制的工作。需要注意的是,如果这里的逻辑中没有修改管线参数,那么这里导入使用的是设置好的管线默认参数。而在导入窗口中,那个窗口会记住您最后设置好的参数,而不是使用默认参数,这两者之间的这一特点需要注意一下!
该交换框架在打包应用中也是可用的,但是限制是不能运行时生成碰撞和Nanite、没有FBX翻译器、只能导入不完整的材质。不能在关卡中导入,只能在控件中执行导入的问题会在5.5中修复。
图表细节面板是上文提到的Graph Inspector管线堆栈,这个可以用来预览翻译节点,帮助我们更好的调试交换管线蓝图。
对于Visual Dataprep,我们可以通过控制台指令“Dataprep.Interchange.Producer”启用Interchange Producer功能,支持更多的交换场景。
在未来这个交换框架的UI会进行调整,但是核心逻辑不会有改动太多;FBX会在5.5版本中默认启用;支持导入场景,特别是场景预览功能;支持USD文件格式等等。
近期焦点
扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持。
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。