• 正文概述
  • Name
    6 months ago
    2 months ago
    last month
    7 months ago
    6 years ago
    2 years ago
    2 years ago
    2 months ago
    2 years ago
    7 years ago
    2 years ago
    2 years ago
    2 years ago
    2 years ago
    7 months ago
    2 years ago
    2 years ago
    2 years ago
    2 months ago
    2 years ago

    统一GLTF

    glTF 2.0 的广泛覆盖。 推荐 Unity 2021.3+ 和 URP

    支持 URP BiRP 在 2021.3+ 上得到更好的支持 未主动维护 HDRP 支持

    用于导入和导出 glTF 2.0 资源的 Unity3D 库。

    编辑 器 运行
    进口
    出口

    UnityGLTF 没有任何本机依赖项(纯 C#),因此适用于 Unity 支持的所有平台。这包括 WebGL 导入和导出。

    该库旨在通过对 glTF 规范的附加扩展轻松扩展。导入和导出都允许附加自定义插件和回调,并且可以进行大量修改以适应特定的管道。支持许多 glTF 扩展。

    内容

    安装

    您可以使用一键式安装程序从 Needle Package Registry 安装此软件包:

    1. 下载 UnityGLTF 软件包安装程序
    2. 将下载的 .unitypackage 拖放到 Unity 中,然后按照步骤作。

    您也可以从 git 安装此包,与 UPM(Unity 包管理器)兼容。

    1. 打开Window > Package Manager
    2. 点击+
    3. 选择Add Package from git URL
    4. https://github.com/KhronosGroup/UnityGLTF.git
      
    5. 点击。Add

    注意:如果您想定位到特定版本,请向上述网址追加或提交特定内容。 例:。#release/<some-tag>https://github.com/KhronosGroup/UnityGLTF.git#release/2.14.1

    Unity 版本和渲染管线兼容性

    请使用 Unity 的长期支持版本(2021.3+、2022.3+、6000.0+)。

    推荐:

    • Unity 2021.3+、Unity 2022.3+、Unity 6+
    • 线性色彩空间
    • 通用渲染管线(URP)和内置渲染管线(BiRP)

    HDRP:

    • 目前功能有限。

    遗产:

    • 使用 Unity 2020.3 时,请使用旧版本的 UnityGLTF,例如 2.9.1-rc 及更早版本。

    注意:非 LTS Unity 版本(不是 2021.3、2022.3、6000.0 等)上的问题很可能不会得到解决。请尽可能使用 LTS(长期支持)版本。

    UnityGLTF 和 glTFast

    Unity 注册表中提供了 Unity 的单独 glTF 实现 glTFast
    glTFast 得到 Unity 的支持意味着,简而言之,它非常严格地遵守标准,并且无法轻易发布适用于大多数(但不是全部)用户的未经批准的扩展或实验性功能。

    • UnityGLTF 旨在成为更灵活的框架,具有广泛的导入/导出插件支持和开箱即用的有用插件。
    • glTFast 旨在成为性能更高的框架,重点是利用 Unity 特定的功能,例如 Burst 和 Jobs。
    • UnityGLTF 具有多功能的插件/扩展基础设施。这在导入/导出过程中提供了很大的灵活性。
    • UnityGLTF 支持使用并附带未经批准的扩展名,例如 、 和 。KHR_animation_pointerKHR_audioKHR_materials_variants
    • glTFast 利用 Unity 特定的功能,例如 Burst 和 Jobs,因此在某些情况下可以具有更好的性能。
    • glTFast 具有更好的 HDRP 支持。

    glTFast 和 UnityGLTF 可以共存于同一个项目中;例如,您可以使用 glTFast 进行导入,使用 UnityGLTF 进行导出。
    对于导入的资源,您可以通过下拉菜单选择要使用的导入器。如果两者位于同一项目中,则
    glTFast 导入具有优先权。另请参阅默认导入器选择

    支持的功能和扩展

    下面的列表是非决定性的,没有特定顺序。请注意,存在一些差距,即 im- 和导出可以轻松支持功能,但目前不支持。欢迎 PR!

    导入和导出

    仅导入

    仅导出

    • KHR_materials_variants
    • KHR_interactivity(可视化脚本图形导出器)未批准的延期
    • 时间轴录制器轨道,用于在编辑器中和运行时导出动画
    • 导出时的无损关键帧优化
    • 所有 2D 纹理都可以导出,包括 RenderTextures——它们在导出时被烘焙。
    • 可选插件:导出时将 TMPro 3D 对象烘焙到网格
    • 可选插件:导出时将粒子系统烘焙到网格体
    • 可选插件:导出时将 Canvas 烘焙到网格体
    • 包含的插件示例:KHR_audio_emitter 未批准的延期

    glTF 交互性

    可视化脚本图表导出器

    该插件允许您将 VisualScripting 图形导出为 glTF 文件中的KHR_interactivity图。

    注意

    由于KHR_interactivity的规范仍在开发中,因此默认禁用该插件。要启用它,请转到并启用“KHR_interactivity (VisualScripting)”插件。 请记住,在批准扩展之前,导出的扩展名为 KHR_interactivity 的 glTF 文件可能已过时,并且随着新的规范更新而不再有效。Project Settings > UnityGLTF > Export

    特征

    支持多种节点导出。此外,Unity 的可视化脚本具有但 KHR_interactivity 扩展中缺少的许多功能在导出到兼容的图形逻辑时会被“扁平化”。例如,作用域变量将导出为具有唯一名称的变量,因此导出的图形中不存在冲突。这允许在 Unity 编辑器中构建复杂图表的灵活性很大,同时仍然能够导出到 glTF 文件。

    • SubGraph 支持
      • 子图将在导出时展平
    • 变量
      • 不支持“已保存”变量
    • 自定义事件
    • 协程
    • 一个 glTF 文件中的多个可视化脚本图
      • 多个图形将合并为一个KHR_interactivity图
    • 部分列表/数组支持
      • 列表的容量无法在运行时更改,因此请确保在可视化脚本图中创建具有足够大小的列表。
    • 数学、向量、矩阵运算
    • 部分动画师支持
      • 支持启动动画。当前不支持自动图形转换。
    • 逻辑作
    • 材质编辑:获取/浮点、颜色、纹理偏移/缩放集
    • 属性插值:使用“插值…”节点系列

    已经支持许多可视化脚本节点。要查看受支持节点的完整列表,请单击按钮以在控制台中查看受支持节点的完整列表。Project Settings > UnityGLTF > Export > KHR_interactivity (VisualScripting) > Log supported Visual Scripting Units

    提示

    启用交互性扩展后,您还可以在可视化脚本编辑器中查看扩展支持哪些节点。您还可以在那里看到上次导出时的任何警告/错误(有时编辑器不会立即更新视图,需要一些时间)。
    image 示例:支持“指针单击时”,而导出不支持“指针向上”

    支持

    • 字符串作(KHR_interactivity 扩展不支持)
    • 当前缺少四元数数学运算(尚未在KHR_interactivity规范中)
    • 某些节点有其他限制。你可以在脚本图表中看到这些内容:
      image

    查看器支持

    这些查看器支持当前的KHR_interactivity规范,并已通过 UnityGLTF 导出器进行了广泛测试:

    glTF材料

    glTF 着色模型基于物理,支持许多不同类型的表面。要在 Unity 中使用 glTF 的扩展材质模型,请使用 材质。
    它允许使用各种 glTF 材质扩展进行导入、导出和 Unity 内部。着色器包括URP缺少的许多功能,例如透射和粗略折射、光泽和透明涂层以及每个纹理的UV控制。对于未光照的材质,请使用 。
    UnityGLTF/PBRGraphUnityGLTF/UnlitGraph

    材料转换

    UnityGLTF 包含帮助程序,可以轻松转换为 UnityGLTF/PBRGraph。
    将材质从任何着色器切换到 PBRGraph 时,可以运行自动转换以引入属性。
    一些着色器已经带有自动转换功能,请参阅下表。

    当着色器还没有转换器时,UnityGLTF 会询问您是否要创建转换脚本。这些脚本包含源着色器和目标着色器的所有属性,但尚未指定映射 (,因为这取决于着色器作者的意图) 。创建转换脚本
    后,可以对其进行编辑,以正确地从源着色器的属性映射到 PBRGraph 属性。下次将此类着色器切换到 PBRGraph
    时,转换脚本将运行并以指定方式自动转换材质。

    注意:目前,自定义转换脚本不会自动用于 glTF 导出。为获得最佳效果,请在编辑器中转换材质。

    材质和着色器导出兼容性

    如果要设计 glTF 导出,建议将 Unity 2021.3+ 与 URP 和 UnityGLTF/PBRGraph 材质一起使用。它支持折射和虹彩等现代材料扩展,并允许完美的往返。此材料非常适合在 Unity 内外构建 glTF 管道。

    渲染管线(Render Pipeline) 使用着色器 笔记
    URP 在 2020.3+
    上内置于 2021.3+
    UnityGLTF/PBRGraph
    ☝️ 如果您不确定,请使用此选项
    完美的往返,材料扩展 统一GLTF
    统一GLTF/UnlitGraph 完美的往返 统一GLTF
    ShaderGraphs/glTF-pbrMetallicRoughness glTFast
    ShaderGraphs/glTF-unlit glTFast
    URP URP/点亮 统一
    URP/不点亮 统一
    内置 标准 统一
    GLTF/Pbr金属粗糙度 UnityGLTF(旧版)
    GLTF/不点亮 UnityGLTF(旧版)
    glTF/Pbr金属粗糙度 glTFast(旧版)
    glTF/不点亮 glTFast(旧版)
    HDRP(有限支持) HDRP/光照 统一
    HDRP/无光照 统一

    针对折射材料(透射率和体积)进行配置

    透射和体积允许渲染玻璃等完全透明但仍显示反射的材质,以及体积衰减(例如彩色果冻)和粗糙折射(例如拉丝玻璃)。 要使用这些材质功能,你需要对材质和渲染管线进行一些设置。

    材质设置

    1. 在PBRGraph材质上,选中“启用传输”,并选择“启用体积”
    2. 根据需要更改透射率、厚度、折射率和衰减值。

    URP

    要在 Unity 中正确查看透射材质和体积材质,

    1. 选择你的URP渲染器资源
    2. 在“渲染器功能”部分下,添加“不透明纹理(粗折射)”功能

    内置

    要在 Unity 中正确查看透射材质和体积材质,

    1. 将“粗折射”组件添加到主摄像机。

    HDRP

    HDRP 有自己的粗折射支持。目前没有自动导入/导出支持可以转换为该支持。如果需要,请使用 glTFast。

    注意:全金属材料永远不会透明。有关详细信息,请参阅KHR_materials_transmission规范

    导出 glTF 文件

    要从场景或项目导出对象,

    1. 选择对象
    2. 使用 / 下的菜单项导出Assets > UnityGLTF > Export selected as GLBExport selected as glTF

    提示:您可以在 Unity 的快捷方式管理器中设置快捷方式以进行快速导出。例如,对于 GLB 导出和 glTF 导出,允许非常快速的迭代。Ctrl + SpaceCtrl + Shift + Space

    测试、调试、兼容性

    现有的各种 glTF 查看器具有不同的功能集。只有少数部分完全覆盖了 glTF 规范,大多数仅支持一个子集。
    支持有限的显着功能:

    • 每个纹理的设置。textureCoord
    • 设置。许多观众干脆忽略了它。textureRotation
    • 稀疏访问器。某些查看器仅支持混合形状的稀疏访问器,而其他查看器则根本不支持。
    • 顶点颜色。

    要查看您的 glTF 文件,您可以使用以下多种工具:

    名字 笔记
    Khronos glTF 示例查看器 完全支持已批准的延期
    gltf.report 检查文件大小、网格体、纹理
    模型查看器 支持使用自定义代码KHR_materials_variants
    格式塔 对KHR_animation_pointer
    的完全 glTF 规范合规
    性支持 对 KHR_materials_variants 的 KHR_audio
    支持
    针观察器 支持 KHR_animation_pointer
    Inspect 层次结构、纹理、相机、灯光、警告
    Babylon.js沙盒 对KHR_animation_pointer的支持
    UnityGLTF
    (这个项目!
    只需将导出的 glb 文件放回 Unity 即可。
    glTFast 将 glTFast 包添加到项目中。
    您可以在 glTFast 和 UnityGLTF 之间切换 glTF 文件上使用的导入器。

    要在使用 UnityGLTF 导出文件后进一步处理文件,您可以使用:

    名字 笔记
    gltf-transform 使用 draco 或 meshopt
    压缩网格 将纹理压缩为 ktx2
    优化文件
    在 .gltf 和 .glb 之间转换
    混合器 导入/导出具有良好特征覆盖率的 glTF 文件

    动画导出(Animation Export)

    动画可以在编辑器中和运行时导出。 编辑器导出适用于 Animator(多个剪辑)、动画(多个剪辑)和时间轴(GLTFRecorderTrack)。

    动画师控制器

    您可以将整个动画师及其剪辑导出为具有多个动画的 glTF 文件。
    动画剪辑将以动画器控制器中的每个运动状态命名。
    每个运动的“速度”属性将烘焙到导出的剪辑中。当您想要导出不变时,请确保速度为 1。支持层次结构中
    任意数量的动画师,以及这些层次结构中任意数量的剪辑。

    将导出人形和通用动画。人形动画在导出时烘焙到目标绑定上。

    注意:Animator 导出仅适用于编辑器。对于运行时导出,请使用 GLTFRecorder 功能或时间线记录器。

    GLTFRecorder API

    要在运行时创建和/或录制动画,您可以使用 GLTFRecorder API。它允许捕获整个层次结构和复杂动画的状态,并将它们直接导出为 glTF 文件, (可选)KHR_animation_pointer支持复杂的材质和属性动画。
    有关示例实现,请参阅。
    GLTFRecorderComponent

    时间线记录器

    时间线或它们的部分可以用 和 一个或多个 来记录。 时间线录制在后台使用 GLTFRecorder API。GltfRecorderTrackGltfRecorderClips

    旧版动画组件

    注意:动画组件导出仅适用于编辑器,因为 Unity 不提供所需的运行时访问权限。对于运行时导出,请使用功能。GLTFRecorder

    动画组件及其旧剪辑也可以导出。

    KHR_animation_pointer支持

    UnityGLTF 支持导入和导出带有 KHR_animation_pointer 扩展名的动画。 核心 glTF 规范仅允许动画节点变换和混合形状权重,而此扩展允许对 glTF 文件中的任意属性进行动画处理 – 包括材质和对象属性,甚至在自定义扩展和脚本组件中也是如此。

    可以通过启用 KHR_animation_pointer 插件来打开使用 KHR_animation_pointer 导出。Project Settings > UnityGLTF

    注意:导出的文件可以使用 Gestaltor、Babylon Sandbox 和 Needle Engine 查看,但目前不能使用 three.js / model-viewer 查看。参见 mrdoob/three.js#24108

    混合形状导出(Blend Shape Export)

    支持变形目标/混合形状/形状关键帧,包括动画。
    要为复杂的混合形状动画(例如具有数十种形状的面)创建较小的文件,请在启用“稀疏访问器”设置的情况下导出。

    导入 glTF 文件

    运行时导入

    通过 Gltf 组件加载

    要在运行时导入 or 文件,您可以使用 用于加载。.gltf.glbGLTFComponent

    image

    通过代码示例加载:

    从本地文件:

    string dir = "C:SamplePath";
    string filename = "AntiqueCamera.glb";
    
    var importOpt = new ImportOptions();
    importOpt.DataLoader = new UnityWebRequestLoader(dir);
    var import = new GLTFSceneImporter(filename, importOpt);
    await import.LoadSceneAsync();

    从网络:

    string uriDir = "https://github.com/KhronosGroup/glTF-Sample-Models/raw/refs/heads/main/2.0/AntiqueCamera/glTF-Binary/";
    string filename = "AntiqueCamera.glb";
    
    var importOpt = new ImportOptions();
    importOpt.DataLoader = new UnityWebRequestLoader(uriDir);
    var import = new GLTFSceneImporter(filename, importOpt);
    await import.LoadSceneAsync();

    访问加载的 gltf 场景:

    import.LastLoadedScene

    在加载的 gltf 场景中,您将找到该组件。使用该方法创建加载场景的副本。InstantiatedGLTFObjectDuplicate

    确保着色器在生成中可用

    请确保你已在 . 否则,生成中可能缺少着色器。请注意,在第一次构建时,编译时间可能需要一些时间。UnityGLTFShaderVariantCollectionUnityGLTFShaderVariantCollection-BiRPProject Settings > Graphics > Preloaded Shaders

    当您为移动平台构建并且需要更小的着色器尺寸,并且您知道您真正需要哪些着色器功能时,最好创建自己的着色器变体集合。

    您还可以剥离下面的其他着色器变体,以减少着色器编译时间。Project Settings > UnityGtlf > Build

    编辑器导入

    要在编辑器中导入或文件,请像往常一样将它们放置在项目中(资产或包)。 确保为具有正确相对路径的文件携带.bin/纹理;通常是独立的。.gltf.glb.gltf.glb

    在 Unity 中移动文件时,请确保同时移动其.bin/纹理文件,以免破坏它们之间的路径引用。.gltf

    默认导入器选择

    UnityGLTF 会将自己注册为 和 的默认导入器。扩展。
    如果项目中也存在 glTFast 包,则 glTFast 优先,并且 UnityGLTF 可用作导入器覆盖,可以从每个 glTF 资产的下拉列表中选择。
    .gltfglb

    UnityGLTF 使用 Unity 的系统。对于任何给定的文件格式(文件扩展名),必须有一个默认导入器,并且可以有其他替代导入器。
    您可以通过将以下设置添加到项目的 :
    ScriptedImporterScripting Defines

    GLTFAST_FORCE_DEFAULT_IMPORTER_OFF
    UNITYGLTF_FORCE_DEFAULT_IMPORTER_ON
    

    我们注意对齐 glTFast 和 UnityGLTF 的导入器,以便在大多数情况下您可以在它们之间切换而不会破坏预制件引用。话虽如此,在导入器之间切换可能会更改材质引用、网格引用等,因此可能需要进行一些手动调整。 您可能需要调整每个导入器的根剥离设置(glTFast 和 UnityGLTF 的处理方式略有不同)。

    动画导入(Animation Import)

    动画可以在编辑器和运行时导入。
    在导入器上,您可以在“旧版”、“Mecanim”或“人形”剪辑之间进行选择。

    在运行时,如果您要导入“Mecanim”剪辑,则需要确保通过脚本(例如动画师控制器或时间轴)将它们添加到可播放图表中以播放它们。

    扩展

    UnityGLTF 具有导入和导出插件。作为常规导出和导入过程的一部分,这些具有用于修改节点结构、扩展数据、材质等的回调。它们在编辑器和运行时都使用。 您可以制作自己的插件并在菜单中启用它们。
    插件是可以有设置的 ScriptableObject;它们作为 GLTFSettings 资产的一部分进行序列化。 插件创建导入/导出处理程序的具体实例。
    Project Settings > UnityGLTF

    要创建插件,请按照下列步骤作:

    1. 创建一个继承自 或 的类。这是包含插件设置的 ScriptableObject。GLTFImportPluginGLTFExportPlugin
    2. 此外,创建一个继承自 或 的类。此类具有实际的回调。GLTFImportPluginContextGLTFExportPluginContext
    3. 在插件中实现以返回插件上下文的新实例。CreateInstance
    4. 覆盖要在插件上下文中使用的回调。

    如果您的插件读取/写入自定义扩展数据,您还需要实现序列化和反序列化。GLTF.Schema.IExtension

    警告

    ShouldNodeExport回调:使用此回调需要了解 glTF 的工作原理。例如,如果您在导出时过滤掉骨架的某些骨骼,则结果可能不是有效的 glTF,或者可能不会显示您期望的内容。谨慎使用

    自定义插件示例

    public class MyExportPlugin : GLTFExportPlugin
    {
        public override string DisplayName { get => "My Custom Plugin"; }
        public override bool EnabledByDefault => true;
        public override bool AlwaysEnabled => false;
        
        public override GLTFExportPluginContext CreateInstance(ExportContext context)
        {
            return new MyExportPluginContext();
        }
    }
    
    public class MyExportPluginContext: GLTFExportPluginContext
    {
        public override bool ShouldNodeExport(GLTFSceneExporter exporter, GLTFRoot gltfRoot, Transform transform)
        {
            return !transform.CompareTag("ignore");
        }
    }

    🏗️ 正在施工中。你可以看一个例子。MaterialVariantsPlugin.cs

    已知问题

    • 中间的混合形状将不会被导出,因为 glTF 没有该功能。
    • 对具有多个场景的 glTF 文件的支持有限。

    贡献

    UnityGLTF 是一个开源项目。欢迎经过充分测试的 PR。

    UnityGLTF 目前由

    注意:从 20240129 年起,此存储库的默认分支已从 重命名为 。mastermain

    更多详细信息(旧版)

    🏗️ 正在施工中。如果您有任何疑问,请随时提出问题。

    • Unity 版本确保您在本地计算机上安装的 Unity 版本至少为 2021.3。
    • 项目组件Unity 项目提供两个主要功能:导入和导出 GLTF 资源。这些功能主要在 和 中实现。GLTFSceneImporterGLTFSceneExporter
    • 基本概要:GLTFSerializer 有助于 Unity 资产模型的序列化和 GLTF 资产的反序列化。

    • 结构

      • 每个 GLTF 架构 (缓冲区、访问器、相机、图像等) 都扩展了基本类:GLTFChildOfRootProperty。通过此对象模型,每个模式都可以拥有自己定义的序列化/反序列化功能,这些功能根据 GLTF 规范模仿 JSON 文件结构。
      • 然后,可以将每个架构分组到 GLTFRoot 对象下,该对象表示底层 GLTF 资产。然后通过序列化根对象来序列化资产,该对象递归序列化所有单独的模式。反序列化 GLTF 资产的完成方式类似:实例化 GLTFRoot,并解析所需的架构。

    测试

    🏗️ 正在施工中。由于测试资产许可原因,测试目前位于单独的(私有)存储库中。

    要使用 UnityGLTF 作为包运行测试,您必须将 UnityGLTF 添加到 manifest.json 中的“testables”数组中:

    "testables": [
    	"org.khronos.unitygltf"
    ]
    
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 适用于 Unity3D 的运行时 glTF 2.0 加载器

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    开通VIP 享更多特权,建议使用 QQ 登录