程式設計師從零開始製作流暢的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 上,供所有人研究和建置。