狂肝10个月手搓GPU,他们在我的世界中玩起我的世界,梦想成真
suiw9 2025-04-01 22:09 8 浏览 0 评论
梦晨 衡宇 萧箫 发自 凹非寺
量子位 | 公众号 QbitAI
自从有人在《我的世界》里用红石电路造出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制造)。
首先,给这个GPU输入物体在3D空间中的坐标、以及纹理位置等信息;随后根据相机位置,切割出需要显示的画面(例如相机位于一棵草中间,它就只显示相机前面的草,将相机后面看不见的草切掉);
接下来,将屏幕上的3D坐标映射成2D坐标,并将四边形分割成3个梯形、进一步分割成像素行、再分割成单个像素,并进行线性插值来计算每个像素对应的纹理位置(即纹理映射),以及它与相机的距离;
纹理映射是实现GPU处理3D图像的一个关键。用GPU处理3D图像时,需要将屏幕上的1个像素与3D物体表面纹理上的某个位置对应起来,也就是纹理映射。
由于目标与相机的距离一直在变化,因此纹理映射占用屏幕的像素范围也不一样。
最后,从纹理缓存中获取像素颜色,并将深度与屏幕当前像素深度(存储在6kb的像素深度缓冲区)进行比较,如果更相近就进行覆盖。
除了用GPU处理图像以外,这台可以运行《我的世界》的计算机又是如何存储游戏数据、并与玩家进行交互的?
以充当工作台的ROM为例,它存储了各种锻造和烧练的配方,当输入一系列需要合成的物品(如一系列木头)时,就会输出一个结果(木块),否则就输出0。
用于存储世界地图的RAM由512×4位地址组成,一共256字节,基于坐标(x,y,z)寻址。如果检测到玩家超出边界,就会返回0或255。
输入控制器,则由一系列《我的世界》中的压力板组成,踩到后就会将当前状态发送到队列中,CPU就能读取并处理。
当然,在《我的世界》中运行这台计算机,必须经过加速(否则可能几小时都计算不出一帧)。
于是他们便借助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
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
相关推荐
- 10款超实用JavaScript音频库(js播放音频代码)
-
HTML5提供了一种新的音频标签实现和规范用一个简单的HTML对象而无需音频插件来控制音频。这只是一个简单的整合这些新的HTML5音频特征及使用JavaScript来创建各种播放控制。下面将介绍10款...
- PROFINET转Modbus网关——工业协议融合的智能枢纽
-
三格电子SG-PNh750-MOD-221,无缝连接Profinet与Modbus,赋能工业物联产品概述...
- 简单实用的Modbus类库,支持从站和DTU
-
一、简介...
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
-
从S7-200SMARTV2.5版本开始,S7-200SMART开始支持做PROFINETIO通信的智能设备。从而,两个S7-200SMART之间可以进行PROFINETI...
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
-
Modbus是一种广泛使用的工业自动化通信协议,它支持设备之间的数据交换。Modbus协议有两个主要的变体:ModbusRTU(二进制模式)和ModbusTCP(基于TCP/IP网络的模式)。尽管...
- Modbus通信调试步骤详解(modbus调试工具怎么用)
-
Modbus通信调试步骤详解 Modbus通信分为串口和以太网,无论是串口还是以太网,只要是标准Modbus,就可以用Modbus模拟器进行调试。按以下几步进行调试。...
- 理解Intel手册汇编指令(intel 汇编指令手册)
-
指令格式...
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
-
S7-200SMART集成的RS485端口(端口0)以及SBCM01RS485/232信号板(端口1)两个通信端口可以同时做MODBUSRTU主站,或者一个做MODBUSRTU主站一个做MO...
- InfiniBand网络运维全指南:从驱动安装到故障排查
-
一、InfiniBand网络概述InfiniBand(直译为“无限带宽”技术,缩写为IB)是一种用于高性能计算的计算机网络通信标准,具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。它...
- 一加回归 OPPO,背后的秘密不可告人
-
有这样一个手机品牌,它诞生于互联网品牌。在大众群体看来,它的身世似乎模糊不清,许多人以为它是国外品牌。它的产品定位是极客群体,深受国内发烧友,甚至国外极客玩家喜爱。...
- [西门子PLC] S7-200SMART快速高效的完成Modbus通信程序的设计
-
一、导读Modbus通信是一种被广泛应用的通信协议,在变频器、智能仪表还有其他一些智能设备上都能见到它的身影。本文呢,就把S7-200SMART系列PLC当作Modbus主站,把...
- 狂肝10个月手搓GPU,他们在我的世界中玩起我的世界,梦想成真
-
梦晨衡宇萧箫发自凹非寺量子位|公众号QbitAI自从有人在《我的世界》里用红石电路造出CPU,就流传着一个梗:...
- [西门子PLC] 博途TIA portal SCL编程基础入门:1-点动与自锁
-
一、S7-SCL编程语言简介...
- 工作原理系列之:Modbus(modbus工作过程)
-
MODBUS是一种在自动化工业中广泛应用的高速串行通信协议。该协议是由Modion公司(现在由施耐德电气公司获得)于1979年为自己的可编程逻辑控制器开发的。该协议充当了PLCS和智能自动化设备之间的...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
MacOS + AList + 访达,让各种云盘挂载到本地(建议收藏)
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
- 最近发表
-
- 10款超实用JavaScript音频库(js播放音频代码)
- Howler.js,一款神奇的 JavaScript 开源网络音频工具库
- PROFINET转Modbus网关——工业协议融合的智能枢纽
- 简单实用的Modbus类库,支持从站和DTU
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
- Modbus通信调试步骤详解(modbus调试工具怎么用)
- 理解Intel手册汇编指令(intel 汇编指令手册)
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
- InfiniBand网络运维全指南:从驱动安装到故障排查
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)