glTF是用于小场景的三维模型。 Cesium支持包含关键帧(key-frame)动画、骨骼(skinning)动画 的glTF格式的三维模型,并且支持模型节点(node)的拾取。 glTF是 Khronos Group 定义的一个基于web上的新兴三维模型格式行业标准。Khronos Group是WebGL和 COLLADA的背后财团。

#1. 三维模型源数据的设计要求

#1.1 建模设计要求

无论是通过什么工具来设计建模,最终obj等格式即可。设计时需要主要的地方,有以下几点:

  1. 模型单位:三维模型采用米(m)作为单位,模型大小与物体的真实大小要接近,比如车辆的长度在几米到十几米长,不要生产成100米、1000米的大小。

  2. 模型方向:车辆等具备方向的模型时,车头朝向南

  3. 模型中心点:模型需要将视角效果的中心放在X=0,Y=0,Z=0的原点位置,XY轴方向居中,Z轴方向都放0上面(如下图所示)。

  4. 材质要求: 使用 Standard 标准材质,材质类型使用 Blinn。程序纹理尽量只使用位图,有些程序纹理FBX导出时会报错出问题导致灰色材质(并不是全部的程序纹理)(例:Color Correction),纹理图片不能再Max中进行裁剪,FBX不支持。

#纹理图片

  • 纹理图片必须是jpg,png等web兼容格式,图片名称不要有中文。
  • 能够完整反映模型的外观,精度控制合理,在保证三维模型视觉效果的前提下,减少模型点面数和材质数量,贴图尽量烘焙整合减少贴图数量,贴图分辨率最大不超2048×2048(能小则小,能压缩就压缩,PNG图片可以尝试用Photoshop导出8位色彩的),做到数据量的精简。
  • 所有的纹理使用同一个顶点数据。可以使用多重纹理把uv的作用最大化,但是所有纹理只能分享同一个纹理坐标。
  • 尽量使用纹理合并集( texture atlases 多个小纹理和到一张大纹理上)而不是很多独立纹理。这样会使文件下载次数最小化,并且使引擎批量渲染,会提升不少性能。
  • 使用mipmaping。这个会提升显示效果和渲染性能,尤其是对大的纹理合并集 ,否则会产生很多内存碎片( poor memory coherence)。
  • 如果贴图在cesium里不透明,有可能是blend属性没有开启造成的,修改修改模型的属性。

#几何体

  • 不要包含任何比不需要的顶点元素。虽然导出Collada dae会增大一点点,但是对glTF确增大了很多。因为glTF不支持顶点属性的索引( per-attribute indices),所有的顶点属性都是和顶点个数一致。
  • 尽量减少节点(node)和 三角网(mesh)的个数。通常一个大的三角网渲染效率要比很多个小的三角网效率高。
  • 尽量把模型身上的修改器塌陷掉,特别是UVW展开与自动展开UVs,如不塌陷掉在后期转换中处理后预览时可能会看到双重模型。

#1.1 交付物数据及格式要求

#如果交付提供max原始文件【建议】

如果是max文件,注意同时发送所有贴图材质。可以在max里重新指定贴图路径,选中所有的贴图后,把路径更改为当前机器上的贴图所在位置路径。

#如果交付物是提供obj格式文件

按下面参数设置步骤操作导出数据即可,同样注意别丢失材质贴图文件。

#2. 单体小模型转为glTF格式

转换工具: obj转gltf fbx转glTF dae转gltf gltf转glb max导出gltf插件

下面介绍其中2种比较常用的工具:

#2.1 使用obj2gltf工具

请确认处理机器安装有Node环境,如果没有请下载安装 Node下载地址

obj2gltf工具 主要是将obj数据转换成gltf2.0格式数据,如果您是其它格式数据可以通过3dmax软件另存导出obj格式数据。

  1. Github上下载或clone仓库,打开本地的obj2gltf-master文件夹
git clone https://github.com/CesiumGS/obj2gltf.git
  1. 在obj2gltf-master目录下,输入命令:npm install或 cnpm install 安装依赖包
npm install
  1. 执行数据转换,命令行如下:
node bin/obj2gltf.js -i data/test.obj -b

#命令行支持的参数:

参数 说明 必选项 默认值
-h--help 显示帮助
-i--input obj文件的路径。 ✅ 必须
-o--output 转换后的glTF或glb文件的路径。
-b--binary 保存为二进制glTF (.glb)。 false
-s--separate 写出单独的缓冲区和纹理,而不是将它们嵌入到glTF文件中。 false
-t--separateTextures 只写出单独的纹理。 false
--checkTransparency 通过查看每个像素的alpha通道来做一个更详尽的纹理透明度检查。默认情况下,纹理是不透明的。 false
--secure 防止转换器读取输入obj目录之外的纹理或mtl文件。 false
--packOcclusion 在金属粗糙纹理的红色通道中填充遮挡纹理。 false
--metallicRoughness mtl文件中的值已经是金属粗糙度PBR值,不应该应用转换步骤。金属存储在Ks和map_Ks槽中,粗糙度存储在Ns和map_Ns槽中。 false
--specularGlossiness Tmtl文件中的值已经是镜面光泽度PBR值,不应该应用转换步骤。镜面光泽度存储在k和map_Ks槽中,光泽度存储在n和map_Ns槽中。glTF将被保存为khr_materials_pbrspeculargloss扩展名。 false
--unlit glTF将以KHR_materials_unlit扩展名保存。 false
--metallicRoughnessOcclusionTexture 到金属粗糙遮挡纹理的路径,它应该覆盖.mtl文件中的纹理,其中遮挡存储在红色通道中,粗糙存储在绿色通道中,金属存储在蓝色通道中。模型将保存为pbrMetallicRoughness材质。在.mtl不存在或没有设置为使用PBR材料的工作流中,这通常是很方便的。适用于单一材料的模型。
--specularGlossinessTexture 高光光泽度纹理的路径应该覆盖。mtl文件中的纹理,高光颜色存储在红色、绿色和蓝色通道中,高光光泽度存储在alpha通道中。使用khr_materials_pbrspeculargloss扩展,模型将和材质一起保存。
--occlusionTexture 遮挡纹理的路径,它应该覆盖.mtl文件中的纹理。
--normalTexture 普通纹理的路径,它应该覆盖.mtl文件中的纹理。
--baseColorTexture baseColor/diffuse纹理的路径,它应该覆盖.mtl文件中的纹理。
--emissiveTexture 应该覆盖.mtl文件中的纹理的发射纹理的路径。
--alphaTexture alpha纹理的路径,应该覆盖。mtl文件中的纹理。

#2.2 dae转gltf转换工具

  1. 需要在3dmax中安装OpenCOLLADA插件 , 将下载好的COLLADAMaxNew.dle文件复制粘贴到3dsMax的安装目录的plugins文件夹中;打开软件,选择 自定义->插件管理器 ,在空白处点击右键,选择 加载新插件 在找到插件位置即可 ,添加完成后,在插件管理器中会出现添加进的插件

  1. 打开3dsMax;选择导出,将模型导出为OpenCOLLADA(*.dae)格式

  1. 下载COLLADA2GLTF工具 下载最新工具包。

  2. 进入下载包的目录,启动命令行工具,输入命令: COLLADA2GLTF [.exe] [-i输入] [ -o输出] [选项]

.\COLLADA2GLTF-bin.exe  -i  F:\COLLADA2GLTF\data\weilan.DAE

#命令行支持的参数:

参数 默认值 必选项 说明
-i, --input 必须 ✅ 输入COLLADA文件的路径
-o, --output output/${input}.gltf 输出glTF文件的路径
--basepath 输入路径的父路径 使用此作为引用路径解析外部uri
-s, --separate false 输出单独的二进制缓冲区,着色器和纹理
-t, --separateTextures false 分别输出纹理
-b, --binary false 输出二进制glTF(.glb)
-m, --materialsCommon false 使用KHR_materials_common扩展名输出材料
-v, --version 输出glTF版本(例如:“1.0”、“2.0”)
-d, --dracoCompression false Output meshes using Draco compression extension
--qp Quantization bits used for position attributes in Draco compression extension
--qn Quantization bits used for normal attributes in Draco compression extension
--qt Quantization bits used for texcoord attributes in Draco compression extension
--qc Quantization bits used for color attributes in Draco compression extension
--qj Quantization bits used for joint indice and weight attributes in Draco compression extension
--metallicRoughnessTextures Paths to images to use as the PBR metallicRoughness textures
--specularGlossiness false output PBR materials with the KHR_materials_pbrSpecularGlossiness extension
--lockOcclusionMetallicRoughness false Set metallicRoughnessTexture to be the same as the occlusionTexture in materials where an ambient texture is defined
--doubleSided false Force all materials to be double sided. When this value is true, back-face culling is disabled and double sided lighting is enabled
--preserveUnusedSemantics false Don't optimize out primitive semantics and their data, even if they aren't used.

#3. 处理操作流程完整示例

#3.1 导出obj格式

下面是以3ds Max软件为例,导出为obj格式;

#3.1.1 打开模型并确认模型位置

确认或调整模型中心点位置,如图中所指,需要将模型处于两线交叉口,绘制时处于中心位置;

偏移量会导致模型绘制之后出现偏差;

#3.1.2 导出obj文件

通过3dmax导出文件,根据下图所指引进行导出;

转换后的模型最好放在obj2gltf工具目录的data文件夹下

#3.2 obj格式转换gltf

下面是以obj2gltf工具为例,转换为gltf文件,转换前确保已经按上面步骤安装好obj2gltf;

    1. 打开本地的obj2gltf-master文件夹,
    1. 执行数据转换,命令行如下图:
node bin/obj2gltf.js -i data/test.obj -b
    1. 转换成功后的gltf文件如下:

转换成功之后将.gltf文件放在项目中,

或者放在独立站点服务,可以参考发布三维数据服务。

#6.3 在平台中加载gltf

可以在Gltf模型编辑页面 进行验证,是否成功转换,加载成功效果如下图:

Mars3D(含Cesium)数据及服务篇:单体小模型转为glTF格式相关推荐

  1. Mars3D(含Cesium)数据及服务篇:TIF地形转terrain格式

    地形是三维场景中的重要三维效果,能看到山峰的高低起伏效果,是三维场景的"骨骼", 如果想要看到真实感,地形数据(DEM)不可或缺. Mars3D支持渐进流式加载和渲染全球高精度地形 ...

  2. Mars3D(含Cesium)数据及服务篇:城市建筑物转为3DTiles白膜格式

    1.城市建筑物白膜所需的shp数据介绍 在拥有如shp格式的建筑物二维面边界坐标数据,和高度或楼层数属性信息,再通过工具转换为三维立体的白膜建筑物3DTiles模型. Shapefile文件是ESRI ...

  3. Mars3D(含Cesium)数据及服务篇:shp转geojson格式

    shp格式介绍 Shapefile文件是ESRI公司ArcGIS平台的常用格式文件,是工业标准的矢量数据文件. Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何 ...

  4. Mars3D(含Cesium)数据及服务篇:在线地图的下载和使用

    1. XYZ瓦片金字塔介绍 #瓦片金字塔基本概念 要理解互联网地图或者说目前所有的在线地图,一定要理解"瓦片金字塔"这个概念. 目前我们所见的所有地图底图服务都是瓦片地图的方式发布 ...

  5. Mars3D(含Cesium)数据及服务篇:发布三维数据服务

    通过数据处理的流程我们大概了解了目前三维相关的影像.地形.模型都是瓦片形式的静态资源文件,如果我们需要发布为服务,只需要通过HTTP方式发布后,平台即可调用. #1. Nginx软件安装 如果您服务器 ...

  6. 【音视频数据数据处理 10】【PCM篇】将PCM转为WAV格式音频

    [音视频数据数据处理 10][PCM篇]将PCM转为WAV格式音频 一.WAV头信息 1.1 RIFF区块 1.2 FORMAT区块 1.3 DATA区块 二.PCM 转 WAV 代码实现 PCM转为 ...

  7. 3D MAX模型导出gltf格式数据

    1.首先参照上一篇我微信公众号中3DMAX制作3DTIlesObj格式的数据. 2.下载OpenCollada插件(https://github.com/KhronosGroup/OpenCOLLAD ...

  8. Mars3D开发基础学习:glTF小模型

    glTF全称是 Graphics Language Transmission Format (图形语言传输格式),是一种针对GL(WebGL,OpenGL ES以及OpenGL)接口的运行时资产传递格 ...

  9. 通过Mars3d在地图上加载风力发电机车模型

    首先理清需求,通过Mars3d的基础项目,在基础项目模板上添加一个风力发电机模型. Mars3d官网的基础项目下载地址:Mars3D三维可视化平台 | 火星科技 gitee地址: git clone ...

最新文章

  1. 下列哪个可以选中矩形文字块_PPT很难?一个字母就可以搞定
  2. 【开发环境】安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio Code )
  3. 自己动手写CPU(3)逻辑、移位操作与空指令
  4. 赛尔原创 | N-LTP:基于预训练模型的中文自然语言处理平台
  5. Docker学习二:Docker镜像与容器
  6. IIS6.0不支持ASP的解决办法
  7. JAVA学习笔记-this隐式参数
  8. c/c++教程 - 1.6 程序流程结构 if switch do while for break continue goto ?:三目运算符
  9. myeclipse 修改jsp模板
  10. 昂达v80 plus linux,8英寸便携平板 昂达V80 Plus一体工艺来袭
  11. 电脑模拟收银机_机场收银模拟器下载
  12. 论文阅读笔记:A brief introduction to weakly supervised learning
  13. NFT游戏开发NFT平台开发元宇宙对战游戏开发三国版元宇宙NFT游戏
  14. 我在名牌大学毕业后的经历——曾经努力过,就不会后悔
  15. .fire勒索病毒如何删除 .fire后缀文件恢复(Dharma)
  16. Visual Studio 2015、2013、2012、2010、2008、2005各版本下载+有效密钥激活
  17. java 图像特效之黑白 浮雕和底片
  18. 通过C#Microsoft.Office.Interop.Word理解互操作性
  19. 解读CUDA Compiler Driver NVCC - Ch.3
  20. AMPL IDE语法整理

热门文章

  1. 筒仓计算表格_筒仓世界中的开源极客
  2. PHP htmlspecialchars()函数用法与实例讲解
  3. CSDN盲盒中奖MacBook Surprise
  4. RNA-seq流程学习笔记(7)-使用Hisat2进行序列比对
  5. 对C++库链接的认识
  6. 用Custom Element来实现UI组件
  7. 2023年闷声发大财的6个风口行业
  8. Newman(一)之Windows下Newman的安装与使用
  9. js实现不同城市空气质量报告显示柱形图
  10. 悼念512汶川大地震遇难同胞——重建希望小学 ( )