GitHub – mgsx-dev/gdx-gltf:LibGDX 的 GLTF 2.0 3D 格式支持和 PBR 着色器实现
| Name | ||
|---|---|---|
|
0436377 · 2 weeks ago
|
||
|
|
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
|
|
存储库文件导航
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 类)。
库演示(又名模型查看器)可用于多个平台:
- HTML :在线演示,仅包含几个示例。
- 桌面:桌面演示允许您打开和检查任何 GLTF 文件。有关更多信息,请参阅 gdx-gltf-demo 自述文件。
- Android:Android 演示仅包含几个示例(与 HTML 版本相同)。
使用此库制作的游戏:
- 被遗忘的传送门
- Lendigastel (游戏果酱)
- 圣诞老人和巨型蛋糕(gamejam)
- 多元宇宙赛车手 (gamejam)
基于官方 glTF 2.0 规范的实现
受 glTF-WebGL-PBR 和 glTF-Sample-Viewer 启发的着色器:
- https://github.com/KhronosGroup/glTF-WebGL-PBR/blob/glTF-WebGL-PBR-final/shaders/pbr-vert.glsl
- https://github.com/KhronosGroup/glTF-WebGL-PBR/blob/glTF-WebGL-PBR-final/shaders/pbr-frag.glsl
- https://github.com/KhronosGroup/glTF-Sample-Viewer/tree/master/source/Renderer/shaders
实施的 GLTF 扩展:
- KHR_texture_transform
- KHR_lights_punctual
- KHR_materials_unlit
- KHR_materials_transmission
- KHR_materials_volume
- KHR_materials_ior
- KHR_materials_specular
- KHR_materials_iridescence
- KHRMaterials自发光强度
这里有一些教程可以帮助您同时使用 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.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 着色器。
有关详细信息,请参阅提供的几个示例:
如需高级用法,请阅读完整文档
该库提供了将各种对象类型导出到 glTF 文件的便捷方法。 例如,您可以在 libgdx 中以编程方式创建一些网格并将它们导出到 glTF 文件,并可选择将它们导入 Blender:
new GLTFExporter().export(model, Gdx.files.local("myModel.gltf")
您还可以导出带有灯光和摄像机的场景。支持导出所有 gltf 功能:动画、骨骼等。 请注意,目前仅支持导出“gltf 单独文件”模式。
作为 Blender 2.80,glTF 导出器插件包含在内并默认启用。
演示随附预生成的照明环境。 如果您想使用其他人或自己生成它们,请阅读 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。
其 GWT 仿真不支持从二进制数据加载 LibGDX Pixmap。因此,html/WebGL 目标不支持 GLTF 嵌入和二进制格式。
CubeMap seamless 是执行正确 cubeMap 过滤的功能。如果没有此功能,您可能会注意到高粗糙度材质的一些瑕疵,因为这些瑕疵在低分辨率下更明显。 库会根据以下条件在可能的情况下自动启用此功能:
- 对于 GLES 2 和 WebGL 1,根本不支持此功能。
- 对于 GLES 3 和 WebGL 2,此功能始终受支持并始终处于激活状态。
- 对于桌面,如果平台支持 OpenGL 3.2+ 或 GL_ARB_seamless_cube_map,则可以启用它
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));
如果当前硬件上需要太多统一,您可能会遇到此着色器编译错误。
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 文件中。
如果其中一个网格体中的顶点属性过多,则可能会遇到此错误。
大多数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 个切线
加载模型时可能会遇到此警告:
KHR_materials_pbrSpecularGlossiness extension is deprecated by glTF 2.0 specification and not fully supported.
此扩展现已存档,不再受到 glTF 2.0 规范的推荐。
这个库从未真正支持过它,也不会,使用它的风险由您自行承担。
该库需要反射才能导入/导出 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 *;
}
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » LibGDX 的 GLTF 2.0 3D 格式支持和 PBR 着色器实现
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办