玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」( 二 )


玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
这一升级就是10个月,最后竟然真的在《我的世界》中 , 用一块96×64像素的屏幕,玩起了一个3D版、复刻16种方块 32种物品、还原数十种游戏机制(挖掘、制作、烧制、搭建、箱子、随机刻等)的《我的世界》!
没错,这还是个3D的《我的世界》,因此计算机中还配备了显卡(GPU),专门用来处理图像 。
这只GPU名叫“AMOGUS”(Absurdly Massive Operator on Graphics by Uwerta and Sammyuri,超巨大的图形运算器 , Uwerta和Sammyuri制造) 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
△AMOGUS
首先,给这个GPU输入物体在3D空间中的坐标、以及纹理位置等信息;随后根据相机位置 , 切割出需要显示的画面(例如相机位于一棵草中间,它就只显示相机前面的草,将相机后面看不见的草切掉);
接下来,将屏幕上的3D坐标映射成2D坐标 , 并将四边形分割成3个梯形、进一步分割成像素行、再分割成单个像素,并进行线性插值来计算每个像素对应的纹理位置(即纹理映射),以及它与相机的距离;
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
△(图源Surfaced Studio)纹理映射原理 , 在AMOGUS中做了简化
纹理映射是实现GPU处理3D图像的一个关键 。用GPU处理3D图像时 , 需要将屏幕上的1个像素与3D物体表面纹理上的某个位置对应起来,也就是纹理映射 。
由于目标与相机的距离一直在变化 , 因此纹理映射占用屏幕的像素范围也不一样 。
最后,从纹理缓存中获取像素颜色,并将深度与屏幕当前像素深度(存储在6kb的像素深度缓冲区)进行比较,如果更相近就进行覆盖 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
除了用GPU处理图像以外,这台可以运行《我的世界》的计算机又是如何存储游戏数据、并与玩家进行交互的?
以充当工作台的ROM为例,它存储了各种锻造和烧练的配方,当输入一系列需要合成的物品(如一系列木头)时,就会输出一个结果(木块) , 否则就输出0 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
用于存储世界地图的RAM由512×4位地址组成,一共256字节,基于坐标(x,y,z)寻址 。如果检测到玩家超出边界,就会返回0或255 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
△世界地图就存在这里
输入控制器,则由一系列《我的世界》中的压力板组成,踩到后就会将当前状态发送到队列中,CPU就能读取并处理 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
△根据PS4手柄风格设计
当然,在《我的世界》中运行这台计算机,必须经过加速(否则可能几小时都计算不出一?。?。
于是他们便借助MCHPRS服务器,提升了一波红石运行的速度,达到了每秒0.1帧的极限水平(doge) 。
玩我的世界gpu使用率100「狂肝10个月手搓GPU他们在我的世界中玩起我的世界梦想成真」

文章插图
即便如此,我们看到的这段2分钟视频,仍然花了大约9小时录制,有种“天上一天 , 地下一年”的感觉 。
据Sammyuri表示,目前他们正在进一步优化GUI(图形用户界面),下一步有可能制作一个独立的、只运行红石系统的版本,甚至实现在《我的世界》中运行《DOOM》的梦想 。
细节上有多硬核?其实在这之前,不少红石佬们都想过用不同方法实现“在我的世界里玩我的世界” 。