PLY 是 3D 扫描、摄影测量和科研流程最常用的格式,因为它能存的不只是几何,还有颜色、法线、置信度等逐顶点属性。PLY 查看器可以直接在浏览器里打开这些文件,不用装软件,也不用把敏感数据上传到别人的服务器。本文讲清 PLY 是什么、ASCII 和二进制两种编码怎么选、怎样在本地打开一个 PLY,以及在扫描数据上 PLY 和 OBJ、STL 各自适合做什么。
PLY 是什么
PLY 是 Polygon File Format(多边形文件格式)的缩写,因为最早由斯坦福大学的团队提出,也叫 Stanford Triangle Format。它是为 3D 扫描的输出设计的:扫描得到的表面带着丰富的逐点数据,不仅有每个点的位置,还有它的颜色、法线方向,有时还有扫描仪对这个点有多大把握。正是这种灵活性,让 PLY 成了扫描和摄影测量结果的默认归宿。
点云和网格用的是同一种格式
同一个容器可以装两种不同的东西,分清你手上是哪一种很重要:
- 点云是一组顶点,常常有几百万个,顶点之间没有面相连。它是激光扫描或密集摄影测量的原始输出。
- 网格在这些顶点之上加了面,把顶点连成一个表面。摄影测量软件通常直接输出网格,有时带顶点颜色;扫描仪可能先给你点云,重建之后再给网格。
PLY 文件开头有一段很短的文件头,列出文件包含哪些元素(顶点,以及可能有的面),以及每种元素带哪些属性。
ASCII 还是二进制
PLY 有两种编码,这是真正的取舍,不是个人偏好。
| 编码 | 存储方式 | 适合 | 缺点 |
|---|---|---|---|
| ASCII | 纯文本,一行一个顶点 | 调试、脚本、小文件、肉眼比对 | 大扫描文件体积大、解析慢 |
| 二进制(小端/大端) | 紧凑字节,字段相同 | 正式扫描、数百万点、分享 | 人眼无法阅读,必须用查看器 |
需要人或脚本去读文件时用 ASCII,比如检查文件头、确认属性名是否符合预期,或者生成一个很小的测试文件。扫描很大时用二进制:同样的点占用空间小得多,加载也更快。如果有人发给你一个 400 MB 的扫描仪 PLY,它几乎一定是二进制,用文本编辑器打开只会看到乱码。
为什么要用查看器打开 PLY
扫描文件很大,而且常常是私密的。把客户的扫描上传到某个不知名的网站,既慢又没有必要。本地浏览器查看器从你的硬盘读取文件,用 WebGL 在你自己的电脑上绘制,文件不会离开你的设备。所以扫描一到手就可以马上检查:文件是否完整、表面有没有破洞、密度够不够,然后再决定要不要花时间打开更重的软件。
怎样在浏览器里打开 PLY
下面这个查看器就是 PLY 查看器页面上的同一个工具,可以直接在这里照着步骤操作。
- **使用上方的查看器。**文件在本地解析,不会上传。
- **从设备里选择
.ply文件。**读取完成后,模型会出现在深色舞台上。 - **旋转、缩放、平移。**拖动旋转,滚轮或双指捏合缩放,右键拖动或双指拖动平移。用"重置视角"重新取景,或进入全屏仔细查看。
- **看表面。**查看器用纯灰色材质绘制 PLY 网格,所以请判断形状、破洞和拓扑,而不是颜色。
- 需要时再转换。浏览器 3D 转换器可以把 GLB、glTF、OBJ、STL 和 VOX 写成二进制 PLY,也可以把 PLY 转成 glTF、OBJ 或 STL。
关于这个查看器,有两点要说清楚。第一,它用纯灰色材质显示 PLY 网格,不会显示文件里存的逐顶点颜色;这些颜色仍然在数据里,转换时也可以保留,只是预览里看不到。第二,它绘制的是表面;只有点、没有面的纯点云文件,可能无法像完整网格那样显示成表面。如果扫描看起来是空的,先确认文件里是否真的有面。
扫描数据用 PLY、OBJ 还是 STL
这三种格式有重叠,但在扫描和重建工作里并不能互相替代。
| 特性 | PLY | OBJ | STL |
|---|---|---|---|
| 顶点颜色 | 有,逐顶点 | 没有标准字段 | 没有 |
| 额外逐顶点属性 | 有,在文件头声明 | 没有 | 没有 |
| 面 | 可选 | 有 | 有(只有三角形) |
| 材质/贴图 | 没有 | 通过单独的 .mtl | 没有 |
| ASCII 形式 | 有 | 始终是 | 有,或二进制 |
| 二进制形式 | 有 | 没有 | 有 |
| 典型用途 | 扫描、摄影测量、科研 | 几何交换 | 3D 打印、CAD |
| 单位 | 未规定 | 未规定 | 未规定 |
怎么读这张表
只要逐点数据重要,PLY 就是更好的选择。它能带颜色和任意属性(比如扫描置信度),同时有文本和紧凑二进制两种形式,同一种格式从玩具示例到正式扫描都能用。OBJ 是带材质附属文件的几何载体,但没有存放逐顶点颜色或自定义属性的位置,也没有二进制形式。STL 最窄:只有三角形,没有颜色,没有属性,而且和另外两种一样没有单位,只有相对尺寸有意义。要连同颜色一起归档扫描,PLY 是保留扫描仪输出最完整的格式。
处理扫描文件的实用建议
- **能看文件头就先看文件头。**在 ASCII PLY 里,
element vertex和element face两行能马上告诉你这是点云还是网格,以及有多大。 - 预览里不会有颜色。浏览器 3D 查看器看的是形状,不是外观。需要确认顶点颜色时,请用能渲染颜色的软件打开。
- **大的二进制扫描需要性能够的电脑。**查看器本身不限制文件大小,但内存和显卡决定了能加载多大的文件,手机打开密集点云会很吃力。
- **大范围分享前先减面。**扫描网格往往比交付需要的密得多,减面之后文件更容易传递。
- **记住没有单位。**把扫描交给别人时,说明一个单位代表多长,否则对方只能猜。
如果你的目标是让角色动起来,而不是检查扫描,那 PLY 就处在流程的错误一端,这类工作属于动作格式。我们自己的工具可以把一句文字描述变成可预览、可导出为 FBX 或 JSON 的 3D 人体动作草稿,这和查看扫描几何是两件事。
常见问题
PLY 是点云格式还是网格格式?
两者都可以。同一个容器既能只存顶点(点云),也能存顶点加面(网格)。文件头会声明包含哪些元素,读一下就知道。
ASCII PLY 和二进制 PLY 有什么区别?
ASCII PLY 用纯文本存数据,能直接阅读,但大扫描会更大、更慢。二进制 PLY 把同样的字段压成字节,体积小得多、加载更快,但人眼读不了。调试和小文件用 ASCII,正式扫描用二进制。
用查看器时我的 PLY 文件会被上传吗?
不会。浏览器从你的设备读取文件,用 JavaScript 在本地解析,不会发送到服务器。关闭或刷新页面后,模型就被丢弃。
为什么我的 PLY 模型显示成灰色、没有颜色?
查看器用纯灰色材质绘制 PLY 网格,不显示文件里存的逐顶点颜色。颜色可能仍在数据里,转换时也能保留,只是预览里不显示。
浏览器查看器能打开没有面的 PLY 点云吗?
它是网格渲染器,所以只有点、没有面的文件可能不会显示成表面。如果扫描看起来是空的,请确认 PLY 里是否包含面元素。先转换成网格,查看器就有东西可画了。
扫描数据用 PLY 比 OBJ 或 STL 更好吗?
对扫描来说,PLY 通常最合适,因为它能带逐顶点颜色和额外的逐顶点属性,还同时提供 ASCII 和二进制两种形式。OBJ 带几何和材质附属文件,但没有逐顶点颜色;STL 只有三角形。