【免费下载链接】ingetrazo
Traza como a mano: modelador 3D libre para arquitectura, ingeniería y diseño 3D. Linux, Windows y macOS. BIM e IFC con IngePresupuestos. Abre archivos .skp.
IngeTrazo 是一款免费开源的 3D 建模软件(类 SketchUp 的"手绘式"建模,支持建筑、工程与 3D 设计,可打开 .skp 文件并支持 BIM/IFC)。本文带你读懂它的性能优化路线图:通过持久空间索引和增量绘制两大核心方案,让百万面片的大模型编辑从"等几十秒"变成"秒级响应",目标整体提速 10 倍。
IngeTrazo 的 3D 视口:城市模型、组件库与工具栏一览
为什么大模型会"卡":4 个诚实的瓶颈诊断
优化之前先量清楚。IngeTrazo 团队在与参考建模软件的对比后,把"卡"的来源归为四点(详见 docs/performance-plan.md):
- 输入到画面的延迟,而非帧率本身——画面已经是 60 fps,但鼠标每次移动都要花 25–40 ms 做拾取和吸附,感知上就像"慢了一倍";
- 画得太多——没有视锥剔除时,相机在房子里也会把整栋楼都提交给显卡;
- 每帧固定开销——FBO+blit 与覆盖层绘制每帧都要付几毫秒;
- 实例几何被"烘焙"进世界坐标——5 个 23 万面片的绿篱 = 5 份顶点数据重复上传和绘制。
基线成绩(同一台笔记本实测):
| 指标 | 优化前 | 目标 |
|---|---|---|
| 绘制 28.3 万面片水池模型 | 4–22 ms | ≤ 16 ms(稳定 60 fps) |
| 绘制 5 个绿篱(120 万面片) | 37–40 ms | ≤ 20 ms |
| 悬停延迟(拾取+吸附) | 25–40 ms | ≤ 10 ms |
| 冷启动到首帧完整绘制 | ~11 s | 感知 ≤ 2 s |
| 缩放时的贴图上传卡顿 | ~100 ms | 无 ≥ 33 ms 的帧 |
优化路线图:先"少画",再"画得快" ⚡
路线图的四个原则:先测量再优化、少画比画快更重要、只在测量证明必要时才上原生代码、Python 内核是护城河而非瓶颈。具体分五个阶段:
- P0 帧遥测(已完成):GPU 计时查询 + 逐通道耗时(面/边/轮廓/覆盖层/blit),设置
INGETRAZO_PERF=1即可在性能日志中看到每帧frame gl=..ms ovl=..ms py=..ms lat=..ms,一眼定位最贵的三处开销; - P1 视锥剔除(已完成):每个图块(chunk)都有包围盒,提交前先用一次向量化的 NumPy 运算批量剔除视野外的图块——数百个图块只需微秒级;
- P2 GPU 实例化:组件不再逐份烘焙顶点,而是一个原型 VBO + 每实例一个 64 字节矩阵,5 个绿篱的显存和绘制成本 ≈ 1 个绿篱;
- P3 输入延迟:拾取加了图块预过滤后,模型拾取从41 ms 降到 1.8 ms(约 23 倍),悬停预算压缩到 10 ms 内;
- P4 异步化卡顿:磁盘图块缓存让绿篱重建从 8.5 s 降到0.47 s,贴图上传拆帧后彻底消灭 100 ms 卡顿;
- P5 原生叶子内核(仅按需):候选项包括三角化(mapbox_earcut)、射线拾取 BVH(Rust/pybind11)等,都作为稳定接口后面的"可插拔内核",绝不重写整个引擎。
同时明确"不做什么":不重写 C++/Rust 引擎、不换渲染库、暂不上 LOD/替身系统——先让剔除和实例化落地。
编辑提速的关键:持久空间索引 + 增量绘制 🎯
"看"已经快了(1000 个组的广场模型环绕仅约 8 ms/帧),真正慢的是编辑和超大模型。ROADMAP.md 给出的四个对症方案:
| 你做的事 | 现在(0.5.8) | 目标 |
|---|---|---|
| 在大组内绘制或编辑 | ~0.7 s/次 | < 0.15 s |
| 普通推/拉(Push/Pull) | 0.6–1.3 s | < 0.3 s |
| 地形上推/拉 | 16–24 s | 1–3 s(约 10 倍) |
| 打开百万面片模型 | 数十秒 + 数 GB 内存 | 降到零头 |
对应的 4 个技术点,正好回答了"为什么卡":
- 持久空间索引(persistent spatial index):每次编辑后,引擎原来会重新检查离编辑点很远的几何;引入持久的空间索引后,编辑只需要"看一眼"邻域,索引随模型常驻、增量维护;
- 真·增量绘制:编辑后只把变化的面重新传给显卡,而不是重建整个模型的图块;
- 局部朝向判定:"面的哪一侧是外侧"不再对整个实体重算,只在编辑点附近判断;
- 轻量组件:目前每个面是一个 Python 对象(约 3 KB),画房子没问题,但导入数百万面片的植物模型就太重——几何将保存为紧凑数组,直到你进入组件内部编辑才展开。
IngeTrazo 的 3D 地形功能,是"大面片模型提速"的典型测试场景
用数据说话:基准测试怎么跑、怎么看 📊
IngeTrazo 把性能当成"回归测试"来管,所有结论必须有前后对比数据:
- 发布前自动基准:
scripts/release_check.sh用同一个文档对比新旧版本,结果存为 benchmarks/results/0.5.8.json 等逐版本文件,慢漂移和内存泄漏会以趋势暴露。指标包括:绘制、环绕帧、VBO 重同步、图块冷重建、拾取索引冷构建、60 次悬停等(详见 benchmarks/README.md); - 手势级交互基准:scripts/bench_interaction.py 用真实 Qt 鼠标/滚轮/键盘事件驱动应用,把每个事件拆成 handler / paint / other / gpu 四段,报告 median、p95、以及超过 16.7 ms(一帧)和 33 ms(两帧)的事件占比——"占比"才是"卡顿"的准确定义;
- 可复现的测试模型:scripts/bench_models.py 构建同一座合成城市的 4 种规模(city-S 8 千面 → city-XL 107.5 万面),例如 benchmarks/interaction-baseline.json 中 33 万面的 city-L:环绕中位数 14.97 ms 很流畅,而 Line 工具悬停中位数 103 ms——这正是拾取/吸附优化的靶子;
- 防退化:性能 PR 必须附带"前后数据",几何引擎改动会被重点审查,"它会在真实模型上测量通过之前,不会合入"。
拾取索引的向量化改造有专门的回归测试守护(tests/test_pick_index.py:以前在 1.7 万面片建筑上每次鼠标移动要 1–2 s,现在批量走 NumPy 数组,并由视图端 views/viewport.py 中的_pick_index等方法承载)。
总结:对普通用户意味着什么
- 大模型编辑从"分钟级"走向"秒级":地形推/拉 16–24 s → 1–3 s,是标题里"10 倍"最直接的来源;
- 感知流畅度先于帧率:拾取 41→1.8 ms、悬停 ≤10 ms 的目标,解决的是"鼠标追不上画面"的问题;
- 大文件打开更快:0.5.8 已落地的新存储格式让大模型打开快 3 倍、体积降到 1/3,后续异步冷启动会把"可交互时间"压到 2 秒内;
- 每一步都有测量背书:
INGETRAZO_PERF=1+ 逐版本基准文件,性能承诺不是口号,而是可复核的数字。
如果你手里有"用起来慢"的真实模型,项目方欢迎分享用于基准——性能路线图的下一站,就是让这些数字继续往下掉。✅
【免费下载链接】ingetrazo
Traza como a mano: modelador 3D libre para arquitectura, ingeniería y diseño 3D. Linux, Windows y macOS. BIM e IFC con IngePresupuestos. Abre archivos .skp.
相关推荐
Trino地理空间连接优化:如何利用空间索引提升10倍查询性能
Trino地理空间连接优化:如何利用空间索引提升10倍查询性能 Trino作为开源分布式SQL查询引擎,在处理大规模地理空间数据时展现出强大的能力。本文将深入探
大数据OLAP数据分析Cloud Carbon Footprint性能优化:大规模云账单数据的处理策略
Cloud Carbon Footprint性能优化:大规模云账单数据的处理策略 Cloud Carbon Footprint是一款用于估算公共云使用所产生的能
Backtrader终极性能优化:四步实现百万K线3倍提速
Backtrader终极性能优化:四步实现百万K线3倍提速 你是否曾因量化回测运行缓慢而错失策略验证良机?当K线数据达到百万级别时,Backtrader框架往往
金融科技后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考