Alors que Metal est la technologie de rendu graphique rapide d’Apple pour les jeux, MetalFX ajoute des améliorations pour la faire briller sur Apple Silicon. Voici comment fonctionne MetalFX.
En 2014, Apple a présenté sa nouvelle technologie de rendu graphique et de jeux appelée Metal.
Metal est une API de rendu qui offre des performances rapides optimisées pour le matériel Apple. Avec l’avènement des GPU Apple Silicon, Metal bénéficie d’une amélioration encore plus importante des performances.
Un problème dans le rendu graphique des jeux informatiques est de savoir comment dessiner un grand nombre de polygones modélisez rapidement avec des shaders de surface haute résolution et des effets rapidement. À mesure que les fréquences d’images et la complexité des scènes de jeu ont augmenté, ce problème a créé des goulots d’étranglement dans les pipelines de rendu graphique.
L’API Metal est une API Apple C++ qui possède son propre langage d’ombrage appelé, comme on peut s’y attendre, Metal Shading Language (MSL). L’API Metal a été comparée à DirectX 12 sous Windows ou à la bibliothèque de rendu graphique tierce Vulkan.
Il existe également des versions Swift et Objective-C de l’API Metal.
Cependant, étant donné que Metal est d’Apple et conçu pour le matériel Apple, il offre les meilleures performances de rendu graphique de toutes les technologies de rendu disponibles sur ces appareils.
Vous pouvez voir un exemple de rendu Metal en action chaque fois que vous démarrez un jeu Apple Arcade sur un appareil iOS ou tvOS-la courte animation de rebond du logo Apple Arcade qui s’exécute avant que chaque jeu Apple Arcade ne soit rendu à l’aide de Metal.
De nombreux jeux utilisent l’accélération matérielle GPU et des shaders précalculés pour accélérer le rendu graphique. Dans Metal, les commandes graphiques sont encodées à l’avance puis soumises aux GPU pour le rendu.
Les états de rendu précalculés indiquent au GPU à l’avance comment configurer le pipeline de rendu pour des performances maximales.
Les shaders de rendu, ou programmes précalculés qui contrôlent la lumière, l’obscurité et la couleur, sont utilisés lors du rendu de la scène 3D pour fournir du réalisme et des effets spéciaux. Le MSL décrit le fonctionnement des shaders métalliques.
Les shaders ont été introduits pour la première fois dans les logiciels commerciaux en 1988 avec le logiciel RenderMan de Pixar, qui a une longue histoire sur Mac depuis des décennies.
Dans la plupart des pipelines de rendu GPU modernes, les données 3D et les programmes de langage d’ombrage sont envoyés au GPU pour traitement, qui gère ensuite un processus ou pipeline en plusieurs étapes par lequel chaque image d’une scène est créée.
Les étapes de rendu impliquent approximativement des transformations de géométrie, la décomposition de modèles en triangles et quads, l’application de shaders de fragments, le test et la combinaison de profondeur, et l’exclusion de surfaces et d’objets occultés. La dernière étape consiste à combiner le tout dans le tampon de trame final pour la visualisation.
Tout cela se produit des dizaines de fois par seconde sur le matériel GPU moderne.
Metal comprend également des shaders de performance-des programmes qui accélèrent le rendu tout en réduisant la charge du GPU. Les shaders de performance incluent le filtrage d’image, le réseau neuronal, les mathématiques avancées et le lancer de rayons.
Le lancer de rayons améliore considérablement les surfaces, les textures et les réflexions des objets du modèle 3D provenant des sources lumineuses.
En 2020, Apple a annoncé qu’il avait porté Metal sur les processeurs et GPU Apple Silicon pour fournir des performances beaucoup plus rapides. Lors de la WWDC 2022, Apple a introduit une nouvelle fonctionnalité dans Metal appelée MetalFX.
MetalFX permet un rendu de scène plus rapide et plus précis en recalculant et en anticrénelant certaines images pour recalculer et lisser les bords des objets rendus.
L’arme secrète de MetalFX est une technologie appelée upscaling.
L’idée est de rendre un objet ou scène à une résolution inférieure, ce qui accélère le rendu global du tampon d’image. Ensuite, il ajoute une étape supplémentaire avant de s’afficher en agrandissant la scène.
En effectuant la majeure partie du rendu de la scène à des dimensions plus petites, les scènes peuvent être rendues plus rapidement et avec plus de détails et de complexité. Dans la plupart des cas, il est généralement plus rapide de restituer les objets de la scène à une plus petite échelle, puis d’améliorer la résolution globale de l’image finale que de restituer la scène entière à une dimension finale plus grande.
En utilisant la mise à l’échelle, MetalFX peut fournir à la fois un rendu de scène plus rapide et plus de détails et de netteté sur les objets.
Un exemple de mise à l’échelle de MetalFX. Le cadre de droite apparaît plus net.
MetalFX utilise deux types de mise à l’échelle distincts : la mise à l’échelle spatiale et la mise à l’échelle anti-crénelage temporelle.
Dans la mise à l’échelle spatiale, deux classes Metal-MTLFXSpatialScalerDescriptor et MTLFXSpatialScaler-sont créées. L’objet descripteur décrit les détails de l’objet de mise à l’échelle spatiale et l’objet MTLFXSpatialScaler effectue l’encodage réel (via sa méthode d’encodage).
Lorsque encode est appelé, l’objet MTLFXSpatialScaler crée et envoie des commandes de rendu à un objet MTLCommandBuffer pour le rendu. Ce processus est répété pour chaque image d’une scène.
La mise à l’échelle spatiale de MetalFX peut fournir environ jusqu’au double des détails de la scène sans perte matérielle de performances.
La création d’objets MTLFXSpatialScaler est coûteuse en calcul et ne doit être effectuée qu’au démarrage d’une application ou lorsqu’un affichage change de résolution.
Dans la mise à l’échelle de l’anticrénelage temporel, les données de l’image précédente sont utilisées comme entrée pour la mise à l’échelle de l’image actuelle.
Le suréchantillonnage et l’échantillonnage temporel sont des techniques qui utilisent des données de pixels individuels à partir d’images pour réaliser une mise à l’échelle. Les données provenant à la fois de chaque pixel et des pixels de plusieurs images sont échantillonnées.
L’anticrénelage temporel est légèrement plus gourmand en ressources de calcul et nécessite des données de couleur, de profondeur et de mouvement supplémentaires pour fonctionner.
Voici un autre exemple de mise à l’échelle anti-aliasing de la présentation WWDC d’Apple :
1080p, à gauche-et 4K mis à l’échelle à droite avec mise à l’échelle anti-aliasing.
La plupart des traitements de mise à l’échelle de MetalFX doivent avoir lieu après le rendu mais avant tout post-traitement final se fait sur cadres.
L’une des utilisations de la mise à l’échelle anti-aliasing de MetalFX consiste à augmenter la résolution des images 1080p afin qu’elles se rapprochent de la résolution 4K.
Tout comme pour l’upscaling spatial, MetalFX fournit deux classes pour l’upscaling anti-aliasing : MTLFXTemporalScalerDescriptor et MTLFXTemporalScaler.
La documentation complète de MetalFX est disponible sur le site Web des développeurs d’Apple. Apple a également organisé une vidéo de session MetalFX à la WWDC’22 intitulée”Boost performance with MetalFX Upscaling”qui décrit en détail l’utilisation de MetalFX, y compris un exemple de code.
Plusieurs titres de jeux AAA, dont No Man’s Sky, utilisent déjà MetalFX sur les appareils Apple.
MetalFX promet des techniques de calcul graphique modernes pour augmenter à la fois la résolution de la scène et les performances du jeu sur le matériel GPU moderne. Il est probable que la nouvelle technologie Metal révolutionnera les jeux sur les appareils Apple.