- 博客(14)
- 收藏
- 关注
原创 Cesium 基于 Framebuffer 的几种 pick 方式
虽然说 颜色编码 在GPU拾取中并不是最好的方案, 但Cesium本身从Real-Time Rendering角度架构设计, 对 颜色编码 做了很多优化方案: 诸如: Scissor Test, Culling Volumn等 弥补 颜色编码在超大场景中可能频繁Draw Call带来的通信成本。这里提到了坐标转换, 本人向提一嘴之前写的一个library, 类似于 babylon 的 gizmo, 有兴趣的话可以研究一下, 点个star。本篇来聊聊Cesium应用的两种拾取方式: 颜色编码, 深度缓存。
2025-03-12 14:03:28
911
原创 GPU 拾取的多重奇幻之旅:颜色编码、G-Buffer 与光线追踪的全景探索
在交互式三维应用中,每当用户在屏幕上点击或触摸时,系统需要判断这点对应的是哪一个对象。这一过程若完全依赖 CPU 进行几何计算,不仅复杂且效率低下。GPU 拾取的思路正是利用 GPU 的高速并行运算,通过离屏渲染生成一张“秘密地图”,并在地图中标记出每个对象的唯一身份标识(Pick ID)。用户点击后,只需从这张地图中读取特定像素的信息,即可还原出被点击对象的身份。
2025-03-06 17:01:00
871
原创 探索 Framebuffer 的奇妙世界:GPU 后台的神秘画布
想象一下,当你在纸上绘制一幅精美的画作时,这幅作品不会立刻展现在世人面前,而是先存放在一个专门的画架上,等待最后的润色和展示。Framebuffer 就扮演着这样的角色——它将渲染的“草图”保存在 GPU 的内存中,再经过后期处理后,呈现出震撼人心的画面。注: 执行 bindFramebuffer 之后 GPU并不会将 framebuffer 里面的数据渲染到屏幕上, 但是会把当前framebuffer的数据存储到内存里, 只有在执行 Draw Call 之后才会将当前 帧缓存区的数据 渲染到屏幕上。
2025-02-21 09:45:01
1113
原创 Cesium 渲染优化 之 OctEncode
前两篇说的批量渲染和本篇说的顶点压缩都是为了优化三维渲染, 提升三维实时渲染的效率, 而两者的侧重点不一样: 批量渲染是为了减少 CPU 与 GPU之间的沟通次数, 而顶点压缩的最大收益点在于减轻内存带宽的压力。是由八个全等的三角形构成的多面体, 数学上,一个常见的描述方法是定义满足 ∣x∣+∣y∣+∣z∣ <= 1的所有点构成一个凸体,而其边界(表面)则正好是满足 ∣x∣+∣y∣+∣z∣ = 1。尤其是在处理大量的三维数据时,如法线、光照方向等,如何有效压缩这些向量信息,成为了一个长期面临的挑战。
2025-02-17 18:16:22
966
原创 Cesium 渲染优化之批量渲染 - Cesium3DTileBatchTable(Cesium3DTileset部分)
3DTile 与前两张说的 Primitive 与 Model 部分不同了, BatchTable 与 BatchTexture都会使用到, 且不同类型的 3DTile 使用了不同的 数据处理方案。在Cesium渲染引擎中, Primitive, Model 及 3DTile 作为主要的数据载体, 他们的应用场景不同, 因此他们对属性数据的管理与渲染都不太相同。这三个类处理的相关瓦片内容没有维护相关瓦片的”属性数据“。复合瓦片(可以包含多个不同的 3D Tiles 类型)这三个是如何处理瓦片属性数据的。
2025-02-13 16:28:54
696
原创 Cesium 渲染优化 - BatchTexture(Model 部分)
而 Model 部分的 BatchTexture 则更专注于管理颜色、显示和拾取等样式数据,针对 glTF 模型的需求进行了专门优化。在批量渲染时的数据的处理上, 虽然 Primitive 和 Model 的核心都是将 属性纹理化, 但还是有一些不同的, 一个Primitive只会使用一张Texture去管理相关的实例属性, 但是 一个 gltf/glb 可能需要多张Texture去管理结构化数据。本节就到这里, 下节会着重说说 3dtiles的 batchTable处理。来看一下处理属性数据的相关代码。
2025-02-12 18:02:47
340
原创 Cesium 渲染优化之批量渲染 - BatchTable (Primitive 部分)
在大规模 3D 数据渲染中,为了在批量合并几何体的同时支持对单个图元(feature)的交互与动态样式控制,3D Tiles 提出了 BatchTable 机制。
2025-02-11 18:32:24
826
原创 Cesium 渲染优化之批量渲染 - Primitive
为GPU分割 像 position 的 双精度(Double)的属性数据, 在着色器可以看到 类似 position3DHigh, position3DLow这样的字眼。理论上看. 合并几何数据不支持 动态场景的 渲染, 但是Cesium在渲染管道上加了 BatchTable 这个东西。当然上面表格中列出的 合并几何数据的一些劣势, Cesium也采取相关优化方案避免掉了, 后面会一一介绍。将所有实例的几何数据(position, normal, st等)全都转换为世界坐标。法线 及 纹理坐标 来减轻。
2025-01-22 19:05:34
1106
原创 GPU三维渲染优化 - 批量渲染
在三维渲染中,批量渲染(Batch Rendering)指的是将原本分散的多个渲染对象或绘制命令合并在一起,在一次或更少的绘制调用(Draw Calls)中完成渲染。这样做的核心目的是减少 CPU 和 GPU 之间的往返指令(即 Draw Call 数量),从而提高渲染效率
2025-01-21 13:51:37
2111
原创 Cesium 渲染优化 - Tipsify算法
在 3D 渲染过程中,顶点数据通常会被频繁访问,如何有效地利用 GPU 的顶点缓存(Vertex Cache)来减少对同一顶点的重复处理,是提升渲染效率的一个重要手段。针对这一需求,业界普遍采用顶点缓存优化算法来重新排序网格的索引数据(Index Buffer),从而尽量让相邻的三角形复用最近使用过的顶点。Tipsify便是此类算法中的一种常见实现。
2025-01-17 18:25:37
1956
原创 GPU三维渲染优化 - 顶点缓存
在渲染一个高精度 3D 模型时,顶点着色器可能需要重复处理数百万个顶点。如果 GPU 能记住已经处理过的顶点结果,就能大幅减少计算量。这种记忆机制就是顶点缓存。
2025-01-16 18:51:34
979
原创 深入理解顶点索引(Vertex Indexing)
在现代图形渲染管线中,顶点索引(Vertex Indexing)是一项能显著减少重复顶点数据、提升渲染效率的关键技术。它通过在独立的索引缓冲中记录每个图元所需的顶点,实现“用更少的数据绘制更多的网格”。
2025-01-14 16:31:30
741
2
原创 cesium二次开发-cesium-transformer
再想了解里面的使用方法时, 发现这个不是开源的... 原本想花钱买来他的license研究研究源码学习学习, 但官方告知, 目前 还 不对中国开放...因为之前是开发Babylon.js和Three.js的, 所以多少会接触编辑三维实体的业务,但它俩都有相应的工具gizmo和transformer.在接触了cesium之后, 也遇到了类似需要编辑primitive的场景, 所以就在网上找有没有类似的工具.): 元素的包围球, 此为必填项, 需要计算大小坐标的相对位置.): 添加元素的容器.
2025-01-13 17:55:03
1121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人