00小说网 > 游戏竞技 > 游戏二十四品 > 第八章 雨夜、像素与五千里外的声音
最新网址:www.00shu.la
    4月30日凌晨,雨还在下。

    李君宪的台灯是宿舍唯一的光源,在潮湿的空气里晕开一团暖黄。屏幕上,两行代码已经对峙了二十分钟:

    if (player.idleTime > 10.0f) { // 玩家静止超过10秒

    world.timeScale = 5.0f; // 世界时间流速×5

    interiorLight.freeze(); // 室内光影冻结

    } else {

    world.timeScale = 1.0f;

    interiorLight.syncWithWorldTime();

    }

    逻辑很简单。但“室内光影冻结”这个函数,怎么写?

    他试了三个方案:一是直接停止室内所有光源的计算,但这样室内会变成一片死黑,没有“凝固感”,只有“熄灭感”。二是记录玩家静止瞬间的光影状态,然后锁定贴图,但窗外的动态影子还在动,内外就撕裂了。三是陈末建议的:用双层渲染,室内层用静态快照,室外层正常更新,中间用遮罩过渡。

    第三个方案最合理,但实现起来也最复杂。需要重写整个场景的绘制管线,而距离陈末承诺的“5月10日完成渲染模块”只剩十天。

    李君宪揉了揉发涩的眼睛,看向窗外。雨丝在路灯的光晕里斜斜划过,像无数道银线。他忽然想起张明远笔记里的话:“冲淡者,非静止也,乃动中之静。譬如坐看云起,云动而心不动。”

    他重新看向代码。

    也许不该是“冻结”,而是“抽离”。让玩家从世界的正常流速中暂时抽离出来,成为一个观察者。室内不是不动,是以另一种节奏在动——极慢,慢到几乎静止。而窗外,是快的,是流变的。

    他删掉那两行,重新写:

    if (player.enterIdleState()) {

    timeSystem.splitTimeline(); // 分裂时间轴

    // 室内时间轴:流速 0.1

    // 窗外时间轴:流速 5.0

    // 中间过渡带:渐变

    }

    邮件提示音打断了他。是叶晚,凌晨两点三十七分发的。

    “君宪哥,林薇姐,苏语姐,陈末哥:我试了新的茶杯画法。裂纹只用了一个像素的深浅变化,但加了一点‘釉面反光’——在裂纹最深处旁边,点了一个几乎看不见的亮像素。这样看起来,裂纹像是被摩挲了很多年,边缘光滑了。不知道对不对。图在附件。另外,我画了一套‘磨损’的素材:桌面的划痕、灶台的烟渍、门槛的凹陷。每种都做了三个程度的磨损:轻、中、重。可以随机组合,让每次游戏开局的场景都有些微不同。如果觉得可行,我可以继续画其他物品。”

    附件里是十张32x32的像素图。李君宪一张张点开。茶杯的裂纹确实有了“经年”的质感。划痕不是简单的白线,而是带着木头纹理的断裂感。烟渍最绝:不是均匀的黑,是深浅不一的灰,有些地方浓得像是积了多年油垢,有些地方淡得像刚擦过但没擦干净。

    他回复:“很好。就用这个方向。磨损素材的想法很棒,能增加世界的‘生活感’。你继续画,但注意休息,别熬太晚。”

    发送。一分钟后,叶晚回复了,快得像在等:“没事,我不困。我妈睡了,我正好画画。”

    这句话让李君宪停顿了一下。他想起张明远说的,叶晚母亲身体不好。凌晨两点多,她母亲睡了,她一个人在画画。那个“家”的场景,在夜色里浮现:也许是一间老房子,一盏小台灯,一个女孩在屏幕前,用像素重建记忆中的磨损。

    他关掉邮件,打开QQ群。林薇半小时前发了条消息:

    “光影分层方案我画了示意图。核心是‘窗框’作为分界线。窗框内,一切物体的投影都锁定在玩家进入静止状态的那一瞬间。窗框外,影子正常快速移动。但分界线不能太硬,需要3-5个像素的渐变过渡,模拟光线在窗棂处的散射。图发群文件了。”

    他下载图片。是手绘的示意图,用铅笔打了细致的网格,标注了光影角度和渐变范围。最下面有一行小字:“此方案需程序支持动态遮罩,陈末看看是否可行?”

    陈末在下面回复了,时间是一分钟前:“可行。我可以用模板缓冲区做遮罩。但需要美术提供窗框区域的精确遮罩图,带Alpha通道。林薇你能出吗?”

    林薇:“能。明天给。”

    苏语在凌晨一点发了条语音消息,李君宪点开。先是窸窸窣窣的摩擦声,然后是极轻的、带着气声的女声:“我录到了老木门的声音。在琴房仓库找到一扇废门,轴都锈了。推的时候,声音是‘吱——嘎——’,尾音很长,有颤音。我做了降噪,保留了那种‘涩’感。但觉得太真实了,反而有点突兀。是不是应该再做一点抽象处理?比如只保留头尾两个音,中间拉长,做成‘吱…………嘎……’的感觉?我做了两个版本,发群文件了。另外,陶罐盖子的声音没找到合适的罐子,我用瓷杯盖扣在玻璃碗上模拟,声音太脆了。明天去旧货市场看看。”

    李君宪点开音频文件。第一个版本是实录,推门声粗糙真实,能听到手指摩擦木头的细微声音。第二个版本处理过,只剩下极长的、仿佛叹息的“吱”声,和一声短促的、像关节活动的“嘎”。中间是漫长的空白,但空白里似乎有灰尘落下的声音——可能是心理作用。

    他更喜欢第二个。那种抽象后的质感,更接近“记忆里的声音”,而不是现实里的声音。

    他在群里回复:“用第二个版本。抽象得好。陶罐声音不急,先用 placeholder。苏语你也早点睡。”

    发完,他看着群里那几条在深夜里交替出现的信息。洛阳、广州、北京、洛阳(苏语在北京上学,但此刻在琴房),四个地点,三个人醒着。加上他自己,四个。

    分布式协作的奇妙之处在于:当你以为只有自己在深夜奋战时,总有人也在屏幕那头亮着光。那种感觉,像在黑暗的海洋里,看见远处其他船只的灯火。不孤单。

    他关掉群,继续写代码。时间系统的分裂逻辑初步实现后,他需要测试。但测试需要美术资源,而林薇的遮罩图还没出来。他想了想,自己用画图工具画了个简单的黑白遮罩:左边黑(室内),右边白(窗外),中间灰色渐变。导入工程,运行。

    游戏画面很简陋,但当他让李师傅静止时,奇妙的事情发生了:窗外的光影开始加速流动,从晨光到正午到黄昏,只用了十几秒。而室内,灶台的火光、桌上的油灯、墙面的反光,全都凝固在那一刻。那种“抽离感”,竟然真的传达出来了。

    虽然很粗糙,但方向对了。

    他截了张图,发到群里:“时间分层初版测试。还缺美术细化,但感觉有了。”

    几分钟后,陈末回复:“效率怎么样?帧数有没有掉?”

    “稳定在60。你的新渲染框架很轻量。”

    “那就好。我继续优化粒子系统,为‘纤秾’的花瓣飘落做准备。”

    林薇在凌晨三点半回复:“看到截图了。就是这个感觉!遮罩图我在画,天亮前给你。渐变范围我调整到8个像素,过渡会更自然。”

    叶晚在四点钟发来一张新图:是门槛的磨损。三块青石板的拼接处,磨损程度各不相同。最中间那块凹陷最深,用了五个像素的深浅变化来表现经年累月的践踏。旁边两块较新,但边缘也有细碎的磕痕。她说:“参考了我姥姥家老宅的门槛。中间那块是走的人最多的。”

    李君宪看着那张像素门槛,忽然有点恍惚。这些年轻人,在各自的深夜里,用像素、代码、声音,一点一点搭建一个共同的记忆之城。那座城里,有叶晚姥姥家的门槛,有苏语在琴房找到的废门,有林薇在洛阳老城看到的窗影,有他自己前世在病房里最后想念的那碗热汤。

    而这一切,始于一篇博客,一个荒唐的计划。

    窗外的雨渐渐小了。天边泛起蟹壳青。他关掉代码,打开博客后台。募捐公告已经发出去两天,他还没看结果。

    后台的数据让他怔住了。

    “拾芥工作室——IGF 2006差旅募捐”

    • 目标金额:5000元

    • 已募金额:8247.5元

    • 捐款人数:311人

    • 平均捐款:26.5元

    • 最新捐款(凌晨4:22):用户“古琴爱好者”,200元,留言:“给苏语同学买个好点的录音话筒。声音是诗品的魂。”

    他一条条翻看捐款留言。

    “像素猫咪”:50元。“我是陈末。钱不多,一点心意。另外,渲染框架的优化我包了,不算在团队贡献里。”

    “洛阳老饕”:100元。“五千哪够去上海?加点。记得带点上海生煎回来,我馋。”

    “游戏从业者老王”:500元。“我在上海。如果你们真来了,我请吃饭。但前提是,Demo 得让我觉得这顿饭值。”

    “一个孩子的妈妈”:20元。“我儿子十岁,爱打游戏。我常怕他玩物丧志。看了你的博客,第一次觉得,游戏也许也能教人静下来。谢谢你们做这个。”

    “张明远”:300元。“一点支持。笔记能用上就好。”

    “叶晚的妈妈”:50元。留言是空的,但汇款人姓名栏写着“周桂兰”。叶晚的母亲。

    李君宪盯着那条记录,看了很久。五十元,对那个家庭来说,不是小数目。他想起叶晚说的“我妈睡了,我正好画画”,想起她画的那道茶杯裂纹,想起她说“我家里以前种牡丹”。

    他截图,发到群里,只圈了叶晚:“叶晚,帮你妈妈退款吧。她的钱我们不能收。”

    叶晚几乎秒回:“不。我妈非要捐。她说……这是她今年春天卖手工绣品的钱,不多,但是心意。她说,看到我这么晚还在画画,不是打游戏,是在做正事,她高兴。”

    李君宪打字:“但……”

    叶晚又发来一条,这次是语音。点开,是一个温和的、带点疲惫的女声,普通话不标准,有很重的洛阳口音:“小李同学,我是叶晚的妈妈。钱不多,别嫌弃。晚晚这孩子,从小闷,就喜欢画画。我身体不好,供她上学难,她总想早点赚钱帮我。这回看她跟你们做这个,眼睛里又有光了。她说你们要去上海,去那个什么会,我帮不上别的,这钱你们一定收下。当是……当是我给晚晚买张车票,让她出去看看。行不?”

    语音里有轻微的电流声,背景很静,能听到老式挂钟的滴答声。

    李君宪打字的手停在半空。他删掉已经写好的“真的不用”,重新写:“阿姨,钱我们收下。谢谢您。我们一定带叶晚去上海。也会照顾好她。”

    发送。然后他给叶晚私聊:“告诉你妈妈,她的茶杯,在游戏里。很多人说,那是他们见过最有故事的像素茶杯。”

    叶晚回了一个“嗯”,加了一个哭脸表情。那是她第一次用表情。

    天快亮了。雨彻底停了。鸟开始叫,先是一两声试探,然后连成一片。李君宪站起来,活动僵硬的肩颈。他走到窗边,推开窗。雨后清晨的空气涌进来,冰凉,清冽,带着泥土和树叶的味道。

    远处宿舍楼,有早起的学生抱着书走出来,脚步声在湿漉漉的水泥地上回响。食堂的鼓风机开始轰鸣,早餐的香味隐约飘来。

    新的一天开始了。距离IGF截稿,还有三十天。

    他回到电脑前,博客后台又跳出一条新捐款,来自“苏语的爸爸”,1000元。留言:“我女儿说她在做一个‘会让游戏有诗意’的项目。我不懂游戏,但我懂诗意。钱不多,支持你们走远点。苏语,记得按时吃饭。”

    李君宪笑了。他截了这张图,发到群里,圈苏语:“你爸。”

    苏语在五分钟后回复,一个捂脸的表情:“他怎么找到这儿的……完了,又要被念叨了。”

    林薇发了个笑脸:“挺好的。有家长支持。”

    陈末发了个代码表情:“压力++”。

    叶晚发了一个微笑的黄豆表情。

    李君宪看着群里那五个头像,在晨光里一个接一个亮起。他忽然觉得,这个团队,这些隔着千里万里、素未谋面的人,好像真的在慢慢长成一个“整体”。像一棵树,根在地下连接,枝叶在风中各自摇曳,但共享同一片天空。

    他新建了一篇博客,标题很简单:

    “4月30日,晨雨初歇”

    他写道:

    “雨停了。天亮了。募捐金额超过了八千,捐款留言看湿了眼眶。

    “叶晚的妈妈捐了五十块,是卖绣品的钱。苏语的爸爸捐了一千,说‘我不懂游戏,但我懂诗意’。‘古琴爱好者’捐了二百,指定给苏语买话筒。‘游戏从业者老王’捐了五百,说要请我们吃饭,但得我们的Demo配得上这顿饭。

    “你看,这个世界,其实有很多人,在你看不见的地方,悄悄亮着灯。

    “我们做游戏,为了什么?为了赚钱?为了出名?也许都有。但此刻,我觉得,是为了不辜负这些灯。

    “不辜负叶晚妈妈在深夜的挂钟声里,绣出的那五十块。不辜负苏语爸爸那句‘我不懂游戏,但我懂诗意’。不辜负老王那顿还没吃上的饭。

    “我们要做的,只是一个安静的小店,一个像素小人,一碗热汤。

    “但我们要装的,是这些灯火,这些期待,这些跨越千里依然相信的善意。

    “压力很大。但动力更大。

    “今天的目标:完成时间分层系统的第一版集成。林薇的遮罩图,叶晚的磨损素材,苏语的门轴声,陈末的渲染优化,都要整合进来。

    “我们会做出一个,配得上这些善意的Demo。

    “一定。

    “雨停了。该工作了。

    “——李君宪,于洛阳清晨。鸟叫声很吵,但很好听。”

    点击发布。

    他关掉博客,重新打开代码编辑器。晨光从窗外涌进来,照在键盘上,每个键帽都闪着湿润的光。

    远处,食堂的方向,传来第一声开饭的钟声。

    当——当——当——

    沉沉的,像心跳。
最新网址:www.00shu.la