狂肝10个月手搓GPU,他们在《我的世界》里玩起《我的世界》,网友:梦想成真
source link: https://www.36kr.com/p/1923187323117314
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
自从有人在《我的世界》里用红石电路造出CPU,就流传着一个梗:
总有一天,这帮红石佬能在我的世界里玩上我的世界。
这一天,真的来了!
先来看这台“在无MOD纯原版我的世界里搭建的电脑”(简称“我的电脑”)。
拥有1Hz频率的CPU、8KB内存、6KB显存的显卡、加速模块,96x96像素显示器,以及一只PS4手柄作为输入设备。
它运行起来是这样的:
电脑有了,还缺的就是能跑在上面的游戏代码。
大佬们先用一种叫URCL的中间语言手敲,再转换成自制CPU能运行的汇编码搞定。
就这样,3个人肝了10个多月,终于实现史诗级套娃。
这个移植版《我的世界》,不但拥有游戏的基本玩法如开放世界、方块摆放,采矿,甚至连物品合成都有。
作者之一sammyuri把最终成果浓缩成一条3分钟的视频,已经收获近百万播放量和10万多赞。
一条高赞评论将其誉为“整个电子游戏史上最伟大的壮举”,只有足够复杂的游戏和足够精通的玩家才能达成。
也有人表示“我失望于自己无法完全理解和欣赏这个作品,到底难度有多高,以及需要的工作量有多少。”
要理解这一切,还要从17个月前sammyuri造出的那块CPU说起。
CPU显卡都自制
狂肝7个月,sammyuri在《我的世界》中生造出一块CPU,初衷是为探索红石电路的极限。
最终成果是一台8位处理器,采用三个寄存器操作数的RISC架构,可以1Hz频率运行,拥有256字节RAM。
取名CHUNGUS 2,意为“计算用超巨大非传统数字与图形处理器”。
与此同时,他还开发了专用汇编器,可以把程序代码转换成可以一键粘贴到《我的世界》里的砖块结构。
sammyuri认为,CHUNGUS 2性能基本达到雅达利经典游戏机Atari 2600水平,运行个贪吃蛇、俄罗斯方块都不在话下。
手搓CPU的视频,一发到网上就爆火,播放量过百万。
但他并不满足于此,甚至(在读者的鼓动下)萌生了无限套娃的想法——在《我的世界》中玩上《我的世界》。
不过,这听起来实在是天方夜谭……
毕竟在现实中,《我的世界》游戏最低配置要求也是3Ghz CPU+4GB内存,他这只有1Hz CPU+256字节内存的配置,怎么带得动?
这时候就需要借助群体的智慧了(手动狗头)。
Sammyuri找到Uwerta和StackDoubleFlow,三个人一起基于这个CPU,给计算机来了一次升级,其中2个人负责在游戏中搭硬件,1个人负责写代码。
这一升级就是10个月,最后竟然真的在《我的世界》中,用一块96×64像素的屏幕,玩起了一个3D版、复刻16种方块+32种物品、还原数十种游戏机制(挖掘、制作、烧制、搭建、箱子、随机刻等)的《我的世界》!
没错,这还是个3D的《我的世界》,因此计算机中还配备了显卡(GPU),专门用来处理图像。
这只GPU名叫“AMOGUS”(Absurdly Massive Operator on Graphics by Uwerta and Sammyuri,超巨大的图形运算器,Uwerta和Sammyuri制造)。
△AMOGUS
首先,给这个GPU输入物体在3D空间中的坐标、以及纹理位置等信息;随后根据相机位置,切割出需要显示的画面(例如相机位于一棵草中间,它就只显示相机前面的草,将相机后面看不见的草切掉);
接下来,将屏幕上的3D坐标映射成2D坐标,并将四边形分割成3个梯形、进一步分割成像素行、再分割成单个像素,并进行线性插值来计算每个像素对应的纹理位置(即纹理映射),以及它与相机的距离;
△(图源Surfaced Studio)纹理映射原理,在AMOGUS中做了简化
纹理映射是实现GPU处理3D图像的一个关键。用GPU处理3D图像时,需要将屏幕上的1个像素与3D物体表面纹理上的某个位置对应起来,也就是纹理映射。
由于目标与相机的距离一直在变化,因此纹理映射占用屏幕的像素范围也不一样。
最后,从纹理缓存中获取像素颜色,并将深度与屏幕当前像素深度(存储在6kb的像素深度缓冲区)进行比较,如果更相近就进行覆盖。
除了用GPU处理图像以外,这台可以运行《我的世界》的计算机又是如何存储游戏数据、并与玩家进行交互的?
以充当工作台的ROM为例,它存储了各种锻造和烧练的配方,当输入一系列需要合成的物品(如一系列木头)时,就会输出一个结果(木块),否则就输出0。
用于存储世界地图的RAM由512×4位地址组成,一共256字节,基于坐标(x,y,z)寻址。如果检测到玩家超出边界,就会返回0或255。
△世界地图就存在这里
输入控制器,则由一系列《我的世界》中的压力板组成,踩到后就会将当前状态发送到队列中,CPU就能读取并处理。
△根据PS4手柄风格设计
当然,在《我的世界》中运行这台计算机,必须经过加速(否则可能几小时都计算不出一帧)。
于是他们便借助MCHPRS服务器,提升了一波红石运行的速度,达到了每秒0.1帧的极限水平(doge)。
即便如此,我们看到的这段2分钟视频,仍然花了大约9小时录制,有种“天上一天,地下一年”的感觉。
据Sammyuri表示,目前他们正在进一步优化GUI(图形用户界面),下一步有可能制作一个独立的、只运行红石系统的版本,甚至实现在《我的世界》中运行《DOOM》的梦想。
细节上有多硬核?
其实在这之前,不少红石佬们都想过用不同方法实现“在我的世界里玩我的世界”。
但多少走了点“捷径”,不算是用《我的世界》中的原生工具实现。
例如,通过虚拟机模组,在《我的世界》使用各种部件组装电脑,并当作虚拟机运行,比如这个VM Computers mod:
还有通过Web displays的,也就是在《我的世界》中搞一个浏览器,再运行网页版《我的世界》:
尽管sammyuri三人组的方案尚存不足,但相比起来,不借助外部工具辅助又多叠了一层硬核buff。
“无限套娃”许愿成功!
当然,除了“工具全部现成”以外,这个0.2版本的《我的世界》,还有更多细节值得一看。
比如那个用1和0码出的CPU存储器——CHUNGUS 2,制程工艺达到了先进的1米(doge),频率达到了1Hz。
它有一个4级指令管线化,64字节的8路关联数据缓存,甚至分支预测,符合RISC标准。
而生造的GPU,又能成功运行,把捏出来的计算机里的《我的世界》方块,全部进行3D渲染。
再者,红石线路本就具备数字电路的基本要求,只不过堆叠运行限制很大。
移植版《我的世界》玩儿起来,再次证实了《我的世界》的图灵完备。
具备图灵完备,意味着在不考虑实时运算的前提下, “在《我的世界》里玩《我的世界》”,可以一直套娃。
狂肝10多个月可以套娃一次,要是狂肝20多个月,岂不是就能实现“在《我的世界》搭电脑玩《我的世界》,并在后者中再搭一个《我的世界》来玩”???
套娃人狂喜!
不过,考虑到《我的世界》边界距离理论上是有限的,所以每一次模拟出的《我的世界》都会更小。
因此真·无限套娃,用这个办法恐怕还是不行。
但,如果造出来的《我的世界》里有了红石电路,这并不妨碍新的一轮套娃又要开始了~
事实上,sammyuri在视频最后留了个彩蛋,“关注点赞我可能开始做我的世界中的我的世界中的我的世界”
他不会是认真的吧?不会吧?
GitHub地址
https://github.com/sammyuri/minecraft
《3D版我的世界套娃》压缩包
https://www.mediafire.com/file/fbkuwo2aqg8gigj/3D+Minecraft+in+Minecraft.zip/file
[1]https://www.youtube.com/watch?v=-BP7DhHTU-I
[2]https://github.com/MCHPR/MCHPRS/blob/master/docs/Redpiler.md
[3]https://news.ycombinator.com/item?id=32901461[4]https://www.youtube.com/watch?v=eiDrRa6JvQ0
本文来自微信公众号“量子位”(ID:QbitAI),作者:梦晨 衡宇 萧箫 ,36氪经授权发布。
该文观点仅代表作者本人,36氪平台仅提供信息存储空间服务。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK