最新网址:www.badaoge.org
8月2日,立秋前六天,华北平原的夜风里终于有了一丝凉意。
李君宪盘腿坐在宿舍床上,笔记本电脑散发的热量烤着膝盖。屏幕上是“沉着”铁匠铺的代码框架,他正在调试淬火的物理模拟——铁块入水的瞬间,温度骤降,内部应力变化导致的形变和裂纹。这需要实时计算温度场、应力场和材料的相变,以2006年的硬件性能,几乎不可能实时演算。他用了取巧的方法:预计算几种常见材料的淬火结果,运行时插值。效果勉强能用,但缺乏那种“一念之差,满盘皆输”的微妙感。
凌晨两点,宿舍里只有机箱风扇的低鸣。王浩回家了,张强在网吧通宵,刘明搬出去和女友同居了。整个暑假,这间宿舍越来越空,像退潮后的海滩。
QQ弹出一条消息,来自“像素猫咪”(陈末):“睡了吗?我刚加完班,看到你在线。”
李君宪回复:“没睡。在调淬火算法。”
“发你看看。我用有限元法做了个简化模型,能实时跑,精度够用。”陈末发来一个压缩包,里面是C++源码和一份详细的数学推导文档,“推导过程我写在文档里了。核心是把三维问题降维到二维轴对称,再用显式差分求解。计算量降了90%,误差在5%以内,玩家看不出来。”
李君宪下载,编译,运行测试程序。一个简化的铁块模型出现在屏幕上,用颜色表示温度分布。点击“淬火”,铁块入水,表面迅速变蓝(冷却),内部还是红色(高温)。应力积累到临界点,表面出现细微的裂纹——不是预设的贴图,是根据计算实时生成的。裂纹的走向每次都不一样,取决于入水角度、水温、铁块成分的微小随机扰动。
“厉害。”他回复,“这个水平,够发论文了。”
“就是论文里的算法。我导师的课题,我拿来用了。他同意,说只要不涉及军工就行。”陈末发了个笑脸,“另外,我拿到微软的offer了。上海,做DirectX开发,九月入职。”
这条消息让李君宪的手指停在键盘上。他想起陈末是北航大四,这个暑假毕业。拿到微软offer,是计算机系学生梦寐以求的出路。
“恭喜。”他打字,“那你……”
“我还没签。在等基金会的消息。”陈末回复得很快,“如果入选,我就拒了微软,全职做二十四诗品。如果没入选,我就去上海。但我可以继续远程参与,周末和晚上写代码。就是……可能没法像现在这样投入了。”
“理解。微软的offer,别轻易拒。那是很好的平台。”
“但二十四诗品,可能是我这辈子唯一一次,能做一个完全属于自己的东西的机会。”陈末停顿了几秒,“而且,团队需要我。没有我,你们的渲染引擎、物理模拟、网络同步,都得从头找人。时间来不及。”
李君宪看着这段话。他想起重生前,他带过的团队里,那些因为家庭、生计、现实压力离开的同事。每个人都说过“我会远程支持”,但慢慢地,回复从几小时变成几天,从几天变成几周,最后头像永远灰了。这不是谁的错,是生活本身就有重力,会把所有轻盈的东西拉向地面。
“等基金会结果吧。”他最终回复,“还有十八天出通知。在那之前,别做决定。”
“嗯。我先睡了,明天还要改论文。淬火算法你用着,有问题随时问我。”
“好。晚安。”
陈末的头像灰了。李君宪关掉聊天窗口,继续调试代码。凌晨三点,淬火系统基本跑通,他保存进度,关掉电脑。宿舍里彻底黑了,只有窗外路灯的光从窗帘缝隙漏进来,在地板上切出一道冷白。
他躺下,但睡不着。脑子里是陈末的offer,是叶晚还在低烧的身体,是林薇家里催她考教师资格证的电话,是苏语那个德国的录取通知书,是张明远说的“等基金会结果出来,你们要做好最坏的准备”。
最坏的准备是什么?团队解散?项目搁浅?大家各奔东西,二十四诗品永远停在“冲淡”和“纤秹”的半成品?
窗外的天渐渐泛白。鸟开始叫,由疏到密。他坐起来,打开手机。博客后台显示,《一针一线》DLC的总销售额停在了3124份,总计收入41,792元(其中捐助部分19,860元)。购买人数在叶晚妈妈追悼会后达到顶峰,之后缓慢下降,现在已经趋于平缓。这些钱,支付了叶晚妈妈的后事和医药费欠款后,还剩两万多,存在团队账户里,是未来几个月的开发资金。
两万多,五个人,在2006年,能撑三四个月。如果省着点。
但如果基金会不通过,三四个月后呢?
他起床,用凉水冲了把脸,然后出门。清晨的校园很安静,空气里有露水和青草的味道。他走到操场,开始跑步。一圈,两圈,三圈……肺像要炸开,腿像灌了铅,但他不停。汗水浸透T恤,黏在身上。跑到第十圈时,东边的天空完全亮了,金色的阳光刺破云层,洒在红色的塑胶跑道上。
他停下,扶着膝盖喘气。远处的食堂烟囱开始冒烟,有早起的学生拎着暖壶去打水。生活以最日常的方式继续,不管你有没有拿到基金会的资助,有没有做完二十四诗品。
回到宿舍,他冲了个冷水澡,换上干净衣服。然后打开电脑,继续工作。今天的目标是把“沉着”的捶打系统做完。他写了一个简单的物理模型,锤子落下,铁块形变,能量传递,热量散失。玩家需要控制锤击的力度和位置,让铁块均匀延展,避免局部过薄或开裂。
调试到中午,捶打系统有了雏形。他泡了碗面,边吃边看博客评论区。有条新评论引起他的注意,来自ID“铸铁匠”:
“博主,我看了你们‘沉着’的设计思路。我是做传统刀剑锻造的,家里三代铁匠。你们设计的淬火算法,方向对了,但缺了最关键的东西:‘听’。真正的好铁匠,淬火时不是看颜色,是听声音。铁进水的那一刹那,会发出特定的‘嘶’声,音调的高低、长短,能告诉你铁的内部状态。这个声音,是任何仪器都测不出来的,是靠几十年经验积累的‘手感’。你们如果想做真实,得把这个做进去。”
下面是这条评论的回复,来自“苏语”:“老师傅您好,我是团队的音乐设计。您能详细说说这个声音吗?音高大概在哪个范围?是持续的嘶声,还是短促的爆裂声?入水角度不同,声音会有变化吗?”
“铸铁匠”回复了苏语:“小姑娘耳朵灵。是持续的嘶声,但中间有微妙的起伏,像人在叹息。音高大概在2000-3000赫兹,但老铁匠耳朵不好,其实不是听音高,是听‘质感’。入水角度不同,声音的起头会有差别——垂直入水,声音干净利落;斜着入水,声音会带点‘滑’的感觉,像刀划过布。另外,水温也影响声音。冷水声音脆,温水声音闷。我们老话叫‘听水辨温’。”
苏语又回:“明白了。我需要实地录音。老师傅您在哪里?方便我过去录吗?”
“铸铁匠”:“我在河北保定。但最近炉子停了,在搬家。这样,我录几段以前的淬火声音,是以前做纪录片时录的,质量还行。发你邮箱。但你要注意,录音和现场听,完全是两回事。现场那个声音,是带着热浪和水汽一起扑到你脸上的,录音只能抓住十分之一。”
“十分之一就够了。谢谢您!”
李君宪看着这段对话。苏语总是这样,遇到专业问题就忘了时间,忘了自己还在准备出国,忘了德国那边催她确认offer的邮件。她沉浸在声音的细节里,像潜水员沉入深海,周围的世界都模糊了。
他给苏语发私信:“铸铁匠的声音素材,收到后也发我一份。我看看能不能和淬火算法联动——根据声音特征,实时调整淬火结果。”
苏语很快回:“好。另外,德国那边要我下周前确认去不去。我……”
她没说完。李君宪知道她想说什么。
“你怎么想?”他问。
“我想等基金会结果。但如果没通过,我可能真的要去德国了。那个导师是电子音乐领域的权威,机会很难得。”苏语打字很慢,“但我舍不得团队。我们才刚开始,‘纤秹’还没做完,‘沉着’才起步,后面还有二十二品……我想看到二十四诗品全部完成的那天。哪怕我只是做音乐的。”
“那就等。”李君宪说,“还有十七天。等结果出来,再决定。”
“嗯。那我先去整理铸铁匠的录音。他说今晚发我。”
对话结束。李君宪关掉私信,打开邮箱。有一封新邮件,来自“华夏数字文化基金会”,标题是“项目申请确认函”。
他心跳漏了一拍。点开,是标准的自动回复:“尊敬的申请人:您提交的项目‘二十四诗品游戏化计划’(编号CF-2006-047)已收到,进入初审阶段。初审结果将于8月20日以邮件形式通知。请确保联系邮箱畅通。”
不是结果,只是确认。他松了口气,但心里那根弦依然绷着。8月20日,还有十八天。
他回复:“收到。谢谢。”
然后他继续工作。下午,林薇发来“沉着”的铁匠铺场景图。不是像素,是水墨风格的草图:一个简陋的棚子,中间是炉膛,火光映在泥墙上,光影跳动。铁砧厚重,上面有经年捶打的凹痕。墙上挂着几把未完成的刀具,角落里堆着煤和废铁。画面右下角,有一个小凳,上面放着一个粗陶碗,碗里有半碗水,水面漂着一点煤灰。
“叶晚画的细节。”林薇附言,“她说,铁匠休息时,就坐那个凳子,喝那碗水。碗边的缺口,是她妈妈以前打碎又锔好的。她把家里的碗画进去了。”
李君宪放大图片。碗边的锔钉,是几个极小的金属点,在粗陶的质感中几乎看不见。但如果你仔细看,能看出修补的痕迹,和那种“碎了但还在用”的坚韧。
他把这张图设为桌面背景。然后继续写代码。捶打系统需要加入“疲劳度”——铁匠连续捶打会累,力度和准度下降,需要休息。休息时,可以喝水(那个粗陶碗),可以看炉火,可以听风声。这些时刻没有产出,但能让玩家恢复状态,也让节奏有张有弛。
他写了一个简单的疲劳系统。锤击力度会随着连续操作逐渐衰减,误差增大。休息时,疲劳度缓慢恢复,恢复速度取决于环境——如果外面下雨,铁匠铺里有雨声,恢复得快些;如果是晴天,有鸟叫,恢复得慢些。这没有科学依据,但他觉得,雨声让人心静,鸟叫让人分心。
傍晚,叶晚发来消息,是文字,不是语音:“我退烧了。医生说是免疫力下降,开了增强抵抗力的药。我在家整理妈妈的遗物,发现她以前画的绣样,有几百张。我想扫描,放到游戏里,作为‘纤秹’的收集品。可以吗?”
“可以。但要征得你同意,和你妈妈生前的意愿。”
“她以前说,绣样是她最珍贵的东西,但没人看。如果能在游戏里被更多人看见,她会高兴的。”叶晚停了停,“另外,我想开始画‘悲慨’。城墙,落日,一个老兵。但我没画过战争。张老师说,可以带我去看老城的城墙,晚上,有月光的时候。”
“好。注意安全,让林薇陪你去。”
“嗯。林薇姐在帮我整理绣样,她说要分类,按花鸟、山水、人物。我妈妈什么都会绣。”
“你妈妈很了不起。”
“我知道。”
对话结束。李君宪看着窗外渐暗的天色。西边的云被落日染成金红色,像淬火前的铁。一天又过去了。基金会结果又近了一天。每个人的未来,都悬在那封还没来的邮件上。
他关掉电脑,走到窗边。远处,老城墙的轮廓在暮色中变成深灰色的剪影。有归巢的鸟群掠过,翅膀划破橙红色的天空。
手机震了。是铸铁匠发来的录音文件,苏语转发给他的。文件名:“淬火声_2003年春_保定.wav”。
他戴上耳机,点开。
先是几秒的环境音:风声,远处狗叫,炉火的噼啪声。然后,一个苍老但有力的声音:“准备——下!”
接着,是铁入水的声音。
“滋——————”
不是单纯的嘶声,是有纹理的。开始是短促的爆裂,像冰面开裂。然后拉长,变成持续的、带着颤抖的嘶鸣。中间有几次微弱的、像呜咽的起伏。最后慢慢减弱,变成细小的气泡声,然后消失。
全程大概五秒。但李君宪听了三遍。他闭上眼,想象那个场景:一个老铁匠,在春天的保定,把烧红的铁块浸入冷水。水汽蒸腾,铁从亮红变暗,内部结构在剧烈变化。那个声音,是铁在尖叫,是温度在投降,是材料在重生。
他打开淬火算法的代码,修改。加入声音反馈系统:根据实时计算的应力分布,生成对应的声音特征。压力大的地方,声音频率高;温度梯度大的地方,声音振幅大。虽然还是模拟,但比之前单纯贴图进步了。
测试。铁块入水,屏幕上裂纹生成的同时,耳机里响起那个模拟的淬火声。不够真实,但有了雏形。
他保存代码,给铸铁匠发邮件:“收到录音,已用于算法改进。谢谢您。请问如何署名?”
几分钟后,回复来了:“就写‘保定老铁匠’吧。另外,如果你们的游戏做出来了,送我一份。我想看看,我听了五十年的声音,在你们手里变成什么样。”
“一定。”
李君宪合上电脑。夜完全黑了,星星出来了,很少,但很亮。远处传来火车汽笛声,悠长,孤独,开往北方。
他想起“沉着”的原文:“绿杉野屋,落日气清。脱巾独步,时闻鸟声。鸿雁不来,之子远行。所思不远,若为平生。”
鸿雁不来,之子远行。但所思不远,就在这一行行代码里,在这一笔笔画里,在这一段段声音里。就在这个闷热的夏夜,在五个散落四方却共享同一片星空的年轻人心里。
他躺到床上,闭上眼。在沉入睡眠的前一刻,脑子里浮现出铸铁匠说的那句话:
“淬火时,铁在尖叫,但尖叫之后,就是钢。”
也许他们现在,就在淬火。
在等待的烈火中烧得通红,然后投入未知的冷水。会尖叫,会开裂,会变形。
但尖叫之后,会变成什么?
他不知道。
只能等。
等那一声“滋——”,等水汽散开,等铁凉透,看它最后成了钢,还是成了废渣。
但至少,他们选择把自己烧红,选择跳进水里。
选择在尖叫中,完成一场蜕变。
夜很深了。而那个来自保定的淬火声,在他梦里回响了整整一夜。
滋——————
漫长,颤抖,但坚定不移。
http://www.badaoge.org/book/155343/57074174.html
请记住本书首发域名:www.badaoge.org。笔尖中文手机版阅读网址:m.badaoge.org