- 精华
- 0
- 帖子
- 1302
- 威望
- 0 点
- 积分
- 1324 点
- 种子
- 15 点
- 注册时间
- 2010-5-22
- 最后登录
- 2024-11-20
|
发表于 2019-7-21 22:33 · 广东
|
显示全部楼层
本帖最后由 绝对妖怪 于 2019-7-21 23:27 编辑
我发现你懂得特别多,厉害!送你一篇我自己边听视频边手打的文章作为感谢吧!
“低分少年”讲解:世嘉的SS是一台硬件设计非常复杂的主机,多颗CPU虽然提供了强大的运算能力,但是却相当难以驾驭,甚至有时候让人感觉充满了争论,比如说,SS到底能不能绘制半透明色?SS的硬件性能到底是强是弱?首先我们来看SS版的《洛克人X4》这款游戏,我们注意到,画面上有个物体看起来非常不舒服,就是背景里的这个投射灯,相较于PS版的半透明色,SS版居然是用网点来蒙混,常听到的玩家们说,SS没有半透明色,就是在说这样的情况,但只要再往前走几步,看到了前面的蓝色玻璃罩,这不就是半透明色了吗?为什么我们会在同一款游戏的同一副画面里,同时验证了“SS没有半透明色”和“SS可以做到半透明色”这两种相互矛盾的观点呢?这就要从SS的图形处理架构开始说起了,SS除了有两个主CPU外,它的图像处理器也有两个,分别是VDP1和VDP2,VDP1负责处理前景活动块的绘制,VPD2则负责背景图层的处理,用活动块和背景图层这两种元件来构成画面,在二维游戏时代是理所当然的一件事情,采用这样的硬件设计也可以看出,SS基本上就是一台以二维绘图为出发点的游戏主机,了解了这样的结构后,我们再来看游戏《洛克人X4》,主角洛克人和探照灯这样在移动的物体,是由VPD1来绘制,而有半透明色的蓝色玻璃罩,则是VDP2所负责处理的背景图层,所谓背景图层只是一个习惯性的称呼,自从游戏机有能力显示不止一层的图层之后,画面表现也就有了更多的多样性,SS的VDP2最多可以同时显示五层图层,而且可以支持缩放、回转变形等特效,还有很多的特殊显示方式,像是《洛克人X4》中背景的这个热浪蒸腾的效果,就是二维图层的一种扭曲特效,而且这个特效PS版没有,SS的VDP2更可以做到不止一层的半透明图层,比如说光线、云雾、阴影、火焰、闪光以及界面视窗。相信这么多范例应该都可以证明:SS在背景图层的部分,是毫无疑问可以做到半透明效果的,这么说,难道问题是出在负责前景处理的VDP1上吗?先讲结论,VDP1是支持半透明色的,事实上在很多游戏里面,应该也可以看到以半透明色呈现的角色阴影,但既然可以做到的情况,为什么很多游戏不太去使用半透明色呢?一个很主要的原因在于:VDP1的半透明色有着很麻烦的使用条件,我们用Treasure公司的《守护者列传》这款做到VDP1半透明色的游戏来做案例吧,在游戏里面,妮寇乐这个角色就有着半透明的披风,效果很漂亮,可是你仔细看就会发现这半透明披风根本就是个“光学迷彩”,所有被它遮住的东西都会隐形,只留下之后的背景,同样像是施魔法时的半透明效果也会把显示在后面的物体给遮掉,像这样的例子在整个游戏里面非常多,为什么会有这样的情况呢?这并不是游戏软件开发的BUG,而是硬件的SPEC,原因在于“活动块”与“背景图层”这种二维绘图结构的先天限制,VDP1的活动块虽然在运算过程中可以指定各活动块的前后、深度顺序,但最后还是会合成一个平面图层,写入帧缓存里,再与VDP2的各图层组合,成为最终输出的画面,在画面合成阶段的时候,VDP1帧缓存的写入顺序,是从画面最底层的物体开始,依照顺序写入到画面最上层的物体,如果碰见了不止一个物体其位置重叠的时候,通常都会直接让后写入的资料,取代掉先写入的资料,在没有半透明色的情况下,这么做不会有什么问题。但若是活动块被指定有“半透明”属性,就会出现底下的物体全都不见,直接穿透到背景去的情况,这同时也解释了为什么在同一款游戏里,又会出现这种用网点来伪装半透明的物体,因为这些物体同样是由VDP1来运算的前景物体,如果让它们也用半透明处理的话,就会把被遮住的玩家角色也给吃掉的,要避免半透明物体把后面的东西吃掉这种视觉瑕疵,最保险的方式就是让半透明物体只出现在底层而不会去遮盖到别人,这也是这种效果通常只用于表现人物在地面上投射的阴影的原因。我们再来看一个例子,在这款游戏里面,部分出招的特效使用了半透明色,乍一看没什么异状,但如果暂停了画面来看,就会发现它也同样有着半透明活动块直接透明到背景的情况,之所以看起来不是那么明显,是因为画面上的半透明物体不会持续性的在相同的位置显示,而且显示时间很短暂,只有玩家刚好按暂停键的时候才会发现,又例如同样是Treasure公司所制作的《侧影幻像》这个游戏,其使用半透明色非常频繁,但为了避免物体被吃掉的问题,只有不会明显遮到东西的活动块使用半透明色,会遮住物体的活动块则改用“网点”,这样混用的效果虽然不算完美,但至少是个折衷,而觉得做得更好的是《棉花小魔女》里面的魔法攻击,既不会吃掉活动块,也不是使用网点,它的做法是让活动块以半透明与不透明两种状态,在画面的最底层与最上层快速交替显示,这样就可以呈现出看起来毫无破绽的视觉效果。接下来,我们来看《庆应游击队:活剧篇》这个游戏,当玩家取得道具时候的特效,就有半透明效果,还有像手里提着灯笼的敌人,手上的灯笼所发出的光也是半透明的,但你是否有发现这两个半透明活动块的效果,跟我刚刚所举的例子,状况是完全相反?也就是它的半透明活动块不会把在它之后的活动块吃掉,但是没有跟活动块重叠的部分,却是不透明的,答案是VDP1的活动块半透明属性,其实有两种模式可以选择,那另外一种的半透明模式是在写入帧缓存的时候,若遇到物体位置重叠,就让重叠的部分进行颜色的加权平均处理,没重叠到的部分因为加权值是零,所以不会有任何改变。理想状态的半透明色,例如敌人手里提着灯笼所散发出的半透明球形光,应该是既能照亮角色的脸也能半映射着照亮背景,可是VDP1只提供了两种效果相反的选择(在照亮背景遮住主角或照亮主角遮住背景中二选一),让游戏开发商按情况调用,这个时代还没有阿尔法通道的应用普及,那有没有可能让两种运算方式同时进行呢?也许有,但编者没有在SS游戏中看到过这样的例子。
过奖,因为做游戏美术工作,知道一些图形方面的常识罢了。
低分少年这个分析我也看了,讲的稍微有点绕,,其实原理挺简单的,就是因为那个alphablend(俗称半透明,但并不是只有alpha那么简单)效果的特性导致的,这种透明叠加效果需要叠在有图像的部分才能正确显示效果,就像你用photoshop,在一张左边一半有图像右边一半是透明的"背景"图层上,叠加一个blend效果的图层,,然后输出图片,你会发现,透明的背景部分效果不对。这就是ss的vdp1和vdp2的问题,两个vdp都可以用这个透明叠加效果,但是互相影响不到(可以理解为互相把对方当作是透明),在vdp1上做,叠不到vdp2,超出的部分就会出问题,在vdp2做叠不到vdp1(因为背景在下面的层,叠在角色身后可以,如要移到角色上层因为vdp2把vdp1当透明,所以直接透过角色显示背景),等于只能各自叠各自的效果,要实现全屏无限制的叠加效果非常麻烦,救火英雄里的那种透明火是貌似最成功的案例,但是也是在这个硬件限制下实现的,方法应该非常蠢,我以前就觉得可能是截另一个vdp的图像过来与特效相叠加,或者是vdp1叠加超出角色的部分能够剔除掉,做成两层特效中间夹角色的三明治!两种办法都要消耗更多的内存和处理速度才能实现,在这方面ps1简直是躺赢,只要不存在ss这种自己作出来的硬伤,,这个透明叠加效果简直是便宜又大碗。 |
|