图片转 3D 模型:三条路线怎么选
一张图片或一组照片怎样变成 3D 模型?本文讲清单图 AI 生成、摄影测量网格、高斯泼溅三条路线各自能做什么、不能做什么,并按用途给出选择建议和拍摄要点。
图片转 3D 模型:同一个说法,三件不同的事
搜索「图片转 3D 模型」「照片转 3D 模型」,会看到一批表面相似、实际差别很大的工具。有的只要一张图,很快就给出模型;有的需要几十张照片,还要等上一阵。它们的结果不能互相替代。
目前主要有三条路线:
- 一张图片进,生成的模型出。AI 模型根据一张 2D 图片猜出完整形状。
- 多张照片进,实测的网格出。这就是摄影测量。
- 多张照片或一段视频进,逼真的可浏览场景出。这就是高斯泼溅。
第一条路线会把相机没拍到的部分「编」出来,后两条只还原真正拍到的内容。选哪条取决于你拿结果做什么,所以下面先逐条说明,再按用途归类。
路线 A:用生成式 AI 把 2D 图片变成 3D 模型
多数人想到「2D 图片转 3D 模型」时,想的就是单图工具:给一张照片、草图或概念图,训练好的模型输出一个带贴图的 3D 形状。
举几个例子,内容只按它们自己页面上的说法:
- TripoSR 由 Tripo AI 和 Stability AI 共同开发,是一个从单张图片快速前馈重建 3D 的开放模型,以 MIT 许可证发布。
- TRELLIS 发布在微软的 GitHub 组织下,接受文字或图片提示,可以输出辐射场、3D 高斯和网格。它的说明文档要求至少 16 GB 显存的 NVIDIA 显卡,并说明代码只在 Linux 上测试过。
- 腾讯的 Hunyuan3D 2.0 分两步:先根据参考图生成不带贴图的网格,再给它绘制贴图。它使用自己的社区许可证,其中排除了部分地区,使用前请先阅读。
- Meshy 是在浏览器里使用的服务。它的图片转 3D 页面接受 PNG、JPG 或 WebP 图片,可下载 FBX、OBJ、GLB、USDZ、STL、BLEND、3MF 和 DXF 格式。
关键是要明白一张图里有什么、没有什么。一张照片只拍到一面,背面、底部和被挡住的地方,都是模型按「同类物体通常长什么样」补出来的。做游戏道具、把概念图里的角色立体化、临时占位,这样完全可以;但它不是你手里那件实物的记录。花瓶背面有个缺口或落款,单图工具是不会知道的。
路线 B:用摄影测量把照片变成 3D 网格
摄影测量使用同一真实对象的多张互相重叠的照片。软件在不同照片里找到相同的点,算出每张照片的拍摄位置,再根据这些几何关系建出表面。输出通常是带贴图的网格,也就是一堆三角面加一张包在上面的颜色图。
几个可选项,同样只写它们自己页面上的说法:
- Meshroom 是基于 AliceVision 框架的免费开源 3D 重建软件。
- Epic Games 的 RealityScan 自称摄影测量方案,可用图片和激光扫描数据生成 3D 模型。其许可页面写明:过去 12 个月收入低于 100 万美元的个人和小型企业,以及学生和教育机构可免费使用。
- Agisoft Metashape 是商业软件,提供演示模式和 30 天试用许可。
- Apple 的 Object Capture 是 macOS 上的摄影测量 API,供开发者在其上开发应用。Apple 说明其输出包含几何网格和材质贴图。
网格来自真实照片,所以反映的是真实物体,瑕疵也在内。代价是功夫:要拍得够全,处理也要时间。反光、透明和没有纹理的表面很难处理,因为软件找不到稳定的点来匹配。
路线 C:用照片或视频生成高斯泼溅场景
高斯泼溅的开头和摄影测量一样:大量互相重叠的视角,加上一步求解相机位置。区别在后面建出来的东西。它不建三角面,而是用数量极大的、小而柔和的彩色团块(3D 高斯)来表示场景,并不断调整它们,直到能还原原始照片。这个方法出自 2023 年 SIGGRAPH 论文《3D Gaussian Splatting for Real-Time Radiance Field Rendering》(作者 Kerbl、Kopanas、Leimkühler、Drettakis),论文说明它从相机标定过程中得到的稀疏点出发,并能实时渲染新视角。
你得到的是一个可以环绕、穿行的高斯场景,观感接近照片,包括网格不擅长的柔软内容,比如枝叶、毛发和细碎的细节。你得不到的是表面。高斯场景不是网格,不经过额外转换,既不能送去 3D 打印,也不能直接放进需要三角面的流程。
和摄影测量一样,它只呈现你拍到的内容。没拍到的地方会发糊或是空的。
怎么选:从最后要用在哪里倒推
最快的选法是先不管手里有什么素材,只看结果要用在哪里。
- 从画稿或想法做游戏、动画素材:路线 A。你要的是干净、可编辑的网格,不必和某件实物一致。生成后通常还要在 3D 软件里修整。
- 把实物 3D 打印出来:路线 B。切片软件是把 3D 模型转成打印指令的,所以你需要网格,而且希望它和实物一致。如果不在乎精确度,比如打印一个摆件,能导出 STL 或 3MF 的单图工具也可以。
- 逼真地展示一件实物、一个房间或一处地方:路线 C。如果目的是让别人能环顾一个真实存在的东西,更在意看起来像不像,而不是编辑它的表面,高斯泼溅很合适。
- 给 AR 或商品页做一件实物的复制品,需要标准网格文件:路线 B。
- 测量或出工程图:以上轻量工具都不合适。那属于测绘和 CAD 的范围,需要尺度参照和专门的软件。
如果只有一张照片、也没法再拍,那就只能走路线 A。只是要对自己和观众讲清楚:模型有一部分是猜的。
把照片变成 3D 模型:路线 B 和 C 的拍摄要点
两条多照片路线依赖同一件事:软件必须能在许多视角里认出相同的点。大多数失败都出在拍摄上,而不是软件上。COLMAP 文档给出的建议对两条路线都适用:
- 避开没有纹理的对象和背景,比如白墙或空桌面。场景本身很素的话,可以在周围放些有纹理的东西,比如海报。
- 各张照片的光照条件尽量一致,避免光滑表面上的高光反射。
- 对象的每个部分至少要出现在三张照片里。重叠多一些更稳妥。
- 要移动相机。不要站在原地只转动镜头,软件需要不同的拍摄位置才能算出深度。
- 避免明暗反差过大的场景,比如逆光拍摄,或隔着门窗拍。
- 照片不是越多越好,超过一定数量后主要是拖慢处理。
由此可以养成几个习惯:先绕对象走一整圈,再从高一些的位置俯拍一圈。保持对象不动,别让人和宠物入镜。柔和均匀的光线(比如阴天)比直射阳光好拍。拍视频时走慢一点,保证画面清晰。
数量上可以参考 Apple 对 Object Capture 的建议:单个物体通常 20 到 200 张近距离照片就够。
常见误解
对图片转 3D 工具的失望,大多来自下面几个预期。
- 「一张照片就能得到准确的复制品。」一张照片够做出一个看着合理的模型,准确则需要每一面都拍到。
- 「高斯场景是能拿去打印的 3D 模型。」它是呈现场景的一种方式,不是表面。打印需要网格。
- 「网格会和照片一样真实。」网格是实心的、可编辑的,但细薄、毛茸茸或半透明的东西常常不对劲。
- 「换个更好的软件就能补救拍得不好的素材。」路线 B 和 C 都补不回没拍到的部分。只有生成式工具会填补空缺,而它填的是猜测。
SplatLoom 适合哪里
SplatLoom 只属于路线 C。它是一款桌面应用,支持 Mac(Apple Silicon,macOS 15 及以上)和 Windows 10/11,把互相重叠的照片(通常 30 到 150 张)或一段短视频在你自己的电脑上生成高斯泼溅场景,不上传,不需要账号。选好素材,点「生成」,用裁剪和选择工具整理结果,然后导出高斯 PLY、PNG 静帧、MP4 环绕视频或可离线打开的独立 HTML 查看器。价格为一次性 19.90 美元。
它不能从单张图片生成,也不导出网格,所以不适合 3D 打印或做游戏素材,这些请用摄影测量软件或单图生成工具。它也有这条路线常见的局限:反光、透明和运动中的对象很难处理,效果取决于拍摄覆盖得够不够。如果你要的是一件实物或一处地方的逼真、便于分享的展示,可以试试它。
常见问题
一张图片能做出准确的 3D 模型吗?
能做出看着合理的模型。单图工具会按同类物体通常的样子生成相机没拍到的那几面,所以看不见的部分是编出来的。想忠实还原一件实物,需要绕着它拍一圈照片,再用摄影测量或高斯泼溅工具处理。
要 3D 打印,该走哪条路线?
摄影测量,因为它产出的网格贴合真实物体。高斯泼溅不产出网格。如果只是打印摆件、不在乎形状精确,能导出 STL 或 3MF 的单图生成工具也够用。
把照片变成 3D 模型需要多少张照片?
看对象而定。Apple 对 Object Capture 的建议是单个物体 20 到 200 张近距离照片,SplatLoom 通常使用 30 到 150 张互相重叠的照片。覆盖和重叠比数量更重要:每个部分至少要出现在三张照片里。
高斯场景算 3D 模型吗?
它是可以在其中移动观看的 3D 表示,但不是网格。它由大量彩色小高斯组成,而不是三角面,所以看起来逼真,也所以不能直接进切片软件或大多数建模流程。
参考资料:https://github.com/VAST-AI-Research/TripoSR · https://github.com/microsoft/TRELLIS · https://github.com/Tencent-Hunyuan/Hunyuan3D-2 · https://github.com/Tencent-Hunyuan/Hunyuan3D-2/blob/main/LICENSE · https://www.meshy.ai/features/image-to-3d · https://meshroom-manual.readthedocs.io/en/latest/ · https://www.realityscan.com/en-US · https://www.realityscan.com/en-US/license · https://www.agisoft.com/features/standard-edition/ · https://developer.apple.com/videos/play/wwdc2021/10076/ · https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/ · https://colmap.github.io/tutorial.html · https://github.com/prusa3d/PrusaSlicer
在 SplatLoom 中试试