chenke 发表于 2016-9-16 10:24

DQ4第四章末尾出航一幕是FC上最奇技淫巧的开发技术吧!

解析FC SPRITE和BG技术的老视频,最后压轴登场的是DQ4第四章末尾出航一幕:
http://www.nicovideo.jp/watch/sm13640458

上面视频的字幕太简单,弹幕太乱,我找到了一篇详细解说的文字:(求哪位达人精确翻译如下最后一节)
http://wikiwiki.jp/dqdic3rd/?%A1%DA4%BF%A7%A1%DB

スプライト制限を敢えて無視し、チラつきもさせず表示限界で欠けさせることによる演出も存在する。
その最たるものが、【第四章 モンバーバラの姉妹】のエンディングの出航シーンであろう。
ただ眺める分にはなんてことのないシーンだが、実はファミコンの機能を弱点を含めて最大限発揮している。

   1. 画面を上にスクロールさせることで船のBGが下方向に移動しているように見せる
   2. 海のBGを移動に合わせて差し替え続けることで海面が動いていないように見せる
   3. 港の桟橋を途中でBGからスプライトに差し替えた上でマスト部分にスプライトの塊を仕込み、
    桟橋とマストが重なる際に水平配置数限界によるスプライト欠けで桟橋を消滅させ、
    あたかも桟橋の上をマストが通過したように見せる

桟橋をスプライトで描く理由については、2の理由でBGを細かく差し替え続けなければならない関係上、桟橋もBGで描くと 、ちょっと動かすだけで1マスが海と桟橋の重なった状態となり、発色数が4色を越えてしまう。
しかしただスプライトにするだけでは、桟橋がマストの上に表示されてしまうので、敢えてスプライトを欠けさせて整合性を取っている。

我初步理解的,请指正
初看平淡无奇的大船出航,隐藏着FC上最奇技淫巧的开发技术:
1、大海和船是背景BG,海港栈桥是活动块SPRITE
2、画面向上卷轴滚动,却巧妙地实现了看起来大海没动、船向下动的效果(怎么实现的?)
3、海港栈桥是活动块SPRITE,按道理应始终覆盖在大海和船(背景BG)之上,却巧妙地实现了船帆盖过栈桥的效果:
FC的活动块SPRITE在同一扫描行上有不能超过8个的限制,开发人员在船帆左边同步隐藏了多余的活动块,当船帆划过栈桥时,同一扫描行上的活动块SPRITE超出了8个,正好设置栈桥活动块SPRITE不显示,于是顺利实现了一瞬间船帆盖过栈桥的效果!!


Geminize 发表于 2016-9-16 11:40

ASDJKL 发表于 2016-9-16 15:28

真灭天 发表于 2016-9-16 16:32

Geminize 发表于 2016-9-16 11:40
我记得FF1就有类似的技术了,ENIX找的外包技术真差

5代之前一直都是chunsoft

真灭天 发表于 2016-9-16 16:32

Geminize 发表于 2016-9-16 11:40
我记得FF1就有类似的技术了,ENIX找的外包技术真差

5代之前一直都是chunsoft

真灭天 发表于 2016-9-16 16:32

Geminize 发表于 2016-9-16 11:40
我记得FF1就有类似的技术了,ENIX找的外包技术真差

5代之前一直都是chunsoft

Geminize 发表于 2016-9-16 16:39

Geminize 发表于 2016-9-16 18:00

deadbeef 发表于 2016-9-16 20:33

本帖最后由 deadbeef 于 2016-9-16 20:57 编辑

这里说的 BG滚动并不是重点
重点在于

本来BG是不可能遮挡SPR的
但是BG的船帆却能正确遮挡SPR的栈桥
技巧在于在船帆的左侧放上了不可见的SPR 用来占掉FC同行最大8个SPR的机能
这样当船帆和栈桥同行的时候 右侧的栈桥SPR就会因为超过最大SPR数 而不会被显示出来
相当于机能限制的逆应用 非常邪道

上面最后一段说的是 解释为什么不把栈桥也用BG 而要用SPR
因为只要栈桥用BG的话 就不存在遮挡问题了
而那个原因在于 因为海和栈桥一起滚动是连续的(实际是海在向上滚动 并非船在向下)
所以连续滚动中有可能出现栈桥和海在同一个BG格的情况
这时候就会由于发色数的限制 使得栈桥的颜色无法正确显示出来
因此栈桥 必须 使用SPR而不能使用BG

最后 关于为什么要让海的BG向上滚动 而不是让船的BG向下滚动
我日文不太好 不知道主楼的帖子里有没有详细分析这个原因
但是原因大致可以推测的到
因为船上的颜色更复杂 让船的BG连续滚动的话 上面提到的不同颜色的滚入同一BG格的情况根本无法处理
所以相反 让颜色更单调的海的BG向上滚动的话 就只需要解决栈桥的问题了

哦对了 补充下
FC的硬件滚动机能是不能让2个不同的BG层相对滚动的 只能把所有BG层一起滚动
所以上面我提到的“滚动”并不是指的FC的BG硬件滚动
而是通过在BG层上绘制滚动的图像实现的软件滚动
因此才存在上面提到的 不同颜色滚入同一个BG格的情况(硬件滚动就不存在这种情况了)
所以实际上这里的滚动 海的BG相对船的BG向上滚动是用的软件滚动 而船的BG和海的BG整体向下滚动用的是硬件滚动

tenco 发表于 2016-9-16 21:09

deadbeef 发表于 2016-9-16 20:33
这里说的 BG滚动并不是重点
重点在于



原来如此
懂了

chenke 发表于 2016-9-16 22:28

ASDJKL 发表于 2016-9-16 15:28
大海和船不能是两层背景么

FC的硬件只支持单层背景。
https://zhuanlan.zhihu.com/p/20436753

chenke 发表于 2016-9-16 22:28

Geminize 发表于 2016-9-16 16:39
1 节省资源
2 技术差

胡说八道呢。

chenke 发表于 2016-9-16 22:57

deadbeef 发表于 2016-9-16 20:33
这里说的 BG滚动并不是重点
重点在于



FC只有单层卷轴机能,所以抱歉我没看明白你的BG滚动解释

http://i68.tinypic.com/zircw9.jpg

deadbeef 发表于 2016-9-16 23:02

本帖最后由 deadbeef 于 2016-9-16 23:08 编辑

chenke 发表于 2016-9-16 22:57
FC只有单层卷轴机能,所以抱歉我没看明白你的BG滚动解释
就是靠描绘滚动后的画面来软件实现滚动
换句话说 就是在BG上一帧一帧画动画
所以受到BG单格的发色数限制

真田安房守 发表于 2016-9-16 23:15

螺狮壳里做道场,11区就好这一口

chenke 发表于 2016-9-29 23:15

deadbeef 发表于 2016-9-16 23:02
就是靠描绘滚动后的画面来软件实现滚动
换句话说 就是在BG上一帧一帧画动画
所以受到BG单格的发色数限制


你说的硬件滚动和软件滚动把人搅糊涂了

我觉得你把问题说复杂了,这个船在大海上往下走的效果其实实现很简单:

http://ww4.sinaimg.cn/mw690/53900c49gw1f8av3bs5bbj20es0dcgli.jpg

假如上图的上面BG-1是大海,下面BG-2是船+大海,BG-2向上滚动到BG-1不就实现了?


deadbeef 发表于 2016-9-29 23:35

chenke 发表于 2016-9-29 23:15
你说的硬件滚动和软件滚动把人搅糊涂了

我觉得你把问题说复杂了,这个船在大海上往下走的效果其实实现很 ...

这样的话船和海之间就没有相对移动了
海是跟着船一起滚的

而实际效果中 船和海之间是有相对滚动的

chenke 发表于 2016-10-1 23:03

deadbeef 发表于 2016-9-29 23:35
这样的话船和海之间就没有相对移动了
海是跟着船一起滚的



问了一个资深开发者,他说也没看懂原文,看来这效果实现比我想象的复杂啊

http://ww2.sinaimg.cn/mw690/53900c49gw1f8d5zdfucej20bu03nt96.jpg

deadbeef 发表于 2016-10-1 23:05

chenke 发表于 2016-10-1 23:03
问了一个资深开发者,他说也没看懂原文,看来这效果实现比我想象的复杂啊

...

他说的没错啊 就是这个意思
海的BG是一帧一帧的画成动画效果的

ASDJKL 发表于 2016-10-2 08:35

chenke 发表于 2016-10-2 12:47

deadbeef 发表于 2016-10-1 23:05
他说的没错啊 就是这个意思
海的BG是一帧一帧的画成动画效果的


http://ww1.sinaimg.cn/large/53900c49gw1f8dtrxg5maj217f02oq4a.jpg

http://ww3.sinaimg.cn/large/53900c49gw1f8dtrxzv8pj216n03ywgl.jpg

谢谢,我大概理解了

dragoneyes 发表于 2016-10-2 15:40

吞食天地2的坐船也是这种手法吧

森罗 发表于 2016-10-2 20:21

deadbeef 发表于 2016-10-2 22:25

本帖最后由 deadbeef 于 2016-10-2 22:36 编辑

森罗 发表于 2016-10-2 20:21
谁告诉你Sprite一定要在背景前的?
回去好好打一遍坦克大战再来说话。
超级玛丽钻水管的动作,水管难道不是 ...
这里是当时有点理解错误
要使用SPR的原因是在BG上画栈桥的动画帧成本太高
不像画海浪的只需要1格重复使用
而这里栈桥的SPR没办法被桅杆遮住的原因是已经遮挡了海浪了
一个SPR只有一个遮挡属性 决定在BG前还是后

森罗 发表于 2016-10-3 11:14

boomerangkid 发表于 2016-10-3 14:13

本帖最后由 boomerangkid 于 2016-10-3 18:57 编辑

桟橋をスプライトで描く理由については、2の理由でBGを細かく差し替え続けなければならない関係上、桟橋もBGで描くと 、ちょっと動かすだけで1マスが海と桟橋の重なった状態となり、発色数が4色を越えてしまう。
将栈桥以活动块描画的理由有2个:基于BG必须不停地一点点替换这样的情况,如果把栈桥画成BG,只要稍有移动,有1格(注:マス是方格的意思)就会变成海与栈桥重合的状态,同时发色数会超过4色。(所以那1格应该指的是1个tile罢)

しかしただスプライトにするだけでは、桟橋がマストの上に表示されてしまうので、敢えてスプライトを欠けさせて整合性を取っている。
然而光是描画成活动块的话,就会让栈桥在桅杆的上面显示,所以要借缺少活动块(注:也就是不显示)来取得一致性。




其实也就是deadbeef说的
技巧在于在船帆的左侧放上了不可见的SPR 用来占掉FC同行最大8个SPR的机能
这样当船帆和栈桥同行的时候 右侧的栈桥SPR就会因为超过最大SPR数 而不会被显示出来
页: [1]
查看完整版本: DQ4第四章末尾出航一幕是FC上最奇技淫巧的开发技术吧!