首页 资讯 财经 公益 彩店 奇闻 速递 体育 提点 资讯 综合 企业 市场

首页
你现在的位置:

杂谈——语涵编译器是什么?

2023-08-05 16:08:10    来源:哔哩哔哩    作者:

语涵编译器是一个辅助视觉小说制作的程序,阅读本文前需要您对视觉小说或者说文字类冒险游戏有所了解,推荐至少游玩过一篇作品。

您可能对该项目有如下问题:

为什么要做语涵编译器,这个项目要解决什么问题?


(资料图片仅供参考)

为什么要再创造一种剧本格式?

现在不是已经有从 Excel 生成 RenPy 剧本的程序了吗?和其他程序比,语涵编译器有什么区别?

语涵编译器的名称是怎么来的?

语涵编译器项目后续有什么计划?

希望本文能够解答这些疑问。

背景

视觉小说引擎是什么?

视觉小说引擎(如 RenPy)是视觉小说游戏可以共用的程序框架。打个比方,各个视觉小说游戏就像一辆满载的货车,这一辆货车拉的是木材,那一辆货车拉的是快递。虽然他们是不同的货车,但是如果我们把货物卸下,去掉各异的车身喷漆,可能会发现他们有相同的货车车型。货物就相对于各个游戏的剧本和素材,货车车型相对于引擎。就比如要增运货物时不需要从头设计货车,而是使用现成的货车,加上货物就可以运货,游戏制作者可以使用现有的游戏引擎,加上自己的素材和内容之后就可以做游戏。

引擎脚本是什么?什么是录入?

程序员通常使用“脚本”来指代“写给程序的代码片段”,不是写给人看的、写给另一个程序去执行的统统叫脚本。视觉小说引擎的脚本就是游戏制作者写给引擎的“说明书”,在游戏运行时,引擎会根据这个“说明书”里的内容将文字和素材呈现给玩家。

制作者准备素材和剧情时,这些内容的格式必须满足引擎的要求才能正常运行。引擎脚本也需要按照引擎的要求(或者说“语法”)来编写。这实际上对脚本编写者有编程能力上的要求。

由于剧情需要写到引擎脚本里面,我们把剧情从原来的剧本改写为引擎脚本的形式这一步叫做录入。

让我们进入正题——

1. 为什么要做语涵编译器?

2019年时,笔者游玩了国产 GalGame 《某一种青春》(以下简称《某青》),当时正好碰上心情低谷,深受感动,从此入坑国G。笔者找到了《某青》作者长水老师在奶牛关上写的制作历程的文章,注意到当时作者在将剧本录入到游戏引擎(面包引擎)时没有使用程序,而是完全手动,整个过程费时费力,所以计算机背景的笔者决定利用空闲和摸鱼时间做一个程序将这类剧本录入工作自动化。

语涵编译器是这个项目的第三版设计,第一版2019年10月做了一个月之后就做不下去了,第二版2019年11月开始,做到2021年年中时宣告失败。这个第三版是2021年10月、11月开始的,“语涵编译器”这个名字是2022年年底才起的。随着设计不断更迭、功能不断完善,想“顺带”解决的问题也越来越多,不过不管功能、设计怎么改,将剧本录入自动化这个初心一直在。

2. 这个项目解决什么问题?为什么值得去做?

语涵编译器项目有以下愿景:

一次编写、跨引擎执行:提供从剧本到不同引擎脚本的自动录入的实现。语涵编译器未来会支持更多的引擎,希望能在剧本编写上实现像编程那样的一次编写、多平台执行。

现代化工具链:通过语涵编译器这个步骤,(1)将更多能够切实提升生产力的功能带给制作者并普及,(2)对接现代化的开发流程或设施(如云文档等)

语涵编译器的架构是按照正统编译器的设计思路,支持第一个引擎时的开发工作远大于相同定位的剧情录入程序,但是支持第二个或更多引擎时,开发负担和用户体验远比同类剧情录入程序好。笔者相信,未来一定是需要一个统一的编译器架构来支持现在这些各异的引擎的,但是制作组和从业人员没有动机去脱离自己的生产环境,从一个第三视角去花大力气做只会给自己组零提升的程序,所以必须要像笔者这样不属于任何制作组的“闲人”去做这样一件事。我们希望完善后的语涵编译器能带给开发者更大的在引擎选择上自由度,甚至是将“剧本编写”和“引擎选择”完全脱钩,缩短工期和引擎变更成本。对引擎的编写者来说,对接一个通用的编译器也能方便测试,添加对自己引擎的支持后可以使用现有的剧本进行测试。

采用编译器的设计带来的一大优点是可以通过类似传统编译器中的分析、优化的方式接入其他功能,提高生产力,比如语法检查甚至是进阶的自动演出。这些分析、优化只要编写一次,之后不管新加了什么引擎的支持、怎么改剧本的表示形式,这些代码都不用改,直接可以复用。现阶段(2023-08-05)的长句分句是这样的功能的原型,证明语涵编译器的架构可以使用这种形式加功能。这将是一个支持将人们现有的制作经验转化为程序、帮助后人自动发现或改正已知问题的平台,减少重复踩坑。在项目开始之初,AIGC、大语言模型还没有如今的发展,当时规划的分析、优化主要是接入当时现有的文档语法检查服务等。今后语涵编译器也会尝试与这些人工智能的服务对接,方便这些技术在更多的制作组落地、投入使用。

在今年早些时候,语涵编译器还有另一篇专栏文章,不过当时为了避免“画大饼”的观感,“解决什么问题”部分写得相对保守;那些立项之初的目标已经越来越近,可以开始向前看了。

3. 为什么不采用纯文本输入、要重新摸索新的剧本形式?

对于以上两个主要愿景来说,采用文档、富文本输入(而不是像传统的编程那样使用纯文本)并不是最稳妥的决定,处理文档中的额外信息(比如格式、文字样式、内嵌资源等)和思考如何使用这些信息将会拖累语涵编译器的开发进度。最终决定采用文档是因为如下原因:

目前采用纯文本输入的视觉小说剧本形式(用程序员的话说就是“语法”)已经多如牛毛,一个新的形式会加剧这个形式碎片化的进程,并且可能没有足够的竞争力与现有的形式(语法)竞争。但是,现有的格式无法满足语涵编译器对易用性和可拓展性的要求。

Word 文档是门槛最低的剧本输入形式,部分开发者仍然使用 Word 文档来编写剧本。如果想有一个相对统一的剧本形式的话,降低输入剧本形式的门槛是必须的。

云文档产品已经成熟,选择文档形式输入可以与这些现有产品对接,未来可以实现全流程上云。这对设备受限(比如只有手机)或者有多人协同需求的制作者来说可能会具有吸引力。

因此,语涵编译器会尝试摸索一个基于 Word 文档及其类似格式文档的、相对统一的剧本形式(语法)。语涵编译器不以追求统一的剧本形式为主(这有可能是无法做到的,可能每个作者都想有自己的一些小改动),但是当这些剧本能被(可能加了插件的)语涵编译器读取、进入这个体系之后,我们希望能对这些剧本使用语涵编译器内的所有功能,包括对所有支持的引擎的输出。

4. 和其他自动录入程序相比,语涵编译器有哪些区别?

项目过程中,我们已知有其他自动录入程序可以读取 (1) 纯文本的剧本,或是 (2) Excel 表格中的剧本。这些程序只生成特定引擎的剧本。在书写这篇文章时,语涵编译器只支持 RenPy,发言信息可以导出至 GameCreator 但是功能不像 RenPy 那样全。如果不考虑引擎的支持情况、假设用户不需要多引擎支持的话:

如果剧本可以写成 Excel 表格的形式,那么现有的读取 Excel 的自动录入程序能比语涵编译器更好地满足用户需要,这类程序可以以较低的开发成本充分挖掘所支持引擎的特性。与此类程序相比,除了剧本格式外(语涵编译器可以通过插件读取这些剧本),语涵编译器可以提供分析、优化功能(在原型中已经做的可能也用处有限),代价是更高的开发成本。

如果剧本是纯文本,除了发言信息外不包含(或是很少包含)演出细节,目前语涵编译器所支持的剧本形式应该能够胜过已有的读取纯文本的录入程序。

我们相信,随着语涵编译器的不断完善和拓展,一定会有将这些剧本录入程序统一的时候。届时,通过插件自行定制语涵编译器一定会完胜于从头写一个录入程序。

5. 语涵编译器和看板娘苏语涵的名字是怎么来的?

先聊英文名(preppipe)怎么来的,中文名是2022年底才以此定的。

2019年10月开坑时使用的名字是 "supp",意为 "small universal preprocessor pipeline"(又小又通用的预处理器流水线),一个充满了狂气的名字,上来就要干一票大的,然后做了一个月就凉了。第二版设计把"又小又通用"给去掉了,名字改成了"preppipe" (preprocessor pipeline)设计保守了很多,但是目标功能和第一版没太大变化,路线错误,所以到2021年又推倒重来。但是2020年的时候已经把域名给买好了,域名都买好了结果坑没填完,就觉得很丢人,所以第三版程序还是沿用第二版的名字"preppipe"。"preppipe"是对第一、二版大致设计的合适描述,但是其实与第三版的设计关系不大了。。。

名字“语涵”中,“语”和“预处理器”的“预”读音相近,又能代表剧本中的“语言”意象。“涵”是笔者觉得既提到了“流水线”、“管线”(因为有个词叫“涵道”)又能与前一个字组合得很好的字。看板娘的“苏”姓就从之前去掉的"su"变来。

6. 除了完善程序和文档外,语涵编译器项目有什么后续的计划?

原型发布后,除了修理 Bug、编写文档外,笔者希望能够找到足够多的感兴趣、有经验的制作者,一同商讨解决以下问题:

(对用户) 如果需要有个适合 Word 文档的、相对统一的视觉小说剧本表示方式(程序员口中的“语法”),这个表示方式应该是什么样的。语涵编译器项目希望能摸索出这个合适的表示方式。

对程序员) 如果需要给适用于视觉小说的编译器定义 IR (编译器概念,Intermediate Representation),这个 IR 应该是什么样的。这个 IR 设计得合理与否将决定语涵编译器在支持更多的引擎、更多的分析优化功能时能否完美支持其功能,能否高效、便于调试。目前语涵编译器的经验只表明 “目前的设计可以做 IR”,而不是“目前的 IR 设计已经是最好的”,如果能在早期发现潜在问题并进行更正的话,后续增加功能时能够更有效率。

有足够的人愿意花时间思考这些问题后,我会将目前语涵编译器的剧本表示方式(语法)和 IR 设计整理成文并收集反馈。在这之前,我也会从各种渠道收集一些剧本,找愿意提供帮助的人参与设计。如果您对这感兴趣的话,欢迎来尝试语涵编译器并提供自己的见解!

一些追加说明

语涵编译器永远会开源免费,感谢免费国G《某一种青春》那年给我带来的感动。

如果有计算机专业的同学大四要做毕业设计可以自选项目,如果做与语涵编译器有关的项目的话,笔者非常愿意提供支持!

编辑:qysb005

标签:

中国企业新闻网版权与免责声明:
1、中国企业新闻网所有内容的版权均属于作者或页面内声明的版权人。未经中国企业新闻网的书面许可, 任何其他个人或组织均不得以任何形式将河南企业网的各项资源转载、复制、编辑或发布使用于其他任何场合;不得把其中任何形式的资讯散发给其他方, 不可把这些信息在其他的服务器或文档中作镜像复制或保存;不得修改或再使用中国企业新闻网的任何资源。若有意转载本站信息资料, 必需取得中国企业新闻网书面授权。否则将追究其法律责任。
2、已经本网授权使用作品的,应在授权范围内使用,并注明“来源:中国企业新闻网”。违反上述声明者,本网将追究其相关法律责任。
3、凡本网注明“来源:XXX(非中国企业新闻网)”的作品,均转载自其它媒体,转载目的在于传递更多信息, 并不代表本网赞同其观点和对其真实性负责。本网转载其他媒体之稿件,意在为公众提供免费服务。如稿件版权单位或个人不想在本网发布, 可与本网联系,本网视情况可立即将其撤除。
图片欣赏
频道推荐
内容推荐
最近更新