5月3日,立夏前三天,洛阳的气温毫无预兆地窜到三十度。
宿舍的电扇坏了,叶片有气无力地转着,搅动一室闷热。李君宪盯着屏幕上那个诡异的Bug,额角的汗滑到下巴,滴在键盘的空格键上。
Bug描述很简单:当玩家在“无事可做”状态下静止超过两分钟,然后移动,时间系统理应恢复正常流速。但测试时,有四分之一的概率,世界时间会卡在某个随机倍率——可能是0.5倍慢放,也可能是10倍快进,再也回不到1.0。
更诡异的是,这个Bug无法稳定复现。李君宪测试了二十次,只出现了三次。陈末在北京测试了三十次,出现了八次。林薇用自己的电脑测试十次,一次都没出现。叶晚测试五次,出现了两次。苏语没装开发环境,没法测。
“像是时间系统的状态机在某个边缘情况下死锁了。”陈末在语音会议里说,背景是清脆的键盘声,“我打了日志,发现Bug出现时,world.timeScale的值会被写入一个非法的浮点数,有时候是NaN(非数字),有时候是Inf(无穷大)。但不知道触发条件。”
“和渲染线程的同步有关吗?”李君宪问。他的代码里,时间系统和渲染更新在两个不同的线程里跑,靠锁同步。这是为了性能,但也埋下了隐患。
“有可能。我加了更细粒度的日志,今晚跑通宵测试,看能不能抓到现场。”陈末顿了一下,“但即便找到原因,修复也可能需要重构时间系统。距离5月10日的节点只剩七天了。”
压力像一层透明的膜,贴在皮肤上。宿舍里更热了,李君宪能闻到机箱散热口喷出的焦糊味——那台三千块攒的老爷机,在连续四十八小时高负载后,终于开始抗议。
“先不管这个Bug。”林薇的声音进来,背景是画笔在纸上的沙沙声,“遮罩图的Alpha通道我做好了,但导入工程后,窗框边缘的渐变在有些机器上会出现锯齿。叶晚,你那边显示正常吗?”
“我……我这里正常。”叶晚的声音有些犹豫,“但我电脑配置低,可能看不出来。林薇姐,你把图发我,我用我的电脑再试试。”
“好。另外,磨损素材的随机组合系统,我写了简单的测试程序。”林薇继续说,“但发现一个问题:如果每次开局场景的磨损程度都随机,会破坏‘积累感’。玩家今天擦干净的桌子,明天开局又脏了,就没有‘经营’的实感了。我建议改成:磨损程度在第一次开局时随机生成,之后存档,每次读档沿用同一套磨损。这样,这个世界会‘老’下去。”
“同意。”李君宪记录,“但存档系统还没做,这是个远期目标。现阶段,就随机吧,增加重玩价值。”
“苏语那边呢?”他问。
“门轴声的第二个版本我优化过了,去掉了空白段落的杂音。”苏语的声音很轻,背景有细微的电流声,像是在用不太好的麦克风,“但更大的问题是,环境音的分层。我做了三轨:远处市声、中景风声、近处室内音。在‘无事可做’状态下,市声和风声应该加速,室内音应该冻结。但我用测试程序跑,加速后的声音会变调,像磁带快进,很假。我需要知道时间加速的具体倍率,好做相应的音频处理。”
“目前是5倍。”李君宪说,“但Bug出现时,可能是任意值。你能处理动态倍率吗?”
“可以,但需要实时重采样。我的笔记本性能不够,会卡顿。除非……”苏语犹豫了一下,“除非在加载时预生成几个常用倍率(1x、2x、5x、10x)的音频版本,运行时切换。但这样内存占用会翻几倍。”
“陈末,音频内存预算还有多少?”李君宪问。
“我看看……目前音效占12MB,环境音占8MB,总共20MB。如果预生成四个倍率,环境音部分会到32MB,总占用44MB,超了我们设的40MB红线。”陈末回答得很快,“而且这只是‘冲淡’,如果以后做‘纤秾’,牡丹花开的声音、花瓣飘落的声音,内存会更吃紧。”
又是妥协。开发就是不断妥协的过程,在理想和现实之间,在艺术和技术之间,在“想做”和“能做”之间。
“先做2倍和5倍两个预生成版本。”李君宪做出决定,“10倍加速很少触发,暂时不管。苏语,这样可以吗?”
“可以。我今晚就做。”苏语顿了顿,“另外……我买了那个话筒。”
群里安静了一瞬。
“古琴爱好者捐的那两百块?”林薇问。
“嗯。二手的,但比学校琴房的好。我试录了一段,发给你们听听。”苏语发来一个音频文件。
李君宪点开。是古琴的泛音,几个清冷的单音,在空气里振动,尾音很长,长到几乎消失时才接下一个音。录音质量明显好了,能听到手指离开琴弦时细微的摩擦声,能听到琴弦本身的金属余韵。最后一个音结束后,有两秒绝对的安静,然后,一声极轻的、几乎听不见的叹息——不知道是苏语的呼吸,还是话筒的底噪。
“这是‘冲淡’主题旋律的动机。”苏语说,“只有五个音。我想用这五个音,变奏出整个游戏的音乐。煮汤时,慢速变奏。客人进门时,加一个装饰音。下雨时,用泛音模拟雨滴。打烊时,拉长,淡出。”
“很好。”李君宪说,“就用这个方向。但注意内存,别做太复杂的变奏。”
“明白。”
会议结束。李君宪看着记满三页的
更多内容加载中...请稍候...
若您看到此段落,代表章节内容加载失败,请关闭浏览器的阅读模式、畅读模式、小说模式,以及关闭广告屏蔽功能,或复制网址到其他浏览器阅读!