程序员从零开始制作流畅的3D图形引擎 并在DIY的GPU上运行
在这个被 NVIDIA 和 AMD 的强大 GPU 所统治的世界里,一位自学成才的程序员证明了从零开始创建令人印象深刻的 3D 图形是可能的。亚历克斯-费什(Alex Fish)发布了一个非常流畅的 3D 引擎,该引擎由 Espressif ESP32-S3 微控制器驱动的小型自制 GPU 运行。
这并不是 Fish 首次涉足自制图形。他最初用 WebGL 开发了用于网络浏览器的"Pescado"引擎,然后将其移植到用于 PC 显卡的 OpenGL 上。不过,在低功耗微控制器上实现流畅的 3D 渲染是一次重大飞跃。
Fish 的引擎被命名为"ESPescado",用于 ESP32 移植,完全使用 C++ 和 OpenGL 手工制作。他从零开始创建了向量、矩阵和渲染数学库。正如 Fish 解释的那样,"物理和几何处理发生在 3D 中,但在 2D 显示器上显示图像时,只能绘制 2D 点"。
ESPescado 使用透视投影技术将 3D 物体平面化为屏幕上的 2D 物体。此外,它的响应速度也相当快。得益于 ESP32 的双核设计,Fish 的代码可以在一个内核上以每秒 700 帧的速度处理物理和输入处理,而另一个内核则专注于以每秒 40 帧的速度流畅地渲染线框。
制作硬件本身就是黑客的梦想:一个小巧的 1.9 英寸 320 x 160 像素显示屏,周围环绕着 ESP32 大脑,配上可实现全 3D 控制的外置操纵杆。其中一个操纵杆甚至可以连接到手指上,带来身临其境的体验。加速计提供运动输入,用于调整游戏中的摄像头。
在引擎盖下,ESPescado 使用网格、顶点和矩阵等标准 3D 工具包。网格由三角形的点和线构成,是视频游戏中的基本物体和地形。然后,引擎可以应用缩放、旋转和定位等变换,将这些网格放置在虚拟 3D 世界中。
YouTube 上的一个演示展示了 ESPescado 的运行情况,Fish 在黑色背景中操纵一个简单的绿色三角形物体。它让人们对该引擎的功能有了一个基本的了解,表明即使是最基本的三维图形也可以根据第一原理进行开发。
对于工匠和三维数学专业的学生来说,Fish 的项目让他们对三维引擎背后的核心概念有了迷人的一瞥。ESP32"ESPescado"版本和原始OpenGL"Pescado"版本都已发布在 GitHub 上,供所有人研究和构建。