電話那頭的沉默持續(xù)了足足有十幾秒,久到我?guī)缀跻詾樾盘?hào)已經(jīng)斷了。我能想象得到,趙干學(xué)長(zhǎng)此刻的表情,一定是混雜著驚疑、警惕,還有一絲被現(xiàn)實(shí)磨平后深藏心底的、不愿再被輕易點(diǎn)燃的火焰。
“陳陽(yáng),”他終于再次開(kāi)口,聲音里沒(méi)了剛才的驚喜,多了一份沉重和沙啞,“你……是不是在天極出事了?”
“嗯,今天剛辦完離職?!蔽覜](méi)有隱瞞。
“是因?yàn)槟莻€(gè)……‘動(dòng)態(tài)進(jìn)化AI’?”他顯然也關(guān)注著行業(yè)新聞。
“是我做的。”我言簡(jiǎn)意賅。
又是一陣沉默。這次,我能聽(tīng)到他那邊傳來(lái)粗重的呼吸聲,像是在做一個(gè)艱難的決定。
“你在哪?我們見(jiàn)一面。”趙干說(shuō)道,“我工作室的地址,你知道吧?就是大學(xué)城后面的那個(gè)‘夢(mèng)想家’孵化園,C棟302。名字起得挺好聽(tīng),其實(shí)就是個(gè)破倉(cāng)庫(kù)。”
他的自嘲讓我緊繃的神經(jīng)稍微放松了一些。我說(shuō):“我半小時(shí)后到?!?/p>
掛了電話,我沒(méi)有絲毫耽擱,立刻在路邊掃了一輛共享單車,朝著記憶中的方向騎去。雨已經(jīng)停了,被沖刷過(guò)的城市在夜色中顯得格外清冷,路燈將我的影子拉得很長(zhǎng),又被我飛速地甩在身后。
“夢(mèng)想家”孵化園,果然和趙干說(shuō)的一樣,就是個(gè)由舊工廠改造的創(chuàng)意園區(qū)。C棟更是偏僻,墻壁上還留著上個(gè)世紀(jì)的標(biāo)語(yǔ),斑駁陸離。我找到302,門(mén)上掛著一塊小小的木牌,上面用烙鐵燙著三個(gè)字——螢火工作室。
螢火。微弱的光,卻能在黑暗中指引方向。
我深吸一口氣,敲了敲門(mén)。
開(kāi)門(mén)的是一個(gè)扎著馬尾、臉上還帶著點(diǎn)嬰兒肥的女孩。她看到我,愣了一下,隨即朝里面喊道:“干哥,有人找!”
“讓他進(jìn)來(lái)!”趙干的聲音從里面?zhèn)鱽?lái)。
我走進(jìn)工作室。空間不大,也就五六十平,被分割成幾個(gè)區(qū)域。角落里堆滿了美術(shù)設(shè)定集和吃剩的外賣(mài)盒子,幾臺(tái)電腦屏幕上閃爍著代碼和建模軟件的界面,空氣中彌漫著一股咖啡、汗水和夢(mèng)想混合在一起的獨(dú)特味道。
除了趙干和開(kāi)門(mén)的女孩,還有一個(gè)戴著厚厚眼鏡、身材微胖的男人。他正眉頭緊鎖地盯著屏幕上的一段代碼,手指在鍵盤(pán)上懸著,似乎在和某個(gè)bug進(jìn)行殊死搏斗。
趙干站起身,他比大學(xué)時(shí)瘦了也黑了,但眼神依舊明亮。他拍了拍我的肩膀,給我介紹:“這是蘇小小,我們的主美,剛才給你開(kāi)門(mén)的那個(gè)。這是馬東,我們的主程。兩位,這位就是我常跟你們提起的,我們學(xué)校的傳奇學(xué)弟,陳陽(yáng)?!?/p>
蘇小小好奇地打量著我,眼神里滿是探尋。而馬東則只是推了推眼鏡,朝我點(diǎn)了點(diǎn)頭,目光很快又回到了屏幕上,顯然對(duì)“傳奇學(xué)弟”這種頭銜不怎么感冒。
我理解。在這個(gè)行業(yè),作品才是唯一的名片。
“坐吧?!壁w干指了指一張空著的椅子,給我倒了杯水?!罢f(shuō)說(shuō)吧,到底怎么回事?還有,你說(shuō)的那個(gè)……能打敗現(xiàn)有游戲AI的引擎,又是什么?”
我沒(méi)有急著解釋我的遭遇,因?yàn)槲抑?,博取同情是最廉價(jià)的策略。我需要的是平等的合作伙伴,而不是施舍。
我將我的筆記本電腦拿出來(lái),開(kāi)機(jī),直接切入主題:“我把它命名為‘盤(pán)古’。它的核心理念,不是預(yù)設(shè)腳本,也不是有限狀態(tài)機(jī),而是‘基于情感邏輯的動(dòng)態(tài)敘事生成’?!?/p>
“動(dòng)態(tài)敘事生成?”馬東的注意力終于從他的bug上移開(kāi)了。作為程序員,他顯然聽(tīng)懂了這個(gè)詞背后的技術(shù)分量,“你是說(shuō),像《荒野大鏢客2》那種隨機(jī)事件系統(tǒng)?還是更進(jìn)一步,能做到AI自主編寫(xiě)任務(wù)線?”
“比那更進(jìn)一步。”我看著他,也看著同樣投來(lái)關(guān)注目光的趙干和蘇小小,“我給你們舉個(gè)例子。傳統(tǒng)的NPC,你給他設(shè)定一個(gè)身份,比如‘鐵匠’,他就會(huì)永遠(yuǎn)重復(fù)‘打鐵-賣(mài)東西-睡覺(jué)’這幾套動(dòng)作。玩家和他交互,也只能觸發(fā)固定的對(duì)話選項(xiàng)。但‘盤(pán)古’不一樣?!?/p>
我打開(kāi)一個(gè)空白的3D演示場(chǎng)景,說(shuō)道:“現(xiàn)在,我們來(lái)創(chuàng)造一個(gè)世界。小小,你來(lái)給個(gè)主題?!?/p>
蘇小小眨了眨眼,想了想說(shuō):“一個(gè)……被遺忘的古代戰(zhàn)場(chǎng),核心情緒是‘悲涼’和‘榮耀’?!?/p>
我點(diǎn)點(diǎn)頭,在控制臺(tái)里輸入一行指令:【Create_World: Theme = (Forgotten_Battlefield), Emotion = (Sorrow, Glory)】
按下回車。
接下來(lái)發(fā)生的一幕,讓工作室里的三個(gè)人,呼吸都為之一滯。
屏幕上,不再是冰冷的網(wǎng)格。一片荒蕪的土地憑空生成,地面上散落著折斷的旗幟和生銹的劍戟。天空被渲染成壓抑的鉛灰色,一輪殘陽(yáng)掛在天邊,光芒微弱。風(fēng)吹過(guò),卷起地上的沙塵,甚至能聽(tīng)到若有若無(wú)的嗚咽聲。整個(gè)場(chǎng)景的生成,不是簡(jiǎn)單的素材堆砌,而是所有的元素——光影、色調(diào)、模型、音效——都在完美地服務(wù)于“悲涼”和“榮耀”這兩個(gè)核心情緒。
“這……這是程序化內(nèi)容生成(PCG)?”馬東的聲音有些發(fā)顫,“不對(duì),傳統(tǒng)的PCG做不到這么強(qiáng)的藝術(shù)風(fēng)格統(tǒng)一性。你是怎么做到的?”
“盤(pán)古的核心不是生成模型,而是理解‘情感’?!蔽医忉尩?,“我輸入‘悲涼’,它就會(huì)調(diào)用所有與這個(gè)情感標(biāo)簽關(guān)聯(lián)的美術(shù)、音效和敘事元素,并根據(jù)‘榮耀’這個(gè)副標(biāo)簽,進(jìn)行風(fēng)格化的修正,比如加入那些殘破的戰(zhàn)旗和兵器?!?/p>
蘇小小的眼睛里已經(jīng)開(kāi)始放光了,作為美術(shù),她太清楚這意味著什么了。這意味著,一個(gè)擁有頂尖藝術(shù)審美的AI,可以成為她最得力的助手。
“這只是第一步,環(huán)境生成。”我繼續(xù)操作,“接下來(lái),是角色。我們來(lái)創(chuàng)造一個(gè)NPC。趙干學(xué)長(zhǎng),你來(lái)定義他?!?/p>
趙干盯著屏幕,沉吟片刻,說(shuō):“一個(gè)失去了所有戰(zhàn)友,獨(dú)自守在這里的老兵。他不是為了命令,而是為了一個(gè)承諾。”
我輸入指令:【Create_NPC: Identity = (Veteran), Status = (Alone, Lost_Comrades), Motivation = (Fulfill_A_Promise)】
場(chǎng)景中,一塊巨大的巖石下,一個(gè)身影緩緩凝聚。他穿著破舊但依舊整潔的盔甲,拄著一柄斷劍,默默地眺望著遠(yuǎn)方。他沒(méi)有夸張的動(dòng)作,但那佝僂的背影,那在風(fēng)中微微顫動(dòng)的披風(fēng),將一個(gè)老兵的孤獨(dú)與執(zhí)著,刻畫(huà)得入木三分。
“現(xiàn)在,我們可以和他交互了?!蔽覍㈡I盤(pán)轉(zhuǎn)向他們,“不用選擇題,你們直接用自然語(yǔ)言輸入想對(duì)他說(shuō)的話?!?/p>
馬東搶先一步,在對(duì)話框里輸入:“老人家,你在這里等什么?”
屏幕上,那個(gè)老兵緩緩地轉(zhuǎn)過(guò)頭。他的模型并不算特別精細(xì),但他的眼神,卻充滿了AI本不該擁有的情緒——一絲驚訝,一絲警惕,還有一絲深埋的疲憊。
一行字幕出現(xiàn)在屏幕下方,是他的回答:“等風(fēng),也等故人。年輕人,這里不是你該來(lái)的地方。”
“故人是誰(shuí)?”馬東追問(wèn)。
“一個(gè)我答應(yīng)過(guò)要帶他回家的人?!崩媳哪抗?,投向了戰(zhàn)場(chǎng)深處的一座孤墳。
蘇小小忍不住了,她輸入:“你的戰(zhàn)友都犧牲了,只剩你一個(gè)人,值得嗎?”
這個(gè)問(wèn)題,顯然觸動(dòng)了NPC的核心設(shè)定——“承諾”。
老兵沉默了很久,久到他們以為程序卡住了。然后,他緩緩地、一字一頓地回答:“榮耀存于戰(zhàn)死,但責(zé)任,重于生死?!?/p>
話音落下,整個(gè)工作室一片死寂。
趙干、馬東、蘇小小,三個(gè)人都像是被施了定身法,死死地盯著屏幕上那個(gè)虛擬的形象。他們不是沒(méi)見(jiàn)過(guò)智能NPC,但他們從未見(jiàn)過(guò)一個(gè)NPC,能說(shuō)出如此具有哲理和情感沖擊力的話。
這不是預(yù)設(shè)的臺(tái)詞。這是“盤(pán)古”AI根據(jù)我設(shè)定的“身份”、“狀態(tài)”和“動(dòng)機(jī)”,結(jié)合蘇小小輸入的“值得嗎”這個(gè)問(wèn)題,通過(guò)情感邏輯引擎,實(shí)時(shí)演算出的、最符合當(dāng)前情境和角色性格的回答。
“我的天……”馬東喃喃自語(yǔ),他推了推眼鏡,鏡片后的眼神充滿了震撼與狂熱,“你……你這是創(chuàng)造了一個(gè)會(huì)思考的‘靈魂’!它的底層邏輯是什么?行為樹(shù)?效用系統(tǒng)?還是……深度強(qiáng)化學(xué)習(xí)?”
“是它們的結(jié)合體,但我加入了一個(gè)核心的‘動(dòng)機(jī)驅(qū)動(dòng)模型’?!蔽医K于說(shuō)出了“盤(pán)古”與市面上所有AI最大的不同,“傳統(tǒng)AI是被動(dòng)響應(yīng),而盤(pán)古是主動(dòng)尋求完成自己的‘動(dòng)機(jī)’。它的所有行為和對(duì)話,都是為了實(shí)現(xiàn)那個(gè)最終的目標(biāo)。比如這個(gè)老兵,他的核心動(dòng)機(jī)是‘完成承諾’。如果我們?cè)噲D阻止他,他會(huì)反抗;如果我們幫助他,他會(huì)感激,甚至?xí)尚碌娜蝿?wù)線來(lái)回報(bào)我們。整個(gè)故事,會(huì)因?yàn)橥婕业牟煌袨?,而生長(zhǎng)成完全不同的模樣?!?/p>
我說(shuō)完,將筆記本電腦轉(zhuǎn)了回來(lái),看著他們?nèi)恕?/p>
“這就是‘盤(pán)古’。一個(gè)真正的、活著的、會(huì)呼吸的虛擬世界生成引擎?,F(xiàn)在,我回答學(xué)長(zhǎng)的問(wèn)題。天極的李文博,偷走了我提交給公司的1。0版本,包裝成‘動(dòng)態(tài)進(jìn)化AI’,然后把我踢了出去。他以為他拿到了全世界,但他不知道,他手里的,只是一個(gè)閹割版的、而且有致命缺陷的贗品?!?/p>
我沒(méi)有說(shuō)出那個(gè)“熵增”漏洞的具體細(xì)節(jié),這是我最后的底牌。但我透露出的信息,已經(jīng)足以讓他們明白一切。
趙干的拳頭,不知何時(shí)已經(jīng)緊緊攥住。他的眼中,那團(tuán)熄滅已久的火焰,此刻正重新燃燒,并且越燒越旺。
“你想怎么做?”他問(wèn),聲音因?yàn)榧?dòng)而有些嘶啞。
“‘星火杯’開(kāi)發(fā)者大賽?!蔽抑苯亓水?dāng)?shù)卣f(shuō),“李文博會(huì)帶著那個(gè)贗品去參賽,把它作為《源代碼》成功的技術(shù)展示。我要在同一個(gè)舞臺(tái)上,用真正的‘盤(pán)古’,把他連同天極一起,釘在墻上。”
“干了!”沒(méi)等趙干說(shuō)話,蘇小小猛地一拍桌子,站了起來(lái),嬰兒肥的臉上滿是興奮的紅暈,“光是剛才那個(gè)老兵,就比我玩過(guò)的所有3A大作里的NPC加起來(lái)還有味道!我們要做一個(gè)什么樣的游戲?我腦子里已經(jīng)有一萬(wàn)個(gè)想法了!”
馬東也扶了扶眼鏡,冷靜但堅(jiān)定地說(shuō):“引擎的底層構(gòu)架很完整,如果你的接口文檔足夠清晰,我有把握在一周內(nèi)完成基礎(chǔ)功能的接入。學(xué)弟……不,陽(yáng)哥!你說(shuō)吧,要我們?cè)趺锤桑 ?/p>
最后的決定,落在了趙干身上。
他沒(méi)有立刻回答,而是走到窗邊,看著外面漆黑的夜色。我知道,他在權(quán)衡。螢火工作室已經(jīng)經(jīng)不起又一次失敗了。跟著我,是賭上他們的全部。贏了,一飛沖天;輸了,萬(wàn)劫不復(fù)。
許久,他轉(zhuǎn)過(guò)身,目光如炬。
“陳陽(yáng),我們工作室的賬上,還剩下三萬(wàn)塊錢(qián),這是我們?nèi)齻€(gè)下個(gè)季度的房租和伙食費(fèi)。我們的項(xiàng)目,因?yàn)榧夹g(shù)瓶頸,已經(jīng)停滯了兩個(gè)月。我們現(xiàn)在,一無(wú)所有,除了還沒(méi)死心的夢(mèng)想。”
他頓了頓,一字一句地說(shuō)道:“所以,我們跟你賭了。不為別的,就為你剛才屏幕上的那個(gè)老兵,為了那句‘責(zé)任,重于生死’。媽的,做游戲,要是沒(méi)點(diǎn)這種精神,還不如回家賣(mài)紅薯!”
我的心頭一熱,一股暖流涌遍全身。
“謝謝你,學(xué)長(zhǎng)?!?/p>
“別謝我,是我們?cè)撝x你。”趙干的臉上露出了久違的笑容,“現(xiàn)在,說(shuō)正事?!腔鸨膱?bào)名,明天下午五點(diǎn)截止。我們必須在明天之前,確定游戲的核心玩法和主題,提交一份完整的項(xiàng)目策劃案?!?/p>
“時(shí)間太緊了!”蘇小小說(shuō)。
“緊也得干!”趙干大手一揮,充滿了領(lǐng)導(dǎo)者的氣勢(shì),“我們不需要做一個(gè)大而全的游戲。我們要做一個(gè)‘小而美’的藝術(shù)品,一個(gè)能把‘盤(pán)古’引擎的敘事能力發(fā)揮到極致的演示版本!我們的目的不是拿獎(jiǎng)金,是‘揚(yáng)名’!是要讓所有人看看,什么才是真正的‘活著的AI’!”
他的話,點(diǎn)燃了房間里所有人的激情。
我們四個(gè)人立刻圍坐在一起,開(kāi)始了一場(chǎng)緊張而高效的頭腦風(fēng)暴。蘇小小拿出了畫(huà)板,馬東打開(kāi)了思維導(dǎo)圖,我則負(fù)責(zé)解釋“盤(pán)古”引擎的技術(shù)邊界和實(shí)現(xiàn)可能性。
時(shí)間一分一秒地過(guò)去,外賣(mài)盒越堆越高,咖啡杯見(jiàn)了底又被續(xù)滿。
最終,在凌晨四點(diǎn),我們敲定了最終的方案。
我們的游戲,名字叫《執(zhí)筆者》。
玩家扮演的不是勇者,不是冒險(xiǎn)家,而是一個(gè)能穿梭于不同故事書(shū)中,修改關(guān)鍵“詞語(yǔ)”的“執(zhí)筆者”。而“盤(pán)古”AI,則扮演著“故事本身”。AI會(huì)根據(jù)玩家修改的詞語(yǔ),實(shí)時(shí)演化出全新的情節(jié)、場(chǎng)景和人物關(guān)系。
比如,在一個(gè)“公主被惡龍囚禁”的故事里,玩家可以將“惡龍”改成“守護(hù)龍”,整個(gè)故事的基調(diào)就會(huì)從“英雄救美”變成“跨越種族的守護(hù)與誤解”。玩家的每一個(gè)選擇,都會(huì)讓故事這棵大樹(shù),長(zhǎng)出獨(dú)一無(wú)二的枝丫。
這是一個(gè)將“盤(pán)古”引擎的動(dòng)態(tài)敘事生成能力,展現(xiàn)得淋漓盡致的創(chuàng)意。
“就它了!”趙干用力地拍板,“小小負(fù)責(zé)主視覺(jué)和概念圖,馬東研究引擎接口,我來(lái)寫(xiě)策劃案。陳陽(yáng),你負(fù)責(zé)把‘盤(pán)古’引擎打包,并準(zhǔn)備一份技術(shù)說(shuō)明。我們分頭行動(dòng),明天中午十二點(diǎn),在這里集合,做最后的整合!”
“好!”
所有人齊聲應(yīng)道,眼中閃爍著同樣的光芒。那是屬于創(chuàng)造者的,名為“期待”的光芒。
就在我們準(zhǔn)備散會(huì)的時(shí)候,趙干的手機(jī)響了一聲。他拿起來(lái)看了一眼,臉色微微一變。
“怎么了,干哥?”蘇小小問(wèn)。
趙干將手機(jī)屏幕轉(zhuǎn)向我們,上面是“星火杯”官網(wǎng)剛剛更新的頁(yè)面。在“特邀評(píng)委”一欄,一個(gè)照片和名字被加粗置頂。
照片上的人,五十歲上下,面容清瘦,眼神銳利得像鷹。
名字是:高天原。
馬東倒吸一口涼氣:“‘代碼判官’高天原?他不是已經(jīng)退隱好幾年了嗎?怎么會(huì)來(lái)當(dāng)‘星火杯’的評(píng)委?”
高天原,中國(guó)第一代傳奇程序員,以技術(shù)眼光毒辣、言辭犀利、從不留情面而著稱。無(wú)數(shù)被資本吹捧上天的項(xiàng)目,都在他幾句點(diǎn)評(píng)之下,被剝?nèi)トA麗外衣,露出底層的簡(jiǎn)陋與不堪。他最著名的一句話是:“別跟我談夢(mèng)想和情懷,讓你的代碼自己說(shuō)話?!?/p>
趙干的臉色凝重:“更糟糕的是,我聽(tīng)說(shuō),當(dāng)年李文博還在另一家公司的時(shí)候,高天原是他的技術(shù)顧問(wèn)。他們……有師徒之誼?!?/p>
這個(gè)消息,像一盆冰水,兜頭澆在我們剛剛?cè)计鸬幕鹧嫔稀?/p>
李文博不僅偷走了我的成果,占據(jù)了輿論的高地,現(xiàn)在,他甚至在裁判席上,都有一個(gè)強(qiáng)大的“盟友”。
我們的前路,比想象中,還要艱難。