一首二次元神曲,救回了差点失败的玩家整活

一年前,在《彩虹六号》被国内各大直播平台列入禁播游戏之后,国内玩家使出了各种手段,只为在审核员眼皮子底下直播彩6画面。

《荒野大镖客2》的速写本、满屏弹幕的色块,或者是光栅加密的雪花屏……这群玩家的创意层出不穷,俨然把这搞成了一项“科研”活动。

B站用户@高坂大芥末用《荒野大镖客2》的速写本来播彩6

在欧美玩家那边,也有一项类似的整活传统——在任何带有电子屏的设备上玩初代《毁灭战士》,比如自动提款机、智能冰箱、甚至是一根电子验孕棒。

几天前,一位油管博主adef又在这个赛道想出了一个新点子——他想用一只宝可梦“晃晃斑”的脸做出一块屏幕,在它的脸上玩一把《毁灭战士》。

结果这个挑战比他预期中的要难得多,更没想到的是,在实现这个项目的过程中给予他最多帮助的,既不是宝可梦玩家也不是DOOM玩家,而是来自《东方Project》的神秘力量。

更准确地说,是一首东方神曲《Bad Apple!!》,成为了他最终完成这个挑战的关键。

1

先让我们回到这次整活的起点,这只叫做晃晃斑的宝可梦身上。

这只宝可梦最早出现在第三世代《宝可梦:红/蓝宝石》里,取材自小熊猫和兔子的造型,并没能让它获得太高的人气。

就是这样看似平平无奇晃晃斑,却有着一个相当独特的设定——每一只晃晃斑脸上都有4团深色花纹,但这些花纹的位置却不是固定的。它们由代码随机生成,根据代码排列组合的数量,总共理论存在约43亿种不同的花纹。就和“找不到两片相同的树叶”一样,宝可梦里也找不到两个相同的晃晃斑。

因此玩家间也有着“不可能抓到完美品相晃晃斑”的说法,当然,这是建立在不作弊的前提下。

在众多“宝学家”的研究下,很久之前人们就研究清楚了晃晃斑的花纹之谜:它的斑点位置同样是由宝可梦的隐藏数据性格值控制,只要能用PKHeX等工具控制它的性格值,就能任意捏出想要的花纹。在Github上也早已诞生了专门用来画出心仪晃晃斑的“晃晃斑绘制器”。

能够控制这些深浅分明的斑点位置,就能画出任何想要的图案,这也成了博主adef会想到用它来组成一块屏幕的技术基础。

不过在此基础上,仍有两个问题阻挡在他的整活路上。

首先,在晃晃斑脸上“显像”虽然能够实现,但它脸上毕竟只有4团深色花纹。通过作弊来改变种族值能控制斑点位置,却没法增加斑点数量,这张脸的“分辨率”还不足以显示完整的《毁灭战士》游戏画面。

这个问题并没难住adef多久,很快他就从字符拼贴画中想到了解决办法。一张脸不够,那就多来几张,最后他决定用上百个晃晃斑组成的矩阵来打造一块屏幕。有了足够数量的斑点可供控制,他就可以达到游戏所需的画面显示精度。

解决了显像问题,还有成像的问题等着。

想要根据游戏画面实时控制数百只晃晃斑改变纹路,一定离不开一串代码的高效控制。

正是这个技术难题,成了adef整活路上的一道难关。

一开始,他还尝试着学习其他用上了拼贴算法的Python项目,打算用自己不多的编程能力解决它。但很快他就发现,晃晃斑高达43亿种的花纹数量,构成了一个同样庞大的采样库,想要用穷举法实现屏幕的实时显像效果几乎不可能。

adef开始在各个社区寻求援助,想要找到可供参考的解决方案却不得解。也就是在这个时候,几条《东方Project》玩家的推特引起了他的注意——同样是在晃晃斑脸上,这群东方玩家已经复现出了《Bad Apple!!》。

2

即便不是东方玩家,只要逛过B站,多半就见到过《Bad Apple!!》这首二次元神曲的MV。

2008年,一位niconico用户想要基于这首歌制作一部MAD,但苦于技术力不足只上传了一份草稿分镜,意外开启了一场基于这份分镜的MAD同人大赛,最终让一部叫做《【东方】Bad Apple!! PV【影絵】》的黑白剪影作品成为了经典。

在完全不缺同人精神的车万厨那里,《Bad Apple!!》的影绘版只是一场同人大赛的起点。

十几年间,这条二创路上的好活从没断过。有日本玩家用扫雷,一关一关硬生生堆出来的《Bad Apple!!》。

来自油管@reddevils500b

在国内也有黑板、白板、磁力画板等各种形式做出来的定格动画,甚至还能看到直接在真•烂苹果上一帧一帧“咬出来”的版本。

图源见水印

来自B站@真红の瞳

就连Windows自带的任务管理器上,各路编码大神也能用不同的解决方案玩出新花样,做出自己版本的《Bad Apple!!》。当这首歌响起时,不管画面里究竟在以怎样的形式演绎PV,可能都不会让东方玩家惊讶。

显然,《Bad Apple!!》历久弥新的二创热潮,和玩不厌《DOOM》梗、“彩6”梗的玩家社群颇有异曲同工之处,只是此前各方少有交集,直到这次宝可梦晃晃斑成为了一个交汇点。

Oligarchomp是一位东方同人游戏的开发者,他在Steam上发布的免费游戏《東方眠世界》,在东方玩家间小有名气。去年年底,正是他在推特上发布的一张动图,让更多玩家看到了在晃晃斑脸上演绎《Bad Apple!!》的希望。

图中仍然只有一只静止的晃晃斑,但是它脸上的花纹已经可以在控制下实现小球坠地反弹的动画。动画虽然简单,但却意味着更为复杂动画实现的可能。

就在这个动图发布的第三天,另一位东方粉丝、同样也是开发者的akumanatt,就在晃晃斑的脸上初步复现了《Bad Apple!!》。

这时候它的实现方法还非常粗糙,只是让斑点按照PV里的色彩重心移动而已。如果不是同时响起的歌曲,恐怕没人能看出这是《Bad Apple!!》。

紧接着就像在竞速一样,另一位也是游戏开发者的东方玩家JakobHarych,同样受到Oligarchomp的Demo启发,也实现了类似效果。但他把画面范围缩得更小,还在晃晃斑的背后补上了缺失的部分,让抽象的PV变得稍微直观了一点。

起码能认出《Bad Apple!!》了

也正是JakobHarych的这段《Bad Apple!!》视频,让正在为借晃晃斑来玩《DOOM》苦找解决方案的adef抓住了救命稻草。

3

两人很快取得了联系,开始一起研究怎样才能让晃晃斑的脸成为一块更为合格的屏幕——足够播放《Bad Apple!!》和玩《毁灭战士》的屏幕。

据JakobHarych在Github上的项目介绍,他在这段《Bad Apple!!》里使用了一个简单的遗传算法去寻找与目标图像最匹配的个性值。简单来说,就是代码不用看遍所有晃晃斑的花纹找出“谁最像”,通过多次横向对比“谁更像”,就能找到最适合画面的那一只,大大增加了效率。

但“高效”也只是相对adef的笨办法而言。二人联系上之后达成的第一个共识,就是一只晃晃斑的脸很难承担一块屏幕的功能。

想要更好的效果,得再来上百只,但这也意味着代码的效率问题同样会被放大百倍。

在一只晃晃斑脸上重现《Bad Apple!!》时,代码还勉强够用,但是放大到百倍后,他们仅仅做出一张《毁灭战士》的LOGO图片,就得用上十几个小时的时间来计算。

这种效率是他们无法接受的。在继续优化算法的同时,他们只能放弃对显像精度的追求,尽可能地减少同屏晃晃斑的数量;与此同时,他们也不得不把游戏录制和后期制作分来,尽量减少电脑的负荷。

即便这样,他们最后仍然花了合计数十个小时,才计算渲染完成了十秒钟20FPS的游戏画面。虽说最终效果有些费眼睛,但他们终于实现了在晃晃斑脸上玩《毁灭战士》的目标。

更重要的是,这种“科研”接力仍在继续。

两天前,另一位油管博主Dearex在adef的帮助下,继续优化了算法,成功用晃晃斑当屏幕做出了一支17分钟的教学视频。只不过嘛,画面仍然抽象得像是一场视力测试。

结语

就在几天前,音游《Project Sekai》与《东方Project》联动,公布了25团和初音未来演唱的新版《Bad Apple!!》。它的MV虽然没有直接使用影绘版,但仍然充满了对影绘版MV的致敬。

这首歌在公布后,不乏大夸演唱和编曲阵容的玩家,只不过在这些赞美之后,他们也大都忍不住提一下《Bad Apple!!》的影绘MV有多神。这首歌在相关玩家间的地位可见一斑。

只不过对于不了解东方的玩家来说,除了朗朗上口的旋律,他们可能很难弄明白这首歌究竟有多经典、又代表着什么。

比如adef,直到视频最后,他其实都不怎么了解《Bad Apple!!》,仍旧停留在“是个二次元梗”的程度。

但在完成这次挑战的过程中,他认识了JakobHarych这样的东方粉丝,也看到了更多东方玩家的科研接力。或许以后他仍旧不清楚《Bad Apple!!》出自哪部东方游戏,但他一定知道为了复现这首歌的MV时,这群技术力和动手能力双双拉满的粉丝有多执着。

《Bad Apple!!》影绘版作为一项共创活动的产物,然后又以另一种同人创作形式开辟了一条新赛道,它对这个同人圈子魅力的概括,同样是它之所以如此经典的原因之一。

不管是《宝可梦》《毁灭战士》还是东方玩家,一定都能看懂这首东方神曲背后的博丽精神,不论它出现在哪个玩家群体里、或是包裹在怎样的整活外壳中。

因为在四个月前,JakobHarych发布第一版《Bad Apple!!》的复现视频时,就已经有评论点破了它们的共通之处:

热门相关:鸦色刑事组电影版   哪吒   萝莉塔:情陷谬思   有毒的欲望:上瘾   女子监狱1995