首頁 資訊 財經 公益 彩店 奇聞 速遞 體育 提點 資訊 綜合 企業 市場

          首頁
          你現在的位置:

          雜談——語涵編譯器是什么?

          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(非中國企業新聞網)”的作品,均轉載自其它媒體,轉載目的在于傳遞更多信息, 并不代表本網贊同其觀點和對其真實性負責。本網轉載其他媒體之稿件,意在為公眾提供免費服務。如稿件版權單位或個人不想在本網發布, 可與本網聯系,本網視情況可立即將其撤除。
          圖片欣賞
          頻道推薦
          內容推薦
          最近更新