F3D 上手指南:一个用一条命令打开 40+ 种 3D 模型的轻量 3D 查看器
【免费下载链接】f3dFast and minimalist 3D viewer.项目地址: https://gitcode.com/GitHub_Trending/f3/f3d
F3D 是一款开源的轻量级 3D 查看器:从 glTF、STL、STEP 到点云和科学数据集,40 多种 3D 格式开箱即看,实时物理渲染、光线追踪都有,还完全可以用命令行驱动——一行命令就能把任意 3D 模型变成 PNG 截图,非常适合做模型质检、批量缩略图和自动化渲染流水线。它内置的 libf3d 库(C++17 API,另有 C、Python、Java、JavaScript 绑定)还能直接嵌进你自己的程序。
打开 3D 模型的麻烦:格式太多,工具太重
设想一下:同事发来一个 glb,客户又丢来一份 STEP 和一堆 STL,接着让你"顺手"给 200 个文件各出一张预览图。打开重量级建模软件?启动慢、只为瞄一眼模型有点大材小用;系统自带查看器?.step、.usda、.pcd根本不认识,更别提批量出图。
F3D 就是为这种场景做的:一个极小的可执行文件,打开文件几乎不用等,默认视角和光照都调好了,直接能看。它没有菜单、没有按钮——所有行为(相机、光照、分辨率、输出)都可以用命令行参数控制,这意味着它既能当桌面查看器,也能当"无头渲染器"塞进脚本里。对透明材质渲染、动画播放这些"看着要折腾半天"的事,它也都有现成的快捷键或参数。
F3D 安装步骤:Windows、Linux、macOS 装完就能用
三大平台的官方安装包都在 F3D 官网的下载页提供(页面同时列出各平台的安装方式),装完终端里就能直接敲f3d命令。如果发行版软件源里没有,从源码构建也很直接,依赖就是 CMake、VTK 9.4+ 和 C++20 编译器:
git clone https://gitcode.com/GitHub_Trending/f3/f3d && cd f3d cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --parallel几个平台小提醒:
- macOS:官方
.app包未签名,首次打开若提示"已损坏",执行xattr -cr /Applications/F3D.app即可(见 doc/user/14-LIMITATIONS_AND_TROUBLESHOOTING.md)。 - Windows:便携版未做代码签名,弹安全警告时点"仍要运行";如果从命令行执行
f3d.exe看不到任何输出,换用f3d-console.exe。 - Python 用户:库的绑定也走 pip,
pip install f3d就能在脚本里调用(注意 pip 版本暂不含光线追踪,需要请自行编译)。
装好之后,第一条命令就是:
f3d model.glb # 交互查看,拖拽文件进来也行 f3d model.glb --output=render.png # 不开窗口,直接渲染成图片打开后按 F1 会弹出快捷键速查表,Enter 重置相机、空格播放动画、G 切换地面网格,基本够日常使用了。
F3D 3D 格式支持一览表:40+ 格式与插件机制
F3D 把格式支持做成插件:每个插件只负责一类读取器,独立编译、按需启用。官方发布包会自动加载全部插件;如果你用包管理器装的,某些插件可能在单独的软件包里,需要用--load-plugins=<名称>显式加载。仓库里 plugins/ 目录可以直观看到这种切分方式。
| 类别 | 代表格式 | 负责插件 |
|---|---|---|
| 网格 | .stl.ply.obj.vtk/.vtp/.vtu/.vti/....pts | native |
| 场景(含灯光/相机/动画) | .gltf/.glb.usd/.usda/.usdc/.usdz.fbx.3ds.dae.off.abc.drc | native、usd、assimp、alembic、draco |
| CAD | .step/.stp.iges/.igs.brep.fcstd.ifc | occt、webifc |
| 点云 | .pcd.las/.laz.ptx.slpk,高斯泼溅.splat/.spz | pdal、native |
| 科学数据 | .vtkhdf.ex2/.exo.nc.vdb.dcm/.nrrd/.mhd | hdf、vdb、native |
完整的格式清单、动画与流式读取(从 stdin 边读边渲染)支持情况,见 doc/user/02-SUPPORTED_FORMATS.md。装完自己跑一条f3d --list-readers就能确认当前构建到底带了多少读取器——它按你的实际安装环境输出,最可靠。想从源码裁剪时,对应开关是 CMake 里的F3D_PLUGIN_BUILD_*变量(如F3D_PLUGIN_BUILD_OCCT),不开就不会引入相应依赖,这也是核心能保持轻量、装在小机器上的原因。
F3D 自带的默认 HDRI 环境贴图:没指定贴图时,物理渲染就靠它打光
F3D 渲染选项:物理渲染、光线追踪与抗锯齿的取舍
F3D 默认就是物理渲染(PBR,让材质按真实反射规律着色),不需要额外设置。在它之上,几个"增强开关"各有脾气:
| 效果 | 命令 | 适合什么 | 代价 |
|---|---|---|---|
| 光线追踪 | -r(--raytracing) | 高质量预览、反射与焦散展示 | 高,需编译时带 OSPRay;样本数用--raytracing-samples调 |
| 降噪 | -d | 低样本光线追踪下去掉噪点 | 中 |
| 抗锯齿 | -a fxaa/ssaa/taa | 消除模型边缘锯齿 | fxaa 最便宜;ssaa 质量最好但最贵;taa 不能用于离屏出图 |
| 环境光遮蔽 | -q | 凹陷处加暗,立体感更强 | 中 |
| HDRI 环境光 | -f(--hdri-ambient) | 让金属、玻璃看起来像真的 | 低 |
| 色调映射 | -t | 把 HDR 亮度正确压到屏幕 | 低 |
| 棋盘格贴图 | --checkerboard | 快速核对 UV 与几何完整性 | 低 |
一个实用组合:出"产品级"静帧就f3d model.glb -r --raytracing-samples=16 -d -t --output=shot.png,效果和速度之间自己取平衡;平时翻模型就别开-r,实时交互时物理渲染 +-a fxaa已经足够流畅。天空盒也可以整体虚化(--blur-coc控制模糊半径),适合做带氛围感的展示图。
用 F3D 批量导出渲染图:一条 shell 命令就够
命令行模式下--output会跳过交互窗口直接渲染成 PNG,配合--resolution=宽,高(注意是逗号分隔)、--no-background(透明底)和相机参数(如--camera-azimuth-angle、--camera-index选择文件内置相机),就能把出图流程完全参数化。批量任务写个循环即可:
mkdir -p renders for f in models/*.glb models/*.stl models/*.obj; do f3d "$f" --output="renders/$(basename "${f%.*}").png" \ --resolution=1600,900 --anti-aliasing=fxaa done几个自动化里常用的小技巧:
- 文件名支持模板变量,比如
--output=renders/{file}_{frame}.png里的{frame}可让动画逐帧导出; --watch会监听文件变化自动重载,改模型看效果很方便;--config指定配置文件后,同一批文件可以按后缀匹配不同的默认参数,省得每个参数都写一遍。
参数全集和说明在 doc/user/03-OPTIONS.md,离线渲染、视频导出(--output-video)也都覆盖到了。
把 libf3d 嵌进自己的程序:C++ 与 Python 极简示例
不想走命令行时,libf3d 的路径非常短:建一个 engine(true表示离屏窗口,不开任何界面),往 scene 里加文件,然后让 window 渲染出图。C++ 侧(完整工程见 examples/libf3d/cpp/render-image/):
#include <f3d/engine.h> int main() { f3d::engine::autoloadPlugins(); auto eng = f3d::engine::create(true); eng.getScene().add("model.glb"); f3d::image img = eng.getWindow().setSize(1280, 720).renderToImage(); img.save("out.png"); }Python 侧(pip install f3d之后,示例源自 examples/libf3d/python/render-image/):
import f3d eng = f3d.Engine.create(True) # 离屏窗口 eng.window.size = 1280, 720 eng.scene.add("model.glb") eng.window.render_to_image().save("out.png")选项、相机、动画、视频编码等能力在两种语言里是一一对应的,更多花样(Qt 集成、QML、交互应用、缩略图服务)可以直接抄 examples/libf3d/ 下的现成工程;绑定细节看 doc/libf3d/04-LANGUAGE_BINDINGS.md。
F3D 常见问题:格式打不开、渲染慢、内存高
格式打不开:先跑f3d --list-readers确认你这份构建到底带没带对应读取器。包管理器装的版本常把插件拆成独立软件包,装上后用--load-plugins=occt这类参数加载即可。另外两类"看起来打不开"其实有说法:.ply存高斯泼溅数据时,F3D 不会自动猜,需要加--point-sprites-size=1 --point-sprites=gaussian --coloring-mode=direct;DXF 只支持折线加 3D 面片,复杂图纸显示不全属于已知限制(详见 doc/user/14-LIMITATIONS_AND_TROUBLESHOOTING.md)。
渲染慢:光线追踪是头号嫌疑,先去掉-r对比一下;要保留就压样本--raytracing-samples=2并开-d降噪。抗锯齿从ssaa换到fxaa,离屏出图时直接不用 taa。
内存占用高:出缩略图场景可以加--max-size=1024(单位 MiB),超过阈值的大文件直接拒绝加载,批量跑图不怕被单个巨无霸拖垮。超大网格/体数据可以走流式读取(部分格式支持从 stdin 边读边渲染),加载过程加--loading-progress还能看到进度条。
顺带一提:如果模型看起来"到处是镂空、面片反了",多半是数据里有透明部分,按P(即-p)开启透明混合就能恢复。
下一步:文档、示例与贡献
F3D 的价值在于把"看一眼模型"这件事做到了几乎零成本,同时保留了一整套可以脚本化的渲染能力——从桌面双击到 CI 流水线,用的是同一套参数。想继续深入,入口都在这:用户文档从 doc/user/01-QUICKSTART.md 开始,库的 API 总览在 doc/libf3d/01-OVERVIEW.md,可运行的示例工程都在 examples/libf3d/。想参与项目的话,CONTRIBUTING.md 里写清了流程和代码风格,版本动态可以看 doc/CHANGELOG.md。
【免费下载链接】f3dFast and minimalist 3D viewer.项目地址: https://gitcode.com/GitHub_Trending/f3/f3d
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考