Технический ответ.
Хочется легковесный 3D-движок с нативной поддержкой Vulkan для достижения полного контроля над оптимизацией - но таких нет. Заручился написанием собственного движка на Rust + ash (крейт для Vulkan API), как раз для этого. Дефакто он никуда и никогда не выйдет, - фактически, это проект для души.
Сейчас это, по факту, просто набор матриц и генератора мешей, причем временами довольно кривого. Но оно работает, и я для себя начал имплементацию полного контроля над движком:
- Асинхронизация операций диспатчера (диспетчера) для запуска графического конвейера. Грубо говоря - асинхронизация командора команд GPU, и включение этой шняги позволяет процессору продолжать работу, не дожидаясь завершения выполнения команд на GPU;
- Контроль тесселяции: возможность настройки hull-шейдеров, включая настройку патчей (на основе четырехугольников, треугольников и т.д), настройки шейдеров домена (шейдер, что вычисляет окончательное положение вершины).
- DMA-очередь, для передачи данных между оперативной памятью, GPU и процессора без участия самого процессора - хоть и недоступно без драйвера, но все же дает огромный буст к производительности, если работать с огромным количеством данных;
- Настройки количества очередей для каждого типа очередей (графическая, вычислительная, передача). Позволяет создавать несколько очередей каждого типа, что позволяет лучше распараллелить работу разных частей движка
- Множественные свопчейны для отложенного рендеринга с несколькими буферами для хранения промежуточных буферов (G-буфер, lighting buffer). Множественный свопчейн может легко упростить организацию отложенного рендеринга и улучшить производительность за счет уменьшения количества переходов между рендерингом и отображением.
И т.д. Грубо говоря, делаю ровно то, что сам считаю нужным и что нужно мне. Настройка очередей, компиляции шейдеров, тесселяции и так далее.