十月的县城已经有了凉意。梧桐树叶开始发黄,风一吹,簌簌地落。街上的行人穿上了长袖,早晨的雾气要到十点才散。
浩宇工作室的窗户开著,但没人觉得冷。三台电脑屏幕亮著,主机风扇嗡嗡地转,散发出的热量让房间里暖烘烘的。墙上的白板写满了公式、架构图、待办事项,有些字跡已经被擦掉,但痕跡还在。地上堆著泡麵盒,墙角的水箱空了,桌上散落著草稿纸、铅笔、橡皮、直尺。
阿坤趴在桌上睡著了,眼镜歪在一边,手里还握著一支笔。王磊仰在椅子上,张著嘴,鼾声轻微。林浩坐在中间,盯著屏幕,眼睛里布满血丝。
屏幕上是一个黑色的控制台窗口,绿色的字符在滚动:
[info] 浩宇引擎2d v1.0 內测版
[info] 初始化完成
[info] 加载地图: test_world_01
[info] 加载角色: 10000
[info] 加载技能: 50
[info] 加载特效: 200
[info] 网络连接: 已建立
[info] 伺服器状態: 正常
[info] 准备就绪
下面是一行闪烁的光標,等待输入。
林浩的手指放在键盘上,微微发抖。不是紧张,是累。他们已经连续工作了七十二小时,这是內测前的最后衝刺。引擎的核心代码上周就写完了,但调试、优化、集成,花了整整七天。七天里,他们睡了不到二十小时。
他深吸一口气,敲下回车。
> start_test scenario_001
屏幕刷新,新的一行行日誌弹出:
[test] 开始测试场景001: 万人同屏战斗
[test] 生成角色: 10000/10000
[test] 分配阵营: 红方5000, 蓝方5000
[test] 初始化ai: 完成
[test] 启动同步: 完成
[test] 开始模擬...
屏幕上出现了画面。是一个简陋的2d战场,俯瞰视角。左侧是红色阵营,右侧是蓝色阵营,各五千个像素小人,密密麻麻,像两片不同顏色的蚂蚁。战场中央有一条河,有桥,有树林,有丘陵。地形是简单的色块,但能看出高低差。
没有声音,只有画面。一万个小人在移动,红色的向蓝色衝锋,蓝色的向红色迎击。在河桥上相遇,开始混战。技能特效亮起:火球是红色的圆圈,治疗是绿色的十字,衝锋是黄色的箭头。虽然只是简单的几何图形,但数量多了,竟有种壮观的、混乱的美。
屏幕右下角显示著实时数据:
fps: 58/60
角色数: 10000
网络延迟: 35ms
cpu占用: 78%
內存占用: 312mb
丟包率: 0.02%
fps稳定在58帧,偶尔掉到55,但很快恢復。网络延迟35毫秒——这是区域网环境,实际公网会高,但他们优化了同步算法,200毫秒以內玩家感受不到卡顿。cpu占用78%,內存312mb,在2002年的机器上,这是极限了。但最重要的是,它跑起来了。一万个角色,同屏战斗,不卡,不崩,不不同步。
林浩盯著屏幕,看了十分钟。战斗在继续,红蓝双方互有伤亡,但系统稳定。日誌里没有报错,没有警告。一切正常。
他按下ctrl c,测试停止。屏幕回到控制台。
“起来了。”他说,声音沙哑。
阿坤和王磊没醒。他走过去,轻轻推了推阿坤的肩膀。阿坤猛地坐起,眼镜差点掉下来。
“怎么了?bug?”
“没有。测试通过了。”
阿坤愣了几秒,然后猛地站起,扑到屏幕前。王磊也醒了,揉著眼睛凑过来。
“跑了多久?”阿坤问。
“十分钟。稳定。”
“数据呢?”
林浩调出测试报告。阿坤和王磊凑近看。报告很详细:每秒帧数、网络延迟分布、cpu占用曲线、內存泄漏检测、同步错误率……所有指標都在预期范围內,有些甚至超出预期。
“同步错误率0.003%。”阿坤喃喃道,“比我们目標的0.01%低三倍。”
“內存泄漏每天不到1mb,可以接受。”王磊说,“伺服器连续跑一个月也不会崩。”
三人看著报告,沉默了。房间里只有电脑风扇的声音。
然后王磊突然大笑起来,笑声很大,很嘶哑,像憋了很久终於爆发。
“我操!我们他妈真的做出来了!”
阿坤没笑,但眼睛亮得嚇人。他转头看林浩:“引擎……成了?”
“成了。”林浩说,“浩宇引擎2d,第一版,內测通过。”
阿坤深吸一口气,闭上眼,然后又睁开。他走到白板前,看著上面密密麻麻的公式和架构图。那些是他们过去三个月的心血:从零开始,没有参考,没有文档,全凭林浩脑子里的“未来思路”,加上阿坤的数学推导,王磊的工程实现,一行行代码敲出来的。
“动態光影测试了吗?”阿坤问。
“还没,现在测。”
林浩启动第二个测试场景。这次画面简单多了,只有一个角色站在黑暗中。角色手里拿著一把剑,剑身发出微弱的光。隨著角色移动,光照亮周围的地面,地面是简单的格子,但光影效果很真实:近处亮,远处暗,剑光照到的格子亮,照不到的暗。角色走到墙边,影子投在墙上,隨著剑光晃动。
“这是……”王磊凑近屏幕,“像素游戏能做出这种光影?”
“简化版。”林浩说,“基於距离的光照衰减,加上简单的阴影映射。每个光源计算量不大,但多个光源叠加,效果就出来了。在战斗中,技能特效都可以是光源,火球照亮一片,治疗术是柔和的绿光,闪电是刺眼的蓝白。”
阿坤盯著光影变化,手指在桌上轻轻敲著节奏:“算法是基於辐射度还是光子映射?”
“都不是,太耗性能。我用的距离场 预计算光照贴图。把场景分成网格,预计算每个格子的光照权重,运行时实时混合。虽然精度低,但快,而且2d够用了。”
“聪明。”阿坤说,“用空间换时间,2002年的机器能跑。”
第三个测试:粒子特效。屏幕上,一个角色释放“火雨”技能。天空中落下无数火球,每个火球落地后爆炸,溅射出几十个小火星。火星在空中飞舞,逐渐熄灭。同时,地面上燃起火焰,火焰摇曳,有烟雾升起。虽然粒子都是简单的像素点,但数量多,运动轨跡自然,看起来竟然有几分华丽。
“粒子数峰值多少?”王磊问。
“单次技能释放,最多同时存在五千个粒子。”林浩调出数据,“每个粒子只有位置、速度、顏色、生命周期四个属性,计算量小。但多个技能叠加,粒子数能破万。我们做了粒子合併优化,距离近的粒子合併渲染,减少绘製调用。”
“五千个粒子……”王磊摇头,“《传奇》里一个火墙技能,最多几十个粒子。我们这是碾压。”
“要的就是碾压。”林浩说。
测试进行了两个小时。他们测了所有核心功能:万人同屏、动態光影、粒子特效、天气系统(雨、雪、雾)、昼夜循环、物理破坏(可摧毁的墙体、树木)、音效混音(同时播放上百个音效不卡顿)……
每一项,浩宇引擎都做到了2002年的极限,甚至超越极限。
测试结束时,天已经大亮。阳光从窗户照进来,落在满是灰尘的地板上。三人坐在电脑前,看著最后的测试报告。
“总结一下。”林浩说,声音很平静,但手在抖,“浩宇引擎2d v1.0,核心特性:”
“一,支持万人同屏实时战斗,同步延迟200毫秒以內,同步错误率低於0.01%。”
“二,简化的动態光影系统,支持多个实时光源,性能开销可控。”
“三,高效的粒子系统,单场景可同时存在上万个粒子,支持合併优化。”
“四,內置天气、昼夜、物理破坏等环境交互。”
“五,资源热更新,无需重启客户端即可更新地图、角色、技能。”
“六,跨平台支持,目前適配windows 98/2000/xp,后续可移植到linux。”
“七,完整的工具链:地图编辑器、角色编辑器、技能编辑器、粒子编辑器。虽然简陋,但能用。”
他说完,房间里很安静。只有远处街道上传来的车声,人声。
“我们做到了。”阿坤轻声说。
“我们做到了。”王磊重复,然后笑了,笑著笑著,眼眶红了,“他妈的我三个月没出这个门,没洗过澡,没吃过一顿正经饭。但我做到了。”
林浩看著他们。阿坤瘦了至少十斤,脸上的颧骨凸出来,但眼睛很亮。王磊的鬍子长得像野人,头髮油腻得打綹,但背挺得很直。他自己呢?不用照镜子也知道,肯定好不到哪去。
“今天休息。”林浩说,“洗澡,吃饭,睡觉。明天开始,我们要用这把刀,去屠龙了。”
“屠谁?”王磊问。
“《传奇》。”林浩说,“但不止《传奇》。所有用老旧引擎、体验粗糙、外掛横行的2d网游,都是我们的目標。我们要告诉他们,2002年的技术能做到什么程度。我们要重新定义2d网游的標准。”
阿坤点头:“引擎有了,接下来是游戏內容。《浩宇传奇》的开发,可以全速推进了。”
“嗯。但在这之前,我们要做一件事。”林浩说,“把引擎的核心特性和测试数据,整理成一份技术白皮书。不发全文,只发摘要。不透露实现细节,只讲效果。然后,用匿名帐號,发到国內主要的游戏开发论坛。”
“为什么?”王磊不解,“这不是把我们的技术暴露了吗?”
“是展示肌肉。”林浩说,“我们要让圈內人知道,有一家叫浩宇的工作室,做出了一款碾压级的2d引擎。这样,当我们推出《浩宇传奇》时,玩家会有期待,同行会有压力,资本会注意到我们。”
“吸引投资?”
“不只是投资,是合作伙伴,是人才,是机会。”林浩说,“浩宇不能永远只有三个人。我们需要美术、策划、运营、市场。但以我们现在的名声和资金,招不到人。用技术白皮书打开局面,是最好的方式。”
王磊想了想,点头:“有道理。那我写,我擅长吹牛逼。”
“不吹牛,只讲事实。”林浩说,“把测试数据原样放上去,配上截图和简短的视频。不要评价,不要夸张,让数据说话。”
“明白。”
“阿坤,你负责整理技术文档,把核心算法用最简洁的方式描述出来,不透露细节,但要让懂行的人看出水平。”
“好。”
分工完毕。三人终於离开工作室,回到各自的住处。林浩回到家时,是上午十点。父母都出去了,家里很安静。他洗了个澡,热水冲在身上的感觉,像重生。三个月来第一次洗热水澡,皮肤都有些刺痛。
洗完澡,他坐在客厅的沙发上,看著窗外的梧桐树。叶子黄了,落了,秋天真的来了。
三个月。从七月中旬到十月中旬,三个月,他们做出了浩宇引擎。三个月前,他还在为八千块钱发愁,为下个月的宽带费焦虑。三个月后,他们有了一个足以改变行业的武器。
但还不够。引擎只是武器,还要有持武器的人,要有战术,要有战略,要有战场。
他想起了手机。那个没电的、沉默的手机。小艺的声音,那些未来的知识,那些精准的数据,都锁在那块黑砖里。他现在全靠自己了。
但他不慌。这三个月,他证明了,没有未来的金手指,他依然能做出一流的东西。他脑子里那些来自2028年的架构思路、设计理念、工程经验,是比代码更宝贵的財富。而阿坤和王磊,是他在这个时代找到的最好的伙伴。
他走上楼,打开抽屉,拿出那台手机。按下电源键,屏幕是黑的。对著窗外的阳光,依然没反应。他摸了摸背面那个太阳纹图案,冰凉。
“小艺,”他低声说,“你看到了吗?我们做出引擎了。虽然很简陋,但在这个时代,它是屠龙刀。你说过,要改变歷史,就要有改变歷史的武器。这把刀,够锋利吗?”
手机沉默。
他把手机放回抽屉,关上。然后躺到床上,闭上眼睛。
他睡著了,睡得很沉。三个月来第一次深度睡眠,没有做梦。
醒来时是下午四点。阳光西斜,房间里一片金黄。他起床,穿好衣服,出门。
去了工作室。王磊和阿坤已经在了,两人都洗了澡,颳了鬍子,换了乾净衣服。看起来像换了两个人。
“白皮书写完了。”王磊递过来几张纸,“你看看。”
林浩接过。標题是:“浩宇引擎2d v1.0 技术特性摘要”。內容很简洁,分几个部分:性能指標(万人同屏、低延迟同步)、技术特性(动態光影、粒子系统、环境交互)、工具链介绍。没有吹嘘,只有数据和事实。最后附了几张测试截图,和一段三十秒的演示视频——视频是录屏,用压缩工具压到5mb以內,可以在2002年的网速下下载观看。
“可以。”林浩说,“用匿名帐號,发到『游戏开发者家园』『中国游戏製作联盟』『闪客帝国技术区』这几个论坛。帐號名统一用『horizon_engine』。”
“好,我今晚发。”
“阿坤,文档呢?”
阿坤递过来一份更详细的技术文档,二十页,用词极其严谨,像学术论文。但核心算法部分都用了模糊描述,只讲思路,不讲实现。
“可以。”林浩说,“这个不发,留著。以后如果有人来谈合作,可以適当透露一些,作为技术实力的证明。”
“嗯。”
三人又检查了一遍引擎,確保没有明显的bug。然后,晚上八点,王磊开始发帖。
第一个帖子发在“游戏开发者家园”,这是当时国內最专业的游戏开发论坛。帖子標题:“国產2d游戏引擎新突破:浩宇引擎v1.0技术展示”。正文是白皮书內容,附件是截图和视频。
发完,三人守在电脑前,刷新页面。
最初几分钟,没回復。正常的,晚上八点,论坛人不多。
二十分钟后,第一个回復出现:“沙发。看標题以为是吹牛,看完数据……我跪了。”
接著是第二个:“万人同屏?2002年?楼主喝多了?”
第三个:“视频下了,看了。我操,这光影效果,这粒子数量……这他妈是2d?”
第四个:“楼主是哪个公司的?没听过浩宇引擎。”
第五个:“视频会不会是偽造的?用3d渲染冒充2d?”
质疑的居多。2002年,国內游戏开发还处在蛮荒期,能做出一款不卡的单机游戏就不错了,万人同屏的2d引擎,听起来像天方夜谭。
但王磊不解释,只回了一句:“欢迎技术討论,可提供更多测试数据。”
然后他发了第二个帖子,在“中国游戏製作联盟”。同样的內容,同样的反应。
第三个帖子在“闪客帝国技术区”,这里的网友更懂技术,提问也更尖锐。
有人问同步算法细节,王磊用模糊的语言回答:“基於状態快照的差分同步,加入客户端预测和服务端矫正。”不说具体实现,但懂行的人一听就知道,这是前沿思路。
有人问光影实现,王磊说:“距离场 预计算光照贴图,实时混合。”这也是2002年没人用过的技术。
有人问性能优化,王磊透露了一点:“空间分区、粒子合併、渲染批处理。”都是现代游戏引擎的標配,但在2002年,是黑科技。
渐渐地,回復的风向变了。从质疑,到震惊,到膜拜。
“楼主,你们团队有多少人?”
“核心三人。”
“三人?!做出这种引擎?!”
“嗯。”
“收徒吗?我想学!”
“暂时不收,但浩宇工作室在招人,有意向可发简歷。”
“在哪?北京?上海?”
“小县城,暂时保密。”
“薪资呢?”
“面议,看能力。”
论坛炸了。三个帖子,一夜之间,回复数都破百。凌晨两点,王磊的qq开始响,不断有人加好友,问技术,问合作,问投资。
“有投资人问,能不能聊聊。”王磊说。
“先晾著。”林浩说,“现在还不是谈投资的时候。我们要先拿出產品,证明引擎不仅能跑测试,还能做出好玩的游戏。”
“那这些技术问题……”
“你挑有价值的回答,不涉及核心机密的可以適当討论。建立技术影响力,但保持神秘感。”
“明白。”
凌晨四点,三人终於离开工作室。走在清冷的街道上,秋风很凉,但心里是热的。
“明天开始,”林浩说,“全力开发《浩宇传奇》。用我们的引擎,做出一款让玩家惊艷的游戏。引擎是屠龙刀,游戏是屠龙术。刀有了,接下来,练术。”
“目標是什么?”阿坤问。
“两个月內,完成第一个可玩版本。內容足够玩一周。然后,小规模封测,收集反馈,叠代优化。明年一月,公测。目標用户:那些对《传奇》失望、对私服厌倦的玩家。我们要给他们一个全新的选择:不卡,不掛,不坑,好玩。”
“能做到吗?”王磊问。
“必须做到。”林浩说,“我们已经没有退路了。引擎发了,名声出去了,全行业都在看。如果我们做不出好游戏,引擎再强也是笑话。我们会成为『纸上谈兵』的笑柄。”
阿坤和王磊沉默。他们知道这意味著什么。从现在开始,浩宇不再是一个默默无闻的小工作室。他们被推到了聚光灯下,虽然灯光还很微弱,但已经有人在看。
只能成功,不能失败。
“回家睡觉。”林浩说,“明天,战爭开始。”
三人分开,各自回家。林浩走在空荡荡的街道上,路灯把他的影子拉得很长。
他抬头看天。秋天的夜空很清澈,星星很多。他想起三个月前,也是这样的夜晚,他一个人,面对漆黑的手机屏幕,不知道前路在哪。
现在,他有了引擎,有了伙伴,有了方向。
但压力也更大了。以前没人知道他们,失败了就失败了。现在,他们暴露了,只能贏,不能输。
但他不怕。他有最好的刀,最好的伙伴,最好的时代。
2002年,中国网际网路的黄金时代,刚刚开始。
他要做的,不是跟隨潮流,而是创造潮流。
浩宇引擎,是第一把火。
《浩宇传奇》,將是燎原的星火。
他加快脚步,走进夜色。
明天,太阳照常升起。
而浩宇科技,要开始奔跑了。