3DTiles —— 三维瓦片

news2024/9/27 23:30:46

文章目录

  • 一、glTF
  • 二、3DTiles
    • 1.3dTiles的特点
    • 2.一个简单的3dTiles数据示例
    • 3.Tileset——(三维)瓦片数据集——.json
      • 顶级属性概览(必需):asset、root、geometricError
      • 其他属性root、children、refine、content、boundingVolume
        • children
        • refine 细化
        • bounding volumes 边界范围框
        • content
        • viewer request volume 视图请求范围框
      • Tile——构成3dtiles的成员:瓦片/切片——.json
        • tile content 切片内容
        • tile format 切片格式
        • tile info 切片信息
    • 4.数据与模型
      • tile瓦片二进制数据文件的大致字节布局结构(b3dm、i3dm、pnts)
      • FeatureTable,要素表 —— 记录渲染相关的数据
        • 要素表的结构
      • BatchTable,批次表 —— 记录属性数据
        • 批次表的结构
  • 三、b3dm——tile二进制数据文件结构
    • Header和body
    • Feature Table

工具+详解+版权所属@四季留歌
官方源码schema

一、glTF

详见这里。

二、3DTiles

1.3dTiles的特点

  • 三维模型使用了 glTF 规范,继承它的渲染高性能。
  • 3DTiles由tileset.json和tile组成,其中tile可以是.b3dm、.i3dm、.pnts、.vctr和.cmpt中的任一种格式文件。
  • 除了嵌入的 glTF,3dTiles 自己 只记录各级Tile的空间逻辑关系(如何构成整个3dtiles)和属性信息,以及模型与属性如何挂接在一起的信息,不记录模型数据。

模型数据:三维模型的顶点、贴图材质、法线、颜色等信息。
逻辑关系:各级Tile是如何在空间中保持连续的,LOD是如何组织的。

2.一个简单的3dTiles数据示例

  • 入口文件是 tileset.json,描述了整个三维瓦片数据集,记录“逻辑信息”,还包括一些其他的元数据。
  • 各级瓦片用文件夹(目录)来组织,“属性信息”、“嵌入的gltf模型” 则位于各个二进制瓦片文件中,这些二进制文件则由 tileset.json 中的瓦片中的 uri 来引用。
    在这里插入图片描述
  • 数据集的名称与所在文件夹的名称并无关系,数据集的名称写在入口文件中。
  • 瓦片只有两种情况:叶子瓦片(无子节点),非叶子瓦片。

3.Tileset——(三维)瓦片数据集——.json

  • 通常,一个三维瓦片数据集(之后简称:一个3dtiles数据)的入口就是那个tileset.json。

在这里插入图片描述

顶级属性概览(必需):asset、root、geometricError

而通常来说,这个json必须存在以下几个顶级对象:

  • asset:有关整个tileset的元数据,应用于特定程序的数据有glTF版本号,生成工具等。
  • root:3D Tiles tileset中的根切片
  • geometricError:几何误差,表示简化后的切片/瓦片(tile)与原始几何图形的差异(米为单位)。
  • 这个数值的大小能控制 LOD 的显示隐藏,且这个数值父级瓦片一定比子级瓦片大。
  • tile的几何误差代表了该切片的选择指标,是一个非负值。
  • 根tile是源几何体的最简化版本,将具有最大的几何误差,然后每个连续级别的子级别将具有比其父级更低的几何误差,其中叶子具有接近0的几何误差
  • 较高的几何误差意味着切片重新定义为更加细化的切片。
  • Screen-Space Error(SSE),屏幕空间误差:如果渲染tile和其子节点没有内容,则会引入tile的源几何图形与简化后的图形之间的差异(以像素为单位)。

其他属性root、children、refine、content、boundingVolume

children

定义子切片的对象数组。
每个子切片内容都由其父切片的边界范围框完全包围,并且通常具有小于其父切片的几何误差
对于叶子切片,此数组长度为零,并且可能未定义子切片。

3dTiles在空间上允许数据集使用如下几种树结构:

  • 四叉树:适合高度上不太好切分的数据

  • 八叉树:追求极致的空间分割和分级(例如点云数据)
    在这里插入图片描述

  • KD树

  • 格网结构
    在这里插入图片描述
    例如上面的children下有17个子节点,每个节点对应一个uri,与下面中的17个文件一一对应:
    在这里插入图片描述

refine 细化

确定在选择较低分辨率的父平铺进行渲染时,该父平铺的渲染过程。
允许的优化类型有:

  • 替换 (“REPLACE”),则子图块将代替父图块进行渲染,即不再呈现父图块。
    在这里插入图片描述

  • 附加 (“ADD”),除了父平铺之外,还会渲染子平铺。
    在这里插入图片描述

省略时,继承父级切片的。

bounding volumes 边界范围框

每个子切片内容都由其父切片的边界范围框完全包围。
包含切片或其内容的边界框,只需要一个box、region或sphere。

  • box —— number[12]
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • region —— number[6]
    在这里插入图片描述
  • sphere —— number[4]
    在这里插入图片描述
    在这里插入图片描述
content

有关切片内容的元数据和指向内容的链接

viewer request volume 视图请求范围框

在这里插入图片描述
在这里插入图片描述

Tile——构成3dtiles的成员:瓦片/切片——.json

  • tile是tileset的子集,所以一般也是.json后缀,里面包含可渲染内容的引用(即切片内容,如用uri)和元数据(如内容的边界范围框boundingVolume)。
tile content 切片内容
  • 通常,瓦片对象会引用一个二进制的瓦片数据文件(也有例外),是渲染所需的二进制信息:
    在这里插入图片描述
    在这里插入图片描述
tile format 切片格式

在这里插入图片描述
有两大数据表:要素表/特征表Feature Table和批处理表Batch Table
在这里插入图片描述

tile info 切片信息

从瓦片内容可知,瓦片对象都有如下属性:

  • boundingVolume:空间范围框,允许有box、sphere、region三种范围框,但是只能定义一种
  • geometricError:几何误差
  • content:瓦片内容,uri属性引用二进制瓦片数据文件。

瓦片还可以再引用 3dTiles 数据集,Tile不仅仅可以在其uri属性中引用 诸如 .b3dm、.i3dm、.pnts等二进制瓦片数据文件,还可以再引用一个 3dTiles!

  • 其他属性:viewerRequestVolume、transform

没错,瓦片对象记录的就是瓦片的元数据,真正瓦片的本体数据在content所引用的二进制文件中。

4.数据与模型

  • 3DTiles由tileset.json和tile组成,其中tile可以是.b3dm、.i3dm、.pnts、.vctr和.cmpt中的任一种格式文件。
  • 除了嵌入的 glTF,3dTiles 自己 只记录各级Tile的空间逻辑关系(如何构成整个3dtiles)和属性信息,以及模型与属性如何挂接在一起的信息不记录模型数据

模型数据:三维模型的顶点、贴图材质、法线、颜色等信息,由gltf承担起来的(作为glb格式嵌入到瓦片二进制文件中)。
逻辑关系:各级Tile是如何在空间中保持连续的,LOD是如何组织的。

所以,“属性数据” 和 “模型” 是如何产生联系的呢?
使用了两个重要的表来记录这种 “模型与属性” 的联系

  • FeatureTable(要素表)
  • BatchTable(批量表)

要素表、批量表都是以 二进制 形式存储。

tile瓦片二进制数据文件的大致字节布局结构(b3dm、i3dm、pnts)

除去cmpt这个复合类型不谈,前三种的大致布局见下图:
在这里插入图片描述
每一种瓦片二进制数据文件都有一个记录该瓦片的文件头信息,文件头包括若干个因瓦片不同而不太一致的数据信息。

  • 当fileHead含有要素表时,fileHead还将包含featureTableJSONByteLength和featureTableBinaryByteLength uint32,用于提取功能表的每个相应部分。
  • 当fileHead含有批次表时,fileHead还将包含batchTableJSONByteLength和batchTableBinaryByteLength uint32,用于提取功能表的每个相应部分。

FeatureTable,要素表 —— 记录渲染相关的数据

在这里插入图片描述

  • 即描述了要素每个要素的位置和外观属性。
  • 例如b3dm,每一个模型都是一个要素;例如pnts,每个点都是一个要素。
要素表的结构

在这里插入图片描述

  • 填充:
  • JSON头必须以包含的tile二进制文件中的8字节边界结束,必须使用后继空格字符0x20填充JSON头以满足字节对齐。
  • 二进制body必须以包含的tile二进制文件中的8字节边界开始与结束,必须使用任何值的附加字节填充二进制体,以满足此要求。
  • 二进制属性必须以字节偏移量开始,该字节偏移量是属性componentType的字节大小的倍数(参考glTF)。
  • JSON头:
    在这里插入图片描述
    在这里插入图片描述
  • 二进制体:
    在这里插入图片描述

BatchTable,批次表 —— 记录属性数据

  • 如果把批次表删掉,那么 3DTiles 数据还能正常渲染。
  • 批次表就是所谓的模型属性表,批次表中每个属性数组的个数,就等于模型的个数,因为有多少个模型就对应多少个属性。

其实也有例外的情况,有关 3DTiles 数据规范的扩展能力。

批次表的结构

在这里插入图片描述

  • 填充:和特征表一样
  • JSON头:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 二进制体:
    在这里插入图片描述

三、b3dm——tile二进制数据文件结构

  • B3dm,Batched 3D Model,成批量的三维模型的意思,允许对异构3D模型(例如城市中的不同模型建筑物)批处理。
  • 倾斜摄影数据(例如osgb)、BIM数据(如rvt)、传统三维模型(如obj、dae、3dMax制作的模型等),均可创建此类瓦片。
  • 每个模型属性(例如ID)在运行时能够识别和更新各个模型。

在这里插入图片描述
在这里插入图片描述

Header和body

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Feature Table

要素表,记录的是整个瓦片渲染相关的数据,而不是渲染所需的数据(glb中)。

  • 全局属性:
属性名属性数据类型属性描述是否必需
BATCH_LENGTHuint32当前瓦片文件内三维模型(BATCH、要素)的个数yes
RTC_CENTERfloat32[3]如果模型的坐标是相对坐标,那么相对坐标的中心即此no

注意,如果glb模型并不需要属性数据,即要素表和批量表有可能是空表,那么 BATCH_LENGTH 的值应设为 0 .

  • 要素属性:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大棚分割数据集,40765对影像,16.9g数据量,0.8米高分二,纯手工标注(arcgis标注)的大规模农业大棚分割数据集。

数据集名称: )“Greenhouse Segmentation Dataset (GSD)” 数据集规模: 包含40,765对用于大棚分割的影像数据,每对影像包括一张原始图像和相应的分割标签图。 数据量: 总数据量约为16.9GB,适合存储在现…

推荐这款神器:Perplexity

今天推荐是一款AI搜索引擎,还支持gpt-4模型的使用,虽然4小时只能使用5次,但是相比于常规的搜索引擎,在某些方面还是很强的,个人感觉优于newbing。 页面简洁,没有广告,内容丰富,功能…

JVM面试真题总结(十)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 是否所有对象都分配在堆内存上? 在Java中,对象主要是…

SVM——支持向量机的学习入门

1、推荐文章 1、一文看懂SVM算法 2、图解机器学习|支持向量机模型详解 3、支持向量机的直观理解 2、分类问题 假设你的大学开设了一门机器学习(ML)课程。课程导师发现数学或统计学好的学生表现最佳。随着时间的推移,积累了一些数据&…

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询: 定义:关联查询又叫连接查询 常见:内连接/外连接/自连接 1.内连接(无存在主从表) 语法:inner join ...on 定义:组合两个表的记录,返回关联字段相符的记录,也就是返…

【LeetCode】每日一题 2024_9_15 与车相交的点(差分)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 今天的题目曾经的我做过了 . . . 又是复习的一天 题目:与车相交的点 代码与解题思路 func numberOfPoints(nums [][]int) (ans int) { diff : [102]int{}for _, p : range nums {diff[p[0]]d…

Orchestrator 与 Mysql 8.0 的兼容性

一、看图识别问题 二、Mysql 8.0 从 MySQL 8.0.22 开始,使用SHOW REPLICA STATUS代替SHOW SLAVE STATUS,该语句从该版本开始已弃用。 所以:Mysql 8.0.22前可以用Orchestartor

InternStudio大模型之路(十七):销冠大模型案例实战

一、📢 简介 Streamer-Sales 销冠 —— 卖货主播大模型 是一个能够根据给定的商品特点从激发用户购买意愿角度出发进行商品解说的卖货主播大模型。以其独特的智能魅力,将彻底改变您的购物体验。该模型能深度理解商品特点,以生动、精准的语言…

NC输出二叉树的右视图

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 请根据二叉树…

QXDM 如何更新软件?

如何更新QXDM等高通软件?之前做过这个事情,但过几个月给别人讲的时候就忘记了,特做如下记录。 一. 背景知识: 1. QXDM 依赖于Qualcomm package Managers 3(QPM in short)。 目前的时间是2024年9月15日,但不知从何…

华为OD机试 - 找出作弊的人(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

门店引流神器异形创意LED圆形(饼/盘)显示屏使商业广告更有吸引力

在当今这个信息爆炸的时代,商业竞争日益激烈,如何在众多商家中脱颖而出,吸引顾客的注意力,成为了每个商家亟待解决的问题。而在这个视觉为王的时代,一种创新的门店引流神器——异形创意LED圆形(饼/盘&#…

【案例72】Apache检测到目标 URL 存在 http host 头攻击漏洞的解决方案

在网络安全中,我们经常会遇到各种漏洞和攻击,其中 http host 头攻击漏洞是一种比较常见的安全问题。最近,我在处理一个项目时,检测到目标 URL 存在 http host 头攻击漏洞,下面我将分享两种Apache解决这个问题的方法。 …

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册

关于Python书籍的推荐,特别是针对Python背记手册这一类别,虽然直接名为“Python背记手册”的书籍可能不常见,但存在多本详尽的Python学习资料,旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能,这些书籍或资料…

【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目

使用rtt-studio与stm32CubeMx联合创建项目 创建rt-thread项目 设置项目信息 在项目资源管理器中“右击“,创建RRT studio 项目 双击“RT-Thread 项目“。 选择MCU,设置UART,以及调试方式。添加项目名称,点击“完成“按钮。 …

python画图|极坐标下的3D surface

前述学习过程中,我们已经掌握了3D surface的基本绘制技巧,详见链接: python画图|3D surface基础教程-CSDN博客 基础教程中的3D surface绘制位于笛卡尔坐标系,但有时候会用到极坐标绘图。虽然我们已经学过简单的极坐标绘图技巧&a…

C++: 二叉树进阶面试题

做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…

AMD FSR 4已秘密开发1年 支持AI帧生成

作为当今三大超分技术之一,AMD FSR曾经在第二代一度紧紧咬住NVIDIA DLSS,但是进入第三代之后反而差距拉大了,尤其是帧生成技术差了很多。AMD高级副总裁、计算与图形业务事业部总经理Jack Huynh近日透露,FSR 2/3并不是AMD真正想要的…

学习使用在windows系统上安装vue前端框架以及环境配置图文教程

学习使用在windows系统上安装vue前端框架以及环境配置图文教程 1、安装nodejs2、安装vue3、安装Vue-cli脚手架4、安装高版本5、创建vue项目6、启动项目7、配置开发环境8、发布项目 1、安装nodejs 点我查看教程 2、安装vue winR,打开cmd cnpm install vue -g表示安…

Golang数据流处理:掌握Reader和Writer接口的技巧

Golang数据流处理:掌握Reader和Writer接口的技巧 引言理解Reader和Writer接口Reader接口的定义和基本方法Writer接口的定义和基本方法 Reader接口的深入探讨Reader接口的实现示例使用io.Reader读取文件内容从网络连接中读取数据 常用Reader类型及其应用场景strings.…