- 精华
- 1
- 帖子
- 252
- 威望
- 1 点
- 积分
- 293 点
- 种子
- 12 点
- 注册时间
- 2006-10-2
- 最后登录
- 2024-7-5
|
由于涉及大量图像内容,建议大家直接观看视频版本
如果你有B站账号,希望能到B站为我“素质三连”
地址:https://www.bilibili.com/video/av62982739/
上期和大家聊了聊关于FC强化芯片音频部分的内容。收获到了不少积极的反馈,非常感谢大家的支持。正式开始前想说的是,我并非专业人士,虽然有一点点计算机专业受教育背景,但是十来年的工作经验都是在银行领域。我做的更多的事情是从那些真正的大佬们的口中或者是枯燥的技术文档中,筛选一些可以让我们普通玩家一窥大致原理的内容,用尽量简单浅显的方式呈现给大家。这个过程中,因为自身水平有限、以及从易懂性方面考量所做的一些取舍最终的内容难免会有一些疏失,希望大家能理解包容
这一期,我们来聊一聊这些芯片对于画面部分的加强。同样的,为了搞清楚这些芯片强化了什么,我们要先了解FC本身的画面显示规则或者说机能限制。这部分涉及的内容其实非常多,可能会有点上头。为了便于理解,我筛选整理出了下面这些基本上一看就会,一听就懂的内容。
一:FC游戏画面显示的基本规则
首先,FC的画面由3类4层图像组成。3类,分别为 精灵类、背景类,以及底背景类。4层,你可以简单的理解为4个图层。精灵类用于显示大多数游戏中的可动元素,比如主角,敌人,子弹等。他有两个图层(页面):0层位于背景之前,1层位于背景之后。这两个图层用于实现游戏角色和背景间相互的遮罩效果。比如魂斗罗第一关击败BOSS后,主角跳入炸开的通道前,精灵层是处于背景层的上方,所以是主角遮挡住了背景,跳入通道后,精灵层是处于背景层的下方,所以背景遮挡住了主角,角色所在的层可以在游戏内切换,但是并不能同时存在两个层。
FC画面的基本显示结构
背景层主要用于显示游戏的关卡舞台等,注意他共有4个页面。并且这4个页面在PPU内部是同时存在的。根据程序选择显示某个部分的内容。底背景页主要用于大面积的单色显示。还是以魂斗罗第一关击败BOSS后这个地方来解释。角色进入炸开的通道后,主角切换到精灵1页进行显示,所以背景层遮挡住了角色,同时,通道内的黑色部分是由底背景页显示的,所以角色并没有被黑色的底背景遮挡。但是底背景层不能绘制图形,后面提到的背景,只讨论背景层,不包含底背景层。
背景遮挡精灵
FC游戏用编程的方式,实现了类似镜头运动的画面控制方式。以魂斗罗为例,游戏开始的时候,除了当前显示的画面外,其实后面的一部分其实早已经绘制好了。当角色移动到一定的位置后,程序控制镜头(显示窗口)进行移动显示出位移后的画面,而不需要对画面全部覆写。这种方式加快了画面的刷新能让游戏的画面不断的从屏幕的一端展现出来,也就是我们所说的卷轴效果由于所有的背景页都是在同一层,所以FC只能实现一层卷轴效果
左边是游戏显示的内容,右上角是后台实际绘制的内容
FC游戏的画面,无论是精灵还是背景,都以字符块(图形块)为基础。这些字符快是在游戏的原始数据中就被绘制好了,所有的画面都是由这些字符块组合而成。虽然每个字符块是由**像素组成的,但是程序在后台调用和生成的画面并不是以像素而是以字符块为单位。背景层可以使用刚好覆盖完全部画面的字符块,但是精灵层同屏只能显示64个字符块同一行只能有8个字符块。如果超过这一限制,程序就会轮流显示这些精灵,反应到游戏内的现象就是,角色或者其他的元素开始闪烁随着超过这一限制的字符块越来越多,闪烁也就越来越厉害
魂斗罗1代的CHR(图形ROM)
FC的PPU的内部有16K的寄存器,某种意义上这才是他真正的显存。其中最前面4K用于存储当前场景中需要使用的精灵素材,紧接着又是4K用于存储当前场景中需要使用的背景素材。上面这些数据都是直接从卡带里面的CHR部分映射过来的。这一共8K数据就是FC在每一个画面中能使用的图形素材,也就是上一期我们说过的FC对于图形的直接寻址能力是8K的原因。每个字符快的大小是16字节,所以FC在同一画面中,背景和精灵各自能使用的字符快数量是256个(4x1024/16=256)。为了方便后面的解说,这里我们把这8K的空间叫做字符库。再后面的4K每1K用于生成一页背景,就是我们前面说的4幅同时存在的背景。
右边就是FC每一个画面能使用的图形素材
FC的硬件层面只支持64色,这64色里面还包含12个相同的黑色,所以实际的颜色只有53种。这些颜色是在硬件层面被固化了的,FC能显示的颜色只能在这53种中选择。FC每一个背景画面对应一个16字节的调色板,理论上每个调色板能显示16色的画面,这16色分为4组每组4色,但每一组的第一个颜色是相同的,所以FC游戏背景同屏只能显示13色。FC游戏的每4个字符块,组成一组2X2的基块,这4个字符块共用调色板中的一组颜色。此外,FC的精灵显示和背景无关,他有单独的寄存器地址和调色板理论上同屏能显示的颜色是背景的13种加上精灵的13种一共26种
FC支持的全部颜色
好的,到此为止,以上就是我们为了理解这些芯片强化了哪些显示功能需要去理解的FC画面的显示基础。下面,我们就结合实例来看一看这些被强化了的内容吧
二:部分MMC芯片的画面强化内容
MMC 1
上市时间:1987-4
制造商:任天堂
主要使用游戏:塞尔达传说,洛克人2,银河战士,哥斯拉,忍者神龟1等。
MMC1是任天堂第一款MMC芯片,主要是增加了保存游戏的功能和对多向卷轴的支持。我们观察一下使用这块芯片的几个游戏,他们的相同点就是游戏中同时存在横向和纵向卷轴的需求。同时我们都知道,塞尔达传说和银河战士都是首发于FC磁碟机这两个游戏在磁碟机上都是可以存档的。所以MMC1几乎可以说是为了方便把这些游戏移植到卡带上而量身定制的。这块芯片在画面强化方面,除了优化了多方向卷轴的实现以外,基本为零。
MMC2
上市时间:1987-11
制造商:任天堂
唯一使用游戏:麦克泰森拳击
MMC2仅使用在麦克泰森拳击上。 关于这快芯片的功能描述大致是:可以以8KB为单位切换程序ROM库(其余24KB被锁定),并且可以在两对各4KB的库中选择字符ROM。当程序尝试从存储器加载特定图形块时,它们将自动切换,从而允许在屏幕上使用更多的图形,而无需通过游戏内的代码去手动切换它们。是不是听起来像天书,没关系,下面我们用可视化的方式来理解它。在DEBUG模式下打开游戏ROM,我们先来简单分析下画面,游戏用底背景层的蓝色作为擂台的地面,我们控制的主角小麦克,其实是在背景层。游戏的精灵部分完全用来绘制敌人,从FC主机的视角来看,我们控制的其实是一个背景……由于游戏全部的精灵资源都用来绘制敌人,所以敌人的形象很高大,外形细节和动作细节也很多。但这也带来了一个问题,之前说过,FC显示的图形都是由预先绘制好的字符块拼接而成的这么丰富的细节,无法使用几个简单重复的字符块来绘制,4K的精灵字符库是没办法完全存储人物的各种动作的。但是得益于MMC2芯片的加持,每当我们输入指令时,程序会预判敌人做出的反应,自动切换映射到字符库的图形数据,从而组合成新的角色动作,极大的方便了程序的编写。虽然这些光头大汉看起来毫无美感,也没有什么酷炫特效,但是回忆一下FC很多游戏的BOSS,不过就是一副有着简单运动规律的背景图,表情细节和动作细节能和这些光头大汉媲美的人物,还真没有几个……
麦克泰森拳击!
MMC3
上市时间:1988-4季度
制造商:任天堂
主要使用游戏:洛克人3,4,5,6,超级马里奥兄弟2,超级马里奥兄弟3
星之卡比等等
MMC3是任天堂使用最广泛的MMC芯片。它增加了一个基于扫描线的IRQ计数器,从而使得分割屏幕卷轴更容易执行。注意,是更容易执行而不是新增一个功能。分割屏幕卷轴是FC游戏大量使用的一种伪多重卷轴效果。比如忍者龙剑传2的开场动画,天空的云层被切割为几层。分别以不同的速度进行卷动,从而模拟出一种画面纵深感。我们在DEBUG模式下观察游戏的背景绘制会发现,这些分割卷动的背景,其实在后台都是一整副进行绘制的这种方式其实并不是什么黑科技,早在成龙踢馆、马里奥等FC上最早的卷轴游戏中,就已经在运用这个效果了。它主要是用来实现场景卷动的同时,状态栏在屏幕顶端保持静止。在采用类似设计的游戏中,状态栏及数值其实都是游戏背景的一部分只不过切割开来进行使用而已。
FC使用最多的特效:分割卷轴
MMC5
上市时间-1989年四季度
制造商:任天堂
主要使用游戏:《恶魔城传说》(恶魔城3)欧美版,《光荣**》
《金属之光》,《救难任务》,《宇宙警备队》,《信长的野望2》
《水浒传:天命之誓》,《三国志2》,《大航海时代》
《元朝秘史:苍狼与白鹿》等等,大半都是光荣的游戏
上一期说过,MMC5是任天堂最强大,最昂贵的MMC。虽然在音频扩展方面有点被吊打的感觉,但是图形方面的强化绝对是NO1。这块芯片具有1 KB的额外内存,而FC本身的内存仅为2K。它优化了垂直分割卷轴的实现方式,大幅强化了图形功能,使用MMC5每个画面可以使用16,384个不同的字符块,而不是在4X4K字符库容量限制下的256个,并且允许每个字符块拥有自己的调色板,而不是上面说的每2x2快一组共用一个调色板。因为有了这些增强,虽然FC游戏画面的显示任然跳不出同屏13色,每个字符块不超过4色等限制,但是得益于对色彩更精准的控制,以及更多的字符块可用,MMC5芯片制作出的图像比起之前精细程度大幅的提升,当中最明显的例子自然就是合金之光了。前面我们说过,FC游戏画面最基础的显示单位是一个**像素的字符块,无法做到以像素为单位去进行精确绘图,而金属之光的人物立绘和CG,发色数虽然依然很低,但是线条的复杂程度是远超大部分FC游戏的。要想通过字符块组合出这么复杂的线条变化,必须使用大量的字符块,这一点,只有搭载这款芯片才能实现。
使用MMC5的《合金之光》是FC当之无愧的画面之王
任天堂方面,除了上面介绍的几块芯片以外,还有MMC4和MMC6。MMC4的功能基本与MMC2相同,主要用于火焰纹章系列游戏,区别主要在切换程序ROM库(PRG)方面。MM6主要是在MMC3的基础上,增加了1k内存,主要用于《热带之星》1、2两个游戏。这里就不专门讲了,下面我们来介绍几款来自KONAMI的芯片。
关于VRC1和VRC3我找到的资料不多,但是从对应的游戏大致可以推断,VRC1和MMC1一样应该主要是强化了游戏多方向卷轴或俯视角场景的处理。VRC3只用于日版的沙罗曼蛇,相比美版增加了一些动态效果和僚机数量,应该主要是强化了精灵方面的显示。VRC5据说是没有正式上市过,所以相关的资料非常少,这里略过。在音频部分碾压MMC5的VRC6,在图形方面的能力是略逊于MMC5的。在我查阅到的资料里,没有显示VRC6扩展了同屏使用的字符块数量,并且也没有MMC5多出来的1K内存。使用这块芯片的游戏目前我查到的并不多,虽然画面表现较早期的FC游戏有一定的提升,但是并没有实现出什么独有的效果。这块芯片最出彩的部分,更多的还是在音频部分。但是总的来说,依然是KONAMI一块很高级的扩展芯片。其他比如SUNSOFT 5B,VRC7,NAMCO163等芯片,要么主要强化的是音频部分要么图形方面的强化和上述的一些芯片基本相当这里也不再一一赘述了。
VRC2
制造商:Konami
主要使用的游戏:魂斗罗日版,兔宝宝日版,兵锋3,科纳米世界1等
VRC2和他的加强版VRC4,是Konami使用量最大的芯片,这块芯片将卡带的图形ROM(CHR)部分扩展到了256K,同时允许字符库ROM以1KB的大小进行自动切换。这段听起来不怎么好理解的描述,和玩家们熟知的【美版和日版魂斗罗的画面区别】有重大的关系。我们都知道,日版的魂斗罗比美版多出了很多动态的效果,这些动态的效果是怎么实现的呢?在DEBUG模式下观察游戏的字符库,会发现有一个区域的字符,在不停的变化,这个变化是通过VRC2自动完成的。这样一来,同样的程序代码,在字符库里同样的位置调取的图片由于芯片自动的切换了这些图片的内容,最终呈现出了动画效果。之前说过,任天堂的政策在海外是不允许使用第三方的MMC芯片的,所以,魂斗罗的美版没有动态效果的原因,可能并不是单纯的日版容量更大,更多的原因可能是当时美版的芯片没有【字符库ROM以1KB的大小进行自动切换】的这个功能。当然,这个功能也并不是VRC2独有的 ,比如SUNSOFT的FME-7在蝙蝠侠2里就用相同的原理实现了部分画面的动态效果。后期很多高级的MMC都拥有这种自动切换字符块数据的功能。
日版《魂斗罗1》的树叶动态是最为玩家熟悉的强化内容
VRC2有一个强化版也就是VRC4,除了图像ROM部分扩展到了512k外,一是同时允许游戏画面在寄存器内同时存在横纵多个方向的镜像,二是增加了一个基于扫描线的IRQ计数器,方便多重切割卷轴的实现。前者让宇宙巡航机2里的飞船可以在多个屏幕跨度的空间里运动后者则帮助实现了帝国战机里多重纵向切割卷轴。
以上就是FC扩展芯片对画面进行强化的主要方式,里面大多数的强化内容,其实并不是哪一款芯片的专属技能。除了昂贵的MMC5,其实大部分芯片的强化方向都是一致的。同时我们看出,由于画面的最终显示还是由FC的PPU进行处理,所以这些强化,基本上都没有摆脱FC的一些基本显示规则。相对的,由于有些芯片内置了**的音频处理单元,可以**的处理声音,所以音频部分的强化才会出现VRC7这样的犯规选手,不过历史上确实有一些变态的人,是想通过在卡带里塞入**的图形处理器,来实现FC画面换代升级的效果的。但是这些游戏因为各种原因,最终都没有正式上市,这里我们就不更多涉及了。
三:人力黑科技,FC最强的伪多层卷轴效果
最后要和大家聊一聊的,是关于FC上最强的卷轴效果。前面说了,FC只有一层背景页,所以只能实现单层的卷轴,为了增加FC的画面表现力,早期的程序员们绞尽脑汁,搞出了许多骚操作。最广为人知的就是前面多次提到的分割卷轴,把这种方式做到极致的游戏,就是大名鼎鼎的帝国战机了,游戏第一关的这个部分,把峡谷纵向切割成了5个部分,配合不同的卷动速度,营造出强烈的纵深感和速度感。相信大部分玩家第一次见到这个场景的时候,一定发出了卧槽的声音,长久以来,帝国战机的这个场景,都是许多玩家心目中FC上最强的卷轴效果。
但,事实真的如此吗?
真正的多层卷轴,就如同PS中不同的图层一样,一个核心的判定指标就是,不同层的卷轴图像是否可以相互遮挡。这些采用分割卷轴来欺骗玩家眼睛的方式,虽然取得了不错的效果,但是受限于FC的基本显示规则,终究只是一种障眼法而已。那么,FC上是否存在着,背景的不同层次可以相互遮挡的游戏呢?
有!
大家注意观察三目童子1-2这一关的背景效果,前面青色的背景和后面褐色的岩石很明显是以不同的速度卷动的并且随着角色的移动,前面的背景是会明显的遮挡住后面的背景的,这才是多层卷轴实际应该有的效果。那么,是这个游戏突破了FC的机能限制吗?当然不是,为了搞清原理,我们通过DEBUG模式来观察游戏的字符库区域会发现随着角色的移动,字符库中的一部分素材是会跟着移动自动更新的,再仔细的观察,原来,游戏的美工逐像素的把整个遮挡过程绘制了出来,配合MMC自动更新字符库的强化功能,最终就呈现出了这种遮挡效果。这是一种何其卧槽的做法。虽然它们没有真的突破FC的画面显示规则,但是,最终却呈现出了切切实实的双层卷轴效果。由于这种方式需要逐像素的去绘制每一个遮挡的画面,所以对于卡带容量和美工的工作量来说,压力巨大。不可能运用到全部的关卡中去。使用了类似方式的游戏还有一个《剑王》。大家有兴趣可以去玩玩看感受一下FC上真正的伪多重卷轴效果(?)的震撼。
那么,三目童子的这个效果,是不是FC上最强的卷轴效果呢?
并不是!
不知尝试了多少个游戏之后,我发现了两款FC真正的卷轴之王!
第一款是搭载MMC5芯片的《宇宙警备队》。由于发售时间较晚,加上搭载MMC5芯片导致散装光盘困难,国内知道这款游戏的玩家很少,但就是在这款名不见经传的射击游戏中隐藏着FC游戏里最强的卷轴表现。我们来看游戏第三关的这个场景,首先背景被纵向切割为三个部分,隧道的两边和底部分别以不同的速度卷动,用来营造速度感和纵深感,与此同时,画面**的障碍物明显的对隧道底部产生了遮挡效果,而且障碍物的影子还被做出了可信的投影效果,隧道底部会有一个明显穿越阴影的效果。进一步强化了“多层次背景”的感觉。简单的说,他们在一个游戏里使用了FC上所有制作多重卷轴效果的手段,三种方法并举,打造出了FC上最强大的伪多重卷轴效果。很显然,他们的实现方式也是和三目童子一样的暴刀。被前景遮挡的部分和穿越阴影的部分,全部是逐像素的画出来的。
而另外一款则是来自SUNSOFT的蝙蝠侠2。这款使用FME-7(没有强化音频的SUNSOFT 5B)强化芯片的游戏,同时使用了分割卷轴、动态加载字符库、暴刀绘制三种方式,同时实现了背景的动态效果和卷轴间的遮挡效果。面对如此卧槽的开发人员,我是服气的……
游戏机的机能相对于游戏开发人员的脑洞,永远是不够用的。尤其是在家用机诞生的早期岁月中,为了给玩家们呈现出更好的效果,开发人员们绞尽脑汁,从硬件层面(强化芯片)和软件层面(暴刀绘图),折腾出了一个又一个的骚操作。今天我们再去回看这些凝聚了开发者无穷创造力的游戏,不得不叹服这些早期游戏开发人员们的用心。当年年幼的我们没有能力去支持他们的付出,也无法从游戏的表象中感受到他们的匠心,在这文章的最后,就让我们发自内心的对这些开发人员们说一句:辛苦了,感谢你们,让我爱上了游戏。
请关注我的同时,为我投币、点赞、收藏和分享。
你们的肯定,是我继续提升视频质量的最大动力。
感谢大家的收看,我们下期再见。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|