BUI:把 Blender 的界面做成多语言 UI 库
BUI 将 Blender 的用户界面代码移植为 C 核心的独立库,提供 Python、Rust、JavaScript/React 等绑定,并保留 Blender 的交互特性与损伤渲染。
把 Blender 的界面装进一个 C 核心
BUI 项目从 Blender 中取出了界面绘制、交互规则和外观,构建为一个独立的 UI 库。它的核心是一个用 C 写的小型运行时,项目称之为“kit”。kit 维护一棵包含所有控件的树,负责布局、鼠标键盘输入和绘制。绘制代码是 Blender 自身 widget 代码的 C 语言移植,交互规则也沿用 Blender 的做法。BUI 不等同于 Blender,也不依赖浏览器引擎;开发者无需安装 Blender,也不需要了解 Blender 即可使用。
在 kit 之上,BUI 提供了多组绑定。Python 侧可以运行未修改的 tkinter 程序,所有 tkinter 和 ttk 的公开 API 均被覆盖;Qt 风格的 Python 代码支持常用控件子集;Blender 组件方式提供 45 个原生控件和编辑器,包括面板、数字滑条、饼菜单、节点编辑器等,其中十个也可从 Rust 和 JavaScript 调用。Rust 绑定支持 HTML、CSS、Tailwind、rsx!/view! 标记以及 gpui / zopra 语法。JavaScript/React 通过 napi-rs 在 Node.js 或 Bun 上运行,使用 DOM 风格 API 或 JSX。另外还有 C 的 BUI_kit.h 接口,以及从 C++、C、Python、Rust 使用 Dear ImGui 的途径。
保留的交互细节
BUI 把 Blender 中一些形成肌肉记忆的交互带到了其他应用里。数字字段支持按住拖动时隐藏光标、连续调整数值,按住 Shift 可精细调整,Ctrl 可吸附。字段内可以输入数学表达式,例如 2*pi、min(4, 3)、round(1.7),表达式求值器来自 Blender。Ctrl+滚轮可步进数值,Ctrl+C / Ctrl+V 复制粘贴值,Backspace 重置。用户还能拖动扫过多个复选框来批量设置。菜单支持模糊搜索,输入“ad cu”可以定位“Add Cube”,拼写错误会被容错,最近选择排在前面。UI 编辑支持 Ctrl+Z / Ctrl+Shift+Z 撤销重做,文本字段内和 Tab 切换也遵循 Blender 行为。HSV 色轮、颜色渐变、曲线、树、列表、文本区、画布、节点编辑器和文件浏览器都已纳入,深色与浅色主题可在运行时切换。
损伤渲染与基准数据
BUI 的渲染路径围绕“损伤渲染”设计:空闲状态下 UI 消耗 0% CPU,悬停时只重绘被触碰的控件。GPU 渲染器为可选组件,Windows 上使用 Direct3D 11,Linux 上使用 OpenGL 3.3,其思路来自 Blender 的实例化控件绘制,并与 CPU 光栅化输出相同像素。文本使用 Blender 的界面字体 Inter,以 FreeType 渲染,GPU 路径下从字形轮廓绘制,备用方案为逐字形图集。图像方面,BUI 在 C 层提供一套解码器,覆盖 PNG、GIF、BMP、TGA、QOI、JPEG、WebP、HDR 和 SVG;解码在 UI 线程之外按绘制尺寸进行,JPEG 缩略图使用 DCT 缩放,默认内存缓存预算为 256 MiB。
项目给出的基准测试显示,每帧 CPU 使用比 gpui-fast 少 2–4 倍,内存占用更低,首帧时间约 5 毫秒。这些数字来自项目自述文件,并未提供外部验证。对有意评估 BUI 的团队,代码仓库中包含基准测试运行方法。