VDB: High-Resolution Sparse Volumes with Dynamic Topology


在这里插入图片描述

  VDB是面向面向数值变化以及数值拓扑关系变换的动态性开发的数据存储结构,作为B+树和Octree等方法的拓展在随机访问,顺序访问,模板访问、可拓展性等方面具有更好的性能。

VDB的特征

  • 动态性
  • 高效存储
  • 通用拓扑
  • 快速的随机和顺序访问
  • 支持空间的无限拓展
  • 高效的分层算法
  • 自适应的分辨率
  • 简洁
  • 可配置
  • 支持将数据保存到内存中

VDB的数据结构

直接访问位掩码

  直接访问位掩码应用在VDB的不同层节点中,对局部拓扑关系做了紧凑,高效的表达。

叶节点

   L o g 2 X Log_2X Log2X为在编译时确定的节点尺寸。 m L e a f D A T mLeafDAT mLeafDAT对元素进行存储, m V a l u e M a s k mValueMask mValueMask为直接访问位掩码。由于通过多种方式压缩存储, m L e a f D A T . V a l u e mLeafDAT.Value mLeafDAT.Value的长度是动态的。 m F l a g s mFlags mFlags存储了缓冲区大小,开关以及叶节点在整个地图表示中的位置。

中间节点

在这里插入图片描述

  可以看很多实现细节和叶节点相同。使用 m V a l u e M a s k mValueMask mValueMask m C h i l d M a s k mChildMask mChildMask来对节点内部和叶节点进行编码。不同级别的中间节点可以具有不同的分支结构。

根节点

在这里插入图片描述

  和前两个节点不同,根节点具有动态可调的大小。
  基于树的结构 m R o o t M a p mRootMap mRootMap和基于列表的结构 m I n t e r n a l D A T mInternalDAT mInternalDAT相比,具有较低的随机访问速度。为了解决这个问题, m A c c e s s o r s mAccessors mAccessors利用缓存的指针来进行从下往上的遍历从而加速遍历访问的成本, m B a c k g r o u n d mBackground mBackground记录了访问没有存储的位置时的返回值。

节点的组合方法

  文章首先给出来平铺网格(所有叶节点直接属于同一个中间节点)哈希表,N叉树三种表达方式的缺点。平铺网格不适用于分层算法,不论是叶节点规模过大或者过多叶节点都会影响不同访问算法的性能。哈希表由于数据的稀疏存储,重复的哈希索引具有较差的随机访问性能。N叉树有着不确定的随机访问性能,在树很深时效果很差。
  综合上述表示方法的有点,VDB具有如下设计理念:1)树具有恰当的深度和分支树。2)高速的随机访问。3)自适应的分支数和分辨率。4)较低的存储代价。5)加速索引的缓存机制。
  为了能够在实际应用中满足上述要求,VDB设计来一些典型的,能够满足大部分需求的结构。VDB基于宽而矮的B+树。一般深三到四层,分支树从上往下递减。

优化方法

  采用了很多实现细节来优化性能,包括使用模板元编程来避免虚函数继承,将数据规模控制在2的幂便于SSE优化。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值