• 正文概述
  • GitHub – mgsx-dev/gdx-gltf:LibGDX 的 GLTF 2.0 3D 格式支持和 PBR 着色器实现

    Name
    3 years ago
    4 years ago
    last year
    6 months ago
    2 weeks ago
    3 years ago
    2 years ago
    4 years ago
    5 years ago
    7 years ago
    2 months ago
    7 years ago
    last year
    3 years ago
    3 years ago
    3 years ago
    3 years ago
    3 years ago

    存储库文件导航

    地位 GitHub 版本(最新的 SemVer,包括预发布版本) 释放 GitHub 版本(最新的 SemVer,包括预发布版本)

    LibGDX GLTF 2.0 支持和 PBR 着色器实现。libGDX G3D 格式的替代品。

    介绍

    glTF 在 libGDX 中与 G3D/FBX 相比有什么缺点?

    • 更简单的工作流程:无需 fbx-conv,您可以直接加载 gltf 文件。
    • 从 Blender 和其他 3D 软件加载相机、灯光、自定义属性。
    • 支持加载 LINES 和 POINTS 基元。
    • 形状关键帧/动画形状关键帧(又名 MorphTarget)功能。
    • 多个动画播放
    • 非线性动画关键帧插值(“支持步进”和“立方”)
    • 用于法线贴图、金属/粗糙度、基于图像的照明 (IBL) 等的开箱即用着色器。
    • 纹理坐标变换。
    • 支持 64k 顶点(而不是 32k)。具有整数索引的网格也会拆分为 64k 块。
    • 加载时间更快,见基准测试

    除了 gdx-gltf 库中的 3D 格式解析器之外,还有什么?

    • 场景管理设施:天空盒、阴影等。
    • 基于物理的渲染 (PBR) 着色器:用于逼真(或不真实)的高质量渲染。
    • 聚光灯支持。
    • 将各种对象导出到 glTF 文件(整个场景、模型、网格等)。

    我可以只加载 glTF 文件并将它们与常规 libgdx 3D API 一起使用吗?

    • 是的,它是相同的 API,只是材质不同:默认情况下,gdx-gltf 使用自己的着色器 (PBR) 来启用所有 glTF 功能。
    • 请注意,libgdx 默认着色器不实现聚光灯。
    • 如果您不需要/不需要高质量渲染 (PBR),您仍然可以使用 DefaultShaderProvider 和 DepthShaderProvider。在这种情况下,您可能需要转换材质(请参阅 MaterialConverter 类)。

    演示和图库

    库演示(又名模型查看器)可用于多个平台:

    使用此库制作的游戏:

    GL 传输格式 (glTF) 2.0 支持

    基于官方 glTF 2.0 规范的实现

    受 glTF-WebGL-PBR 和 glTF-Sample-Viewer 启发的着色器:

    实施的 GLTF 扩展:

    开始

    教程

    这里有一些教程可以帮助您同时使用 Blender 和 gdx-gltf。

    兼容性

    • gdx-gltf 1.x 需要 libGDX 1.9.10+
    • gdx-gltf 2.x 需要 libGDX 1.9.11+

    在升级您的 gdx-gltf 版本之前,请阅读更改历史记录

    安装

    gdx-gltf 可通过 Jitpack 获得。

    确保您在 Gradle 配置中声明了 jitpack 存储库,并添加 gltfVersion 变量。

    版本可以是任何版本(建议使用最新版本)或 -SNAPSHOT

    allprojects {
    	repositories {
    		...
    		maven { url 'https://jitpack.io' }
    	}
    	ext {
            ...
            gltfVersion = '-SNAPSHOT'
        }
    }
    

    在您的核心项目中添加依赖项(将 -SNAPSHOT 替换为最新版本以使用稳定版本):

    project(":core") {
        dependencies {
        	...
            api "com.github.mgsx-dev.gdx-gltf:gltf:$gltfVersion"
        }
    }
    

    对于 GWT (html) 项目,您需要在核心.gwt.xml文件中添加源依赖并继承 GWT 模块。

    project(":html") {
        dependencies {
        	...
            api "com.github.mgsx-dev.gdx-gltf:gltf:$gltfVersion:sources"
        }
    }
    
    <module>
    	<inherits name='GLTF' />
    	...
    </module>
    

    加载资产文件

    径直

    SceneAsset sceneAsset = new GLTFLoader().load(Gdx.files.internal("myModel.gltf"));
    SceneAsset sceneAsset = new GLBLoader().load(Gdx.files.internal("myModel.glb"));

    使用 AssetManager 加载器

    assetManager.setLoader(SceneAsset.class, ".gltf", new GLTFAssetLoader());
    assetManager.setLoader(SceneAsset.class, ".glb", new GLBAssetLoader());
    ...
    assetManager.load("myModel.gltf", SceneAsset.class);
    ...
    SceneAsset sceneAsset = assetManager.get("myModel.gltf", SceneAsset.class);

    渲染模型

    该库提供了一个方便的场景管理器来处理 glTF 模型和 PBR 着色器。

    有关详细信息,请参阅提供的几个示例:

    如需高级用法,请阅读完整文档

    从 libgdx 导出对象

    该库提供了将各种对象类型导出到 glTF 文件的便捷方法。 例如,您可以在 libgdx 中以编程方式创建一些网格并将它们导出到 glTF 文件,并可选择将它们导入 Blender:

    new GLTFExporter().export(model, Gdx.files.local("myModel.gltf")

    您还可以导出带有灯光和摄像机的场景。支持导出所有 gltf 功能:动画、骨骼等。 请注意,目前仅支持导出“gltf 单独文件”模式。

    从 Blender 导出模型

    作为 Blender 2.80,glTF 导出器插件包含在内并默认启用。

    基于图像的照明 (IBL)

    演示随附预生成的照明环境。 如果您想使用其他人或自己生成它们,请阅读 IBL 指南或者,该库提供了一些快速的 IBL 生成器,它不如基于 HDRI 的 IBL 准确,但对于快速设置照明环境很有用。请参阅 IBLBuilder 类。

    有关图书馆的更多信息

    项目结构

    该存储库由一个库和一个演示组成:

    • gltf 库模块(LibGDX 扩展)。 有关更多信息,请参阅 GDX-GLTF 自述文件
    • demo 文件夹包含一个带有常用模块(core、desktop、android、html 等)的 LibGDX 演示项目 有关更多信息,请参阅 gdx-gltf-demo 自述文件

    局限性

    网格限制

    由于 LibGDX(和某些 GPU)仅支持无符号短索引,因此具有整数索引的网格在加载时会自动拆分为 64k 块。为了获得最佳加载性能,建议事先拆分网格(例如在 Blender 中)。

    请注意,Blender 顶点计数可能会产生误导,因为导出的几何体可能包含更多顶点,因为Normal split、texture coordinates split 或 vertex color split。

    WebGL 限制

    其 GWT 仿真不支持从二进制数据加载 LibGDX Pixmap。因此,html/WebGL 目标不支持 GLTF 嵌入和二进制格式。

    CubeMap 无缝限制

    CubeMap seamless 是执行正确 cubeMap 过滤的功能。如果没有此功能,您可能会注意到高粗糙度材质的一些瑕疵,因为这些瑕疵在低分辨率下更明显。 库会根据以下条件在可能的情况下自动启用此功能:

    • 对于 GLES 2 和 WebGL 1,根本不支持此功能。
    • 对于 GLES 3 和 WebGL 2,此功能始终受支持并始终处于激活状态。
    • 对于桌面,如果平台支持 OpenGL 3.2+ 或 GL_ARB_seamless_cube_map,则可以启用它

    GL 版本要求

    PBR 着色器需要使用辐射贴图 (IBL) 渲染材质粗糙度,该贴图仅在以下情况下可用:textureLod

    • 桌面 OpenGL 3.0+ 或扩展。EXT_shader_texture_lod
    • 具有 OpenGL ES 3.0+ 或扩展的 Android 或 iOS。EXT_shader_texture_lod
    • WebGL 2.0+ 或扩展。EXT_shader_texture_lod

    如果目标平台不满足这些要求,您仍然可以使用库(例如加载 GLTF 文件),但 PBR 渲染会有点损坏。

    故障 排除

    部分渲染的绑定模型

    这是一个常见的陷阱。大多数情况下,这意味着您没有为 SceneManager 着色器提供程序配置 numBones。 强烈建议根据需要正确配置它们。默认配置很少根据您的需要进行优化或调整。 例如,如果所有模型中的最大骨骼数为 60,并且游戏中的所有场景只需要一个定向光源,则应按如下方式创建 SceneManager:

    PBRShaderConfig config = PBRShaderProvider.createDefaultConfig();
    config.numBones = 60;
    config.numDirectionalLights = 1;
    config.numPointLights = 0;
    
    Config depthConfig = PBRShaderProvider.createDefaultDepthConfig();
    depthConfig.numBones = 60;
    
    SceneManager sceneManager = new SceneManager(new PBRShaderProvider(config), new PBRDepthShaderProvider(depthConfig));
    

    最大均匀数:超过常数寄存器限制,不适合 N 个向量

    如果当前硬件上需要太多统一,您可能会遇到此着色器编译错误。

    Constant register limit exceeded at ... more than 1024 registers needed to compiled program

    Error: uniform variables in vertex shader do not fit in 256 vectors.

    这通常意味着您可能有太多的骨头。单个骨骼需要 4 个制服 (mat4),桌面 GPU 通常支持 1024 个制服和低端移动 256 个制服。 这意味着您应该将每个骨骼的骨骼数量控制在 50 个以下。

    切线顶点属性

    当缺少切线属性并需要切线属性时(当使用法线贴图时),会自动生成这些属性。 为了获得最佳加载性能,建议将它们导出到 GLTF 文件中。

    Max vertex attributes :顶点属性过多

    如果其中一个网格体中的顶点属性过多,则可能会遇到此错误。

    大多数GPU支持多达16个顶点属性

    根据网格信息可以快速达到此限制:

    • a_position:1
    • a_normal:1
    • a_tangent:1(可选)
    • a_color:1(可选)
    • a_texCoordX:最多 2 个 UV 层
    • a_boneWeightX:最多 8 个骨骼影响
    • a_positionX:最多 8 个位置
    • a_normalX:最多 8 个法线
    • a_tangentX:最多 8 个切线

    不支持 pbrSpecularGlossiness 扩展

    加载模型时可能会遇到此警告:

    KHR_materials_pbrSpecularGlossiness extension is deprecated by glTF 2.0 specification and not fully supported.

    此扩展现已存档,不再受到 glTF 2.0 规范的推荐。

    这个库从未真正支持过它,也不会,使用它的风险由您自行承担。

    ProGuard 等问题

    该库需要反射才能导入/导出 GLTF 文件。应针对 ProGuard 等工具过滤某些类。您可以简单地排除所有 libgdx 和 gdx-gltf 代码:

    keep 'class com.badlogic.gdx.** { *; }'
    keep 'class net.mgsx.gltf.** { *; }'
    keepattributes 'Signature'
    

    或者只排除 gdx-gltf 数据包:

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

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » LibGDX 的 GLTF 2.0 3D 格式支持和 PBR 着色器实现

    常见问题FAQ

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