
В то время как Metal — это технология быстрого рендеринга графики Apple для игр, MetalFX добавляет усовершенствования, чтобы заявить о себе на Apple Silicon. Вот как работает MetalFX.
В 2014 году Apple представила свою новую технологию рендеринга графики и игр под названием Metal.
Metal — это API рендеринга, обеспечивающий высокую производительность, оптимизированный для оборудования Apple. С появлением графических процессоров Apple Silicon Metal получает еще больший прирост производительности.
Одна из проблем рендеринга графики в компьютерных играх заключается в том, как быстро нарисовать большое количество полигональных моделей с помощью поверхностных шейдеров и эффектов высокого разрешения. Поскольку частота кадров и сложность игровых сцен увеличились, эта проблема создала узкие места в конвейерах рендеринга графики.
API Metal — это API Apple C++, который имеет собственный язык затенения, который, как и следовало ожидать, называется Metal Shading Language (MSL). Metal API сравнивали с DirectX 12 в Windows или сторонней библиотекой рендеринга графики Vulkan.
Существуют также версии Metal API для Swift и Objective-C.
Однако, поскольку Metal разработан Apple и предназначен для оборудования Apple, он обеспечивает наилучшую производительность рендеринга графики среди всех доступных технологий рендеринга на этих устройствах.
Вы можете увидеть образец рендеринга Metal в действии каждый раз, когда запускаете игру Apple Arcade на устройстве iOS или tvOS — короткая анимация отскока логотипа Apple Arcade, которая запускается перед рендерингом каждой игры Apple Arcade с использованием Metal.
Многие игры используют аппаратное ускорение графического процессора и предварительно вычисленные шейдеры для ускорения рендеринга графики. В Metal графические команды кодируются заранее, а затем передаются графическим процессорам для рендеринга.
Предварительно вычисленные состояния рендеринга заранее сообщают графическому процессору, как настроить конвейер рендеринга для максимальной производительности.
Шейдеры рендеринга или предварительно вычисленные программы, которые управляют светом, темнотой и цветом, используются во время рендеринга 3D-сцены для обеспечения реализма и специальных эффектов. MSL описывает, как работают шейдеры Metal.
Шейдеры были впервые представлены в коммерческом программном обеспечении в 1988 году с помощью программного обеспечения Pixar RenderMan, которое имеет долгую историю на Mac, насчитывающую десятилетия.
В большинстве современных конвейеров рендеринга на графическом процессоре как 3D-данные, так и программы языка затенения отправляются на графический процессор для обработки, которая затем управляет многоэтапным процессом или конвейером, с помощью которого создается каждый кадр в сцене.
Шаги рендеринга примерно включают в себя преобразование геометрии, разбиение моделей на треугольники и квадраты, применение фрагментных шейдеров, тестирование и комбинирование глубины, а также исключение закрытых поверхностей и объектов. Последний шаг включает в себя объединение всего этого в окончательный буфер кадров для просмотра.
Все это происходит десятки раз в секунду на современном оборудовании GPU.
В состав Metal также входят шейдеры производительности — программы, которые ускоряют рендеринг при одновременном снижении нагрузки на GPU. Шейдеры производительности включают фильтрацию изображений, нейронную сеть, расширенную математику и трассировку лучей.
Трассировка лучей значительно улучшает поверхности объектов 3D-моделей, текстуры и отражения от источников света.
В 2020 году Apple объявила, что перенесла Metal на процессоры и графические процессоры Apple Silicon, чтобы обеспечить гораздо более высокую производительность. На WWDC 2022 Apple представила новую функцию в Metal под названием MetalFX.
MetalFX обеспечивает более быструю и точную визуализацию сцен за счет пересчета и сглаживания некоторых кадров для пересчета и сглаживания краев визуализируемых объектов.
Секретное оружие MetalFX — технология, называемая апскейлингом.

Идея состоит в том, чтобы визуализировать объект или сцену с более низким разрешением, что ускоряет визуализацию буфера кадра в целом. Затем он добавляет дополнительный шаг, прежде чем он будет отображаться, увеличивая сцену.
Выполняя большую часть рендеринга сцен с меньшими размерами, сцены можно визуализировать быстрее, с большей детализацией и сложностью. В большинстве случаев обычно быстрее визуализировать объекты сцены в меньшем масштабе, а затем улучшить общее разрешение конечного кадра, чем визуализировать всю сцену в большем конечном размере.
Используя масштабирование, MetalFX может обеспечить как более быструю визуализацию сцены, так и большую детализацию и резкость объектов.

Пример апскейлинга MetalFX. Кадр справа выглядит более четким.
MetalFX использует два различных типа масштабирования: пространственное масштабирование и масштабирование временного сглаживания.
При пространственном масштабировании создаются два класса Metal — MTLFXSpatialScalerDescriptor и MTLFXSpatialScaler. Объект дескриптора описывает детали объекта пространственного масштабатора, а объект MTLFXSpatialScaler выполняет фактическое кодирование (через свой метод кодирования).
При вызове encode объект MTLFXSpatialScaler создает и отправляет команды рендеринга в объект MTLCommandBuffer для рендеринга. Этот процесс повторяется для каждого кадра сцены.
Пространственное масштабирование MetalFX может обеспечить примерно удвоение детализации сцены без существенной потери производительности.
Создание объектов MTLFXSpatialScaler требует значительных вычислительных ресурсов и должно выполняться только при запуске приложения или изменении разрешения дисплея.
При временном масштабировании со сглаживанием данные из предыдущего кадра используются в качестве входных данных для масштабирования текущего кадра.
Суперсэмплинг и временная выборка — это методы, которые используют данные отдельных пикселей из кадров для повышения масштаба. Отбираются данные как из каждого пикселя, так и из пикселей нескольких кадров.
Временное сглаживание требует немного больше вычислительных ресурсов и для работы требует дополнительных данных о цвете, глубине и движении.
Вот еще один пример масштабирования сглаживания из презентации Apple на WWDC:

1080p, слева — и 4K апскейлинг справа со сглаживающим апскейлингом.
Большая часть обработки апскейлинга MetalFX должна выполняться после рендеринга, но до того, как будет выполнена какая-либо окончательная постобработка кадров.
Одно из применений масштабирования сглаживания MetalFX — увеличить разрешение кадров 1080p, чтобы они приблизились к разрешению 4K.
Как и в случае с пространственным масштабированием, MetalFX предоставляет два класса для масштабирования со сглаживанием: MTLFXTemporalScalerDescriptor и MTLFXTemporalScaler.
Полная документация по MetalFX доступна на веб-сайте Apple для разработчиков. Apple также провела видеосессию MetalFX на WWDC ’22 под названием «Повышение производительности с помощью масштабирования MetalFX», в котором подробно описывается использование MetalFX, включая пример кода.
Несколько игр AAA, включая No Man’s Sky, уже используют MetalFX на устройствах Apple.
MetalFX обещает, что современные методы графических вычислений повысят как разрешение сцены, так и производительность игры на современном оборудовании GPU. Вполне вероятно, что новая технология Metal произведет революцию в играх на устройствах Apple.









