为什么高斯点要用Morton码排序?揭秘splat-transform的空间局部性技巧
【免费下载链接】splat-transformCLI tool and library for 3D Gaussian splat processing and conversion项目地址https://gitcode.com/gh_mirrors/sp/splat-transform点击查看免费下载如果你处理过大型 3D 高斯 splat 文件大概率遇到过这样的现象同样是几千万个点有的文件加载快、压缩比高、LOD 切换流畅有的却怎么都不行。splat-transform 给出了一个朴素却极其有效的答案——用Morton 码排序Z-order 曲线重排高斯点换取更好的空间局部性。本文带你搞清楚三件事Morton 码到底是什么、为什么它能让高斯点云听话以及 splat-transform 是如何在一条命令行里完成这套排序的。什么是 Morton 码把三维空间折叠成一条线想象你有一张 4×4×4 的三维网格想把里面的格子排成一条一维的线。最笨的办法是沿 x 轴排完再换行但这样相邻格子经常跳到很远的地方。Morton 码的做法很巧妙把三个坐标的二进制位交错排列。比如坐标(x, y, z)的位序x2 x1 x0/y2 y1 y0/z2 z1 z0交错后得到z2 y2 x2 z1 y1 x1 z0 y0 x0。空间上相邻的点其 Morton 码数值差通常很小数值接近的点空间上也往往挨着。这样三维的邻居关系就被折叠进了一维的先后关系。在 splat-transform 源码中这个编码逻辑见 morton-order.ts先将每根轴归一化到 0~102310 位再用位运算把三位坐标交织成一个 30 位的 Morton 码。为什么高斯点需要按 Morton 码排序训练出来的原始 splat 文件比如 PLY里的点顺序往往由训练过程决定本质上接近随机。这带来几个实际问题场景随机顺序的痛点Morton 排序后顺序读盘/读内存缓存命中差随机跳跃访问相邻索引 相邻空间位置预读命中率高分块chunk存储一个块可能散落在全场景每个块只覆盖一小块区域按需加载更精准体块/八叉树构建块归属分散树构建低效同父节点的块在码序上天然聚在一起简化decimate读到的行碎片化空间相干性差每个块的源行形成少数连续段读放大显著下降一句话排序不改变任何点的属性只改变它们的存放顺序却能让后续所有按空间范围取数据的操作都变成顺序访问。这就是所谓空间局部性。一条命令完成 Morton 码排序splat-transform 的 CLI 把这件事包装成了一个 action-m, --morton-order。splat-transform input.ply -m output.ply输入可以是任意已支持格式.ply、.spz、.sog等-m会在流水线中重排所有高斯点排序基于点当前的世界坐标若之前做过-t/-r/-s变换记得按先变换、后排序的顺序书写处理逻辑见 process.ts先生成 0..N-1 的索引数组调用sortMortonOrder原地排好序再用permuteRowsInPlace一次性置换整张数据表无需逐行拷贝。数据表层面的适配器在 morton-order.ts只需 x/y/z 三列即可工作。源码拆解30 位码 基数排序 递归细化splat-transform 的排序核心在 morton-order.ts设计上有三个值得注意的点自适应量化先扫一遍点云求出包围盒min/max再按各轴实际跨度把坐标映射到 10 位整数保证分辨率用满而不是被固定网格浪费。LSD 基数排序30 位 Morton 码拆成三段做三轮各 10 位的稳定基数排序前缀和定桶 稳定散列复杂度 O(n)避免逐对比较的 O(n log n) 开销。稳定排序保证码相同的点保持原始相对顺序。递归细化这是精髓1024×1024×1024 的网格装不下千万级点同一码下可能挤着几百个点。实现里会找出所有码相同且超过 256 个的桶对这个子区间重新求包围盒、重新量化、再排一遍——相当于对拥挤区域自动放大地图直到点被真正分开。见 morton-order.ts。同一套内核还提供列式与交错式两个入口sortMortonColumns/sortMortonInterleaved分别服务数据表列存储和 GPU 纹理行缓冲避免无谓的数据重排拷贝。Morton 码在 splat-transform 里的隐藏用途-m只是显式入口Morton 排序其实贯穿了多条输出管线Compressed PLY 默认就排好序写出压缩 PLY 前会先做一次 Morton 排序让每个压缩 chunk 只覆盖场景的一小块区域。见 write-compressed-ply.ts。LOD 分块靠它定位生成 Streamed SOGlod-meta.json时按空间 extent 划分 chunk 的 partition/bounds 流程全部依赖 Morton 有序的数据。见 write-lod.ts。稀疏八叉树的骨架碰撞体输出的.voxel.json把体块坐标编码成 51 位 Morton 码每轴 17 位支持 13 万块/轴码序即八叉树的紧凑遍历顺序。见 morton.ts 与 sparse-octree.ts。简化管线的体检报告decimate 的分区模块会统计每个块的源行形成多少连续段coherence runs——Morton 有序的文件每个块只有少数几段而训练顺序文件几乎一行一段。此时它会建议你做一次--morton-order预排序。见 partition.ts。小结回到开头的问题为什么高斯点要用 Morton 码排序因为空间局部性是图形数据的第一生产力。一次 O(n) 的重排就能让后续读盘、压缩、LOD 分块、八叉树构建、几何简化全部受益而点的颜色、形状、位置一个都没变。如果你的 splat 文件体积偏大、加载偏慢不妨先试一条命令splat-transform input.ply -m output.ply再配合--stats观察各列统计感受空间有序带来的变化。更多用法可查阅 README.md 中的 Actions 与 CLI Options 章节。赞分享【免费下载链接】splat-transformCLI tool and library for 3D Gaussian splat processing and conversion项目地址https://gitcode.com/gh_mirrors/sp/splat-transform点击查看免费下载相关推荐为什么你的Android应用性能不佳android-tips-tricks调试技巧揭秘为什么你的Android应用性能不佳android tips tricks调试技巧揭秘 你是否经常遇到Android应用卡顿、耗电快、内存泄漏等问题 这文档教程移动开发为什么高级开发都需要Coder-Kung-Fu揭秘系统性能优化的底层密码为什么高级开发都需要Coder Kung Fu揭秘系统性能优化的底层密码 在当今高速发展的技术时代 系统性能优化 已成为每个高级开发工程师必须掌握的核心技能技术博客操作系统文档Intel ME安全威胁揭秘为什么你需要me_cleaner在当今数字时代隐私和安全已成为每个用户最关心的问题。你可能不知道的是几乎所有2006年后生产的Intel主板都内置了一个名为Intel MEManagem网络安全嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kanidm OAuth2 Refresh Token 设计解析:NIB 机制、重放检测与复制一致性

Kanidm OAuth2 Refresh Token 设计解析:NIB 机制、重放检测与复制一致性

后端认证鉴权安全 【免费下载链接】kanidm Kanidm: A simple, secure, and fast identity management platform 项目地址: https://gitcode.com/gh_mirrors/ka/kanidm 点击查看 免费下载 本文围绕 Kanidm 身份管理平台中 OAuth2 刷新令牌(refresh token…

2026/10/12 20:08:22 阅读更多 →
Cats Free Monad 实战指南:用嵌入式 DSL 构建可组合、可重定向的纯函数式程序

Cats Free Monad 实战指南:用嵌入式 DSL 构建可组合、可重定向的纯函数式程序

后端 【免费下载链接】cats Lightweight, modular, and extensible library for functional programming. 项目地址: https://gitcode.com/gh_mirrors/ca/cats 点击查看 免费下载 本文是 Cats 函数式编程库中 cats-free 模块的完整技术指南。自由单子(F…

2026/10/12 20:08:21 阅读更多 →
可靠性数据统计方法与R语言实战:从配套数据集到Weibull建模

可靠性数据统计方法与R语言实战:从配套数据集到Weibull建模

简介:《Statistical Methods for Reliability Data》配套数据集面向可靠性建模学习者和从业者,是这本经典著作的实操补充。包内围绕寿命分布、生存分析、故障率函数、可靠性增长、多组件系统可靠性、寿命试验设计与统计推断等核心知识点,提供…

2026/10/12 20:07:21 阅读更多 →

最新新闻

CRF序列标注原理与实战:从全局最优解到工业级部署

CRF序列标注原理与实战:从全局最优解到工业级部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:01:48 阅读更多 →
Kibana汉化配置全解析:i18n.locale设置与版本兼容性指南

Kibana汉化配置全解析:i18n.locale设置与版本兼容性指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:01:48 阅读更多 →
FusionAccess虚拟桌面发放流程详解:从模板到用户登录的全链路拆解

FusionAccess虚拟桌面发放流程详解:从模板到用户登录的全链路拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:01:48 阅读更多 →
Hibernate No identifier异常:实体缺少@Id的原因排查与修复全指南

Hibernate No identifier异常:实体缺少@Id的原因排查与修复全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:01:48 阅读更多 →
进口变压器替换厂家怎么选?参数对照与CE认证全流程指南

进口变压器替换厂家怎么选?参数对照与CE认证全流程指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:01:48 阅读更多 →
claude-mem:为Claude Code打造自动跨会话记忆层

claude-mem:为Claude Code打造自动跨会话记忆层

最近一段时间一直在折腾一件事:让Claude Code在隔了一个晚上之后还能记得我昨天说过“这个模块用Python重写”以及“测试文件统一丢到tests目录”。中间试过各种“外置记忆”方案,最后真正解决问题的,是一个叫claude-mem的开源项目。claude-m…

2026/10/13 1:00:47 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →