FC图像制作原理及技巧

一.FC基本介绍

一个完整的FC游戏画面,是由静态图像与动态图像(也称作Sprite或精灵块)组成,而这两个图像都是由CHR(字模),PAL(配色),NAM(名字表)组成。
要了解一个FC游戏制作,银河需要了解FC游戏的基本信息。

1.FC游戏,画面分为NTSC制式与PAL制式。NTSC制式为256×224像素,PAL制式上是256×240像素。
2.FC游戏共有64种颜色,同一画面最多同时存在25个颜色。
3.FC游戏最小画面单位为像素,场景最小组成单位为Tile,一个Tile为8×8像素。
4.FC游戏同一画面最多显示64个Sprite,水平(同一扫描线)只能同时正常显示64个活动像素。

二.FC游戏基本组成

1.CHR

CHR是存放图形图像文件,也就是存放游戏所有的字模文件。
一个CHR文件是由多个Bank组成,单个Bank有16×16个Tile,每个Tile是由8×8像素组成。通过这里,银河要了解到,FC游戏最小单位为像素。而一个游戏场景,是由多个Tile组成。
在游戏中,可能一个物品可以重复使用多次,为了节省CHR储存空间,所以银河只制作一个公用的物品字模,然后在制作场景时重复使用此字模就可以。
简单的解释便是,字模就像建筑的不同的建造“样板”,场景便是一个完整的“建筑”,CHR为储存样板的“库房”。相同类型的材料可以用一个“样板”进行制作,从“库房”里取出来,然后放在“场景”需要的位置。

2.PAL

调色板,通俗的讲就是颜色编码表。

上图的色板是FC支持的所有颜色,在制作FC游戏的软件中,只支持上面的颜色,如果使用其他软件制作使用超过此图的颜色是无法放入FC游戏中的。
在一个画面中有背景和精灵两组调色板,每组均有4个色板,背景调色板和精灵调色板的第一个颜色均代表透明色(每组调色板的第一个颜色都是相同的),背景色板的第一个颜色除了代表透明色外,还代表了底色板的颜色。所以FC游戏单帧画面,只能同时显示25个颜色。

3.命名表(NAM)

命名表,用于存放CHR和PAL在地图中的位置信息。一张场景地图,是由字模组成场景画面,PAL设定的颜色组成。而NAM便是储存一个地图场景所有使用的字模的位置与PAL使用的颜色信息。

FC 的图像通过 Tile 矩阵来显示,这个网格就叫命名表。例如下图:

每个命名表有 32×30 个 Tile,也就是 256×240 象素。
PPU 支持 4 个命名表,他们在 $2000,$2400,$2800,$2C00。
在 NTSC 制式下,上面和下面的
象素通常不显示出来,只有 256×224 象素;在 PAL 制式下,屏幕有 256×240 象素。
虽然 PPU 支持 4 个命名表,任天堂主机只支持 2 个命名表。另外两个被做了镜像。
命名表保存了 Tile 的编号,而 Tile 存在图案表里。计算命名表里 Tile 号对应的实 际地址的公式是:(Tile 号×16)+由$2000 端口指定的图案表地址

银河能够看到有大量不同编码,这些便是一个场景里,组成的场景在当前使用字模位于CHR的位置,字模在游戏画面中所处的位置,使用的PAL颜色等信息。

4.精灵(Sprite)

Sprite,常译作精灵。指包含于场景中的二维图像或动画,FC里基本就是会动的各种角色了,当然也不是全部会动的都为精灵,因为有些会动的图形可以使用背景制作。
精灵只是一种可操控的字模,区别于背景场景。精灵移动最小单位为像素,而背景如果需要移动,他的移动最小单位为Tile。所以精灵常用在需要自由移动的字模中。
同行只能同时存在8个精灵块,超过8个精灵块,同行精灵会出现闪烁。
5.Table
在FC游戏中,PPU可提取CHR一页Bank的部分字模。
PPU可同时存取2页Bank,在PPU中定义为TableA,TableB。
TableA:最小可提取CHR一页Bank的2分之1(即横向8行Tile),不可跳跃读取(例如,不读取第一行Tile,从第二行开始等跳跃性读取。)只能每8tile读取。
TableB:最小可提取CHR一页Bank的4分之1(即横向4行Tile),只能每4tile读取。

三.FC游戏图像制作

1.字模制作

字模为游戏的基础组成部分,也是一个物体的基本模型,它最小单位为Tile,即8×8像素大小。
一个物品的字模没有固定颜色,只有使用颜色时的配色编号要求,在上面银河讲到的PAL与NAM,便在这里会有用到。
在FC游戏中,组成游戏场景,游戏角色,最基础的均为Tile。
所以银河可以将FC整个游戏画面看成:256像素(FC横向显示像素)/8像素(单个Tile基本大小)个横向Tile,240像素/8像素个纵向Tile组成。
例如一个箱子,如果想要表现细节与大小,8×8像素明显就无法实现,那么银河就需要使用多个Tile来组成一个箱子物品。

例如左图,为FC游戏《蝙蝠侠2》中的箱子,它使用了4×4个Tile(32×32像素)来实现箱子的细节及大小。而在CHR中,银河可以把它理解为,一个箱子的字模使用了CHR的16个Tile。
所以一个场景,每个物体需要不同数量的Tile来实现银河所需要的效果。
而银河看到了箱子有几种不同的颜色,这些颜色的位置便是在银河制作箱子字模时就需要规范的。像是深黄色,银河在制作字模时,确定它使用的色板编号,然后在制作场景放入字模时,配置时在色板配置位置按编号选择正确的颜色。

2.色板配置

在此之间前银河曾经讲过PAL色板的定义, 而现在银河就需要将关于PAL配置。
一个色板有4个颜色,除第一个为公共色板(透明色),剩余的3个颜色银河自己设置后会在画面场景显示,而值得注意的是,在游戏场景中。背景为2×2个tile使用一个色板,精灵块可以1tile使用1个色板。
一个场景单帧只能使用一套背景4组色板,一套精灵块4组色板。色板可以在游戏代码设置变换。
一个Tile内,每个像素可选择1组1个编号的颜色,共4个颜色4个编号。
下图中银河能够看到,共有25个颜色(1个黑色背景,24个条状颜色,其中左边是背景块,右边是精灵块),这便是一个FC场景同时能显示的颜色数极限。

3.场景制作

在通过上面制作好字模放入CHR后,银河便可开始正式制作一个游戏场景。
银河在制作一个游戏场景前,首先需要确定银河需要的资源,背景与精灵是否分别在一个CHR的两个Bank中,并且一个背景的所有字模是否在一张Bank内。
虽然可以将背景与精灵放入一个Bank,但是在FC中,FC可以同时存在两张Bank,而FC的PPU不能同时显示两张静态Bank。如果一个场景的背景字模分布在两张背景Bank中,那么制作的背景便不能完整的显示。所以通常在制作FC游戏时,银河需要合理安排背景与精灵字模的Bank需求。
在确定好自己所需CHR没有问题,并记住了在CHR中,每个Tile属于什么。银河便将CHR导入NES Screen Tool(一个FC游戏制作的场景制作软件)中,制作出FC游戏的场景。

上图能够看见,在“Nametable”中,显示了银河FC游戏中出现的旋转柱子,这便是银河单帧游戏场景完整图像(NAM信息)。
“Tileset”中,银河能够看见这一帧场景,银河使用的所有字模(CHR)。
“Palettes”中,银河能够看见这一帧场景,银河使用的所有配色(PAL)。

而这张图中,银河也能够看见银河提到的所有元素。地图NAM(最大的黑色框),字模CHR(字模单元),PAL(显示配色)。

四.FC游戏图像展现技巧

同行最多显示8个精灵,如何节约精灵块?
同行存在的精灵块正常显示只能有8个,超过此限制,多出来的精灵块将显示不出来,银河也可以设置轮换优先级,让它们轮流出现,但是这种方法会出现闪烁的情况,效果并不是很好。

方法一:让怪物飞,或者跳


这个问题是银河在做《强森的逆袭》这款游戏的时候最需要着重考虑的,尤其是同行只能同时显示8个精灵块的问题。

在第二关的场景中,如上图所示,玩家在一行中占了3个精灵块,厨师占了3在第二关的场景中,如上图所示,玩家在一行中占了3个精灵块,厨师占了3个精灵快,只剩下了2个精灵快了。如果银河用剩下的2个精灵来做一个怪,那么就会是2V1的局面,明显不符合银河游戏的玩法,当然,银河也可以像第一关一样,加入空中怪物来使得画面更加饱满。但是,这里银河没有这么做,要问为什么,那可能是我作为策划的一种倔强吧。
这里,银河利用了另外一种方法,银河设计了两个会跳跃的怪,分别是佣人A和佣人B,这两个怪在场景中会交错的跳跃,当佣人A落到地面时,佣人B在空中,他们之间的交错点高度也高于玩家角色或者厨师,这样,银河就用同行2个精灵块来作出了2个地面怪了。

方法二:将场景分为几个不同的高度

像下图中的这个场景,屏幕分为几个不同高度的平台,利用这些平台将怪物错开不在同行中,就可以使得画面上的怪物数量更多,而又不会超过同行8个精灵的限制。地形的不同,可以让画面看上去更加丰富,并且也增加了敌人的数量和玩家的操作要求。

方法三:竖版游戏

将游戏设定为竖版游戏也是一种解决同行8个精灵块限制的方法,因为在FC游戏中,FC的显示扫描线为横向扫描。所以竖屏没有8个精灵块的限制,当然有64个精灵块的限制,毕竟同屏正常最多只能显示64个精灵块。
比如《烈火》,《加纳战机》、或者下图中的《新人类》等游戏,作为射击类游戏是需要大量的怪物来增加游戏的挑战性,竖版的游戏在设计的时候可以更好的避免同行超过8个精灵的问题,增加游戏的挑战和画面效果的一种常用的方式。

方法四:用背景块来制作敌人将

前文曾经说过,银河不能将所有会动的图像理解为精灵,因为有一种方式在增加画面活动图像。那便是,使用背景制作活动图像。
不占用精灵,使得怪物可以更加多,或者更加大,像魂斗罗里面的 BOSS体型这么大就是利用背景来做大。
但是此方法需要注意:利用背景做怪物,移动的时候,最小单位是1tile(8个像素)如果怪物的移动速度过慢,在移动过程中将会有明显的卡顿。

解决方法
1. 直接让他固定在原来位置。
2. 利用动作来显得这种位移更加自然,比如:

我要从下面1号格子里移动到2号格子里,那么方式便是:
在上面的图中银河用了多张贴图,来使得这个移动更加的自然,但是这种做法会消耗比较多的CHR资源。

除此之外,银河还需注意,使用背景块做怪物的这种做法不能像精灵块与背景块那样重叠。
当怪物与背景重叠的时候,怪物会把其他背景覆盖掉,那么怪物替换了此位置字模便会出现明显的背景残缺,所以银河建议使用纯色的背景。
例如银河FC游戏《强森的逆袭》第三关便有一种敌人使用纯背景制作的敌人。为了让背景移动不会影响游戏画面,银河将守卫移动的那几行背景改为纯色块,这样便不会因为守卫的移动而影响游戏的画面效果出现场景缺失。

而守卫页也使用了3张移动贴图来表现他的移动。

怎么让人物的颜色更丰富?
前文银河提过,FC上最多能实现同屏幕25个颜色(包括底页的黑色),但是这些颜色的使用是有限制的。银河怎样在这个限制和前提下让画面表现出不死板、甚至更加丰富的色彩呢?下面让银河来分享一些经验:

方法一:

尽量让人物或者场景不同颜色部分在两个不同的tile里面。这种方法是FC游戏上用得比较多的手段,比如,魂斗罗的角色,身体部分和裤子部分是有明显分割的,因为它们存在在不同的tile中,使用的色板也是不一样的。
例如下图

角色的上半身使用了一个色板(3个颜色+一个透明色),下半身用了另外的一个色板。这样,银河角色就能有6个颜色,看上去色彩就会比较丰富了。
但是,这种用法做法人物看上去会有明显的分割,如果处理不好分界点,那么画面会显得上下分明。

方法二.:使用二个色板来绘制一个角色

这种方法和之前说到的技巧5的方法类似,但是这种方法在两个色板间应用了相同的颜色,使得角色看上去比较自然,不会像魂斗罗的角色一样有明显的颜色分割部分。但是这种方法使用了两个色板,只画出了4-5个颜色,如果还需要用这个色板来画别的角色的时候,颜色就会变少了。使得整个游戏或者说这一关卡的颜色总量变少。

方法三: 利用精灵的透明色和背景颜色来绘制角色颜色

上文银河曾经说过FC上背景颜色的色板最小使用单位是2X2tile,那么如果在这个2X2的范围内无法用同一个色板的4个颜色来表现游戏需要的颜色内容,那么银河可以考虑采取精灵色板与背景色板的叠加。

如上图所示,银河在1个tile中做出了16个颜色,用这种手法能使得颜色非常丰富,但是精灵块是有限的(同行显示8个,最大同时显示64个)。
用这种手法来绘制人物效果也是非常好的,比如下图中金属之光中的琦雅迷,人物的眼睛是用了精灵来做的,再加上出神入化的绘制技巧,使得这款游戏成为FC上游戏画面最好的游戏之一。

那么移动的敌人怎么用这种方法来实现呢?
使用背景块加精灵来做移动的怪物,可以使敌人可以更大并且攻击时明显。但是,精灵块和背景块的移动单位是不一样的 ,精灵块每次移动一个像素,背景每次移动一个tile。如果银河直接使用的话很有可能会出现下图所示“掉队”的情况。

考虑到这个问题,银河做的时候,前景用精灵,背景要比实际显示的大。比如银河下图,蓝色部分为精灵,红色部分为背景,银河要在人物中间显示出一个背景。

像赤色要塞的最终BOSS,这辆大坦克主体部分是用背景来做的,而绿色的炮台和主炮的末端部分是用精灵来做,所以在移动中,会出现错位。但是坦克上使用精灵块制作的绿色炮台令到BOSS的颜色丰富了不少,也让炮台在画面中更加明显。

五、怎么做高大上的画面特效?

特效一: 移动的立体效果(利用IRQ中断实现多层卷轴的立体效果)

银河知道,FC并不存在多重卷轴,但是银河可以利用IRQ中断来仿制出多重卷轴的效果,从而实现移动的立体效果,那么什么是IRQ中断呢?
IRQ中可以指定某个区域,在某个时间段停止刷新。
比如下面的例子,银河指定红色部分为中断区域,卷轴向左进行,过几秒后银河就会看到,在红色中断区域的地方,图像没有动。有一些卷轴游戏会使用这种方式来控制游戏的HUD部分。

利用这种方式,银河再加以改良,将画面分为几个区域,远景为第一层、近景为第二层分别设置了不同的IRQ中断方式,比如第一层是每10帧中断一次,一次持续1帧;第二层每5秒中断一次,一次持续1帧,这样第一层的移动速度将会比第二层快,银河就做出了近景快,远景慢的移动立体效果。
《忍者龙剑传2》开场画面这里利用了IRQ中断请求,然而,并不是所有的卡带都能使用IRQ中断,只有部分扩展芯片有这个功能。《忍者龙剑传2》使用的是MMC3的芯片此芯片支持IRQ中断。

特效二:半透明

FC的机能并不支持半透明的效果,但是银河可以利用一些技巧来欺骗玩家的眼睛,利用快速的出现和消失来做出半透明的效果。比如烈火中的蓄力攻击产生的能量球给玩家一种半透明的效果,实现的办法是精灵块不断的消失出现,给玩家一种视觉上的错觉,利用这种效果来实现半透明。

特效三:精灵块与背景块的互相切换

使用这种方法可以使的目标拥有精灵块流畅的移动轨迹,又能解决同行精灵块超出的问题。
因为同行8个精灵的限制,银河既想表现游戏的画面感,又要增加游戏的难度,那么银河便需要一种方法来实现游戏画面的多种效果。
在银河FC游戏《强森的逆袭》中,为了体现第二关BOSS的攻击范围大与攻击表现,银河使用了一种精灵与背景结合的攻击表现。
在空中,BOSS攻击时丢出的火球和盘子银河将它设定为精灵,这是为了火球和盘子的飞行轨迹流畅。

而在火球和盘子接触地面后,银河就将它们由精灵改为了背景。这是为了防止同行超出8个精灵块。而为了很好的表现火焰升起的流畅,银河将火焰升起分为4段制作,并使用切换字模来实现火焰的晃动。