第20章 构建锚点(2/2)
请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
“什么?”
“这五条锚点,每一条都跟她有关。煮面的背影,她等的人是你。橘子,她记得的味道是你剥的。回头,她确认门口站着的人是你。海边,她说了‘不对’,但她没有走。橘子皮上的指甲印,她数的是什么你不知道,但她一直在数。”沈易把咖啡罐放在桌上,罐底在桌面磕出一声响,“这些锚点不只是她的记忆,也是你的。你把它们写下来,放进锚点环境里——你也会被拉进去。”
林劫的手指停在键盘上。屏幕上那五条锚点安静地排成一列,像五块从退潮的沙滩上捡起来的石头。“我知道。锚点不是单向的。她能抓住,我也能。她抓住会浮上来,我抓住——”他沉默了几秒,“我抓住会留在里面。”
“留在她够得到的地方。”沈易补完了他没说完的那半句。
林劫没有回答。他把清单文档最小化,打开锚点环境的构建界面。墨影这台旧服务器的架构很老,跑的是蓬莱计划早期的基础框架。好处是这套框架跟陈博士的加密方式同源——不是往上兼容的那种同源,是骨子里长在一起的同源。坏处是慢。内存只有128G,处理器是几年前的型号,跑一个基础锚点环境的渲染就要占掉将近一半的算力。
他把第一条锚点的环境要素一个一个填进去。灶台不难——他在给林雪搭建海边的时候做过一遍,那段代码他还记得,稍微改改就能用。锅里的水要冒热气——物理渲染引擎太吃算力,他用了一个取巧的办法:把热气的动画做成循环播放的视频贴图,分辨率不高,但距离拉远几寸就看不出来了。声音最难。不是水开的声音,不是筷子搅面的声音,是拖鞋底蹭地面的声音。
那个声音太轻了,轻到他从来没有刻意去记过,但它就在那里,压在记忆的最底层,像一块被沙子埋了太久的石头。林雪每次从灶台前面转过身来,右脚会先动,拖鞋底蹭一下地面,然后整个身体转过来,脸上有一点热出来的红。那个声音很短,不到零点三秒。他反复录了几遍都不对。太响,太闷,太脆,太假。怎么听都不像。
沈易看他折腾了快半个小时,站起来走了出去。过了大概一刻钟,他拿着一双旧拖鞋回来了。那是从隔壁废品站捡的,鞋底磨得几乎透明,有一块还缺了个角。林劫接过来,翻过去看鞋底纹路——和林雪从前那双很像,是那种廉价泡沫底的,穿久了会在水泥地上磨出一种很特别的涩响。
他把手机放在地上,用拖鞋底蹭过去。录了三遍,挑了一段最接近的,放大波形,微调了一下频率。然后放进锚点环境里。灶台上锅冒着热气,水在翻涌。他把那段声音文件拖进时间轴的时候,手指停了一下。就一下。然后他松开了鼠标。那个声音被放在第一帧和第三帧之间——她从灶台前面转过身来的那一瞬间。拖鞋底蹭过地面,不到零点三秒,很轻,轻到如果不仔细听就会被水开的声音盖过去。
她活着的时候,这个声音每天都会响起。早上煮粥,晚上煮面,半夜给他热剩饭。他从没注意过。现在他把它找回来放进了一个虚拟的厨房里,等她来踩。
“她会听到的。”沈易说。
林劫没有抬头。他把第二条锚点也放了进去。橘子。不是他记忆里那只皮都干了的橘子,是一片空白——和之前给她的一样,灰蒙蒙的,没有任何细节。放在灶台旁边的小桌上。等她来握。第三条,海边。他没有重建那片海,而是在厨房的窗户外放了一片海水。不是他记忆里那片永远停在下午的海,是一片会变的海——潮汐是真实的,浪花的高度会根据风速变化,天空的颜色会随时间从蓝变灰再变红。这片海的参数不是他写的,是他从龙吟系统的公共气象数据里截取来的实时潮汐数据换算出来的,每六小时自动更新一次,不是她的记忆,但会自己呼吸。从厨房窗户看出去,像一幅挂在墙上的画,但画里的浪在动,风在吹,云在走。
第四条,回头。他没有放声音,没有放画面,只是在厨房门口留了一小块空白。什么也没有,连地板纹理都是灰的。那是她要自己填充的地方。如果她记得门开的声音,那里就会有声音。如果她记得脚步声,那里就会有脚步声。如果她什么都不记得了,那里会一直空白着。
第五条,橘子皮上的指甲印。他也没有放。不是忘了,是不知道该放什么。她能数什么——数日子?数他说过的话?数她记得的事?他不知道。所以他只在她手边留了一个灰色的橘子,让她自己决定要在上面掐几道印子。
五条锚点全部放完。林劫靠在椅背上,看着屏幕上那个安静的厨房。锅冒着热气,海在窗外涨潮退潮,门口有一块灰色。很安静。安静得有点过头了。像一间刚收拾完的屋子,东西都摆好了,就等人推门进来。但人还没来。
沈易站起来把空咖啡罐扔进垃圾桶。“你在这儿等着。我回墨影一趟。”
林劫没有回答。他在看屏幕上那片海。潮水正在涨。窗外是她的海,不是他的。每一波浪花都有自己的方向。