Metal (API)
Metal — низкоуровневый, малозатратный аппаратно-ускоряемый API для 3D-графики и вычислительных шейдеров, разработанный компанией Apple и впервые представленный в iOS 8. Metal объединяет функции, аналогичные OpenGL и OpenCL, в едином API. Цель Metal — повышение производительности за счёт низкоуровневого доступа к графическому процессору на платформах iOS, iPadOS, macOS, tvOS, watchOS и visionOS. По концепции он близок к другим низкоуровневым API, таким как Vulkan и DirectX 12.
Metal реализован в виде объектно-ориентированного API и поддерживает вызовы из Swift, Objective-C и C++17[1]. Управление работой GPU осуществляется через Metal Shading Language (MSL). По данным Apple: «MSL — это единый язык, обеспечивающий тесную интеграцию между графическими и вычислительными программами. Так как MSL основан на C++, он будет вам знаком и прост в использовании»[2].
Общие сведения
| Metal | |
|---|---|
| Тип | 3D-графика и вычисления (API) |
| Разработчик | Apple Inc. |
| Написана на | Metal Shading Language (на базе C++14 в Metal 1–3, C++17 в Metal 4), Runtime/API: Objective-C, Swift, C++ (связка через Metal-cpp) |
| Операционные системы | iOS, iPadOS, macOS, tvOS, watchOS, visionOS |
| Первый выпуск | июнь 2014 |
| Последняя версия | 4 (июнь 2025) |
| Лицензия | проприетарная |
| Сайт | developer.apple.com/meta… |
Возможности
Metal обеспечивает малозатратный доступ к GPU за счёт предварительного кодирования команд, которые затем асинхронно исполняются графическим процессором. Приложение само управляет моментом ожидания завершения исполнения, что позволяет разработчикам увеличивать пропускную способность, кодируя новые команды во время работы GPU, либо экономить энергию при явном ожидании. Кодирование команд происходит независимо на каждом потоке CPU, а состояния рендеринга предрассчитываются, позволяя драйверу оптимально готовить графический пайплайн ещё до исполнения команд[3].
В Metal реализованы расширенные возможности GPGPU благодаря использованию вычислительных шейдеров и собственного языка программирования, основанного на C++14. Для реализации языка используется Clang и LLVM[4].
Разработчики приложений могут создавать ресурсы Metal (буферы, текстуры), управлять их размещением на CPU, GPU или обоих, а также синхронизировать их состояния. Система управления ресурсами позволяет явно контролировать состояние ресурса на протяжении жизни командного кодировщика[5].[6]
На macOS Metal предоставляет разработчикам возможность выбирать, на каком GPU выполнять вычисления: интегрированном, дискретном (у части моделей Mac) или внешнем (через Thunderbolt). Разработчик может задавать предпочтения для выбора GPU для различных команд, что позволяет, например, поручить рендеринг сцены дискретному GPU, а пост-обработку и отображение — интегрированному[7].
Metal Performance Shaders — высоко оптимизированная библиотека графических функций, помогающая разработчикам снизить трудозатраты на реализацию аппаратно-специфичных вычислений. Она включает в себя:
- Алгоритмы фильтрации изображений
- Обработку нейронных сетей
- Продвинутые математические операции
- Трассировку лучей[8]
История
Metal впервые стал доступен 2 июня 2014 года на устройствах под управлением iOS, оснащённых Apple A7 и новее[9]. На Mac поддержка Metal появилась начиная с 8 июня 2015 года — для моделей 2012 года и новее с выходом OS X El Capitan[10].
5 июня 2017 года на WWDC была объявлена вторая версия Metal — для macOS High Sierra, iOS 11 и tvOS 11. Metal 2 не является отдельным API и поддерживается теми же устройствами. В числе новшеств — улучшенное профилирование и отладка в Xcode, ускорение машинного обучения, снижение нагрузки на CPU, поддержка VR на macOS и расширенная работа с GPU Apple A11[11].
На WWDC 2020 была анонсирована миграция Mac на Apple Silicon. Компьютеры с такими процессорами получили новые GPU, сочетающие возможности macOS и iOS, оптимизированные под архитектуру TBDR от Apple[12].
В 2022 году на WWDC вышла третья версия — Metal 3, начавшая распространяться вместе с macOS Ventura, iOS 16 и iPadOS 16. Среди нововведений: фреймворк MetalFX для высокопроизводительного апскейлинга и сглаживания, поддержка mesh shader'ов[13]. Также появилась возможность программирования Metal API на C/C++ через metal-cpp[14].
В 2023 году на WWDC Apple представила Game Porting Toolkit для переноса игр с Windows 10/11. В него входят средства для тестирования бинарных файлов, слои трансляции с HLSL на MSL, а также привязки Metal-cpp. Джереми Сандмел анонсировал режим Game Mode для macOS Sonoma, а Хидео Кодзима сообщил о выходе Death Stranding в Mac App Store.
На WWDC 2024 был анонсирован Game Porting Toolkit 2 и выпуск новых игр Control: Ultimate Edition, Frostpunk 2 и Assassin's Creed Shadows для macOS.
На WWDC 2025 представлена четвёртая версия Metal (Metal 4) с единой системой кодирования команд, поддержкой нейронного рендеринга и технологиями MetalFX Frame Interpolation, а также денойзером трассировки лучей.
Платформы и совместимость
Первая версия Metal поддерживает[15]:
- Apple A7 или новее, с iOS 8 или новее
- Apple M1 или новее, с macOS 11 или новее
- Процессоры Intel с графикой Ivy Bridge или новее, с OS X 10.11 или новее
- Видеокарты AMD архитектуры GCN или RDNA с OS X 10.11+
- NVIDIA архитектуры Kepler с OS X 10.11 – macOS 11
- NVIDIA архитектуры Maxwell и Pascal с OS X 10.11 – macOS 10.13
Metal 2 поддерживает:
- Apple A7 или новее, с iOS 11 или новее
- Apple M1 или новее, с macOS 11 или новее
- Процессоры Intel с графикой Skylake или новее, с macOS 10.13 или новее
- AMD архитектуры GCN/RDNA, с macOS 10.13+
Metal 3 поддерживает[16]:
- Apple A13 и новее, с iOS 16, iPadOS 16
- Apple A14 и новее, с iOS 16, iPadOS 16+
- Apple M1 и новее, с iPadOS 16+ или macOS 13+
- Intel UHD 630 или Iris Plus (Kaby Lake и новее), с macOS Ventura (13)+
- AMD RDNA (5000/6000 серии) и Pro Vega (5-е поколение GCN)
Metal 4 поддерживает:
Выпуски
| Версия | Дата выпуска | Статус | Ключевые изменения | Источник |
|---|---|---|---|---|
| 1 | июнь 2014 | стабильная | Первый выпуск для iOS 8, поддержка устройств с A7 и новее | [9] |
| 2 | июнь 2017 | стабильная | Поддержка macOS High Sierra, iOS 11, внедрение машинного обучения и VR, улучшения профилирования | [11] |
| 3 | октябрь 2022 | стабильная | MetalFX, поддержка mesh shader'ов, API на C/C++ | [13] |
| 4 | июнь 2025 | стабильная | Unified command encoder, MetalFX Frame Interpolation, нейронный рендеринг, денойзер трассировки лучей |
Интеграции и экосистема
По данным Apple, на июнь 2017 года более 148 000 приложений напрямую используют Metal, а 1,7 миллиона — опосредованно через фреймворки[17].
Часть игр для macOS, использующие Metal для рендеринга, приведены ниже (по алфавиту):
| Название | Разработчик (macOS-версия) | Движок | Дата выхода на macOS (OpenGL/DirectX) | Дата релиза с поддержкой Metal | Примечания по поддержке Metal |
|---|---|---|---|---|---|
| Ark: Survival Evolved | Studio Wildcard | Unreal Engine 4 | 29 августа 2017 | ||
| Assassin's Creed Shadows | Ubisoft Quebec | Ubisoft Anvil | 20 марта 2025 | ||
| ARMA 3 | Virtual Programming | Real Virtuality | 31 августа 2015 | Поддержка Metal в бета-режиме с 17 сентября 2017 | |
| Baldur's Gate III | Larian Studios | Divinity Engine 4.0 | 22 сентября 2023 | Поддержка Metal в раннем доступе с 6 октября 2020 | |
| Ballistic Overkill | Aquiris Game Studio | Unity Engine 5 | 28 марта 2017 | ||
| Batman: Arkham City | Feral Interactive | Unreal Engine 3 | 18 октября 2013 | Поддержка Metal с 21 февраля 2019 (v1.2) | |
| Batman: The Enemy Within | Telltale Games | Telltale Tool | 8 августа 2017 | ||
| BattleTech | Harebrained Schemes | Unity Engine 5 | 24 апреля 2018 | ||
| Bioshock Remastered | Feral Interactive | Unreal Engine 2.5 | 22 августа 2017 | ||
| Bioshock 2 Remastered | Feral Interactive | Unreal Engine 2.5 | 22 октября 2020 | ||
| Cyberpunk 2077 | CD Projekt | REDengine 4 | 17 июля 2025 | Поддержка Metal 4 | |
| Cities: Skylines | Paradox Interactive | Unity Engine 5 | 10 марта 2015 | Поддержка Metal с 18 мая 2017 | |
| Civilization VI | Aspyr Media | LORE | 24 октября 2016 | Поддержка Metal с 5 апреля 2019 | |
| Company of Heroes 2 | Feral Interactive | Essence Engine 3 | 21 января 2015 | Поддержка Metal с 19 октября 2018 | |
| Control: Ultimate Edition | Remedy Entertainment | Northlight Engine | 26 марта 2025 | ||
| Dead Island 2 | Dambuster Studios | Unreal Engine 4 | 24 июля 2025 | ||
| Deus Ex: Mankind Divided | Feral Interactive | Dawn Engine | 12 декабря 2017 | ||
| DiRT Rally | Feral Interactive | EGO Engine 2.5 | 16 ноября 2017 | ||
| Divinity: Original Sin II | Larian Studios | Divinity Engine 2 | 31 января 2019 | ||
| Dota 2 | Valve | Source 2 | 18 июля 2013 | MoltenVK с 26 февраля 2018[18]. Опция стала доступна с 31 мая 2018[19] |
Примечания
Ссылки
- Metal для разработчиков
- Руководство по программированию Metal (предварительная версия)
- Установка macOS 10.14 Mojave на Mac Pro (2010/2012) — статья Apple о совместимых GPU для Metal