
一个全景制作软件最容易走的路是“加功能”:客户要热点,加;要分组,加;要步进漫游,再加。功能越堆越多,代码却还停在最早的骨架上——直到某一天,改一个导出逻辑,热点功能跟着坏;加一个新格式,老项目的工程文件打不开。这时候继续加功能,就是往漏水的船上装货。
老框架的三个隐性成本
第一是耦合。场景、热点、皮肤、导出、授权这几件事在代码里互相伸手:导出模块要读皮肤配置,皮肤配置又依赖授权状态,授权一变,导出就出问题。表面看是“小 bug”,实际是边界没画清。
第二是工程文件不自描述。早期工程文件只是把内存里的东西序列化出去,字段含义靠代码约定。软件一升级,字段含义变了,老项目就悬在半空——用户不敢升级,我们不敢改字段。
第三是离线优先没落实。软件是买断 + 离线的,但一些逻辑默认“网是通的”:素材路径写成绝对路径、模板去远端拉、授权状态在线校验。搬到客户内网或者断网现场,就变成“软件没问题,环境有问题”。
重构定下的三条硬规矩
1. 离线优先,不是“断网也能开”,而是“断网才完整”
所有能离线跑的环节全部本地化:模板、素材、皮肤、导出全部走本地资源,网络只在授权激活时出现一次。素材引用改成相对工程目录的相对路径,工程目录整体拷走就能在另一台机器打开——这也是企业版敢承诺内网部署的底气。
2. 工程文件自描述
工程文件里带上结构版本号和字段说明,新版本软件能识别旧工程并做兼容转换,而不是靠“记得别改字段”。这一条带来的直接好处是:升级不再等于赌运气,用户敢升、我们敢改。

3. 模块边界写清楚,谁也别越界
把系统切成几块各自负责的模块:内核只管数据结构和工程读写,编辑器只管交互,渲染只管出图,导出只消费最终结构,授权只回答“这个功能能不能用”。导出不再关心授权怎么算,授权也不再插手业务逻辑。改导出不会碰坏热点,加功能也不需要动内核。
重构之后,用户能感知到什么
重构是内部工程,但结果一定是外部可感知的,否则重构就没意义。具体到 VR精灵:
- 大项目不再莫名崩。场景数量、热点数量上去以后,内存和对象生命周期有明确归属,不会因为某个模块没释放把整个工程拖死。
- 工程可迁移、可交付。工程目录拷走即走,客户方要源文件时,给的就是一份完整可复现的目录,而不是一堆“缺素材”的压缩包。
- 升级不再有心理负担。版本迭代只影响对应模块,老工程照常打开。
- 新能力有地方接。高斯泼溅、百亿像素这类新形态,是挂到既有结构上的新模块,而不是又一层补丁。
一句实话
重构不产生新功能,短期内看是“什么都没加”。它的价值在于把后面三年的迭代成本压下来——不做这一步,功能越多越走不动;做了这一步,才谈得上持续加东西而不塌。
对使用者来说,判断一个软件有没有认真重构过,不看宣传语,看三件事:老工程还能不能打开、换台电脑还能不能干活、升级敢不敢点。这三件事都成立,重构就是真做了。