三维大场景管理-3Dtiles规范

news2024/9/19 2:09:44

简介

: 这篇文章都是三年前写的了,一直在笔记库存中,今天把他放出来。主要是讲Cesium 的3Dtiles 格式,当然3Dtiles主要是解决场景管理+大场景的LOD实现的问题,不管是剔除渲染性能优化之Culling 剔除或者 LOD 、3Dtiles都是解决由于管线中的顶点过多导致的性能大场景问题,而不是由于片源着色器或者CPU的性能瓶颈导致的问题,当然它们本质上都是剔除,都是在CPU端进行剔除,防止过多的顶点等进入到着色器中。作者本人以前见过千万级别的顶点甚至上亿的顶点传入到顶点着色器中!如果不做场景管理等优化再强的GPU也是扛不住的。

3Dtiles 是一种开放规范,用于跨桌面、Web 和移动应用程序共享、可视化、融合大量异构 3D 地理空间内容并与之交互。其主要目的是改善大规模异构数据集的流和渲染性能;它基础是一种空间数据结构,它支持层次结构细节级别(HLOD),因此只有可见的图块才会被流式传输到web ,并且只有那些对于给定3D视图最重要的图块。3D Tiles在3D中实现自适应空间细分,包括kd树,四叉树,八叉树,网格和其他空间数据结构。转换工具可以自适应地细分数据集,而不是刚性空间细分,例如,基于渲染每个模型的成本和模型的分布,从而产生平衡的数据结构。

3Dtiles 与cesium的关系:3D Tiles 是由 Cesium 团队制定的一种开放规范,专门用于高效地流式传输和渲染大规模的三维地理空间数据集。Cesium 团队是开发 3D Tiles 规范的主要贡献者和推动者。作为一个开放规范,3D Tiles 的目标是提供与 Cesium 以及其他三维可视化和GIS软件的互操作性。虽然由 Cesium 团队制定,但3D Tiles旨在成为一个通用规范,可以被任何支持WebGL和3D渲染的软件使用。最早在web端的cesiumjs然后到PC端 再到UE!以下是:
Cesium 中文社区
Cesiumlab实验室

几何的几种表示:

以下总结并且列出CG与计算几何常见的几何表达方式,当然3Dtiles主要是针对Polygon Mesh,但是这里主要是想总结;
隐式几何

  • 代数(数学公式)
  • Constructive Solid Geometry(CSG) ( 做布尔运算,如并,交,差)Constructive Solid Geometry.Modifying
  • SDF( 有向距离场 每个像素(体素)记录自己与距离自己最近物体之间的距离,如果在物体内,则距离为负,正好在物体边界上则为0。)
  • 分形几何
  • 样条曲线(Splines):NURBS(Non-Uniform Rational B-Splines)是在CAD、计算机图形学和数字建模领域广泛使用的一种数学模型,用来生成和表示曲线和曲面。NURBS非常灵活和强大,因为它们可以精确表示标准形状(如圆形和矩形)和复杂的自由形曲面。

显示几何

  • 点云(Point Cloud)
  • 多边形网格(Polygon Mesh) :在这里主要是讲Polygon Mesh做3Dtiles。

GLTF格式:

在web端等组织3Dtiles格式习惯上喜欢使用glb/gltf等格式。gltf格式它按照图形编程所需的格式来存储数据,借以二进制编码提高传输速度。它不再使用面向对象的思维存储三维模型、贴图纹理,而是按显卡的思维存储,存的是顶点、法线、顶点颜色等最基础的信息,只不过组织结构上进行了精心的设计。它面向终点,就意味着可编辑性差,因为渲染性能的提高牺牲了可编辑性,它不再像fbx、obj一样容易编辑和转换。
我以前的文章有更详细的介绍:
gltf格式一、简介
gltf 格式二

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

  • scene:glTF格式的场景结构描述条目。它通过引用node来定义场景图。
  • node:场景图中的一个结点。它可以包含一个变换(比如旋转或平移),引用更多的子结点。它可以引用网格和相机,以及描述网格变换的蒙皮。
  • camera:定义了用于渲染场景的视锥体配置。
  • mesh:描述了场景中出现的3D对象的网格数据。它引用的accessor对象可以用来访问真实的几何数据。它引用的material对象定义了3D对象的外观。
  • skin:定义了用于蒙皮的参数,参数的值通过一个accessor对象获得。
  • animation:描述了一些结点如何随时间进行变换(比如旋转或平移)。
  • accessor:一个访问任意数据的抽象数据源。被mesh、skin和animation元素使用来提供几何数据,蒙皮参数和基于时间的动画值。它通过引用一个bufferView对象,来引用实际的二进制数据。
  • material:包含了定义3D对象外观的参数。它通常引用了用于3D对象渲染的texture对象。
  • texture:定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。

3Dtiles 格式:

在这里插入图片描述

3D Tiles 已经在Cesium中进行:
3Dtiles 是一种开放规范,用于跨桌面、Web 和移动应用程序共享、可视化、融合大量异构 3D 地理空间内容并与之交互。3D Tiles的主要目的是改善大规模异构数据集的流和渲染性能。3D Tiles的基础是一种空间数据结构,它支持层次结构细节级别(HLOD),因此只有可见的图块才会被流式传输 - 并且只有那些对于给定3D视图最重要的图块。平铺有效载荷可以是二进制和上下文感知压缩的,例如,使用Open3DGC或oct编码。

3D Tiles在3D中实现自适应空间细分,包括kd树,四叉树,八叉树,网格和其他空间数据结构。转换工具可以自适应地细分数据集,而不是刚性空间细分,例如,基于渲染每个模型的成本和模型的分布,从而产生平衡的数据结构。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

geometricError是存储在tileset或tile中的几何误差,screenHeight是渲染屏幕的高度(以像素为单位),tileDistance是tile到眼点的距离,fovy是视锥体的打开角度y 方向
就拿作者做过的b3dm 格式来说吧~
在这里插入图片描述
他的结构如上图,字段瑜含义如下表,你就能把glb格式组装成b3dm的3Dtiles规范在这里插入图片描述
这个是我本人做的一部分3Dtile转换工具

Bounding volumes
在这里插入图片描述

[west, south, east, north, minimum height, maximum height]
“region”: [ -1.3197004795898053,0.6988582109, -1.3196595204101946,0.6988897891,0,20]

shhere 圆心 +半径
“sphere”: [ 0,0,10,141.4214 ]
box 右手坐标系前三个是box中心点,后x y z的轴方向与半长
“box”: [
0, 0, 10,
100, 0, 0,
0, 100, 0,
0, 0, 10
]
当然常用的包围结构是包围盒AABB与包围球,主要是由于三维大场景的是静态的场景而且AAB吧或者包围球求解容易不会像OBB解近似值!

空间数据结构:

见空间数据笔记;空间数据结构

3Dtile流式加载流程:

  1. 初始化Tileset:
    当3D场景初始化时,Cesium.js库将加载一个JSON格式的Tileset文件,这个tileset是一棵树组成,树中的节点代表单个的Tiles,该文件描述了所有Tile的层次结构、位置、空间划分、可用的LOD等级等元数据。
  2. 视图和相机设置:
    进入三维场景,设置好视图和相机的位置和方向。引擎计算当前相机视角下哪些Tile在视锥体(View Frustum)内,并通过视点距离、屏幕空间误差(Screen-Space Error, SSE)或其他指标来确定需要加载Tile的LOD级别。
  3. 选择Tile:
    根据Tileset的层次结构,逐级检查各个Tile,挑选出那些覆盖当前视锥体并满足LOD要求的Tile,如果一个Tile被认为不能准确表现当前视角下的模型,则会递归地检查其子Tile。
  4. 请求Tile内容:
    一旦确定了需要的Tile,发起网络请求来加载这些Tile的实际几何数据。如上面文章说的数据可以是不同格式的,包括B3DM(批量化3D模型)、I3DM(实例化的3D模型)、PNTS(点云)、等等。每种格式针对特定类型的数据最优化。
  5. 流式加载和缓存:
    Tile内容随着网络请求而异步加载,这样用户仍然可以与场景交互,即使数据还没完全到位。 已加载的Tile会被缓存以供将来快速访问,尤其是在用户导航场景时重复访问相同区域的情形。
  6. 渲染和LOD切换:
    加载完成的Tiles被送入渲染管线渲染。当用户移动相机或更改视角时,之前加载的Tiles可能不再可见或需要更高或更低的LOD。引擎会根据新的视锥体和LOD要求再次执行Tile选择和请求流程。最终系统会基于用户的交云动作及网络条件不断地加载和卸载Tile,以确保在用户设备上实现流畅又精确的三维场景体验。

参考资料:

介绍3D Tiles
Cesium-3dTiles格式详解
cesium原理:渲染调度
3DTiles 1.0 数据规范详解[1] 介绍

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

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

相关文章

授权调用: 介绍 Transformers 智能体 2.0

简要概述 我们推出了 Transformers 智能体 2.0! ⇒ 🎁 在现有智能体类型的基础上,我们新增了两种能够 根据历史观察解决复杂任务的智能体。 ⇒ 💡 我们致力于让代码 清晰、模块化,并确保最终提示和工具等通用属性透明化…

MySQL导入SQL脚本---超详细介绍

1.新建xxx数据库,字符集选对。 2.在mysql安装目录下cmd进入小黑窗 3.执行mysql -uroot -p123456 --default-character-setutf8命令 4.use xxx; 5.source xxx.sql 执行完上面的命令等待结束就可以了 需要注意的是--default-character-setutf8,要不然可…

LeetCode994腐烂的橘子

题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没…

echarts学习篇

一、使用echarts 1.引入 Apache ECharts <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <!-- 引入刚刚下载的 ECharts 文件 --> <script src"echarts.js"></script> </head> </html> 2.…

同元软控专业模型库系列—电气篇

一、引言 电气作为研究电能产生、传输、分配、使用和控制的专业领域&#xff0c;在航空航天、能源电力、船舶推进、轨道交通等众多行业中占据着举足轻重的地位&#xff0c;应用范围涉及电力工程、电子通信、自动化控制等&#xff0c;如电池充电管理芯片设计、航天器伺服系统、…

Cocos Creator 安卓环境配置

系统&#xff1a;Win10&#xff0c;引擎版本&#xff1a;CocosCreator3.8.2&#xff0c; 时间&#xff1a;2024.05.23 安装 Java SDK(JDK)下载地址 注意&#xff1a;Java版本对应的Gradle: 详见表 Table 1. Java Compatibility 此处选择 Java 21 对应 Gradle 8.5 配置Java系统…

Hack The Box-BoardLight

总体思路 子域名收集->默认密码->信息泄露->CVE-2022-37706 信息收集&端口利用 nmap -sSVC boardlight.htb发现22和80端口开放&#xff0c;先看80端口网站信息 四处查看后&#xff0c;发现没有有效信息&#xff0c;对其进行目录扫描和子域名扫描 dirsearch -u…

SQL 语言:基本概述和数据定义

文章目录 1. 数据库语言2. SQL 概述2.1 SQL 的特点2.2 SQL 语言支持三级模式结构2.3 SQL 的基本组成 3. 数据定义3.1 数据类型3.2 创建表3.3 修改和删除表3.4 创建和删除索引3.5 创建和删除视图 1. 数据库语言 数据结构化语言 (Structured Query Language&#xff0c;SQL)&…

python数据分析——apply 2

参考资料&#xff1a;活用pandas库 1、向量化函数 使用apply时&#xff0c;可以按行或按列应用函数。如果想应用自定义的函数&#xff0c;必须重写它&#xff0c;因为整列或整行传递到了函数的第一个参数中。可以利用向量化函数和装饰器对所有函数进行向量化。对代码进行向量化…

[数智人文实战] 02.舆情分析之词云可视化、文本聚类和LDA主题模型文本挖掘

【数智人文与文本挖掘】知识星球建立且正式运营,欢迎新老博友和朋友加入,一起分享更多数智人文知识和交流进步。该星球计划每周至少分享7个资源或文章,包括数智人文、文本挖掘、人工智能、大数据分析和图书情报的技术文章、代码及资源。同时,欢迎进入星球的朋友咨询我图情和…

技术面‍:前端代码是如何与服务器交互的

前言&#xff1a; 本篇文章主要是想讲解 .html 文件和 .CSS 文件在实际开发中和后端服务器交互最后上线的基础原理。 面向的人群&#x1f195;&#xff1a;是刚入行不久&#xff0c;且目前只会写前端业务代码而不清楚整个工作流的前端新人。我会从 0 开始一步一步带你理解整个…

内网安全--隧道技术-CS上线本地

免责声明:本文仅做技术交流与学习...请勿非法搞破坏... ---隧道技术:硬刚网络协议,(你不让我走我偏走!) 解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理协议&#xff1a; SOCKS4/5 代理软件&#xff1a; SocksCap Proxifier ProxyChains(…

Spring Boot 统一数据返回格式

在 Spring Boot 项目中&#xff0c;统一的数据格式返回是一种良好的实践&#xff0c;它提高了代码的可维护性和一致性&#xff0c;并改善了客户端与服务端之间的通信。本文将介绍如何在 Spring Boot 中实现统一的数据格式返回。 1 为什么需要统一数据返回格式 ⽅便前端程序员更…

Mybatis——入门

新建 idea 准备 数据库 create table user(id int unsigned primary key auto_increment comment ID,name varchar(100) comment 姓名,age tinyint unsigned comment 年龄,gender tinyint unsigned comment 性别, 1:男, 2:女,phone varchar(11) comment 手机号 ) comment 用…

文刻创作ai工具官网免费工具

文刻创作ai工具官网免费工具 Docshttps://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 文刻是一种可以帮助用户进行创作的AI工具。 它使用自然语言处理和机器学习技术&#xff0c;可以生成文章、故事、诗歌等文本内容。 用户可以通过输入一些关键词或指定一定的…

APM2.8用USB在线下载固件

1.把APM飞控用安卓手机的USB线插入电脑。 选择COM口&#xff0c;不要选择auto&#xff0c;如果你没有COM口说明你驱动安装有问题。 波特率115200。点击相应的图标就可以下载固件到飞控板。 请注意&#xff1a;烧录APM必须选择INSTALL FIRMWARE LEAGACY,第一个是用于刷pixhawk的…

每天写两道(一):无重复字符的最长子串、反转链表

3. 无重复字符的最长子串 3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。(1)滑动窗口 双…

QGraphicsView实现简易地图17『涟漪效果』

前文链接&#xff1a;QGraphicsView实现简易地图16『爆炸效果』 模仿水波荡漾时的涟漪效果&#xff0c;参考了echarts中的散点图 支持设置散点大小、颜色、涟漪线条宽度。 动态演示效果 静态展示图片 核心代码 #pragma once #include "../AbstractGeoItem.h" #incl…

uniCloud云存储uni-cdn七牛云扩展存储-开发uniapp项目节约开发成本

为什么要使用uniCloud的扩展存储&#xff0c;那就是省钱&#xff0c;而且DCloud也一直在推uni-cdn&#xff0c;我在项目中也使用七牛云的扩展存储&#xff0c;确实是省钱&#xff0c;如果你的项目使用到大量的图片后者音视频&#xff0c;这些的算计可以帮你省不少钱。下面就通过…

md是什么?如何打开md类型的文件?假如使用Typora打开,如何免费激活Typora?

md是什么&#xff1f;如何打开md类型的文件 前言一、md是什么简介常见打开md类型文件的方法使用文本编辑器使用专用Markdown编辑器使用在线Markdown编辑器在浏览器中安装插件打开 二、下载安装Typora三、免费激活Typora激活Typora关闭软件每次启动时的已激活弹窗去除软件左下角…