为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?

大千世界 121 0

  FC(Family Computer)诞生于 1983 年,90 年代开始在中国大面积流行。想必 FC(NES / 红白机 / 小霸王)是各位 80 后、90 后大叔的童年回忆。还记得那个火热的夏天,刚放学的我们,约上几个小伙伴,围坐在电视机前,双打魂斗罗的场景吗?FC 上诞生了太多太多经典的游戏,《魂斗罗》《超级马里奥兄弟》《双截龙》《坦克大战》《雪人兄弟》...... 陪我们度过童年美好的时光。

  大家一定很想知道 FC 是如何用孱弱的机能实现精美的游戏画面的吧。(好吧,大家其实并不想)。

  在这里我就简单介绍一下 FC 的显示技术,顺便带大家找寻童年的记忆。绝不采用生涩难懂的专业术语,力求以最轻松的方式向大家科普,我的目标是,让我奶奶也看得懂。

  FC 游戏最重要的组成部分是:角色与背景

  没错,正如大家所选的,一款游戏最重要的组成部分就是角色与背景。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第1张图片-大千世界


  人类历史上第一款家用主机 奥德赛(Odyssey)

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第2张图片-大千世界


  《战神 4》游戏

  两个游戏都是由背景和角色构成。

  最老和最新,两者隔了 46 年,在这 46 年的岁月里游戏画面的基本组成元素从未改变过。

  我们就以这两方面入手,说说 FC 游戏的画面技术吧。

  文章分为 5 个章节。

  1.背景

  2.角色

  3.水平切割

  4.命名表

  5.某些游戏运用的奇技淫巧

  (1)背景

  背景,顾名思义,就是游戏人物活动的场景。没有背景,只有黑漆漆的一片,这游戏还怎么玩?

  FC 的分辨率很低,只有区区 256x224,什么概念呢,我们的“真 4K”游戏机 ps4 pro 的分辨率是 FC 的 145 倍,换句话说,ps4 pro 能装下 145 个 FC 画面。

  FC 的背景绘制存在极大的限制,毕竟是 1983 年的硬件,当年的程序猿和美工狮是在如此恶劣的环境中开发游戏。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第3张图片-大千世界


  这个场景大家肯定再熟悉不过(为了突出背景,去掉了人物)。玩过 FC 的人不可能没玩过这个游戏。没错,这个游戏就是大名鼎鼎的《魂斗罗》,又名《双截龙》,俗称《坦克大战》,诨名《沙罗曼蛇》......

  大家猜猜,绘制这个背景使用了多大的内存?

  这个截图以 png 格式保存,大小为 2.43KB。然而,FC 的显存只有 2KB。所以,用现代的方法连一个最简单的场景都做不出来。

  聪明的程序猿用一个很聪明的方法完成了这个“Mission: Impossible”。

  大家仔细观察一下这个背景,有没有发现,地板和砖块都是用方块拼出来的?

  对了,就是用方块(tile)拼!

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第4张图片-大千世界


  加上网格就很直白了,大家都看出来了吧,FC 游戏的背景就是用一个个方块拼出来的。

  每个网格就是一个方块,方块是 8x8 像素,横着数 32 个方块,竖着数 28 个方块,总共 32x28=896 个方块。

  这些方块都是大量地重复使用。

  FC 游戏里有个拼图库(个人翻译,专业术语叫 CHR)。

  如下图所示:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第5张图片-大千世界


  里面一个有 16x16=256 个方块。

  大家仔细找找,这个场景里的所有方块都能在拼图库里找到。库里甚至还能找到一些奇奇怪怪的东西,那是之后的场景素材。

  比如说这个问号,就是由 4 个方块组成。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第6张图片-大千世界


  库里每个方块都有自己的索引,简单说就是编号。

  如果想用一个方块,直接从拼图库里按编号找就行了。

  所以,FC 游戏的画风其实是这样的:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第7张图片-大千世界


  (逼死密集恐惧症)

  大家还能脑补出游戏原来的样子吗?

  整个屏幕被分成 32x28 个方块,每个方块包含一个编号,根据编号找到拼图库里对应的拼图,然后显示出来。

  大家注意到没有,屏幕一共有 32x28 个方块,拼图库一共有 16x16 个方块,所以,拼图库的方块必然有很多被重复使用的。比如说满屏幕的 24 号...... 拼图库里 24 号对应的就是蔚蓝的天空。

  16x16/(32x28)=28%,整个背景只有 28% 的内容是不重复的,剩下的 72% 必须重复,这是逼死美工狮的节奏啊。

  所以,FC 游戏的过场动画大多都是很小的一块屏幕,比如:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第8张图片-大千世界


  全屏?美工狮:“臣妾做不到啊!”

  FC 游戏已经把素材重复利用发挥到了极致。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第9张图片-大千世界


  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第10张图片-大千世界


  大家有没有发现,这朵云和这颗树长得一模一样。

  没错,云和树用了拼图库里同样的 6 个方块,只是换了颜色而已 。

  它们是如何换颜色的呢?

  用调色板(PALETTE)。

  调色板,顾名思义,就是给方块上色的。

  FC 一共可以用 53 种颜色,调色盘从这 53 种颜色里选取 3 种颜色,“透明”也算一种颜色(此时显示背景的底色),一共 4 种颜色。

  这 4 种颜色用来给方块上色。

  这就意味着每个方块只能有 4 种色彩。(注意,每个方块是 8*8=64 个像素)

  绝对不可能有超过 4 种颜色的方块存在,请大家尽情地找吧,找到第 5 种颜色有大奖,奖品是 ps4 plus 一台。

  调色板可以有 4 个,每个方块就有 4 个配色方案。

  4 个调色板如图所示。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第11张图片-大千世界


  每一行就是一个调色板,数字表示该颜色的号码,0F 代表透明色。

  聪明的小伙伴们知道云和树分别用的是哪个调色板吗?

  当年的程序猿就是用如此巧妙的方法绘制背景来节省内存的。

  但是,这种背景绘制方法是美工狮的灾难:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第12张图片-大千世界


  大家有没有发现,这些平台的边缘有点不正常,有锯齿状的东西。

  给图片加上网格:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第13张图片-大千世界


  大家看出来了吗,这些锯齿就是因为方块与方块之间的过度没处理好所造成的。

  前文说过,每个方块只能有 4 种颜色,如果两个方块用的调色盘颜色差异比较大,处理不好就容易出现这种问题。

  所以,背景的绘制很考验美工狮的水平。

  美工狮:“总监,我实在肝不动了......”

  也有很多天才的美工狮用如此苛刻的条件做出精密的作品。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第14张图片-大千世界


  比如这个场景,惊为天人,完全看不出方块的痕迹,也看不出太多重复的东西。堪

  称 FC 游戏美工的典范。

  总监:“嗯,干的不错,晚上加鸡腿...... 乔豆麻呆,刚才那个背景也是你画的吧?”

  其实这两张图出自同一个游戏,《忍者蛙》。

  我带大家复习一下这章的内容。

  1.FC 画面是由方块组成,而且方块只能在拼图库里找。

  2.构成背景所用的方块至少有 72% 的内容重复。

  3.每个方块只能有 4 种颜色,且总共有 4 种配色方案。

  那么,用 FC 到底能不能画出美女来呢?必须可以!!大家坐稳,老司机开车了。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第15张图片-大千世界


  拿走,不谢,请叫我雷锋。

  (2)角色

  现在我们已经有背景了,再加上角色,就可以愉快地游戏了。

  很幸运,角色和背景一样,也是由 8x8 的方块构成,然后由 4 色调色盘上色。

  为什么说幸运呢?因为我可以不用把同样的内容讲两遍了......

  就用大家最熟悉的《双截龙 2》做例子。

  《双截龙 2》的主角就是大家最喜爱的比利:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第16张图片-大千世界


  Oh 不,应该是这个比利:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第17张图片-大千世界


  第一章里已经对方块进行过介绍了,在这里我就直接把网格画上。(为何裆部有一块迷之凸起?)

  在这里,我们就不能把这个叫做方块了,我们要叫它“活动块”(sprite)。

  活动块,顾名思义,就是“可以活动的方块”,背景的方块无法灵活活动,但是,活动块就没有这个限制,所以我们控制的角色可以上天入地,无所不能。

  大家可以看出,比利一共由 10 块活动块拼成。游戏里,主角,敌人,子弹等一切活动的东西都是由活动块构成。

  但是,活动块也不是无限使用的,不然为何真三国无双不出 FC 版(删除这句话)?

  同一个画面最多能使用 64 个活动块。而且,64 块也不能随便乱用,因为 FC 是用“行”为单位逐行输出画面的,由于机能的限制,同一行最多只能输出 8 块活动块。

  那么,万一同一行活动块超过这 8 块,会怎么样呢?FC 会瞬间爆炸?

  我们先来玩一个找茬的游戏。大家来找茬:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第18张图片-大千世界


  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第19张图片-大千世界


  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第20张图片-大千世界


  无奖竞猜,以上 3 张图有几处不同?每张图的活动块都有不同程度地缺失。想必大家已经知道答案了吧!

  当同一行活动块的数量超过 8 个的时候怎么办?只要让超过部分消失就行了。

  程序猿:“我是处女座,每行活动块数量绝对不能超过 8 个!”

  但是,消失过狠了,这游戏就没法玩了,可以看出来,图上有 2 颗子弹,一颗红色,一颗绿色,但是 3 张图都没有把子弹显示全。也就是说,子弹隐身了。

  “子弹隐身?玩毛啊!”摔手柄。

  在消失活动块时有个优先级设置,优先级低的活动块消失。

  程序猿在设计游戏时,通常让每个活动块的优先级轮流起来。这一帧你优先级低,你滚蛋,下一帧我优先级低,我消失,谁也不吃亏。

  此时,在玩家眼里就表现出闪烁的现象。

  子弹并没有消失,只是变闪了,还能愉快玩耍。

  但是,FC 游戏里有一些很庞大的 BOSS,怎么解释?

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第21张图片-大千世界


  《超级魂斗罗》第一关的直升机 BOSS,宽度明显已经超过 8 个活动块了,为何它

  没有闪烁?

  这个问题问的太好了(观众:明明是你自己问的好不好)。

  我偷偷告诉大家,其实这个 BOSS 不是敌人,而是背景。

  惊不惊喜,意不意外?

  用背景如何做出 BOSS 来?请看下一章。

  (3)水平切割

  上两章内容,已经介绍了 FC 画面的基本原理,这一章就是进阶内容。

  水平切割(Raster Scroll)是背景处理的一个特殊技巧,能大幅提高游戏画面效果,广泛运用于 FC 后期的大作中,由于它比较重要,所以单独列出一章。

  第一章讲了背景的组成,但是这种方法组成背景有局限性。背景只能有一张,缺乏层次感。

  众所周知的一个道理,离我们近的东西走的快,离我们远的东西走的慢。当所有东西都绘制在同一张背景里时,就看不出快慢的区别了。

  比如这张图:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第22张图片-大千世界


  当马里奥往前走时,所有的背景(山 树 云 砖块)都是同步运动的,就像在一张巨大的墙纸前移动,没有层次感,这显然和实际生活体验不服。

  玩家对画质的追求是无止境的。

  但这显然难不倒我们聪明的程序猿。

  前面提到过,FC 是用“行”为单位逐行输出画面,那么,在输出完一行时,重写下一行背景的横坐标,就能造成背景行的错位现象,就能实现行与行之间的相对运动。

  层次感就这样处来了。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第23张图片-大千世界


  看这个图,是不是舒服多了呢?

  水平切割不止能制造出层次感,还能制造出巨大的 boss 来。

  回到第二章的结尾。

  第二章说过,活动块有 64 个总数限制和同行 8 个限制。直接用活动块做 BOSS 就难免显得小家子气。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第24张图片-大千世界


  《忍者龙剑传 3》的这个 boss,和隼龙差不多大,没有 boss 应有的魄力。但是没办法,这是活动块所能达到的极限了。

  怎么办?

  中国有句古话,“活动块不够,背景来凑!”

  聪明的程序猿想到了用背景充当 boss 的方法。

  大家有没有发现一个有趣的现象,凡是打这些用背景做的巨大 boss 时候,背景画面都是纯色的(以纯黑色居多)。

  就拿刚才的《超级魂斗罗》为例,在打 boss 前,天上有云:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第25张图片-大千世界


  走过这个房子之后,云消失了,背景变成纯黑色:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第26张图片-大千世界


  打完 boss 之后,云又回来了:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第27张图片-大千世界


  让云消失,背景变成纯黑色,就是为了利用背景来绘制 boss。

  假如云没消失,boss 战时云就会跟着 boss 一起动,那就露馅了。

  Boss 水平移动的问题解决了。

  那么,他是如何垂直移动的呢?

  比如《超级魂斗罗》的第三关的 BOSS:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第28张图片-大千世界


  从地下徐徐升起的效果是如何实现的?请看下一章。

  (4)命名表

  命名表(nametable),其实,第一章和第三章的内容就是关于命名表的操作,为了能够循序渐进,所以在这里正式提出这个概念。

  大家还记得第一章的这个图吗?

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第29张图片-大千世界


  这就是一张命名表。

  还记得第一章说过的话吗?

  “整个屏幕被分成 32x28 个方块,每个方块包含一个编号,根据编号找到拼图库里对应的拼图,然后显示出来。”

  FC 游戏的背景包含 2 张命名表,水平排列或者是垂直排列

  比如《超级魂斗罗》第一关,就是水平排列的 2 张命名表。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第30张图片-大千世界


  半透明的那块是屏幕,也就是我们看到的部分。

  然后,屏幕就在这命名表中滚动,不断刷出新的命名表。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第31张图片-大千世界


  场景看起来是无限延伸的,但命名表只有 2 张,这是不断滚动刷新的结果。

  再回到第三关的 BOSS

  这是垂直排列的两张命名表。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第32张图片-大千世界


  第三章提到过:“FC 是用“行”为单位逐行输出画面,那么,在输出完一行时,重写下一行背景的横坐标,就能造成背景行的错位现象,就能实现行与行之间的相对运动。”

  重写背景的横坐标,就能达到水平位移的效果,那么重写纵坐标不就能达到垂直位移的效果了吗?没错。

  引申一下,FC 在输出一行画面时可以决定输出命名表的任意一行画面,而不是严格按照命名表的顺序来。

  BOSS 可以分成若干行,在输出画面时,第一帧输出 BOSS 的第一行,下一帧再加几行,以此类推,若干帧后 BOSS 就显示全了,这样就呈现出从地下徐徐升起的效果。

  (5)某些游戏运用的奇技淫巧

  看完了前四章内容,相信大家对 FC 打画面技术有一定的了解,下面我们就进行实战吧,对一些有特殊效果的画面进行分析,运用之前学的知识,看看这些特殊效果到底是如何实现的。

  FC 游戏,堪称奇技淫巧的大合集,程序猿和美工狮们大显神通,运用这孱弱的机能实现了很多不可思议的效果。玩 FC 游戏的其中一个乐趣就是,看到一个不错的画面,思考它的实现原理。我将举一些例子,在我公布答案之前,大家可以思考一下,看看聪明的你能不能猜到答案。

  1.震惊!一个方块居然出现了第五种颜色

  第一章曾经说过,调色盘只能用 4 种颜色,所以一个方块最多只能有 4 种颜色。

  但是,请大家看这张图。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第33张图片-大千世界


  请看箭头指出的那个位置,组成龙嘴的那个方块。

  大家发现了什么没有?

  把方块单独拿出来,放大看看。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第34张图片-大千世界


  数数有几种颜色。

  黑 白 浅绿 深绿 红!

  一共 5 种颜色!

  我之前说过,一个方块绝对找不出第 5 种颜色,如果找出来,奖励什么来着?赶紧私信我要奖品吧。

  但是这到底是怎么实现的,莫非是用了特殊芯片不成?

  我就公布答案吧。

  刚才说了,中国有句古话,“活动块不够,背景来凑!”

  其实美国也有句俚语,“背景不够,活动块来凑!”

  没错,这第 5 种颜色就是用活动块凑出来的。

  这是去掉活动块之后的样子。只剩 4 种颜色:

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第35张图片-大千世界


  一口洁白的牙就这么没了。

  一个方块 + 一个活动块,里最多能显示 7 种颜色。为何不是 4+4=8 种?留给聪明的观众自己思考。

  FC 游戏里,活动块和背景难舍难分,背景可以做 boss 弥补活动块的数量限制,活动块也能做一部分背景弥补背景不够灵活的缺点。一些 boss 就是背景和活动块共同组成。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第36张图片-大千世界


  比如《魂斗罗》中的这个 boss,身体是背景,灵巧的双手是活动块。

  活动块:“我和背景君通力合作,不信阻止不了你!”

  2.两根粗又硬打架,究竟是为何?

  《鸟人战队》的关底 boss 战,机器人和 boss 对打。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第37张图片-大千世界


  两者的体型都比较大,那么,他们到底是活动块构成还是背景构成?

  如果是活动块构成,同行的活动块数量肯定超过 8 个了,但是却没有出现活动块消失现象。

  如果是背景构成,它们就无法相对运动。

  给大家一分钟思考时间。

  其实答案很简单,只要把对方打败就能看出来。

  

为了节省内存,任天堂对超级玛丽使用了哪些逆天的技巧?-第38张图片-大千世界


  把对方打败之后,出现爆炸效果。

  眼尖的朋友一下子看出来了,对方没有活动块消失,而我方却出现了活动块消失现象。游玩时候很明显感受到,此时我方在闪烁,对方没有闪烁。

  这是因为爆炸效果是活动块构成的,同一行的活动块增加到超过 8 个,势必会产生闪烁现象。

  我方闪烁,对方没闪烁。这意味着什么?我方是活动块,对方是背景。

  活动块大战背景!大家猜对了吗?


标签: 游戏

抱歉,评论功能暂时关闭!