Пост канала
- фото
Эволюция рендеринга в Zenith Engine: многопоточная загрузка GPU-ресурсов В данной статье будем рассматривать технические детали графических API Metal и API Vulkan и многопоточное программирование, от читателя требуется знание перечисленных технологий.Всем привет! Я Андрей, разработчик 3D-графики в 2ГИС. Если вы пишете рендер на C++ и у вас есть отдельный RenderThread, то, скорее всего, вы уже сталкивались с подобным: данные грузятся в фоне, а вот создание GPU‑ресурсов всё равно происходит в потоке отрисовки через прямое обращение к графическим API Vulkan, Metal, Direct3D 12. И пока RenderThread в длинном цикле создает буферы и текстуры, он не рисует — он стоит, пока не обработает список загруженных ресурсов.У нас это выглядело так на типичной средней сцене: до появления первого кадра на поток отрисовки приходило 532 текстуры и 2713 буферов, которые удерживали 45 МБ и 20 МБ временной памяти в RAM соответственно. Всё это нужно было доставить до GPU создать наборы буферов и текстур далее все освободить — и только потом начинать собирать батчи и рисовать.В статье разберём, как мы вынесли создание буферов и текстур на потоки загрузки, что для этого дает Metal, почему в Vulkan всё сложнее, и какие ограничения по особенностям работы графических API пришлось учитывать. Читать далее https://habr.com/ru/companies/2gis/articles/1077552/?utm_campaign=1077552&utm_source=habrahabr&utm_medium=rss
Открыть в MAX- Просмотры
- 26
- ER
- —
- Реакции
- —