这两天逛知乎的时候,差评师看到一个问题:为什么魂斗罗只用128 KB就能做到这么长的故事?
其实按照现在的标准来看,1987年上映的《魂斗罗》的剧情并不是很长,只有八个场景的线性排列。如果我把一个晚上花在搬森林上的时间拿出来,也许能过关。
不过八关魂斗罗当时制作精良,但真的只有128 KB。
128 KB是什么概念?这篇几分钟就能看完的文章,需要10倍以上的流量。
90年代前后,游戏开发者可以用这128 KB让人开心一整夜。他们是怎么做到的?
真巧。差评君本人就是一个疯狂的游戏开发者,每年都会参加48小时极限游戏开发活动。
所以,我才能真正接触到这个关于游戏开发的小问题。所以今天就来和大家聊聊那些可以玩很久的老游戏是怎么被做得这么小的。
相对于现在的单机游戏,由于早年电子产品技术落后,家用电脑磁盘空间、显存、内存不足,开发一款好的游戏就像在电线杆上跳舞。
所以相对于今天的游戏开发者,当时的人在空间利用率上达到了巅峰。
一般来说,游戏=艺术和技术。从技术的角度来说,“艺术”是通过物质来展示的,“技术”是通过代码来实现的。
翻译。。类语言,古代2D游戏由映射代码的声音效果组成。
事实上,代码根本不占用空间。说白了就是一堆带英文数字标点符号的文本文件。
差评君打开记事本,用滚面键盘敲击1000个英文数字,保存。这个txt文件是4KB。
相比之下,纹理、音效等美术素材在当时是令开发者头疼的问题。
先说贴图。计算机中的一切本质上都是一堆信息。一张图片应该包含每个像素的颜色信息和像素的位置信息。
比如我之前的图,说明了1000个字符占用4KB,实际占用44 KB。
FC时代主流游戏素材的存储格式虽然和现在有所不同,但大致相同。
那张44 KB的图片大小是788 * 388,FC经典游戏《超级马里奥兄弟》的一级地图中所有场景的大小加起来至少是那张图片大小的n倍。
它也有8个场景,每个场景有4个小级别。
但是《超级马里奥兄弟》的大小只有64 KB,比魂斗罗还小。
这时候就不得不介绍一种方法:平铺地图。
这是一个调色板一样的东西。游戏开发者提前准备好游戏中会出现的素材,然后在运行游戏的时候放在一起。这个素材叫平铺,整个素材包叫平铺图。
这样一来,上图所示的长长的一级场景就不需要事先搭建好再存储,而是可以在玩的时候重复使用事先准备好的东西。
FC版《超级马里奥兄弟》看似有那么多关卡,实际上已经出现了那么多东西。
其实只要你仔细观察这一点,就能发现当时的老游戏有很多重复的素材,比如开头提到的《魂斗罗》。
在红白机时代的游戏,只要素材读取好了,运行的时候用代码告诉计算机这块素材应该出现在哪个位置就行了。代码占地儿小啊,写起来不心疼!
也就是说,你小时候在电视里浴血奋战的地方其实是「 赶工」赶出来的,只不过这个赶工运算量并不大,当时游戏帧率要求也不高,所以完全不影响体验。
差评君甚至见过一个极端例子:整关的Tile 加起来才10 个,然后剩下的都是代码。
然而,用重复素材搭场景还是不能满足贪心的老开发者,他们还有些骚操作。
咱们再看看这张熟悉得不能再熟悉的场景吧。
这个场景里的云朵和草垛其实是一个玩意儿,差评君当年刚听说这个冷知识的时候,感觉童年被敲碎了。你不信再仔细瞅瞅形状和纹理,它俩除了颜色一模一样。
如此一来只需要在生成草垛的时候借云朵过来,加一个颜色的信息,就行了。
这让我想起大学时代月底零花钱濒临透支时,只买一个菜然后问阿姨多打点汤汁浇在饭上的感觉一样,人在资源缺少的时候能做到多抠,你永远想像不到。
这个手法其实也挺常见。魂斗罗双人模式下的奖牌,两个兄贵的模型,也是这么干的。
一个游戏除了画面,还要有音效,声色俱佳才能成为经典,但音效这种多媒体素材也是个占地方的玩意儿。
去任天堂官方网站下载了《超级马里奥兄弟》 用MP3 格式存储的背景音乐,短短1 分21 秒你猜猜占地多少?
Super Mario Bros. medley来自差评00:0001:21
3.13 MB 。而FC 版本整个游戏的大小前面也说了—— 64 KB 。
其实在FC 时代的游戏里,音效存储和现在很不一样。
现在的主流音乐格式其实是音频文件,这类文件里存储的信息要描述整个声音的构成。
但在FC 时代,游戏音效的处理思路可以参考MIDI 文件,只存储排列好的音符当中的音色、频率和音高等。
这两类文件,哪个信息量大,一看就明白了吧。
说白了,用类似MIDI 文件存储的是一本乐谱,而音频存储的是整个演奏出来的音乐。
现在咱们对几M 的空间一点都不心疼,所以就直接存下整个音频了。但在当时。想想差评君那个食堂里打饭的例子吧。
那么问题来了,只存储乐谱确实省下很多空间,但得有人演奏才能出声啊。
因此老游戏机里往往会用一块专用的音乐合成芯片,专门用来处理这些「 乐谱」,实时合成音乐。
只不过这些芯片能合成的音色种类有限,往往听上去都大同小异,但也颇有风味,被称作Chiptune —— 芯片音乐或者是8-bit 音乐,现在还有些音乐人在玩儿这个风格。
除了小格式+ 专用芯片,FC 时代的老游戏音乐往往不长,就是几个旋律来回循环,这么一来游戏音效占地也就不大了。
再加上当时没有游戏引擎的概念,代码直接用硬件跑,这又省了很多不必要的文件。
于是,我们看到了一个仅仅占用128 KB 却包含8 个关卡的《魂斗罗》 ,或者是占用64 KB 却包含32 个关卡的 《超级马里奥兄弟》 。
在当年的极限开发环境下,一个游戏程序员不光要知道怎么实现功能,还要知道怎么省资源,想骚点子压缩素材。放现在的游戏公司里,那些人个个都是特种兵。
存储和传输技术都比较落后导致的这一情况,其实持续得挺久。
哪怕2000 年之后开发者已经能稍微放开手动作大一点了,人们对空间大小依旧很敏感:游戏下载要吃网速,安装要占硬盘。
在网络游戏时代,差评君还听说过有产品经理因为安装包太大会考虑砍功能的坊间传说,就怕用户嫌下载时间久,不尝试了。
不知道各位还记不记得,小时候和同学在课间讨论游戏时,假设有人吃下了某人的推荐,一定会问一句:这游戏多大?
随着网络基础建设突飞猛进导致网速变快,存储技术提升导致存储成本下降,开发环境没那么极限了,人们没这么敏感了,「 这游戏多大」这句话也很少听到了。
回到当时音频和MIDI 的例子,现在存下大音频文件花的成本,可能比加一块音乐合成芯片低很多。
放开了手脚的游戏业界,把3D 游戏做出了新高度,用大量逼真建模和素材堆出极度真实画面的同时。
在占用空间上也开始放飞自我:在2011 年id Software 发售了一款游戏《狂怒》 ,需要占用25G 硬盘空间,这大胆动作在当时被各大玩家论坛吐槽,但也就这么卖了出去。
2018 年R 星发售的 《荒野大镖客:救赎2》 占用了100 多G,差评君买的PS4 版本到手是两张蓝光碟的罕见情况,周围尽管有吐槽,
但似乎没有7 年前吐槽 《狂怒》 那么狠。
技术发展,对一切事物的改变是很大的:当时的人们理所当然为了几十KB 绞尽脑汁做优化,现在的我们理所当然觉得一个3A 大作占用几十个G 非常合理,这两者差了好几个数量级。
科技发展改变的不光是我们的生活,也能极大改变我们的认知。
标题:为什么有32个关卡的超级马里奥兄弟只要64KB?
链接:https://www.52hkw.com/news/rj/65768.html
版权:文章转载自网络,如有侵权,请联系删除!