一位精明的开发者成功让一台Game Boy Color(GBC)运行起了一个交互式、用户可控的实时3D着色器演示。丹尼·斯宾塞(Danny Spencer)分享了一段视频、一篇博客文章、可下载的ROM文件、源代码,甚至还将演示嵌入到了一个在线GBC模拟器中,以便任何感兴趣的人都能体验他制作的朗伯着色(Lambert-shaded)3D茶壶。看到开发者们从现有硬件中榨取最后一丝性能总是令人着迷。因此,看到这个为GBC制作的交互式旋转茶壶演示真是酷极了。此外,斯宾塞还揭示了这一成就背后的所有技术细节。

Cover Image

如果这台掌机拥有强大的处理器,那么在GBC上运行这个实时着色器本不是什么大事。然而,任天堂(Nintendo)的第二代掌机远谈不上强大。它保留了与初代Game Boy相同的夏普SM83(Sharp SM83)片上系统,但将其提升到了略高于8 MHz的“双倍速模式”。这种从单倍速切换到双倍速芯片的模式对于向后兼容性来说非常棒。

虽然额外的速度对这个实时3D演示很有用,但GBC的处理能力对于运行一个用户交互式着色器来说仍然严重不足。例如,斯宾塞在其博客中用大量篇幅解释了如何巧妙地利用对数和查找表来绕过SM83缺乏乘法指令的缺陷。为了减少计算开销,开发者将矢量转换为了球面坐标。然后,朗伯着色器通过球面点积得以实现。关于编程、数学和渲染的更多细节,可在链接的博客文章中找到。

斯宾塞已将gbshader代码和相关资源发布在GitHub上。在那里你还能找到下载此交互式3D着色器演示的GBC ROM版本的链接。对大多数读者来说,最方便的方式是通过博客文章在嵌入的模拟器中运行着色器演示。在这里,你可以使用方向键调整光源的位置,同时操纵茶壶的视角。在我的电脑键盘上,我可以同时调整这两个参数来控制动画和光照。


文章标签: #游戏开发 #硬件破解 #图形渲染 #复古技术 #编程技巧

负责编辑

  菠萝老师先生 

  让你的每一个瞬间都充满意义地生活,因为在生命的尽头,衡量的不是你活了多少年,而是你如何度过这些年。