导入自定义并交换

科技   科技   2024-09-12 09:01   上海  


介绍

本教程通过一个演示项目说明了交换框架的用法。该项目包含几个示例,涵盖了自定义或扩展导入过程的各种方法。

它表明:

  • 如何制作和使用自定义管道:C++、蓝图或python;

  • 如何在导入过程中修改出厂设置或资产;

  • 如何创建新的转换器和工厂来支持新的文件格式和新的虚幻对象;


先决条件

Visual Studio 和 Unreal Engine 的安装。

无需特定知识来运行样本,但能够很好地掌握 Interchange 概念,以便深入研究样本。

设置并启动项目

打开项目

  1. 将档案解压到适当的文件夹中

  2. 生成解决方案。右键单击项目文件,然后选择“生成 Visual Studio 项目文件”

  • 将其切换为使用您想要的 UE 版本

  • 生成解决方案

  • 在 Visual 中打开生成的解决方案

  • 构建开发编辑器

  • 执行 InterchangeDemo


  • 项目内容

    该演示项目由多个示例组成,这些示例分组在一个InterchangeCustomization插件内:

    • 4 条管道:2 条 C++、1 条蓝图和 1 条 Python

      • 自定义静态网格管道,一种用于从 3D 模型中的占位符创建几何图形的 C++ 管道;

      • 自定义演示对象管道,用于在新的虚幻对象上设置属性的 C++ 管道;

      • 自定义纹理管道,用于改变纹理上的压缩和纹理组的蓝图管道;

      • 自定义文件夹管理,一个用于在适当的子文件夹中创建资产的 Python 管道

    • C++ 管道 和“演示对象”类、工厂、转换器 (.foo 扩展名)和其他实用程序类 的源代码

    • 一个FBX 示例文件 ,用于测试静态网格管道

    • 一个foo 示例文件 ,用于测试“Demo Object”管道


    示例

    项目已设置为使用其所有自定义管道。无需编辑项目设置,除非用户想要更改某些管道堆栈。

    管道堆栈默认设置位于项目的 Interchange 部分。新的自定义管道已设置。自定义 .foo 扩展的转换器覆盖也已设置。

    C++ 静态网格管道

    管道在 CustomStaticMeshPipeline .h/.cpp 文件中定义,并实例化为“CustomStaticMeshPipeline”资产。

    C++ 管道类不能直接在管道堆栈中使用。应先将其实例化为资产,然后才能更改其预设。

    行为

    将具有特定名称的场景对象转换为几何体的C++ 静态网格管道。管道分为两个步骤:

    1. 在 执行管线 步骤中,管线会将 边缘占位符的 平移场景节点 转换为静态网格工厂节点上的 3D 变换属性。  

    2. 在后期工厂步骤中,管道将提取先前在静态网格工厂节点上设置的属性,并为每个楔形生成网格描述并将其附加到现有的网格描述中。

    测试

    您将在插件内容文件夹

    Plugins/InterchangeCustomization/Runtime/Content/wedges.fbx中找到“wedges.fbx”文件。

    提供的 3D 模型在 Blender 中查看。EdgeXXX_VX 占位符将用于在 UE 中创建几何图形。

    将模型导入编辑器时,请确保在默认堆栈的管道上勾选了以下设置:在默认资产管道上组合静态网格,并在楔形导入管道上组合布尔值和厚度。

    导入网格时必须勾选“合并静态网格”设置。

    这两个选项与楔形导入有关。用户可以控制是否创建几何图形以及楔形厚度。

    如果在启用该选项的情况下导入,则楔形几何图形应添加到原始几何图形中。

    左边是原始模型,右边是根据 3D 文件中存储的占位符添加额外几何图形的模型。

    蓝图纹理管道

    蓝图资产“CustomTexturePipeline”中定义的管道。

    行为

    蓝图纹理管道在工厂传递之前更改纹理工厂节点的压缩和纹理组。要查看此示例的结果,您必须导入名称以“_N”结尾的文件。 

    请注意,默认纹理管道已将类似设置应用于看似法线贴图的纹理。因此,为了确保管道执行,请使用非法线贴图的图像文件或更改导入选项,使其看起来与默认导入不同。

    测试

    导入纹理时,请记住 UE 默认不显示纹理的导入对话框选项。可以切换可见性以测试纹理管道的不同设置。 

    导入 FBX/glTF 时,导入对话框将显示交换管道设置,以便可以在那里编辑纹理选项。

    要查看纹理导入的导入对话框和管道设置,需要在项目设置中启用“显示导入对话框”选项。

    指定要应用于名称以“_N”结尾的纹理的压缩设置或纹理组。值是枚举中的索引。

    导入纹理的结果:纹理组枚举已设置为索引 1 的 WorldNormalMap,压缩设置已设置为相应枚举中索引 1 的 NormalMap。

    Python 文件夹管道

    Python 代码位于

    Plugins/InterchangeCustomization/Runtime/Content/Python 中。它位于 init_unreal.py 文件中,因此默认情况下由 UE 加载。

    定义的 DemoInterchangeAssetsFolderPipeline 类在 Interchange Python Pipeline 资产“ CustomFolderManagement ”中实例化。


    行为

    一个 Python 管道,用于管理将不同资产类型导入到哪些文件夹中。管道根据工厂节点的类型将子文件夹(纹理、材质、网格……)添加为工厂节点上的子路径属性。

    测试

    导入 3D 模型或纹理所产生的资产将添加到相应的子文件夹中。

    根据资产类型自动创建子文件夹的选项。

    新的文件格式和新的对象类型
    该插件添加了一个新的资产类型名称 UDemoObject,其中包含文件扩展名 .foo 的转换器、DemoObject工厂以及相应的有效负载和节点类以及 DemoObject管道。

    Translator

    “CustomFooTranslator”定义它支持哪种扩展,将读取.foo 文件并将其有效负载存储在“CustomDemoObjectPayloadData”中定义的自定义有效负载结构中,并创建相应的翻译节点“CustomDemoObjectNode”并将其添加到 Interchange 的基本节点容器中。

    管道

    “CustomDemoObjectPipeline” 将在容器中查找“CustomDemoObjectNode”,并使用来自管道值和有效载荷数据的设置创建相应的“CustomDemoObjectFactoryNode”。

    Factory

    “CustomDemoObjectFactory” 将使用存储在“CustomDemoObjectFactoryNode”上的设置创建“DemoObject”资产

    测试

    foo 文件示例位于插件内容文件夹中:Plugins/InterchangeCustomization/Runtime/Content/Test.foo。

    DemoObject 包含可通过管道设置的变量。

    在项目的交换设置中,在资产导入的一般情况下,已使用 CustomFooTranslator 覆盖文件(.foo)的默认堆栈,以便使用特定的自定义演示对象管道。

    管道设置:这些设置最终将出现在生成的 UDemoObject 的属性中。




    创建的 DemoObject 资源及其属性。.foo 文件是文本数据,其内容存储在“Source Data”属性中。


    近期焦点


    时隔五年,Tim再临上海,首波议题公布!
    Unreal Fest Shanghai 2024 | 虚幻引擎技术开放日,开票啦!
    通过游戏动画示例项目获取500多种免费动画
    UOD Awards 2024 作品征集,启动!
    虚幻引擎5.4现已发布
    GDC 2024:来自State of Unreal的重大新闻
    欢迎来到全新的虚幻引擎网站

    扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持
    长按屏幕选择“识别二维码”关注虚幻引擎
    “虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。




    虚幻引擎
    Epic Games 旗下 Unreal Engine 虚幻引擎官方订阅号
     最新文章