Skip to content

This project is to expand OSG's ability to convert GIS data, exporting gltf, b3dm, and 3dtiles.

License

Notifications You must be signed in to change notification settings

newpeople123/osgGISPlugins

Repository files navigation

osgGISPlugins

简介

osg的gis插件,能够读取、显示3dmax导出的具有PBR材质的fbx文件、导出gltf/glb/b3dm/i3dm文件、读取/导出ktx2格式图片、读取/导出webp格式图片。同时提供了如下子工具:

  • b3dm转gltf/glb
  • 3D模型转3dtiles
  • 3D模型简化
  • 多张纹理打包成一个纹理图集

osgdb_fbx

在osg的fbx的插件的基础上,参考了FBX2glTF项目,使得能够读取3dmax导出的带有PBR材质的FBX文件(原本的插件读取带有PBR材质的FBX文件时,材质会丢失,读到引擎里显示为白模),并能在osg引擎中正常渲染。

osgdb_gltf

支持导出gltf/glb/b3dm/i3dm,暂不支持读取。

在osgEarth的gltf的插件基础上,增加了若干gltf扩展:

1、KHR_materials_unlit

2、KHR_materials_pbrSpecularGlossiness

3、KHR_draco_mesh_compression

4、KHR_mesh_quantization

5、EXT_meshopt_compression

6、KHR_texture_basisu

7、KHR_texture_transform

8、EXT_texture_webp

通过合并材质、合并几何图元等方式优化gltf性能,减少drawcall的调用次数。

osgdb_webp

和osgEarth的webp插件一样。

osgdb_ktx

在王锐大神的osgVerse的ktx插件基础上进行了小改动,支持导出ktx2格式的纹理图片,支持Mipmaps。

工具简介

b3dm2gltf

将b3dm文件转换为gltf/glb文件。

用法说明

命令行格式

b3dm2gltf.exe -i <path> -o <path>

示例命令

b3dm2gltf.exe -i D:\test.b3dm -o D:\output.glb

model23dtiles

1、将3D模型转换为3dtiles 1.0; 2、支持四叉树和八叉树结构的3dtiles; 3、支持webp/ktx2纹理压缩; 4、支持draco和meshoptimizer压缩及顶点量化; 5、支持纹理合并(减少drawcall次数); 6、导出的3dtiles会带有模型的用户属性; 7、导出的3dtiles是经过网格合并的; 8、支持纹理图集; ... 这里的3D模型指的是fbx、obj、3ds等osg能够读取的三维模型,但是不包括倾斜摄影模型,倾斜摄影模型目前建议使用fanvanzh/3dtiles

用法说明

命令行格式

model23dtiles -i <path> -tf <jpg/png/webp/ktx2> -vf <draco/meshopt/quantize/quantize_meshopt> -t <quad/oc> -ratio <Number> -o <DIR> -lat <Number> -lng <Number> -height <Number> -comporessLevel <low/medium/high> -translationX <Number> -translationY <Number> -translationZ <Number> -upAxis <X/Y/Z> -maxTextureWidth <Number> -maxTextureHeight <Number> -maxTextureAtlasWidth <Number> -maxTextureAtlasHeight <Number>

示例命令

model23dtiles.exe -i D:\test.fbx -o D:\output -lat 30 -lng 116 -height 100
# 输出使用ktx2进行纹理压缩和使用draco进行顶点压缩的3dtiles
model23dtiles.exe -i D:\test.fbx -tf ktx2 -vf draco -o D:\output -lat 30 -lng 116 -height 100
# 设置3dtiles的中间节点的简化比例为0.6
model23dtiles.exe -i D:\test.fbx -ratio 0.6 -o D:\output -lat 30 -lng 116 -height 100
# 设置3dtiles的树结构为四叉树
model23dtiles.exe -i D:\test.fbx -t quad -o D:\output -lat 30 -lng 116 -height 100

参数说明

-tf 纹理压缩格式,可选值有:png、jpg、webp、ktx2,默认值为:jpg。 -vf 顶点压缩格式,可选的值有:draco、meshopt、quantize、quantize_meshopt,无默认值,即不对顶点进行压缩。 -comporessLevel draco压缩级别/顶点量化级别,可选的值为:low、medium、high,默认值为:medium,仅当vf的值为quantize、quantize_meshopt和draco时生效。 -t 3dtiles的组织结构,可以为四叉树或八叉树,可选的值有:quad、oc,默认值为:quad。 -ratio 3dtiles中间节点的简化比例,默认值为:0.5。 -lat 纬度,默认30。 -lng 经度,默认116。 -height 高度,默认300。 -translationX 重设模型原点位置的x坐标,默认值为0。 -translationY 重设模型原点位置的y坐标,默认值为0。 -translationZ 重设模型原点位置的z坐标,默认值为0。 -upAxis 模型向上方向,可选的只有:X、Y、Z,需大写,默认值为:Y。 -maxTextureWidth 单个纹理的最大宽度,默认值为256,需为2的幂次。 -maxTextureHeight 单个纹理的最大高度,默认值为256,需为2的幂次。 -maxTextureAtlasWidth 纹理图集的最大宽度,默认值为2048,需为2的幂次,且值要大于maxTextureWidth的值,否则将不会构建纹理图集。 -maxTextureAtlasHeight 纹理图集的最大高度,默认值为2048,需为2的幂次,且值要大于maxTextureHeight的值,否则将不会构建纹理图集。

simplifier

对3D模型进行网格简化操作,同时会删除简化后的空闲顶点。

用法说明

命令行格式

simplifier.exe -i <path> -o <path> -ratio <Number> -aggressive

示例命令

simplifier.exe -i C:\input\test.fbx -o C:\output\test_05.fbx -ratio 0.1

参数说明

-i 输入3D模型。

-o 简化后的3D模型。

-ratio 简化比例。

-aggressive 更激进的简化方式,不保留拓扑。

texturepacker

将多张纹理图片打包成一个纹理图集,并输出一个json文件指示原始纹理图片在纹理图集中的位置。

用法说明

命令行格式

texturepacker.exe -i <path> -o <path> -width <Number> -height <Number>

示例命令

texturepacker.exe -i C:\input -o C:\output\atlas.png -width 2048 -height 2048

参数说明

-i 输入待打包纹理图片或其所在文件夹。

-o 输出纹理图集。

-width 纹理图集最大宽度。

-height 纹理图集最大高度。

如何编译

1、编译需要fbxsdk和修改后的tinygltf等库,但是文件太大无法上传,因此放在了百度网盘中(链接:https://pan.baidu.com/s/16YB3yUm8jEC6Ep4q4O_PoQ?pwd=2o84 提取码:2o84 ),下载解压后放在和src同级目录下即可; 2、编译时需要修改根目录下的CMakeLists.txt文件中CMAKE_TOOLCHAIN_FILE变量的值为本地vcpkg工具路径。

其他方式:

1、windows环境下修改build.bat脚本的DCMAKE_TOOLCHAIN_FILE值为本地vcpkg工具路径,运行脚本即可编译;

2、linux环境下通过Dockerfile文件构建docker镜像即可。

备注:windows环境下运行vcpkg安装依赖包时,可能会遇到编译jasper库失败的问题,解决方案:https://blog.csdn.net/weixin_41364246/article/details/140124085

详细教程:开源跨平台三维模型轻量化软件osgGISPlugins-2、如何编译

缺陷

1、当前不支持i3dm、b3dm、gltf/glb文件的导入; 2、model23dtiles不支持构建kd树; 3、model23dtiles不支持导出无光照的瓦片(其实已经实现了,但是2.0.0版本忘记放到model23dtiles里了...); 4、model23dtiles不支持重新计算法线功能(其实已经实现了,但是2.0.0版本忘记放到model23dtiles里了...); ...

后续计划

1、更新相关依赖库到最新版本(尤其是meshoptimizer) 2、model23dtiles支持导出无光照的瓦片; 3、model23dtiles支持重新计算法线功能; ...

关于作者

这是作者的第一个开源项目,非常感谢osgosgEarthosgVerseFbx2glTF3dtiles等开源项目对我的启发和帮助。

About

This project is to expand OSG's ability to convert GIS data, exporting gltf, b3dm, and 3dtiles.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages