← 返回博客列表

一个引擎,四个入口

SDK、OBS 插件、剪辑插件跑的是同一套 C++ 引擎。这件事省下什么,又欠下什么。

发布于 2026年10月21日

引擎架构

同一套美颜效果有四种出口:通过 SDK 装进你的 App、作为 OBS 滤镜、作为剪辑时间线上的插件。它们不是四个碰巧长得像的实现,而是同一个引擎开了四扇门。

共用引擎省下了什么

显而易见的是修一次到处生效。侧脸检测出问题,补丁只打一遍,OBS 插件、SDK、桌面插件在各自的下一个版本里都拿到它。

不那么显而易见的是”一致”。预设只是一组数字,而这组数字在每个入口里的含义相同:

  • iOS、Android、Web、Windows、macOS、Linux 跑的是同一条效果链。
  • 同一个 LUT,在预览里和在导出文件里是同一个样子。
  • 客户在 Demo 里验证过的行为,在他们正式包里也成立。

欠下的是什么

一个引擎意味着一套约束,而各个入口在几乎所有约束上都不一致。

GPU 这一层

每个宿主带来自己的 device、自己的纹理格式、以及”渲染循环归谁管”的自己的理解。OBS 驱动帧;剪辑宿主可能递过来一张不是我们创建的 device 上的纹理;移动端 App 在我们无法控制的线程和 swapchain 上运行。所以引擎不直接调用任何图形接口,中间隔一层由各宿主实现的 RHI。

构建矩阵

共用引擎的前提是它在各处编译、并且行为一致。这才是真正的成本:每次改动都要在六个平台上活下来才算完成,而最慢的那个平台决定节奏。

只在一个入口复现的 bug,在证明不是之前仍然算引擎 bug。这个默认假设很贵,也是四个产品没有各自跑偏的原因。

最早做错的这件事

早期宿主特有的行为渗进了引擎:为某个平台的纹理格式写的特例、只有 OBS 路径会走到的兜底。单看每一条都合理,合起来却意味着”在 OBS 里测过”和”在 SDK 里测过”验证的是两段不同的代码。清掉它们不是为了好看,而是为了让”修一次就是修一次”重新成立。

想确认哪个入口适合你的产品,定价页列了各自的包含项,各平台的接入方式在开发文档。