
Один программист-самоучка демонстрирует, что можно создавать впечатляющую 3D-графику с нуля. Алекс Фиш выпустил удивительно плавный 3D-движок, который работает на небольшом самодельном графическом процессоре, исполняемом на микроконтроллере Espressif ESP32-S3.
Это не первый проект Фиша в области домашней графики. Изначально он разработал движок "Pescado" в WebGL для веб-браузеров, затем портировал его на OpenGL для видеокарт ПК. Однако, достижение плавного 3D-рендеринга на маломощном микроконтроллере - это серьезный шаг вперед.
Движок Fish, получивший название "ESPescado" из-за порта ESP32, полностью создан вручную с использованием C++ и OpenGL. Он разработал векторные, матричные и математические библиотеки для рендеринга с нуля. Как объясняет Фиш, "обработка физики и геометрии происходит в 3D, но при отображении изображения на 2D-мониторе могут быть нанесены только 2D-точки". ESPescado использует перспективную проекцию для преобразования 3D-объектов в 2D для экрана.
Более того, он довольно отзывчивый. Благодаря двухъядерному дизайну ESP32 код Фиша способен обрабатывать физику и входные данные со скоростью 700 кадров в секунду на одном ядре, в то время как другое ядро фокусируется на плавном рендеринге каркасов со скоростью 40 кадров в секунду.
Само оборудование - мечта хакера: компактный 1,9-дюймовый дисплей с разрешением 320 x 160 пикселей, в паре с внешними джойстиками, обеспечивающими полный 3D-контроль. Один из джойстиков даже крепится к пальцу пользователя для максимального погружения. Акселерометр обеспечивает ввод движения для настройки внутриигровой камеры.
В основе ESPescado лежит стандартный 3D-инструментарий сеток, вершин и матриц. Сетки, построенные из треугольников точек и линий, формируют основные объекты и местность, которые можно увидеть в видеоиграх. Затем движок может применять такие преобразования, как масштабирование, поворот и позиционирование, чтобы разместить эти сетки в виртуальном 3D-мире.
Демонстрация на YouTube показывает ESPescado в действии, где автор управляет простым зеленым треугольным объектом на черном фоне. Она дает базовое представление о возможностях движка, показывая, что даже самая фундаментальная 3D-графика может быть создана на основе базовых принципов.

