十人测试结束后的第二天,陆铮把那台发烫的手机拆了后盖。
电池没有鼓,主板也没有烧。他把一根细线贴在芯片旁边,另一头接着温度计。游戏重新跑起来,第三分钟四十六度,第六分钟五十三度,第八分钟五十八度。
帧数从三十一掉到二十。
江远看完记录,只说了一句。
“先停玩法,解决帧率和发热。”
“地图还没定。”陆铮说。
“地图可以改。”江远说,“手机烫到拿不住,做完也不能上。”
“停多久?”
“做到四十五帧。”
陆铮把温度计从桌上拿起来。
“三十帧就能玩。”
“结论是四十五。”江远说,“理由是刚开局四十五,打到第十分钟还能剩三十。要是一开始只做三十,热起来就只剩二十。”
“还要管温度。”
“后盖不能超过四十五度。”
“便宜机器做不到。”
“那就分档。”江远说,“能关的先关,能少画的少画。最便宜的保三十帧,主流的跑四十五。”
陆铮在白板上写下两个数:三十,四十五。
写完,他又把现在的二十写在最下面。
“这不是改一处代码。”他说。
“我知道。”
“画面、内存、声音、联网都得拆开。做玩法的人天天加东西,我们天天往下减,最后谁也说不清是哪一处拖慢。”
“那就分开。”
“怎么分?”
“引擎组独立。”江远说,“只管一件事,让同样的东西在更差的手机上跑得更快。”
陆铮看着白板。
“几个人?”
“你说。”
“十个。”
“行。”
陆铮转过来。
“不是十个都写一样的。两个管画,两个管内存,一个管声音,两个管联网,两个做工具,我盯最后那个数。”
“就按十个。”江远说,“从今天起,玩法要加东西,先给你看。你说放不进去,就不能进。”
“何那边会骂。”
“让他来找我。”
独立的代价当天就写在墙上。
十月那场只让十个人打完了十分钟,离一款能上的东西还远。原定十月做完的六个人物,只留两个。观战继续往后放,回放不做,地图上的草和水都改成不会动的图。整体排期往后推六周,引擎组先拿走窗边最亮的十张桌子。
江远没有把这六周藏起来。他在白板左边写“晚六周”,右边写“二十到四十五”。
“六周以后到不了呢?”陆铮问。
“先看每周的数。”江远说,“六周不是给你闭门做东西,是给你每七天交一次结果。”
第一周,陆铮把一帧拆成了六段。
人物和地图花二十七毫秒,光和影十一毫秒,界面六毫秒,联网四毫秒,声音两毫秒,剩下的杂项九毫秒。加起来五十九毫秒,所以一秒只能跑十七到二十帧。
“四十五帧,一帧只有二十二点二毫秒。”他说。
“先砍哪一段?”
“画。”
“怎么砍?”
“原来一个东西送一次。”陆铮在纸上画了二百一十七道短线,“现在按同一种图合起来送。二百一十七次,先压到五十次以内。”
陈小满从楼下上来送外卖,看见那张纸上的二百一十七道短线,把筷子放在盒盖上。
“合起来送,画出来的还是一样?”
“一样。”陆铮说。
“那为什么不早这样做?”
“因为分开写最省事。”他说,“一样的东西能一起送,前提是开发者先想好哪几样算一样。想这件事要花时间,先赶进度的就不想。”
陈小满把外卖盒往他手边推了推。
“那你们现在想好了。”
“还没有。”陆铮说,“五十次以内,现在六十四。”
第二周,那张纸上的数变成了六十四。
第三周,变成四十六。人物和地图从二十七毫秒降到十二毫秒。画面看上去少了几层光,打起来的时候没人盯着地上的那一小块亮斑。
“还剩什么?”江远问。
“内存。”
陆铮把两张打印出来的图放在一起。一张颜色细,放大后每片砖都有深浅。另一张只有一半颜色,肉眼隔半米看不出差别。
“三十二位改十六位,图占的地方少一半。”他说,“不在屏幕里的先不装。走近了再取。”
“取的时候会不会卡?”
“会,所以提前两秒取。”
“玩家突然转身呢?”
“最近的一圈一直留着。”
“一圈多大?”
“比屏幕多半屏。”陆铮说,“再大就白占地方,再小就该取的时候来不及。”
“声音也进内存。”
“短的全放进去。”他说,“长的只放前一段,后面接着取。声音一共不到三兆。”
内存从一百八十六兆压到九十二兆。最便宜的机器不再跑到一半自己退掉,温度却只降了两度。
“温度为什么降得少?”江远问。
“结论不是内存。”陆铮说,“是芯片一直在算。画得少,算得不一定少。”
“算什么。”
“每个面怎么照、怎么被挡住。”他指了一下屏幕上的地砖,“这块地砖要算四层:底色、明暗、影子、边上的模糊。四层都算一次,热就来了。”
“能不能少算。”
“人物脚下留一层,远处地砖忍一忍。”
江远看着那块地砖,手指在桌沿敲了两下。
“层少了,画面会不会变丑。”
“会。”陆铮说,“少一层,边就不那么好看。”
“玩家看得见吗?”
“打起来看不见。停下来看能看见。”
陆铮盯了三天,最后关掉了一个东西。
“阴影每一帧都在重算。”他说,“人物不动,也算。”
“能不能不算?”
“大部分提前烘好。人物脚下只留一块圆的,跟着走。”
“那就做。”
十一月中旬,办公室里多了一张长桌。
桌子是从楼下搬上来的,原来用来放包装盒,长两米四。陆铮带人去了三次二手市场,又把能买到的新机各挑一台。桌上从左到右,先是几十块钱的旧手机,再是两三百的二手机、六七百的低价机、一千多的主流机,最右边是三千块的新机。
每台背面都贴着白纸,纸上写编号、处理器、内存和屏幕大小。充电线从桌后垂下去,接在四个插线板上。
江远第一次看见那张桌子时,桌面已经摆不下了。还有三台靠在窗台上,下面垫着没拆封的名片盒。
“这叫什么?”他问。
“测试桌。”陆铮说。
“太长。”
陆铮看了一圈。
“机海。”
名字就这么留下来了。
机海有一条规矩:同一张地图、同样十个人一局、同样十分钟。开跑前电量不低于八成,跑完记四个数:最低帧、平均帧、后盖最高温度、十分钟掉多少电。
每改一次,引擎组就从最左边开始跑。一台一台接,一台一台记。便宜手机最容易出错,有一台只能认两根手指,另有一台内存刚过百兆,进地图前就要先把声音关掉。
“几十块的也要跑?”江远问。
“要。”陆铮说,“它跑不动,至少要告诉玩家为什么。不能黑一下就没了。”
“最右边呢?”
“三千块那台看上限。”
“中间这些?”
“看我们能卖给多少人。”
那台做工具的人姓周,进来两个月,话比陆铮还少。他给每台手机做了同一个浮窗:左上角四个数,帧、温度、内存、当前有多少东西在送。跑的时候能看见,出了错也能照着这个数报。
何第一次看见浮窗时皱了眉。
“这个能不能关。”
“能。”陆铮说,“上线前关。”
“上线前记得关。”何说,“玩家看见二十帧会骂我们。”
“玩家本来也会骂。”陆铮说,“不写下来,我们连被骂在哪儿都不知道。”
“那就先留着。”
江远把编号最旧的那台拿起来。塑料后盖磨得发白,屏幕右上角有一道裂纹。这样的手机不一定有人拿来打十分钟对战,但引擎先替它留了一档。
十二月,陆铮做了两份一样的安装包。
人物、地图、招式都一样。一份用外面常见的现成工具打出来,一份走远芯自己的引擎。两份都装进那台一千多块的主流手机,室温二十四度,各跑十分钟。
第一份平均二十帧,最低十六帧,后盖五十四度。
第二份平均四十五帧,最低三十七帧,后盖四十三度。
江远让他又跑了一遍。
第二遍,二十和四十五没变。
“为什么能快一倍?”江远问。
“不是一处快一倍。”陆铮说,“送画面的次数少了,内存少了,阴影不重算,没看见的东西不画。每处省一点,最后从二十到四十五。”
“十个人,六周,换这二十五帧。”
“还换了一样。”
“什么?”
“下一款不用再从二十开始。”
陆铮把两张测试纸贴到机海前面的墙上。左边写二十,右边写四十五。纸下面没有庆祝的话,只有下一轮要测的三项:断网重进、低电量降速、连续运行一小时。
江远在那张桌子前面站了很久。
几十块的旧手机到三千块的新机,一排屏幕同时亮着。同一张地图在不同的玻璃下面跑,快的已经结束一局,慢的还在追最后一拨人。
他把最右边那台翻过来,看着后盖里面那块看不见的芯片。
“以后这些东西,”江远说,“我们自己造。”