Romergo 开发手记

从无休止的修改到小小片场:我如何学习生成故事

上一篇文章中,我谈到过:从原文到一部真正能玩的视觉小说,中间需要一整套流程——保留事实、准备角色、组装场景,再看看玩家实际看到的是什么。

从那以后,流程变得更复杂了。并不是因为我想给 AI 多起几个响亮的名字,而是在制作故事时反复遇到一个恼人的问题:想把一张好图变得更好一点,却很容易把它改坏。

先让它修一只手,再把少掉的衣服补回来,然后去掉多出来的一条腿——对,真有这种事。改来改去,才发现脸变了,阴影越来越重,原本干净的背景也变得浑浊。

你在修局部,整张图却一直跟着变。到了某个时刻,只能承认:五个版本之前更好。

修好图片,不等于保住图片

最让我头疼的是变化会不断累积。从图片 A 改出 B,再从 B 改出 C,然后继续尝试。每个新版本都继承了想要的修改,也继承了之前悄悄发生的变化。

在我的生成结果中,脸会“融化”,阴影变厚,表面出现瑕疵,细节逐渐消失。并不是每一张新图都一定更差,但漫长的修改链给偏离原貌留下了太多机会。

对人来说,“其他都不变,只把头转一下”很明确。我们认得角色,理解房间,也默认没人再次提到外套时,外套仍然穿在身上。和生成器合作,这些事却需要明确约定。它可以画出一张很像样的新图,同时破坏我们觉得理所当然的东西。

所以,是的,很大一部分工作就是学习怎么跟 AI 商量。有时真的要解释:我们还是不需要第三条腿。

GENERAL:一个可以回去的起点

我的第一个办法是 GENERAL:经过认可的角色、地点或物件基准图。尽量中性,固定特征清晰可见,少带某一段剧情才有的细节。

有了它,我就尽量避免“上次修改 → 下次修改”的无限链条。新的状态从 GENERAL 出发,再结合此刻应该发生的事情生成。

修改场景时,任务可以同时参考三样东西:

上一版本仍然只是辅助参考,不应该带着积累的错误,悄悄变成新的标准。

![GENERAL 示意图:新状态回到同一张已认可的基准图,而不是继承所有前序版本。上一帧仍是辅助参考。](../assets/ai-film-crew-general.webp)

*这是方法示意,并非真实生成结果的对比。GENERAL 提供稳定参照,但不保证每个像素都保持不变。*

没有什么魔法能让生成器不犯错。但现在,“画面开始走样时该回到哪里”有了明确答案。修改的目标也变了:让同一个角色出现在需要的场景里,而不只是继续编辑最近一次失败的结果。

Render Eye:世界里有什么,镜头里看得到什么

下一个问题更细。假设角色资料写得很完整:外套、手套、腰带、靴子。但这一镜只拍到腰部以上,一只手藏在背后,门还挡住了部分身体。

哪些细节应该画出来?哪些应该被遮住?怎么区分手套确实被挡住了,还是生成器忘了画?

这就是我开发 Render Eye 的原因。它有两个任务:生成前准备要求,生成后检查图片。

首先,它查阅故事设定集,获取保存的角色、地点、物件及其状态描述,再对照场面调度:镜头在哪里、正在发生什么、玩家的注意力应该落在哪里。

每个重要细节都要有明确判断:完全可见、部分可见、被其他物件遮挡,或在画面之外。手放在背后时,手套没有从世界里消失,只是这个角度看不到。

![Render Eye 在生成前后:世界描述和场面调度确定可见与隐藏的要求;完成的图片再按同一组要求检查。](../assets/ai-film-crew-render-eye.webp)

这样得到的是具体的画面要求,不只是“画一个走廊里的主角”,而是“这个主角、这套衣服、这个角度,并且这些细节可见”。理解场景所必需的物件,不能意外藏到画面边缘之外。

生成后,Render Eye 回到同一份要求,检查服装、物件和角色位置,另外检查人体结构与画面瑕疵。发现错误或无法确定时,就退回修改。不能接受一件消失的外套,再改写角色描述,仿佛外套从未存在。

也不能赋予系统想象中的超能力。看图的是 AI,它同样会漏看。强制检查让流程更严谨,却不会把视觉模型变成绝不出错的观察者。

导演:为什么需要这一镜?

衣服画对了,脸保住了,角色也都站对了,场景仍然可能很平淡。

故事不仅是画面里有哪些东西。玩家什么时候注意到它们,哪句话先说,反应留多长时间,当时能听到什么,都很重要。

因此,我单独设立了导演这个角色。它紧贴场景工作:安排对白与反应的顺序、角色出场、灯光、色彩、音乐、音效、停顿和界面构图。原文始终是工作材料,而不是开头读过一次就放下的简介。

举个虚构的句子:“门后传来了脚步声。”

可以直接展示一扇门,把文字放上去。也可以先让音乐淡出,留下轻微的室内环境声,让脚步从画外响起,停留在角色的反应上,然后才继续对话。如果原文还没揭晓来者是谁,镜头就不该热心地提前把人拍出来。

同一条走廊,在推理故事里可能让人注意线索,在浪漫场景里则可能承载见面的期待。这些差别来自具体决定,不是往要求里加上“氛围:恐怖”就能做到。

导演把这些决定保存在场面调度计划中,并区分原作事实与演绎:冷光可以是艺术选择,凭空增加一个追踪者却改变了事件。

游戏还有一个难点:玩家阅读速度不同。台词前的停顿,与等待玩家读完台词,是两回事。不能设计一个漂亮的四秒段落,却把需要六秒才能读完的人的文字关掉。

我也不想把平淡场景换成机械堆砌的特效。有时最合适的就是静止画面、简单切镜,以及没有音乐。手法需要理由。

质量总监:我们想要的效果实现了吗?

“导演”和“质量总监”听起来有些相近,但我把职责分开。导演负责安排场景,质量总监负责检查结果。

它将原文和调度计划,与游戏里实际呈现的内容对照,检查完整段落,而不只是单张漂亮图片。

界面是否挡住了重要物件?换一句对白时,正在听的人是不是消失了?是否还播放着上一个房间的音乐?手机上的构图有没有散掉?灯光、停顿和声音原本想传达的情绪,真的传达出来了吗?

有用的检查也得知道问题应该送回哪一环。图片内部有瑕疵,就回到生成;角色图本身没问题,只是屏幕上的位置不对,就调整组装;声音响早了,不必重画背景。

![职责分工:原文指导导演;Render Eye 准备并检查画面;场景完成组装后,在游戏中接受质量检查,反馈送回对应环节。](../assets/ai-film-crew-roles.webp)

*图中的 Director 是负责场面调度的导演,QA 是质量总监。示意图经过简化:组装和最终检查时仍然参考原文。返回箭头表示修改受影响的环节,不一定是全部重来。*

人也不该守在生成器旁边

即使图片出得更快,仍有另一种成本:不断切换注意力。打开聊天,看一张图,留个意见,回去做事。几分钟后再来一遍。

所以我还在做 GENERAL 批量处理。彼此独立的基准图可以提前准备,再成组交给人看。一起查看,更容易发现不一致,也可以给整组或单张留下意见。

随后只重做需要修改的图片。不能因为一次失败,就把已认可的结果丢掉。依赖关系仍然重要:如果下一张图依赖尚未认可的基准,就得先解决那个基准。

这不是承诺让生成器本身快上几倍。对我来说,更重要的是让人少一点为了审下一张图而中断手头的事。

一支小型摄制组,代替一条巨大的指令

说到底,我确实是在组建一支小型 AI 摄制组:有明确的世界设定、基准图、场面调度、画面制作、组装与质量检查。

这些是智能体工作流程中的职责,并不自动意味着每个角色都已经由一个持续运行的独立 AI 承担。重要的是保存决定、不在事后偷偷更改要求,并且每次修改都能说清楚哪些内容需要重新检查。

新的环节已经有工具和可保存的计划支撑。接下来,要放到真正的长篇章节中检验:它们能在多大程度上持续保住角色、氛围,以及创作者的注意力?

我的最终目标,是带来一本大部头,选一个章节,再逐步把它做成可以玩的任务。随时可以停下来检查结果,修正重要的地方,然后从上次停下的位置继续。

生成故事比“写好提示词”难得多。不过现在,我能把难处拆成具体任务。有时需要稳定参照,有时需要认真阅读,有时需要台词前的一段安静。而有时,仍然需要一个人看着场景说:“不,这里我不信。”

返回开发博客