找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3956

积分

0

好友

579

主题
发表于 2 小时前 | 查看: 3| 回复: 0

今年的GDC(游戏开发者大会)上,Sucker Punch工作室的工具程序员Roland Munsil分享了一项关于《羊蹄山之魂》(Ghost of Yotei)编剧管线(Writing Pipeline)重大重构的实践。核心在于,他们为编剧开发了一套全新的编辑器,彻底改变了过往低效的协作模式。

GDC 2025上,Sucker Punch工作室的Roland Munsil正在演讲

《羊蹄山之魂》作为《对马岛之魂》(Ghost of Tsushima)的续作,延续了历史题材、开放世界和电影化叙事的风格,是一款叙事占比极重(Narrative Heavy)的游戏。这意味着从主线到支线,都充斥着大量对话。

《羊蹄山之魂》(PS5,2025)与《对马岛之魂》(PS4,2020)游戏封面对比

为了支撑这个庞大世界,其核心开发团队约150-200人,其中专门负责对话管线的包括约5名编剧(Writers)、12名任务设计师(Mission Designers)和2名制作人(Producers)。在四年开发周期中,团队产出了约15万字对白和5万字的文本素材。

然而,在开发前作《对马岛之魂》时,团队所使用的旧管线存在诸多痛点,效率低下。正是这些问题,直接催生了《羊蹄山之魂》的这次彻底变革。

旧管线的“三地分立”困局

《对马岛之魂》的旧管线是一种典型的“三方分立”(Three-way Split)模式,导致了大量重复劳动和数据脱节:

  1. 策划、程序、美术Perforce(版本控制软件)中工作,构建游戏本体。
  2. 编剧在 Google Docs 中撰写剧本。策划需要参照文档,在游戏引擎内手动搭建占位符对话(Placeholder Dialogue)。
  3. 制作人负责将 Google Docs 中的台词,手动录入内部的台词数据库(Line Database),并处理后续的录音、音频回收和本地化流程。

最关键也最耗时的一步在于:数据库最终会将处理好的音频、字幕和文本(附带ID)推送到 Perforce,但这些资源无法直接被游戏使用。策划必须在游戏引擎中,手动将每一条台词的ID挂载到对应的触发器上。据估算,仅这一项纯体力劳动,就至少浪费了设计师团队超过600个小时。

《对马岛之魂》时期旧管线的协作流程图

与此同时,编剧也感到与游戏开发过程严重脱节。他们无法在游戏环境中测试自己写的内容,任何微小的修改(哪怕只是调整两句台词的顺序)都需要请求策划帮忙,沟通成本极高。主编剧曾形容这种感觉就像是“把剧本隔着栅栏扔过去,让别人去处理”。

此外,Google Docs、内部台词数据库和 Perforce 这三个数据源由不同团队维护,极难保持同步。经常出现策划在游戏里删了台词,但文档和数据库未更新;或者编剧加了新台词,却没有进入录音流程。最糟糕的情况是,已经废弃的台词被送去录音和本地化,造成了资源和预算的浪费。

旧管线存在的问题列表,包括手动连接2万行代码、设计师超600小时工作等

新方案的核心:让编剧在实现文件中工作

在《对马岛之魂》项目结束后,团队决定推翻重来。新方案的核心思想简单而直接:淘汰外部数据库,让编剧直接在游戏内的实现文件(Implementation)中工作

理论上,这能一揽子解决所有问题:数据源统一、无需手动挂载台词、编剧能更深入理解引擎能力、团队重获工具的控制权。

新管线理想结构:所有角色直接与Perforce中的游戏文件交互

但要实现它,必须解决两个关键问题:

  1. 如何将原本数据库中的元数据(Metadata)存入 Perforce
  2. 如何让非技术背景的编剧,去编辑游戏的底层实现文件?

对于第一个问题,团队设计了一种自定义的文本格式,直接作为文件存储于 Perforce 中,并通过代码进行读写解析。格式示例如下:

/ENTRY: m_cv_gp_intro_perm_st-01-hero
voice_id=hero
src_txt="(Sighs) Who would have a permit?"
tbid_locked=true
writing_status="Writing Complete"
recording_status="Recorded"
vo_session="2023.8.30 A Aug VO"
projection="Spoken to Self"
vol_adjust_db=-1.00

第二个问题则更为复杂。这需要先理解游戏叙事系统的基础架构。其核心是“对话对象”(Conversation Object),它控制着角色动作、台词播放、口型同步等一系列行为。对话可以简单线性,也可以包含分支、玩家选择和各种控制指令。

例如,下面是一个简单的对话脚本,展示了其结构:

/NAME: conv_cv_am_market_infotsuri_intro
/CLS: CONVERSATION
/SET_MARK: START
/LINE: m_cv_am_market_infotsuri_intro-01_2 settler_info_tsuri ; If the raiders take over the fishery, we’ll all run out of food.

而下面这个更复杂的脚本则包含了条件分支(/BRANCH_IF)和玩家选择(/ADD_CHOICE):

/NAME: conv_cv_bp_escort_a_st
/CLS: CONVERSATION
/CHOICE_KIND: NoTimeout
/SET_MARK: START
/BRANCH_IF: play_count 0
/SET_EMOTION: voice=fr_settler_male emotion=Concerned
/LINE: m_cv_bp_escort_a_st-01 fr_settler_male ; Are you any good with horses? I need help reining in a pair of runaways.
/ELSE_BRANCH
/SET_EMOTION: voice=fr_settler_male emotion=Concerned
/LINE: m_cv_bp_escort_a_st-02 fr_settler_male ; I still need help getting my horses back. Should be quick money.
/JOIN_BRANCHES
/GO_TO_MARK: CHOICE
/SET_MARK: CHOICE
/ADD_CHOICE: go_to_mark=ACCEPT on_button=Yes text=u_cv_bp_escort_a_st_choice01 ; (Accept job)
/ADD_CHOICE: go_to_mark=REFUSE on_button=No text=u_cv_bp_escort_a_st_choice02 ; (Refuse job)

显然,不能让编剧直接面对这些“代码”。解决方案是构建一个友好的前端编辑工具。团队使用 Dear ImGui 开发了内部称为“Sucker Punch Writing Tool”的编辑器。

新工具的设计哲学与工作流

这个工具开发的核心设计理念是:既要对编剧友好,也要对其他所有使用者透明。

Sucker Punch 编剧工具主界面截图

对编剧的优化体现在:

  • 剧本化视图:工具将底层对话对象文件和数据库文件组合,以行业标准的剧本格式(Screenplay Format)呈现。编剧看到的是熟悉的角色名、对话和动作描述,而非冰冷的代码ID。
  • 符合习惯的操作:模仿Final Draft等专业剧本软件的全键盘操作逻辑,允许编剧在不同元素间快速切换,保持流畅的写作节奏。
  • 保留必要控制:并没有完全隐藏底层指令。诸如停顿(Delay)、动画触发器等元素,编剧在界面上仍可见、可编辑。

新的工作流如下:

  1. 任务设计师搭建任务框架,放入占位符对话。
  2. 编剧打开工具,直接修改台词,添加表演指导和动作描述。
  3. 编剧可在本地编译游戏,利用引擎的“Robo Voice”(TTS合成语音)功能试听对话节奏,并实时调整。
  4. 满意后,编剧可直接提交至 Perforce,无需设计师介入。
  5. 制作人安排录音,或由主编剧进行脚本审查(Script Review)。

这个过程也可以反向进行:编剧先创作脚本,设计师再来拆分和连接任务逻辑。无论如何,双方都无需再经历繁琐的来回交接。

远超预期的收益与创新功能

新管线部署后,不仅解决了旧有问题,还带来了许多意想不到的积极影响。

1. 赋能编剧
编剧不再与游戏开发过程隔离。他们可以自行测试、迭代、调整节奏和分支,对引擎的技术边界有了更清晰的认知,从而写出更贴合实现限制的剧本。

工具使编剧能够测试自己的工作、更好理解引擎功能、控制部分对话行为

2. 助力制作人
团队为制作人开发了强大的自定义查询界面(Custom Query Interface),支持复杂的搜索、筛选和批量操作。制作人还能一键导出为录音环节所需的各种格式文档(如演员脚本、导演脚本),节省了大量手工整理时间。

制作人使用的自定义查询界面,支持复杂筛选和批量操作

3. 共享工作空间(Shared Workspace)
最大的变化之一是所有人都在同一套文件上协作。策划能看到编剧的注释,编剧能看到底层的逻辑和Bug备注,音频团队可以直接在工具内调整参数。这形成了一个信息透明、互相促进的良性循环。

4. “粉色钻石”图标——最受欢迎的小功能
团队添加了一个“粉色钻石”(Pink Diamond)图标,用于直观显示某段对话是否在游戏任务中被正确引用(Hooked up)。对于策划,它能快速定位漏配的对话;对于编剧,没有钻石标记的对话可以安全删除。这个简单粗暴但极其有效的功能,成为了最受团队成员欢迎的特性之一。

“粉色钻石”功能可视化展示对话是否被游戏任务引用

5. UI文本长度预警
工具会读取游戏运行时记录的UI文本框极限长度数据,并在编剧编辑时给予视觉提示(灰色/红色胶囊图标),防止翻译后文本溢出,同时也帮助UI团队发现了过严的限制。

遇到的挑战

当然,重构过程也并非一帆风顺。

  • 复杂逻辑影响可读性:对于网状分支极其复杂的对话(如商人交互树),剧本视图会被大量的逻辑跳转充斥,不利于配音演员和本地化人员理解。团队有时不得不额外导出简化版的Word文档。
  • 合并冲突:所有人都在 Perforce 中修改同一套文件,导致合并冲突(Merge Conflicts)频发,在开发高峰期,解决冲突成为了一项繁重的工作。

共享工作空间带来的挑战:合并冲突

总结:自主工具的价值

回顾整个编剧管线重构,其成功关键在于将控制权掌握在自己手中。通过自研工具,团队能够快速响应内部工作流的独特需求,迭代出像“粉色钻石”、UI提示这样的“小而美”功能,直接解决实际痛点。

最终,这套新管线不仅节省了至少600小时的重复劳动,更重要的是彻底释放了编剧的创造力。他们从“隔墙扔脚本”的局外人,变成了能够深度参与、即时验证的创造者。正如团队首席编剧所言:“(这个编剧工具)绝对是我心目中本项目最成功的五大事项之一,它没有任何缺点。”

这个案例为面临类似大规模、多工种协作挑战的团队,特别是游戏开发和内容创作团队,提供了一个极具参考价值的范式:通过技术手段打通壁垒,构建统一、透明、高效的工作空间,是提升生产力的关键。如果你也在为类似的工作流问题烦恼,或许可以像Sucker Punch一样,从打造属于自己的“写作工具”开始思考。




上一篇:面对AI辅助编程的不确定性?比较Spec Kit、OpenSpec与GSD三大SDD框架
下一篇:C++17 string_view 避坑指南:临时对象、悬垂引用与安全用法全解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-12 05:33 , Processed in 0.620347 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表